멀웨어 분석과 리버스 엔지니어링 [멀웨어 탐지부터 리버싱 자동화까지]
- 원서명Malware Analysis and Detection Engineering: A Comprehensive Approach to Detect and Analyze Modern Malware (ISBN 9781484261927)
- 지은이아비짓 모한타(Abhijit Mohanta), 아눕 살다나(Anoop Saldanha)
- 옮긴이남성민, 강성준
- ISBN : 9791161758503
- 48,000원
- 2024년 05월 31일 펴냄
- 페이퍼백 | 844쪽 | 188*235mm
- 시리즈 : 해킹과 보안
책 소개
요약
멀웨어 분석과 리버스 엔지니어링에 대한 깊은 이해가 사이버 위협에 대응하는 데 필수적임을 보여주며, 기초부터 고급 기술까지 필요한 모든 지식을 체계적으로 제공하는 책이다. 또한 리버스 엔지니어링 과정을 통해 소프트웨어의 내부 구조를 파악하고 취약점을 발견하는 방법을 상세히 설명한다.
추천의 글
리버스 엔지니어링(또는 리버싱(reversing))은 매우 흥미로운 주제이며, 나는 항상 이에 매료됐다. 능숙한 리버싱 전문가는 소프트웨어의 취약점을 찾아내고 활용하거나 새로운 멀웨어의 의도를 분석할 수 있다.
리버스 엔지니어링을 시작하고 싶어하는 사람들이 조언을 구할 때 보통 멀웨어 분석부터 시작하라고 추천한다. 멀웨어는 기업용 소프트웨어보다 규모가 작아서 분석하기가 더 쉽다. 코드의 양은 적지만, 멀웨어는 분석가의 작업을 방어하는 다양한 기술을 사용할 수 있다. 이러한 방어 기술을 극복하면 빠르게 기술을 향상시킬 수 있으며, 매일 새로운 멀웨어 샘플을 실습할 수 있다.
요즘 멀웨어 분석 전문가의 필요성이 더욱 커졌다. 인터넷 사용량이 증가함에 따라서 멀웨어도 매년 빠르게 증가하고 있다. 거의 20년 전에 내가 이 업계에 처음 들어왔을 때 매일 수백 개에서 수천 개의 샘플이 새롭게 생겨났다. 최근에는 매일 수백만 개의 새로운 샘플이 생겨나며, 방대한 양의 샘플 분석은 데이터 과학을 필요로 한다. 머신러닝은 방대한 데이터를 자동으로 처리할 수 있지만 수동 분석도 여전히 필수적으로 필요하다.
사이버 보안 위험도는 그 어느 때보다 높아졌다. 2010년에 스턱스넷(Stuxnet)이 처음 발견됐고, 이는 지금까지 본 가장 기술적으로 인상적인 소프트웨어다. 스턱스넷 웜(worm)은 모듈식으로 구성돼 있고, 무려 4개의 제로데이 취약점을 이용해 이란의 핵농축 원심분리기를 공격했다(보고에 따르면 거의 20%를 파괴했다고 한다). 이는 군사와 산업 분야에서 디지털 분야로의 새로운 진출을 보여주는 명확한 신호다. 요즘 큰 예산과 관심이 디지털로 이동하면서 앞으로도 비슷한 충격적인 뉴스를 볼 것으로 예상된다.
저자들은 모든 것을 아우르는 정말 놀라운 작업을 해냈다. 특히 16장은 그 자체로 하나의 책 수준이다. 이렇게 넓은 분야에서 놀라운 길잡이를 만들기 위해 노력하는 2명의 노련한 저자에게 경의를 표한다.
리버스 엔지니어링과 멀웨어 분석에 대해 알아보고자 하는 분들께 드리고 싶은 또 다른 조언은 진정으로 열정을 갖고 시간을 투자할 의지가 있어야 한다는 것이다. 이 책의 내용을 숙지하면 멀웨어에 대한 전 세계적인 대응에 동참할 준비가 될 것이다.
이 책에서 다루는 내용
◆ 맞춤형 패커와 컴파일러를 활용해 멀웨어를 효과적으로 분석할 수 있다.
◆ 복잡한 멀웨어를 언패킹하고 주요 구성 요소를 찾아 의도를 파악할 수 있다.
◆ 다양한 정적 및 동적 멀웨어 분석 도구를 사용할 수 있다.
◆ 여러 탐지 엔지니어링 도구를 활용해 멀웨어의 내부 흐름을 변경할 수 있다.
◆ Snort 규칙을 작성하고 Suricata IDS에 규칙을 사용할 수 있다.
목차
목차
- 1부. 소개
- 1장. 소개
- 멀웨어의 종류
- 플랫폼 다양성
- 목표 다양성
- 사이버 킬 체인
- 멀웨어 공격 수명 주기
- 개발 단계
- 배포 단계: 다양한 전달 시스템
- 감염 단계
- 감염 후 단계
- 멀웨어 비즈니스 모델
- 멀웨어와의 전쟁
- 멀웨어 대응 관련 조직
- 안티 멀웨어 제품
- 전문 용어
- 요약
- 멀웨어의 종류
- 2장. 멀웨어 분석 랩 설정
- 호스트 시스템 요구 사항
- 네트워크 요구 사항
- 멀웨어 분석용 VM 만들기
- 분석용 VM 설정 변경
- 확장자 숨기기 비활성화
- 숨겨진 파일 및 폴더 표시
- ASLR 비활성화
- 윈도우 방화벽 비활성화
- 모든 안티 바이러스 비활성화
- 일반 사용자 시스템 모방
- 스냅샷
- 멀웨어 분석 도구
- HashMyFiles 및 기타 해싱 도구
- APIMiner
- PE 파일 탐색: CFF Explorer 및 PEView
- 파일 유형 식별 도구
- Process Hacker, Process Explorer, CurrProcess
- ProcMon: 프로세스 모니터
- Autoruns
- Regshot
- FakeNet
- BinText
- YARA
- Wireshark
- 마이크로소프트 네트워크 모니터
- OllyDbg 2.0
- Notepad++
- Malzilla
- PEiD
- FTK Imager Lite
- Volatility Standalone
- Ring3 API Hook Scanner
- GMER
- SSDTView
- DriverView
- Strings
- SimpleWMIView
- Registry Viewer
- Bulk Extractor
- Suricata
- Cuckoo Sandbox
- rundll32
- oledump.py
- OllyDumpEx
- FlexHex
- Fiddler
- IDA Pro
- x64dbg 및 Immunity Debugger
- 요약
- 2부. OS 및 시스템 기초
- 3장. 파일 및 파일 포맷
- 파일 시각화를 위한 16진수 형식
- 해시: 고유한 파일 특징
- 파일 식별
- 파일 확장자
- 파일 형식을 결정하는 파일 포맷
- 파일 포맷의 수동 식별
- 요약
- 4장. 가상 메모리 및 PE 파일
- 프로세스 생성
- 프로그램 실행
- Process Hacker로 프로세스 탐색
- 가상 메모리
- 주소 지정
- 메모리 페이지
- 페이징 요청
- 페이지 테이블
- 가상 메모리 주소 공간 분할
- Process Hacker를 사용해 페이지 검사
- 가상 메모리의 문자열
- 멀웨어 탐지를 위한 가상 메모리
- PE 파일
- 윈도우 실행 파일
- 중요한 PE 헤더 및 필드
- 동적 연결 라이브러리
- Import Address Table
- 요약
- 프로세스 생성
- 5장. 윈도우 내부
- Win32 API
- API 로그 획득하기
- Win32 DLL
- Win32 API 및 MSDN 문서
- API를 통한 행동 식별
- 윈도우 레지스트리
- 레지스트리의 논리적 관찰
- 데이터 저장소 레지스트리
- 레지스트리 추가
- 멀웨어 및 레지스트리의 관계
- 윈도우의 주요 디렉터리
- system32 디렉터리
- Program Files 디렉터리
- 사용자 문서 및 설정
- 멀웨어 분석 시 확인 사항
- 윈도우 프로세스
- 프로세스의 속성 및 멀웨어 이상 징후 탐지
- 윈도우 서비스
- SVCHOST.EXE 환경에서 실행되는 서비스
- svchost 이용하는 DLL 서비스
- 윈도우 서비스를 활용하는 멀웨어
- 시스템 콜
- 뮤텍스
- 요약
- Win32 API
- 3부. 멀웨어 구성 요소 및 분석
- 6장. 멀웨어 구성 요소 및 배포
- 멀웨어 구성 요소
- 페이로드
- 패커
- 지속성
- 통신
- 전파성
- 방어성
- 은폐성
- 배포 메커니즘
- 익스플로잇
- 스팸
- 감염된 저장 장치
- 멀버타이징
- 드라이브 바이 다운로드
- 다운로더
- 취약한 인증을 통한 직접 로그인
- 공유 폴더
- 요약
- 멀웨어 구성 요소
- 7장. 멀웨어 패커
- 암호화 및 압축
- 패커
- 패커의 작동 원리
- 크립토와 프로텍터
- 인스톨러
- 패킹하기
- 패킹된 샘플과 언패킹된 샘플의 비교
- 패킹된 샘플 식별
- 엔트로피
- 문자열
- 패커 식별
- PEiD 도구
- 진입점의 코드
- 섹션 이름
- 맞춤형 패커
- 패커에 대한 오해
- 요약
- 8장. 지속성 메커니즘
- 지속성에 사용되는 리소스
- 분석 도구
- Autoruns 도구
- ProcMon 도구
- 시작 프로그램 폴더
- RUN 레지스트리
- 윈도우 서비스
- 파일 감염
- DLL 하이재킹
- Winlogon 프로세스
- 작업 스케줄러
- 디버거
- IFEO
- SilentProcessExit
- 요약
- 9장. 네트워크 통신
- 멀웨어의 네트워크 사용 사례
- 멀웨어 네트워크 설정 요소
- CnC 서버 IP 확인
- 고정된 IP 주소
- 고정된 도메인 이름
- DGA와 Domain Flux
- CnC와 데이터 유출 방법
- HTTP
- IRC
- 기타 방법
- 내부 확산
- 네트워크 정찰
- 인증 정보 탈취 및 악용 준비
- 접근 권한 획득
- SMB, PsExec, 기타
- 네트워크 통신 감지
- Network API와 APIMiner 도구의 로그
- 문자열 분석
- IP 및 도메인 평판 정보
- IDS 및 방화벽의 정적 시그니처
- 이상 징후 기준선
- 요약
- 10장. 코드 인젝션, 프로세스 할로잉, API 후킹
- 코드 인젝션
- 코드 인젝션의 목적
- 멀웨어 숨기기
- 프로세스 편승
- 기능 변경
- 코드 인젝션의 대상
- 주요 코드 인젝션 기법
- 코드 인젝션 과정
- 사용자 모드 코드 인젝션 과정
- 전통적 DLL 인젝션
- 프로세스 할로잉
- 전통적인 셸코드 인젝션
- 반사 DLL 인젝션
- 중요한 API
- 악성 API가 존재하는 이유
- API 후킹
- 후킹 지점 및 대상 식별
- 사용자 영역에 후크 배치
- 후킹을 사용하는 이유
- 보안 소프트웨어의 후크 적용
- 후크 탐지 도구
- 사례 연구: DeleteFile() 후킹
- 사례 연구: 인터넷 익스플로러 후킹
- APIMiner 도구
- 요약
- 11장. 은폐와 루트킷
- 은폐의 목적
- 기본 은폐 기술
- 파일 속성과 권한
- 파일 아이콘 위조
- 파일명 및 확장자 위조
- 시스템 파일명 도용
- 심리언어학적 기법
- 프로세스 창 숨기기
- 코드 인젝션
- 루트킷
- 사용자 모드 루트킷
- 커널 모드 루트킷
- 루트킷 만드는 다른 방법
- 요약
- 4부. 멀웨어 분석 및 분류
- 12장. 정적 분석
- 정적 분석의 필요성
- 멀웨어 해시를 통한 정보 공유
- 해시 생성
- 인터넷의 분석 보고서
- VirusTotal 및 기타 분석 플랫폼
- 시그니처 업데이트 주기
- 파일 형식 파악하기
- 전체 감염 콘텍스트 얻기
- 파일명과 확장자 위조
- 파일 아이콘 위조
- 파일 형식 및 확장자의 불일치
- 버전 및 세부 정보
- 코드 서명자 정보
- 정적 문자열 분석
- 악성 문자열
- YARA 도구
- YARA의 한계
- 동적 분석을 위한 정보 수집
- 요약
- 13장. 동적 분석
- VM의 기준 스냅샷 보관
- 대략적 분석을 위한 샘플의 첫 번째 실행
- 샘플의 실행 환경 파악
- 관리자 권한으로 실행
- 사례 연구 1
- 사례 연구 2
- 사례 연구 3
- APIMiner의 로그 식별
- 멀웨어 패밀리 분류
- 동적 문자열 분석
- 파일 형식
- 버전 및 세부 정보
- 패킹 여부 확인
- 메모리 내 문자열의 동적 관찰
- ProcMon 도구
- AutoRuns 도구
- 코드 인젝션 탐지
- GMER 및 Ring3 API Hook Scanner
- YARA를 통한 동적 분석
- 기타 악의적 행위
- 은폐를 위한 시스템 파일명 도용
- 파일명 및 프로세스 이름 속이기
- 실행 파일 삭제하기
- 프로세스 인스턴스 수
- 프로세스 세션 ID
- 요약
- 14장. Volatility 도구를 통한 메모리 포렌식
- 메모리 포렌식
- 다양한 분석 도구가 필요한 이유
- 메모리 포렌식 단계
- 메모리 수집
- Sample-14-1.mem
- Sample-14-2.mem
- Sample-14-3.mem
- 메모리 분석/포렌식
- Volatility 명령 형식
- 이미지 정보
- 프로세스와 서비스 리스트
- 가상 메모리 검사
- 프로세스 모듈 리스트
- 핸들 리스트
- 레지스트리 검색
- 코드 인젝션 및 API 후킹 식별
- 커널 검사
- 네트워크 통신
- 요약
- 15장. 멀웨어 페이로드 분석 및 분류
- 멀웨어 유형, 패밀리, 변종, 클러스터링
- 명명 체계
- 분류의 중요성
- 멀웨어 사전 감지
- 적절한 치료 방법
- 정보의 축적
- 공격 의도 및 범위
- 분류 기준
- 키로거
- 키보드 메시지 후킹
- 키보드 상태 가져오기
- 인포스틸러
- 동적 이벤트 및 API 로그
- 인포스틸러의 문자열 분석
- 뱅킹 멀웨어
- API 로그 및 후크 스캐너
- 뱅킹 트로이 목마의 문자열 분석
- POS 멀웨어
- POS 장치 작동 방식
- POS 멀웨어 작동 방식
- POS 식별 및 분류
- POS 멀웨어의 문자열
- ATM 멀웨어
- 원격 접속 도구
- RAT 식별
- RAT 멀웨어의 문자열
- 랜섬웨어
- 랜섬웨어 식별
- 랜섬웨어의 문자열
- 크립토마이너
- 바이러스
- 요약
- 5부. 멀웨어 리버스 엔지니어링
- 16장. 디버거 및 어셈블리 언어
- 리버스 엔지니어링과 디스어셈블러
- PE 및 기계 코드
- x86 어셈블리 언어
- 명령어 형식
- 레지스터
- 중요한 x86 명령어
- 기타 명령어 및 참조 설명서
- 디버거 및 디스어셈블리
- 디버거 기본
- OllyDbg와 IDA 비교
- OllyDbg
- IDA 디버거
- OllyDbg 및 IDA의 표기법
- 어셈블리에서 코드 구성 식별
- 스택 프레임 식별
- 함수의 프롤로그와 에필로그
- 지역변수 식별
- 포인터 식별
- 전역변수 식별
- 스택에서 배열 식별
- 스택의 구조체 식별
- 함수의 매개변수 식별
- 조건문 식별
- 반복문 식별
- 디스어셈블리를 읽기 쉽게 만들기
- 색상 지정
- 레이블 및 주석
- 변수 추적
- 디스어셈블리 분석 가속화
- 컴파일러 스텁 및 라이브러리 코드 건너뛰기
- 대수학으로 명령 축약하기
- 디컴파일러 사용
- 블록 및 순서도
- 참조
- 디버거의 고급 사용
- API 호출 및 매개변수의 관찰
- Win32 API에 중단점 설정하기
- 디버거 이벤트
- 패치
- 호출 스택
- 요약
- 17장. 멀웨어 언패킹을 위한 디버깅 기술
- 언패킹 내부
- OEP와 페이로드
- 패킹된 바이너리의 실행
- 디버거를 사용한 수동 언패킹
- APIMiner를 사용한 빠른 언패킹
- 유명한 패커를 디버깅하는 요령
- 기타 요령
- OEP식별을 위한 컴파일러 스텁
- 역추적
- 페이로드 내부
- 언패킹 기술의 변형
- 요약
- 언패킹 내부
- 18장. 디버깅 코드 인젝션
- API 로그 및 중단점
- IEP
- CreateRemoteThread로 IEP 찾기
- 스레드 콘텍스트로 IEP 찾기
- EBFE 기법
- 요약
- 19장. 방어 및 회피 기술
- 방어 기술
- 안티 정적 분석
- 안티 동적 분석
- 안티 디버깅
- 가비지 코드를 이용한 안티 디스어셈블리
- 회피 기술
- 안티 바이러스 회피
- 네트워크 보안 제품 회피
- 샌드박스 회피
- 멀웨어의 방어 기술
- 방어 기술 탐지를 위한 오픈 소스
- 요약
- 방어 기술
- 20장. 파일리스, 매크로, 기타 멀웨어 동향
- 윈도우 스크립팅 환경
- 난독화
- 16진수 난독화 출력
- 분할 및 조인
- 정크 삽입
- eval 함수를 사용한 평가 기능
- 암호화 알고리듬
- 난독화 해제
- 정적 난독화 해제
- 동적 난독화 해제
- 임베디드 스크립트 디버거
- 페이로드
- 다운로더 및 드로퍼
- 익스플로잇
- VBScript 멀웨어
- 오피스 문서 멀웨어
- OLE 파일 형식
- OLE 형식 분석
- 스트림 추출
- 매크로
- 파일리스 악성 코드
- WMI
- 파워셸
- 요약
- 6부. 탐지 엔지니어링
- 21장. 개발 분석 랩 설정
- 리눅스 개발 VM
- Suricata 설치
- 윈도우 개발 VM
- 비주얼 스튜디오 설치
- Cygwin 설치
- VS와 Cygwin의 결합
- 기타 도구
- 요약
- 리눅스 개발 VM
- 22장. 안티 바이러스 엔진
- 안티 바이러스의 주요 구성 요소
- 시그니처와 시그니처 모듈
- 시그니처 카테고리
- 주의 사항
- 시그니처 최적화
- 위험 최소화
- 파일 스캐너
- 언패커 모듈
- 메모리 스캐너
- 후크 및 루트킷 탐지 모듈
- 바이러스 다형성 및 에뮬레이터
- 교정 모듈
- 차세대 안티 바이러스
- 요약
- 23장. Suricata 규칙 작성
- 네트워크 트래픽 흐름
- 종적 트래픽
- 횡적 트래픽
- 네트워크 트래픽 분석
- IDPS를 사용한 네트워크 보안
- IDS 대 IPS
- IDS에 트래픽 제공
- IPS에 트래픽 제공
- 인라인 장비와 결합한 IDS
- IDPS 센서 배포의 고려 사항
- IDPS 구성 요소
- 패킷 캡처 모듈
- 패킷 계층 디코딩
- TCP 스트림 재조립 모듈
- 응용 계층 파싱
- 탐지 엔진
- 로깅 모듈
- 규칙 언어
- Suricata IDPS
- yaml 설정
- PCAP 파일 모드에서 Suricata 실행
- Suricata로 규칙 작성하기
- Suricata의 기본 규칙
- IP 전용 규칙
- 키워드
- 기타 키워드
- 요약
- 네트워크 트래픽 흐름
- 24장. 멀웨어 샌드박스 내부
- 멀웨어 샌드박스 개요
- 멀웨어 샌드박스를 사용하는 이유
- 보안 아키텍처에서의 샌드박스
- 샌드박스 설계
- 샘플 분석 흐름
- 게스트 VM
- 호스트와 게스트 에이전트
- 모니터링 에이전트
- 디셉션 및 기타 에이전트
- 호스트와 게스트 통신 채널
- 파일과 스트리밍 로깅 기술 비교
- 샌드박스 탐지 결과 저장
- 샌드박스를 이용한 머신러닝
- 요약
- 25장. 바이너리 계측을 위한 리버싱 자동화
- 바이너리 계측의 의미
- DBI의 내부 메커니즘
- 계측 코드 삽입
- 멀웨어 분석을 위한 DBI
- DBI의 단점
- DBI를 사용한 도구 작성
- PIN 설정
- 도구1: 모든 명령어 기록하기
- 도구2: Win32 API 로깅
- 도구3: 코드 수정 및 분기 우회
- 요약