악성코드 분석 시작하기 [윈도우 악성코드 분석에 필요한 개념과 도구, 테크닉]
- 원서명Learning Malware Analysis: Explore the concepts, tools, and techniques to analyze and investigate Windows (ISBN 9781788392501)
- 지은이몬나파 K A(Monnappa K A)
- 옮긴이여성구
- ISBN : 9791161754581
- 36,000원
- 2020년 09월 29일 펴냄
- 페이퍼백 | 572쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 해킹과 보안
책 소개
요약
사이버 공격 위협이 증가함에 따라 악성코드 분석은 필수적인 기술이 됐다. 윈도우 악성코드를 이해할 수 있는 개념, 도구, 기술을 바탕으로 실제 악성코드 샘플, 메모리 이미지를 살펴보면서 좀 더 실증적인 악성코드 분석 방법을 배울 수 있다. 이 분야에 관심 있는 초심자는 물론, 실무 경험자도 이 책의 체계적인 접근 방법과 사례를 통해 지식을 향상시킬 수 있다. 침해 사고 대응, 악성코드 분석가, 시스템 관리자 등을 포함해 악성코드 분석을 배우고자 하는 모든 사람을 대상으로 한다.
이 책에서 다루는 내용
■ 악성코드 분석을 위한 안전하고 격리된 랩 만들기
■ 악성코드와 관련된 메타데이터 추출
■ 시스템과 악성코드의 상호 작용 파악
■ IDA Pro와 x64dbg를 이용한 코드 분석
■ 리버스 엔지니어링을 이용한 다양한 악성코드 기능
■ 일반적인 인코딩/암호화 알고리즘을 리버스 엔지니어링하고 디코딩하기
■ 다양한 코드 인젝션과 후킹 기술
■ 메모리 포렌식을 이용한 악성코드 조사 및 헌팅
이 책의 대상 독자
사고 대응자, 사이버 보안 조사자, 시스템 관리자, 악성코드 분석가, 포렌식 실무자, 학생 또는 악성코드 분석 기술을 배우거나 향상시키는 데 관심이 있는 보안 전문가를 위한 책이다.
이 책의 구성
1장, ‘악성코드 분석 소개’에서는 악성코드 분석의 개념, 악성코드 분석의 유형, 격리된 악성코드 분석 연구실 환경의 설정을 소개한다.
2장, ‘정적 분석’에서는 악의적인 바이너리에서 메타데이터 정보를 추출하는 도구와 기술을 설명한다. 악성코드 샘플을 비교하고 분류하는 방법을 보여 준다. 바이너리를 실행하지 않고 바이너리의 다양한 측면을 파악하는 방법을 배울 수 있다.
3장, ‘동적 분석’에서는 악성코드의 동작과 시스템과의 상호 작용을 파악할 수 있는 도구와 기술을 설명한다. 악성코드와 관련된 네트워크, 호스트 기반 식별자의 획득 방법을 배울 수 있다.
4장, ‘어셈블리 언어와 디스어셈블리’에서는 기초 어셈블리 언어의 기본 이해와 코드 분석에 필요한 기술을 설명한다.
5장, ‘IDA를 이용한 디스어셈블리’에서는 IDA Pro 디스어셈블러의 기능을 설명하고, 정적 코드 분석(디스어셈블리)를 수행하고자 IDA Pro를 사용하는 방법을 다룬다.
6장, ‘악의적인 바이너리 디버깅’에서는 x64dbg와 IDA Pro 디버거를 이용해 바이너리를 디버깅하는 기술을 설명한다. 디버거를 이용해 프로그램의 실행을 제어하고 프로그램의 동작을 조작하는 방법을 배울 수 있다.
7장, ‘악성코드 기능과 지속’에서는 리버스 엔지니어링을 이용해 악성코드의 다양한 기능을 설명한다. 악의적인 프로그램이 사용하는 다양한 지속(persistence) 방법도 설명한다.
8장, ‘코드 인젝션과 후킹’에서는 악의적인 프로그램이 정상 프로세스의 콘텍스트(context)에서 악의적인 코드를 실행하고자 사용하는 일반적인 코드 인젝션 기술을 설명한다. 악성코드가 API의 결과를 모니터링, 차단, 또는 필터링하고자 악의적인 코드로 제어를 리다이렉트할 때 사용하는 후킹 기술도 설명한다. 코드 인젝션과 후킹 기술을 사용하는 악의적인 프로그램을 분석하는 방법을 배울 수 있다.
9장, ‘악성코드 난독화 기술’에서는 악의적인 프로그램이 정보를 은닉하고 숨기고자 사용하는 인코딩, 암호화, 패킹 기술을 설명한다. 데이터를 디코딩/복호화하고 악의적인 바이너리를 언패킹하는 다양한 전략을 설명한다.
10장, ‘메모리 포렌식을 이용한 악성코드 헌팅’에서는 메모리 포렌식을 이용해 악의적인 컴포넌트를 탐지하는 기술을 설명한다. 메모리에서 포렌식 아티팩트를 탐지하고 식별할 수 있는 다양한 Volatility 플러그인을 배울 수 있다.
11장, ‘메모리 포렌식을 이용한 고급 악성코드 탐지’에서는 고급 악성코드가 포렌식 도구에 탐지되지 않고자 사용하는 은닉 기술을 설명한다. 유저 모드와 커널 모드 루트킷 컴포넌트를 조사하고 탐지하는 방법을 배울 수 있다.
목차
목차
- 1장. 악성 코드 분석 소개
- 1. 악성 코드란 무엇인가?
- 2. 악성 코드 분석이란 무엇인가?
- 3. 악성 코드 분석을 왜 하는가?
- 4. 악성 코드 분석의 종류
- 5. 랩 환경 설정
- 5.1 랩 요구사항
- 5.2 랩 아키텍처의 개요
- 5.3 리눅스 VM 설치와 설정
- 5.4 윈도우 VM 설치와 설정
- 6. 악성 코드 출처
- 요약
- 2장. 정적 분석
- 1. 파일 유형 파악
- 1.1 수작업을 통한 파일 유형 식별
- 1.2 도구를 이용한 파일 유형 식별
- 1.3 파이썬을 이용한 파일 유형 구분
- 2. 악성 코드 식별
- 2.1 도구를 이용한 암호 해시 생성
- 2.2 파이썬에서 암호 해시 파악
- 3. 다중 백신 스캐닝
- 3.1 바이러스토털을 이용한 의심 바이너리 스캐닝
- 3.2 바이러스토털 공개 API를 이용한 해시 값 질의
- 4. 문자열 추출
- 4.1 도구를 이용한 문자열 추출
- 4.2 FLOSS를 이용한 난독화된 문자열 디코딩
- 5. 파일 난독화 파악
- 5.1 패커와 크립터
- 5.2 Exeinfo PE를 이용한 파일 난독화 탐지
- 6. PE 헤더 정보 조사
- 6.1 파일 의존성과 임포트 조사
- 6.2 익스포트 조사
- 6.3 PE 섹션 테이블과 섹션 조사
- 6.4 컴파일 타임스탬프 조사
- 6.5 PE 리소스 조사
- 7. 악성 코드 비교와 분류
- 7.1 퍼지 해싱을 이용한 악성 코드 분류
- 7.2 임포트 해시를 이용한 악성 코드 분류
- 7.3 섹션 해시를 이용한 악성 코드 분류
- 7.4 YARA를 이용한 악성 코드 분류
- 1. 파일 유형 파악
- 요약
- 3장. 동적 분석
- 1. 랩 환경 개요
- 2. 시스템과 네트워크 모니터링
- 3. 동적 분석(모니터링) 도구
- 3.1 프로세스 해커를 이용한 프로세스 조사
- 3.2 프로세스 모니터를 이용한 시스템 상호작용 조사
- 3.3 노리벤을 이용한 시스템 활동 로깅
- 3.4 와이어샤크를 이용한 네트워크 트래픽 캡처
- 3.5 INetSim을 이용한 서비스 시뮬레이션
- 4. 동적 분석 단계
- 5. 종합 분석: 악성 코드 실행 파일 분석
- 5.1 샘플의 정적 분석
- 5.2 샘플 동적 분석
- 6. 동적 링크 라이브러리 분석
- 6.1 공격자가 DLL을 사용하는 이유
- 6.2 rundll32.exe를 이용한 DLL 분석
- 6.3 프로세스 체크를 이용한 DLL 분석
- 요약
- 4장. 어셈블리 언어와 디어셈블리 기초
- 1. 컴퓨터 기초
- 1.2 CPU
- 1.3 프로그램 기초
- 2. CPU 레지스터
- 2.1 범용 레지스터
- 2.2 명령 포인터(EIP)
- 2.3 EFLAGS 레지스터
- 3. 데이터 전송 명령어
- 3.1 상수를 레지스터로 이동
- 3.2 레지스터에서 레지스터로 값 이동
- 3.3 메모리의 값을 레지스터로 이동
- 3.4 레지스터에서 메모리로 값 이동
- 3.5 디스어셈블리 챌린지
- 3.6 디스어셈블리 해답
- 4. 산술 연산
- 4.1 디스어셈블리 챌린지
- 4.2 디스어셈블리 해답
- 5. 비트 연산
- 6. 분기와 조건문
- 6.1 무조건 분기
- 6.2 조건 분기
- 6.3 IF 문
- 6.4 If-Else 문
- 6.5 If-Elseif-Else 문
- 6.6 디스어셈블리 챌린지
- 6.7 디스에셈블리 솔루션
- 7. 반복
- 7.1 디스어셈블리 챌린지
- 7.2 디스어셈블리 솔루션
- 8. 함수
- 8.1 스택
- 8.2 함수 호출하기
- 8.3 함수에서 복귀하기
- 8.4 함수 매개변수와 반환 값
- 9. 배열과 문자열
- 9.1 디스어셈블리 챌린지
- 9.2 디스어셈블리 솔루션
- 9.3 문자열
- 10. 구조체
- 11. x64 아키텍처
- 11.1 64비트 윈도우에서의 32비트 실행 파일 분석
- 12. 추가 정보
- 요약
- 5장. IDA를 이용한 디스어셈블리
- 1. 코드 분석 도구
- 2. IDA를 이용한 정적 코드 분석
- 2.1 IDA에 바이너리 로드
- 2.2 IDA 디스플레이 탐색
- 2.3 IDA를 이용한 디스어셈블리 개선
- 3. 윈도우 API 디스어셈블
- 3.1 윈도우 API 이해
- 3.2 윈도우 API 32비트와 64비트 비교
- 4. IDA를 이용한 바이너리 패치
- 4.1 프로그램 바이트 패치
- 4.2 명령어 패치
- 5. IDA 스크립팅과 플러그인
- 5.1 IDA 스크립트 실행
- 5.2 IDAPython
- 5.3 IDA 플러그인
- 요약
- 6장. 악성 바이너리 디버깅
- 1. 일반적인 디버깅 개념
- 1.1 프로세스 실행과 연결
- 1.2 프로세스 실행 제어
- 1.3 브레이크포인트로 프로그램 중지
- 1.4 프로그램 실행 추적
- 2. x64dbg를 이용한 바이너리 디버깅
- 2.1 x64dbg에서 새로운 프로세스 실행
- 2.2 x64dbg를 이용한 실행 프로세스 연결
- 2.3 x64dbg 디버거 인터페이스
- 2.4 x64dbg를 이용한 프로세스 실행 제어
- 2.5 x64dbg에서 브레이크포인트 설정
- 2.6 32비트 악성 코드 디버깅
- 2.7 64비트 악성 코드 디버깅
- 2.8 x64dbg를 이용한 악성 DLL 디버깅
- 2.9 x64dbg에서의 실행 추적
- 2.10 x64dbg에서의 패치 <$Scr_Ps::1>
- 3. IDA를 이용한 바이너리 디버깅
- 3.1 IDA에서의 새로운 프로세스 실행
- 3.2 IDA를 이용한 기존 프로세스 연결
- 3.3 IDA 디버거 인터페이스
- 3.4 IDA를 이용한 프로세스 실행 제어
- 3.5 IDA에서의 브레이크포인트 설정
- 3.6 악성 코드 실행 파일 디버깅
- 3.7 IDA를 이용한 악성 DLL 디버깅
- 3.8 IDA를 이용한 실행 추적
- 3.9 IDAPython을 이용한 디버거 스크립팅
- 1. 일반적인 디버깅 개념
- 요약
- 7장. 악성 코드 기능과 지속성
- 1. 악성 코드 기능
- 1.1 다운로더
- 1.2 드로퍼
- 1.3 키로거
- 1.4 이동식 미디어를 통한 악성 코드 복제
- 1.5 악성 코드 명령 및 제어
- 1.6 파워셸 기반 실행
- 2. 악성 코드 지속 방법
- 2.1 레지스트리 키 실행
- 2.2 스케줄 작업
- 2.3 시작 폴더
- 2.4 Winlogon 레지스트리 항목
- 2.5 이미지 파일 실행 옵션
- 2.6 접근성 프로그램
- 2.7 AppInit_DLLs
- 2.8 DLL 검색 순서 하이재킹
- 2.9 COM 하이재킹
- 2.10 서비스
- 1. 악성 코드 기능
- 요약
- 8장. 코드 인젝션과 후킹
- 1. 가상 메모리
- 1.1 프로세스 메모리 컴포넌트
- 1.2 커널 메모리 내용
- 2. 유저 모드와 커널 모드
- 2.1 윈도우 API 호출 흐름
- 3. 코드 인젝션 기술
- 3.1 원격 DLL 인젝션
- 3.2 APC를 이용한 DLL 인젝션
- 3.3 SetWindowsHookEX()을 이용한 DLL 인젝션
- 3.4 애플리케이션 호환성 Shim을 이용한 DLL 인젝션
- 3.5 원격 실행 파일/셸코드 인젝션
- 3.6 할로우 프로세스 인젝션
- 4. 후킹 기술
- 4.1 IAT 후킹
- 4.2 인라인 후킹
- 4.3 Shim을 이용한 인-메모리 패칭
- 5. 추가 정보
- 1. 가상 메모리
- 요약
- 9장. 악성 코드 난독화 기술
- 1. 심플 인코딩
- 1.1 시저 암호
- 1.2 Base64 인코딩
- 1.3 XOR 인코딩
- 2. 악성 코드 암호화
- 2.1 Signsrch를 이용한 암호화 시그니처 식별
- 2.2 FindCrypt2를 이용해 암호화 상수 탐색
- 2.3 YARA를 이용한 암호화 시그니처 탐색
- 2.4 파이썬에서의 복호화
- 3. 사용자 정의 인코딩/암호화
- 4. 악성 코드 언패킹
- 4.1 수작업 언패킹
- 4.2 자동화된 언패킹
- 1. 심플 인코딩
- 요약
- 10장. 메모리 포렌식을 이용한 악성 코드 헌팅
- 1. 메모리 포렌식 단계
- 2. 메모리 수집
- 2.1 DumpIt을 이용한 메모리 수집
- 3. Volatility 개요
- 3.1 Volatility 설치
- 3.2 Volatility 사용
- 4. 프로세스 나열
- 4.1 프로세스 개요
- 4.2 pssan을 이용한 프로세스 나열
- 4.3 프로세스 관계 파악
- 4.4 psxview를 이용한 프로세스 목록화
- 5. 프로세스 핸들 나열
- 6. DLL 나열
- 6.1 ldrmodules를 이용한 숨겨진 DLL 탐색
- 7. 실행 파일과 DLL 덤프
- 8. 네트워크 연결과 소켓 나열
- 9. 레지스터 조사
- 10. 서비스 조사
- 11. 명령어 히스토리 추출
- 요약
- 11장. 메모리 포렌식을 이용한 고급 악성 코드 탐지
- 1. 코드 인젝션 탐지
- 1.1 VAD 정보 획득
- 1.2 VAD를 사용해 인젝션된 코드 탐지
- 1.3 프로세스 메모리 영역 덤프
- 1.4 malfind를 이용한 인젝션 코드 탐지
- 2. 할로우 프로세스 인젝션 조사
- 2.1 할로우 프로세스 인젝션 단계
- 2.2 할로우 프로세스 인젝션 탐지
- 2.3 할로우 프로세스 인젝션 변형
- 3. API 후킹 탐지
- 4. 커널 모드 루트킷
- 5. 커널 모듈 나열
- 5.1 driverscan을 이용한 커널 모듈 나열
- 6. I/O 프로세싱
- 6.1 장치 드라이버의 역할
- 6.2 I/O 관리자의 역할
- 6.3 장치 드라이버와의 통신
- 6.4 계층 드라이버에 I/O 요청
- 7. 장치 트리 표시
- 8. 커널 공간 후킹 탐지
- 8.1 SSDT 후킹 탐지
- 8.2 IDT 후킹 탐지
- 8.3 인라인 커널 후킹 식별
- 8.4 IRP 함수 후킹 탐지
- 9. 커널 콜백과 타이머
- 1. 코드 인젝션 탐지
- 요약
도서 오류 신고
정오표
정오표
[p.50 : 악성코드 링크]
■ HybridAnalysis: https://www.hybrid-analysis.com/
■ KernelMode.info: http://www.kernelmode.info/forum/viewforum.php?f=16
■ VirusBay: https://beta.virusbay.io/
■ Contagio malware dump: http://contagiodump.blogspot.com/
■ AVCaesar: https://avcaesar.malware.lu/
■ Malwr: https://malwr.com/
■ VirusShare: https://virusshare.com/
■ theZoo: http://thezoo.morirt.com/
저자와의 연락은 트위터(https://twitter.com/monnappa22)를 통해 하실 수 있습니다.
샘플 링크 중 일부는 아래의 레니 젤터의 블로그에 연결된 링크를 통해 들어가실 수 있습니다.
https://zeltser.com/malware-sample-sources/
[p.176 : 코드 4행]
(삭제; 중복되는 문장)