실전 악성코드와 멀웨어 분석
- 원서명Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software (ISBN 9781593272906)
- 지은이마이클 시코스키, 앤드류 호닉
- 옮긴이여성구, 구형준, 박호진
- ISBN : 9788960774872
- 45,000원
- 2013년 10월 29일 펴냄 (절판)
- 페이퍼백 | 1,008쪽 | 188*250mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
예제 파일의 비밀번호는 malware 입니다. 악성코드/바이러스로 인식하기때문에 가상환경에서 실행하는 방법을 추천합니다.
http://practicalmalwareanalysis.com/labs/
아래 깃허브 링크에서도 내려받으실 수 있습니다.
https://github.com/mikesiko/PracticalMalwareAnalysis-Labs
요약
악성코드 분석은 끊임없이 등장하는 악성코드와 제로데이 등으로 인해 보안 분야의 뜨거운 감자로 급부상했다. 이 책은 악성코드 분석의 초심자를 비롯해 중고급자에게 충분한 지식을 전달할 수 있게 구성되었으며, 악성코드 분석 기법과 사용 도구, 그리고 악성코드 분석의 고급 기법을 다룬다. 특히 저자가 직접 작성한 악성코드 샘플을 각 장의 문제와 더불어 풀이해줌으로써 문제를 고민하고 실습을 통해 체득해 악성코드 분석에 대한 이해와 능력을 크게 향상시킬 수 있다.
이 책에서 다루는 내용
- 악성코드 분석에 안전한 가상 환경 구축
- 신속한 네트워크 시그니처와 호스트 기반 식별자의 추출법
- IDA Pro, OllyDbg, WinDbg 같은 주요 분석 도구의 사용법
- 난독화, 안티디스어셈블리, 안티디버깅, 안티가상머신 기법 같은 악성코드 속임수의 우회법
- 악성코드 분석에 필요한 새로운 윈도우 내부 지식
- 가장 대중적인 다섯 개의 패커를 이용한 악성코드 언패킹 진행과 실전 연습
- 셸코드, C++, 64비트 코드 같은 특수한 경우의 악성코드 분석
이 책의 구성
이 책은 상대적으로 복잡하지 않은 프로그램에서 정보를 얻을 때 사용할 수 있는 쉬운 방법으로 시작해 가장 정교한 악성 프로그램 분석에도 사용할 수 있는 복잡한 기법으로 나아간다. 다음은 각 장에서 다루는 내용이다.
- 0장, 악성코드 분석 입문은 악성코드 분석의 전체 프로세스와 방법론을 제시한다.
- 1장, 기초 정적 분석 기법은 실제 실행하지 않고 실행 파일에서 정보를 얻는 방법을 알려준다.
- 2장, 가상 머신에서의 악성코드 분석은 악성코드 실행 시 안전한 환경을 구축해 실습할 수 있게 한다.
- 3장, 기초 동적 분석은 실행을 통해 사용하기 쉬우면서도 효과적으로 악의적인 프로그램을 분석하는 방법을 가르쳐준다.
- 4장, X86 디스어셈블리 속성 과정은 IDA Pro 사용을 위한 기초 지식과 깊이 있는 악성코드 분석을 수행할 수 있게 x86 어셈블리어를 소개한다.
- 5장, IDA Pro는 악성코드 분석에 가장 중요한 도구인 IDA Pro를 사용하는 방법을 다룬다. 이 책 전반적으로 IDA Pro를 사용한다.
- 6장, 어셈블리어에서의 C 코드 구조 식별은 어셈블리로 된 C 코드 예제를 통해 어셈블리 코드의 상위 레벨 기능을 이해하는 방법을 설명한다.
- 7장, 악의적인 윈도우 프로그램 분석은 악의적인 윈도우 프로그램을 이해하는 데 필요한 다양한 윈도우 기반 개념을 다룬다.
- 8장, 디버깅에서는 디버깅 기초와 디버거를 사용하는 방법을 설명한다.
- 9장, OllyDbg는 악성코드 분석가에게 가장 대중적인 OllyDbg를 사용하는 방법을 보여준다.
- 10장, WinDbg를 이용한 커널 디버깅은 WinDbg 디버거를 이용해 커널 모드 악성코드와 루트킷을 탐지하는 방법을 다룬다.
- 11장, 악성코드의 행위 특성은 공통된 악성코드의 기능과 악성코드를 분석할 때 해당 기능을 인지하는 방법을 설명한다.
- 12장, 위장 악성코드 실행에서는 다른 프로세스 내에서 실행되는 것을 숨기는 은폐형 악성 프로그램을 분석하는 방법을 다룬다.
- 13장, 데이터 인코딩은 네트워크 트래픽이나 피해 호스트에서 악성 행위를 식별하지 못하게 하기 위해 사용하는 데이터 인코딩 방법을 설명한다.
- 14장, 악성코드 기반 네트워크 시그니처는 캡처된 트래픽만으로 작성한 시그니처보다 더 나은 네트워크 시그니처를 만들기 위해 악성코드를 분석하는 방법을 설명한다.
- 15장, 안티디스어셈블리는 악성코드 제작자가 디스어셈블하기 어렵게 악성코드를 설계하는 방법과 이 기법을 인식하고 성공적으로 분석하는 방법을 설명한다.
- 16장, 안티디버깅은 악성코드 제작자가 코드를 디버깅하기 어렵게 하는 기법과 이런 난관을 극복하는 방법을 설명한다.
- 17장, 안티가상머신 기법은 악성코드가 가상 환경에서 분석하기 어렵게 하는 기법과 이 기법을 우회하는 방법을 설명한다.
- 18장, 패커와 언패킹은 악성코드가 실제 목적을 숨기기 위해 패킹을 사용하는 방법과 패킹된 프로그램을 언패킹하는 단계적인 접근법을 다룬다.
- 19장, 셸코드 분석은 셸코드가 무엇인지와 악의적인 셸코드 분석에 특화된 팁과 속임수를 설명한다.
- 20장, C++ 분석은 C++코드가 컴파일되면 어떻게 다르게 보이는지, 그리고 C++로 생성한 악성코드의 분석 방법을 알아본다.
21장, 64비트 악성코드는 악성코드 제작자가 64비트 악성코드를 이용하는 이유와 x86과 x64 간의 차이점을 알기 위해 필요한 사항을 다룬다.
- 부록 A, 주요 윈도우 함수는 악성코드가 자주 사용하는 윈도우 함수를 간단히 소개한다.
- 부록 B, 악성코드 분석 도구는 악성코드 분석가에게 유용한 도구 목록을 제공한다.
- 부록 C, 실습 문제 풀이는 책 전체의 장에 포함된 실습 문제에 대한 풀이를 제공한다.
이 책에 쏟아진 각계의 찬사
"악성코드 분석에 뛰어난 속성 과정이다."
(디노 다이 조비 / 개인 보안 컨설턴트)" …… 악성코드 분석에 대한 매우 포괄적인 가이드로, 특히 현대 악성코드를 분석할 때 난해한 부분을 이해하는 데 필요한 모든 필수 기술을 세부적으로 다룬다."
(크리스 이글 / 해군 대학원 전산학 전문 강사)"악성코드 분석을 직접 따라할 수 있는 소개서다. 윈도우 악성코드를 파헤치고 싶은 모든 이에게 추천한다."
(일팍 귀파노프 / IDA Pro 제작자 )"…… 훌륭한 악성코드 분석 소개서다. 모든 장에서 기술적인 세부 설명과 직접 따라할 수 있는 실습을 통해 실제 악성코드에 바로 응용할 수 있다."
(세바스찬 포스트 / 구글 소프트웨어 엔지니어)"…… 독자에게 모든 수준의 역공학 기술을 소개한다. 기술적으로 많은 내용과 접근 가능한 방식으로 실습을 통해 독자가 역공학의 예술과 과학을 좀 더 깊이 이해할 수 있게 안내할 것이다. 이 책을 초보자와 전문가에게 모두 강력히 추천한다."
(대니 퀴스트 / PHD, 오펜시브 컴퓨팅 설립자)"악성코드 책을 한 권만 읽거나 악성코드 분석 세계의 문을 열고 싶다면 바로 이 책이다."
(패트릭 엥브리스톤 / 다코다 주립대 IA 교수이자 『해킹과 침투 테스팅 기초』의 저자 )"…… 소프트웨어 보안과 침입 탐지 시스템에 관련된 대학원 수준의 고급 강좌의 강의 교재로 적합하다. 특히 실습 내용은 악성코드 소프트웨어의 역공학, 분석, 이해하는 방법을 학생에게 가르칠 때 유용하다."
(살 스톨포 / 콜롬비아 대학 교수)"…… 독자에게 모든 수준의 역공학 기술을 소개한다. 기술적으로 많은 내용과 접근 가능한 방식으로 실습을 통해 독자가 역공학의 예술과 과학을 좀 더 깊이 이해할 수 있게 안내할 것이다. 이 책을 초보자와 전문가에게 모두 강력히 추천한다."
(대니 퀴스트 / PHD, 오펜시브 컴퓨팅 설립자)"악성코드 책을 단 한 권만 읽기를 원하거나 악성코드 분석 세계의 문을 열고 싶다면 바로 이 책이다."
(패트릭 엥브리스톤 / 다코다 주립대 IA 교수이자 『해킹과 침투 테스팅 기초』의 저자 )"…… 소프트웨어 보안과 침입 탐지 시스템에 관련된 대학원 수준의 고급 강좌의 강의 교재로 적합하다. 특히 실습 내용은 악성코드 소프트웨어의 역공학, 분석, 이해하는 방법을 학생에게 가르칠 때 유용하다."
(살 스톨포 / 콜롬비아 대학 교수)
추천의 글
디지털 보안에서 악성코드, 공격 도구와 운영체제와 관련된 분야만큼 비대칭적인 분야도 드물다.
2011년 여름, 네바다 주 라스베이거스에서 열린 블랙햇(Black Hat)에서 피터 (머지) 자코(Peiter (Mudge) Zatko)의 키노트에 참석했다. 연설 중 머지는 현대 소프트웨어의 비대칭적인 속성을 소개했다. 9,000개의 악성코드 바이너리를 분석했더니 샘플 집합의 코드는 평균 125줄이라고 설명했다. 머지의 샘플은 ‘간단’하거나 ‘평이한’ 악성코드를 포함했다고 주장할지 모른다. 여러분은 실제 ‘무기로 제작’된 뭔가(Stuxnet 같은)를 떠올릴 수 있다. 래리 콘스탄틴(Larry L. Constantine)에 의하면 Stuxnet은 약 15,000 LOC(Line of Code)를 포함하므로, 보통 평균 125 LOC 크기를 갖는 악성코드 샘플의 120배다. Stuxnet은 매우 특화되고 목표물이 명확해서 크기가 평균 이상인 이유를 설명할 수 있다. 악성코드 세계를 잠시 떠나 내가 사용하는 문서 편집기(gedit, 그놈(GNOME) 문서 편집기)는 295 LOC의 gedit.c를 포함하고, gedit의 GNOME GIT 소스코드 저장소에서 gedit.c는 전체 128개 소스 파일(3개 디렉토리와 함께)의 하나일 뿐이다. 128개 파일과 3개 디렉토리를 모두 세어보면 70,484 LOC다. 합법적인 애플리케이션 LOC와 악성코드의 라인 수를 비교해보면 500대 1이다. 문서 편집기 같은 상당히 직관적인 도구와 비교하면 악성코드 샘플은 매우 효율적인 것처럼 보인다!
머지의 125 LOC는 개인적으로 좀 작아 보이는데, 다른 ‘악성코드’ 정의가 있기 때문이다. 대부분의 악성 애플리케이션은 많은 함수와 기반 요소로 이뤄진 ‘스위트(Suites)’ 형태로 존재한다. 이런 종류의 악성코드를 잡아 합리적으로 제우스(Zeus) 트로이 목마의 ‘소스’ 요소를 세어봤더니 253,774 LOC였다. 머지의 평균 샘플 중 하나와 제우스 같은 프로그램을 비교하면 2,000 대 1쯤 되는 비율임을 알 수 있다. 다음으로 머지는 악성코드 LOC를 악성코드 소프트웨어를 가로챈 후 차단하는 보안 제품군의 라인수와 비교했다. 머지는 현대의 보안 제품에서 찾은 LOC가 1,000만 정도로 추정된다고 언급했다. 좀 더 간단히 계산해 약 1,250만 줄의 코드로 작성된 제품이 있다면 공격 LOC와 방어 LOC의 비율이 10만분의 1 수준이라고 생각할 수 있다. 다시 말해 한 줄의 LOC를 갖는 악성코드를 방어하기 위해 방어하는 사람은 10만 LOC의 방어 요새를 작성해야 한다. 머지는 악성코드 LOC를 공략하려는 운영체제와도 비교했다. 분석가는 윈도우 XP가 4,500만 LOC 정도로 설계했으리라 추정하지만, 윈도우 7은 얼마만큼의 LOC로 설계했는지 알 수 없다. 머지는 현대 운영체제는 1억 5,000만 줄 정도로 작성됐을 것으로 이야기했는데, 아마 최근 윈도우 버전을 염두에 두고 한 말인 듯하다. 간단히 계산하기 위해 1,250만 줄에서 좀 줄여 수정해보면 대상 운영체제와 이를 악용하려는 악의적인 무기의 크기 비율이 100만대 1이다.
잠깐 멈추고 산출한 LOC 수를 요약해보자.
120 : 1 Stuxnet 대 평균 악성코드 500 : 1 간단한 문서 편집기 대 평균 악성코드 2,000 : 1 통합 악성코드 대 평균 악성코드 100,000 : 1 방어 도구 대 평균 악성코드 1,000,000 : 1 대상 운영체제 대 평균 악성코드
방어자 입장에서 방어 도구와 운영체제와 평균 악성코드 샘플의 비율은 꽤 암울해 보인다. 평균 크기의 악성코드 스위트(suit) 크기와 바꿔봐도 방어자 입장에서는 별로 나아진 게 없어 보인다! 방어자(그리고 벤더)는 훨씬 적은 LOC로 무장한 실용적이고 영리한 침입자의 농락에 수천 LOC을 만드는 많은 노력을 들이는 것과 같다.
방어자는 무엇을 해야 할까? 답은 무장이 더 뛰어난 리더가 사용한 전략을 모방하는 것이다. ‘장애’를 ‘기회’로 재정의한다. 방어 도구와 대상 운영체제는 잊어버려라. 그에 관해 별로 할 수 있는 게 없다. 악성코드 샘플이 가능한 한 작다(상대적으로 말해)는 사실에 기뻐하라. 1,250만 LOC가 기다리고 있는 소스코드 수준에서 방어 도구가 동작하는 방식을 이해하려 상상해보자. 일부 연구가가 자신이 좋아하는 프로젝트라고 해도 버거운 작업이다. 한 놀라운 예로 2011년 라스베이거스 블랙햇에서 타비스 오만디(Tavis Ormandy)가 발표한 「소파일: 소포스 안티 바이러스의 주요 분석 (Sophail: A Critical Analysis of Sophos Antivirus)」을 읽어보자. 이런 종류의 대형 분석이 예외적이지 주류는 아니다. 수백만 LOC에 대한 걱정 대신 실제 악성코드의 상당수를 차지하는 1,000줄 이하의 영역으로 내려가 보자. 방어자로서 악성코드와 관련한 주요 목적은 악성코드가 무엇인지, 여러분의 환경에 어떻게 나타나는지, 어떤 행위를 하는지 알아내는 것이다. 합리적인 크기의 샘플과 올바른 기술을 다룬다면 이 문제에 대답함으로써 당신의 조직이 처한 위험을 상당히 줄일 기회가 있다.
악성코드 제작자가 샘플을 제공할 준비가 돼 있다면 당신이 읽고 있는 책의 저자는 분석 기술을 제공하기 위해 존재한다. 『실전 악성코드와 멀웨어 분석』은 모든 악성코드 분석가가 유용하게 지녀야 할 부류의 책이라고 생각한다. 당신이 초보자라면 소개 부분과 악성코드 공략에 필요한 간단한 자료를 읽어보자. 중급자라면 다음 단계로 갈 수 있다. 전문 엔지니어라면 좀 더 상위 수준으로 올라갈 수 있는 보배임을 알게 될 것이고, 당신을 멘토로 삼는 누군가가 질문을 던졌을 때 “이 세부 매뉴얼을 읽어보라.”고 말할 수 있을 것이다.
__『실전 악성코드와 멀웨어 분석』 은 사실 두 권을 하나로 만든 것인데, 우선 독자에게 현대 악성코드를 분석하는 방법을 보여주는 교과서다. 그런 연유로 이 책을 샀다면 소개 부분에서 많은 도움을 받을 것이다. 하지만 저자는 한 발짝 더 나아가 두 번째 부분도 작성하기로 결심했다. 응용 악성코드 분석이라고 부를 수 있는 두꺼운 부분이며, 또한 부록 C는 각 장의 끝에 나오는 실습 문제, 해답과 세부 분석 내용으로 구성된다. 저자는 예제를 위해 모든 악성코드를 직접 작성했고, 코드들은 학습에 충분하면서 안전한 환경을 보장한다.
따라서 디지털 수호자에게 부닥친 명백한 비대칭 현실에 절망하기보다는 미지의 악성코드가 현재와 같은 형태임을 반겨주면 좋겠다. 『실전 악성코드와 멀웨어 분석』 같은 책으로 무장하면 기업이나 고객의 침입 탐지와 대응에 필요한 기술을 습득하게 될 것이다. 저자는 이 영역에서 전문가이며, 연구실에 국한된 이론이 아닌 실무 최전선에서 습득한 조언을 해줄 수 있을 것이다. 이 책을 즐거운 마음으로 읽으면서 역공학 대상인 악성코드 하나하나를 알아보고 어둠의 예술을 밝은 지식으로 승화시켜 적의 공격 비용이 높아지게 철저히 분석해보자.
리차드 베틀리히(Richard Bejtlich)(@taosecurity) 맨디언트(Mandiant)의 CSO, 타오시큐리티(TaoSecurity) 설립자 버지니아 주 마나사스파크에서
목차
목차
- 0장 악성코드 분석 입문
- 1부 기초 분석
- 1장 기초 정적 분석 기법
- 2장 가상머신에서의 악성코드 분석
- 3장 기초 동적 분석
- 2부 고급 정적 분석
- 4장 X86 디스어셈블리 속성 과정
- 5장 IDA Pro
- 6장 어셈블리어에서의 C 코드 구조 식별
- 7장 악의적인 윈도우 프로그램 분석
- 3부 고급 동적 분석
- 8장 디버깅
- 9장 OllyDbg
- 10장 WinDbg를 이용한 커널 디버깅
- 4부 악성코드의 기능
- 11장 악성코드의 행위 특성
- 12장 위장 악성코드 실행
- 13장 데이터 인코딩
- 14장 악성코드 기반 네트워크 시그니처
- 5부 안티리버싱
- 15장 안티디스어셈블리
- 16장 안티디버깅
- 17장 안티가상머신 기법
- 18장 패커와 언패킹
- 6부 특별한 주제
- 19장 셸코드 분석
- 20장 C++ 분석
- 21장 64비트 악성코드
- 부록
- 부록 A 주요 윈도우 함수
- 부록 B 악성코드 분석 도구
- 부록 C 실습 문제 풀이
도서 오류 신고
정오표
정오표
이 책의 예제 파일 다운로드
이 책에서 설명한 악성코드 예제 파일은 다음 경로에서 내려받으실 수 있습니다. http://practicalmalwareanalysis.com/labs/
[p.182: 리스트 6-4, 6-5]
리스트 6-2의 전역 변수 예제용 어셈블리 코드, 이름 없음
->
리스트 6-2의 지역 변수 예제용 어셈블리 코드, 이름 없음
리스트 6-2의 전역 변수 예제용 어셈블리 코드, 이름 변경
->
리스트 6-2의 지역 변수 예제용 어셈블리 코드, 이름 변경
[p.378: 12행, 실습 12-2 질문 4번 다음 행에 추가]
5. 문자열은 어떻게 보호되고 있는가?