Top

악성코드 분석 시작하기 [윈도우 악성코드 분석에 필요한 개념과 도구, 테크닉]

  • 원서명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장, ‘메모리 포렌식을 이용한 고급 악성코드 탐지’에서는 고급 악성코드가 포렌식 도구에 탐지되지 않고자 사용하는 은닉 기술을 설명한다. 유저 모드와 커널 모드 루트킷 컴포넌트를 조사하고 탐지하는 방법을 배울 수 있다.

저자/역자 소개

지은이의 말

컴퓨터와 인터넷 기술의 발전은 우리의 삶을 변화시켰고, 조직이 비즈니스를 수행하는 방식을 혁신시켰다. 하지만 기술 진화와 디지털화는 사이버 범죄 활동을 증가시켰다. 중요 인프라스트럭처, 데이터 센터, 개인/공공, 국방, 에너지, 정부, 금융 부분에 대한 사이버 공격 위협의 증가는 개인에서 대기업에 이르기까지 모두에게 고유한 과제가 됐다. 이러한 사이버 공격은 금융 절도, 스파이 활동, 방해 공작(sabotage), 지적 재산권 절도, 정치적 동기에 따라 악의적인 소프트웨어(악성코드)를 사용한다.
공격자가 정교한 지능형 악성코드(malware) 공격을 수행함에 따라 침입을 탐지하고 대응하는 것은 사이버 보안 전문자에게 중요하다. 악성코드 분석은 고급 악성코드와 표적 공격과 싸우는 데 필수적인 기술이 됐다. 악성코드를 분석하려면 다양한 기술과 주제에 대한 균형 잡힌 지식이 필요하다. 즉, 악성코드 분석을 배우려면 시간과 인내심이 필요하다.
이 책은 악성코드 분석을 사용해 윈도우 악성코드의 행위와 특징을 이해할 수 있는 개념, 도구, 기술을 가르친다. 먼저 악성코드 분석의 기본 개념을 소개하고 고급 코드 분석과 메모리 포렌식 개념을 설명한다. 개념을 더 잘 이해할 수 있도록 돕고자 다양한 실제 악성코드 샘플, 감염된 메모리 이미지, 시각적인 다이어그램을 책 전반의 예제로 사용했다. 이 외에도 필요한 개념의 이해를 도울 수 있는 충분한 정보가 제공되며, 가능한 경우 추가 자료에 대한 참고를 제공한다.
악성코드 분석에 익숙하지 않다면 이 책은 악성코드 분석을 시작하는 데 도움을 줄 것이고, 이 분야에 경험이 있다면 지식을 더욱 향상시키는 데 도움을 줄 것이다. 포렌식 조사를 수행하고자, 사고 대응을 하고자, 또는 단순 재미로 악성코드 분석을 배우고 있다고 하더라도 이 책은 목표를 달성하는 데 도움을 줄 것이다.

지은이 소개

몬나파 K A(Monnappa K A)

시스코 시스템(Cisco Systems)에서 위협 인텔리전스와 고급 사이버 공격 조사에 초점을 둔 정보보안 조사자로 일하고 있다. 블랙 햇(Black Hat) 검토 위원회의 회원, Limon 리눅스 샌드박스의 제작자, Volatility 플러그인 콘테스트 2016의 우승자, 시스인포(Cysinfo) 사이버 보안 연구 커뮤니티의 공동 창립자다. 블랙 햇, FIRST, OPCDE, DSCI를 포함한 다양한 보안 콘퍼런스에서 발표와 교육 세션을 수행했다. 미국, 아시아, 유럽의 블랙 햇 보안 콘퍼런스에서 정기적으로 교육을 진행한다.

옮긴이의 말

악성코드는 사람의 악의가 사라지지 않는 한 사라지지 않고 계속 존재할 것이고, 컴퓨터 기술이 발전할 수 있도록 더욱 교묘해지고 발전할 것이다. 이 책에서 악의적인 코드 또는 악성 코드로 표현했지만, 사실 코드에는 어떤 마음이나 선악이 존재하지 않는다. 악성코드 제작자가 가진 의도대로 수행되는 명령이 존재할 뿐이다. 악성코드 분석은 이런 측면에서 제작자의 심리를 읽을 수도 있고 비록 나쁜 행위이긴 하지만, 그의 재치를 알아가는 작업이기도 하다. 보안 모듈을 우회하고 몰래 숨는 응용력에 감탄하기도 하고, 부처님 손바닥 안에서 노는 손오공 같은 제작자의 우매함에 실소가 나오기도 한다.
앞서 번역한 『악성코드 분석가의 비법서』(2012)는 악성코드를 분석할 때 즉시 참고할 수 있는 실전 참고서이고, 『실전 악성코드와 멀웨어 분석』(2013)은 분석 방법, 악성코드의 기능, 안티리버싱을 다루고 있어 이 책과 유사한 점이 있으나 상세한 내용은 다르다. 이 책의 장점은 앞의 책들보다 이후에 출간돼 좀 더 새로운 내용을 담고 있다는 점, 다른 관점의 설명으로 이해의 수준을 높인다는 점, 저자의 경험과 지식이 잘 묻어난다는 점이다. 이 책은 악성코드 분석을 정의하고 두 가지 분석 방법으로 구분한 후 악성코드 분석에 기초가 되는 디스어셈블리 기초와 IDA 사용법, 디버깅을 설명한다. 그리고 악성코드가 가진 다양한 기능과 그 정체성(인젝션과 후킹), 은닉 기술, 은닉 기술을 탐지하는 메모리 포렌식을 다룬다.

옮긴이 소개

여성구

다년간의 보안 컨설턴트 활동 이후 게임사 CERT 팀장, IS 감사역, 보안 시스템 개발 팀장 등을 거쳐 서비스 보안을 총괄하는 실장으로 업무를 수행하고 있다. 다년간 국가기관과 대기업, 통신사 등 다양한 IT 환경을 대상으로 모의해킹, 보안 점검 및 교육, 침해사고 대응을 실시했으며, 게임사의 보안, IS 감사, 인트라넷 및 인프라 시스템 개발과 운영, 보안 플랫폼 개발 관리 업무를 담당했다. 국내외에 보안 취약점 및 공개용 보안 도구 발표와 악성코드 분석 관련 도서를 번역했으며, 고려대학교 정보보호대학원에서 디지털 포렌식을 전공했다.

목차

목차
  • 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를 이용한 악성 코드 분류
  • 요약

  • 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을 이용한 디버거 스크립팅
  • 요약

  • 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 서비스
  • 요약

  • 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. 추가 정보
  • 요약

  • 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 자동화된 언패킹
  • 요약

  • 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. 커널 콜백과 타이머
  • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[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행]
(삭제; 중복되는 문장)