실전 바이너리 분석 (자동화 취약점 탐지를 위한)

실전 바이너리 분석 (자동화 취약점 탐지를 위한)

$43.68
Description
현대 사회에서 컴퓨터는 필수적이다. 특히 최근 인공지능 기술의 발전으로 컴퓨터는 상당한 수준의 고급 기능을 제공하며 인간의 생활을 윤택하게 했다. 그렇지만 그 이면을 보면, 컴퓨터가 과연 똑똑한 것인지 의문을 품게 된다. 사람은 자신의 복잡한 생각을 다양한 방식으로 처리할 수 있지만, 컴퓨터는 0과 1의 조합으로만 대상을 이해할 수 있다. 이 때문에 컴퓨터 관점의 언어를 저수준(low-level)이라고 부르고, 인간의 시각을 고수준(high-level)이라고 지칭한다. 서로 다른 국가의 사람들이 통용하는 언어가 다르듯이, 컴퓨터 역시 아키텍처나 운영체제에 따라 상이한 바이너리(이진 파일) 결과물을 사용한다. 그 때문에 사람이 다양한 종류의 컴퓨터 언어를 습득해 이해하는 것은 결코 쉽지 않다. 바이너리 분석이란 결국 이 둘 사이의 간극을 해결하는 일종의 '번역' 또는 '통역' 작업이라고 볼 수 있다. 이 책이 설명하는 여러 가지 기술을 통해, 컴퓨터와 심층적으로 소통할 수 있게 될 것이다.
저자

데니스앤드리스

DennisAndriesse
시스템및네트워크보안분야에서박사학위를취득했으며,현재바이너리분석관련연구를수행하고있다.ROP등의제어흐름탈취공격으로부터방어하기위한제어흐름무결성보호체계인PathArmor의핵심개발자다.또한GameOverZeusP2Pbotnet에대한진압작전에투입된개발요원이기도했다.

목차

1부.BINARYFORMATS

1장.바이너리란무엇인가
1.1C언어로작성된프로그램의컴파일과정
1.1.1전처리단계
1.1.2컴파일단계
1.1.3어셈블단계
1.1.4링킹단계
1.2심벌과스트립바이너리
1.2.1심벌정보확인하기
1.2.2바이너리스트립:관련정보은닉하기
1.3바이너리디스어셈블
1.3.1목적파일
1.3.2단독으로실행가능한바이너리파일분석하기
1.4바이너리로딩과실행
1.5이장의요약
연습문제

2장.ELF바이너리포맷
2.1ELF파일헤더
2.1.1e_ident배열
2.1.2e_type,e_machine,e_version필드
2.1.3e_entry필드
2.1.4e_phoff와e_shoff필드들
2.1.5e_flags필드
2.1.6e_ehsize필드
2.1.7e_*entsize와e_*num필드
2.1.8e_shstrndx필드
2.2섹션헤더
2.2.1sh_name필드
2.2.2sh_type필드
2.2.3sh_flags필드
2.2.4sh_addr,sh_offset,sh_size필드
2.2.5sh_link필드
2.2.6sh_info필드
2.2.7sh_addralign필드
2.2.8sh_entsize필드
2.3섹션
2.3.1.init과.fini섹션
2.3.2.text섹션
2.3.3.bss,.data,.rodata섹션들
2.3.4지연바인딩과.plt,.got,.got.plt섹션
2.3.5.rel.*과.rela.*섹션
2.3.6.dynamic섹션
2.3.7.init_array와.fini_array섹션
2.3.8.shstrtab,.symtab,.strtab,.dynsym,.dynstr섹션
2.4프로그램헤더
2.4.1p_type필드
2.4.2p_flags필드
2.4.3p_offset,p_vaddr,p_paddr,p_filesz,p_memsz필드
2.4.4p_align필드
2.5요약
연습문제

3장.PE바이너리포맷요약정리
3.1MS-DOS헤더와MS-DOS스텁
3.2PE시그니처,파일헤더,옵션헤더
3.2.1PE시그니처
3.2.2PE파일헤더
3.2.3PE옵션헤더
3.3섹션헤더테이블
3.4섹션
3.4.1.edata와.idata섹션
3.4.2PE코드섹션의패딩
3.5요약
연습문제

4장.LIBBFD를이용한바이너리로더제작
4.1libbfd란무엇인가?
4.2바이너리로더의기본인터페이스
4.2.1바이너리클래스
4.2.2섹션클래스
4.2.3심벌클래스
4.3바이너리로더구현하기
4.3.1libbfd초기화하고바이너리열기
4.3.2바이너리기본정보분석하기
4.3.3심벌정보불러오기
4.3.4섹션정보불러오기
4.4바이너리로더테스트하기
4.5요약
연습문제


2부.BINARYANALYSISFUNDAMENTALS

5장리눅스바이너리분석기초
5.1file명령어를사용해식별하기
5.2ldd명령어를사용해의존성점검하기
ASCII코드신속하게찾기
5.3xxd명령어를사용해파일내부내용확인하기
5.4readelf명령어를사용해ELF파일형식추출하기
5.5nm명령어를사용해심벌정보분석하기
5.6strings명령어를사용해단서찾기
5.7strace와ltrace명령어를사용해시스템콜및라이브러리호출추적하기
5.8ojdump명령어를사용해기계어수준동작확인하기
5.9gdb명령어를사용해동적으로문자열버퍼덤프하기
5.10요약
연습문제

6장.디스어셈블과바이너리분석방법론
6.1정적디스어셈블
6.1.1선형디스어셈블
6.1.2재귀적디스어셈블
6.2동적디스어셈블
6.2.1예제:gdb로바이너리실행추적하기
6.2.2코드커버리지전략
6.3디스어셈블된코드와데이터를구조화하기
6.3.1코드구조화
.eh_frame섹션을이용한함수탐지
6.3.2데이터구조화
6.3.3디컴파일
6.3.4중간언어표현식
6.4주요분석방법론
6.4.1바이너리분석요소
6.4.2제어흐름분석
6.4.3데이터흐름분석
6.5디스어셈블시컴파일러설정효과
6.6요약
연습문제

7장.ELF바이너리코드인젝션기법
7.1헥스에디터를이용한원초적수정방법
정확한opcode찾기
7.1.1한바이트버그탐구하기
7.1.2한바이트버그수정하기
7.2LD_PRELOAD를사용해공유라이브러리동작변경하기
7.2.1힙오버플로취약점
7.2.2힙오버플로탐지하기
7.3코드섹션끼워넣기
7.3.1ELF섹션끼워넣기:전체적맥락
7.3.2elfinject를사용해ELF섹션삽입하기
7.4삽입된코드호출하기
7.4.1엔트리포인트개조
7.4.2생성자와소멸자탈취하기
7.4.3GOT엔트리탈취하기
7.4.4PLT엔트리탈취하기
7.4.5직접및간접호출조작하기
7.5요약
연습문제

3부.ADVANCEDBINARYANALYSIS

8장.자체제작디스어셈블도구구현
8.1굳이디스어셈블과정을자체제작할필요성은?4
8.1.1자체제작디스어셈블도구사례:난독화된코드
난독화되지않은바이너리에서도코드겹침기법이적용될수있다
8.1.2자체제작디스어셈블도구를개발할또다른필요성
8.2캡스톤살펴보기
8.2.1캡스톤설치하기
8.2.2캡스톤으로선형디스어셈블도구제작하기
8.2.3캡스톤CAPI살펴보기
8.2.4캡스톤으로재귀적디스어셈블도구제작하기
8.3ROP가젯스캐너구현
8.3.1ROP개요
8.3.2ROP가젯탐색하기
8.4요약
연습문제

9장.바이너리계측
9.1바이너리계측이란무엇인가?
9.1.1바이너리계측API
9.1.2정적및동적바이너리계측비교
9.2정적바이너리계측
9.2.1int3방법
9.2.2트램펄린방법
위치독립코드에대한트램펄린적용
9.3동적바이너리계측
9.3.1DBI시스템구조
9.3.2Pin개요
9.4Pin을사용한프로파일링
9.4.1프로파일링도구의자료구조및초기설정을위한코드
9.4.2함수심벌분석하기
9.4.3기본블록계측하기
9.4.4제어흐름명령어계측하기
9.4.5명령어개수,제어흐름변경및시스템콜횟수측정하기
9.4.6프로파일링프로그램테스트하기
9.5Pin을사용한자동화바이너리패킹해제
9.5.1바이너리패킹개요
9.5.2언패킹도구의자료구조및설정코드
9.5.3메모리사용기록계측하기
9.5.4제어흐름명령어계측하기
9.5.5메모리사용기록추적하기
9.5.6OEP탐지및언패킹된바이너리덤프하기
9.5.7언패킹프로그램테스트하기
9.6요약
연습문제

10장.동적오염분석원리
10.1DTA란무엇인가?
10.2DTA의세가지단계:DTA의세가지요소:오염원,오염지역,오염전파
10.2.1오염원정의하기
10.2.2오염지역설정하기
10.2.3오염전파추적하기
10.3DTA를사용해Heartbleed버그탐지하기
10.3.1Heartbleed취약점에대한간략한요약
10.3.2오염분석방법을통해Heartbleed탐지하기
10.4DTA설계요소:오염단위,오염색깔,오염정책
10.4.1오염단위
10.4.2오염색깔
10.4.3오염전파정책
10.4.4과잉오염및과소오염
10.4.5제어의존성
10.4.6섀도메모리
10.5요약
연습문제

11장.LIBDFT를이용한동적오염분석도구개발
11.1libdft소개
11.1.1libdft내부구조
11.1.2오염정책
11.2DTA를사용해원격제어탈취탐지하기
11.2.1오염정보확인하기
11.2.2오염원:수신된바이트의오염
11.2.3오염지역:execve함수의매개변수점검하기
11.2.4제어권탈취시도탐지하기
11.3암시적제어흐름을통해DTA우회하기
11.4DTA를사용해데이터유출탐지하기
11.4.1오염원:파일열기작업에대한오염추적
11.4.2오염지역:데이터유출을시도하는네트워크송신감시
11.4.3데이터유출시도탐지하기
11.5요약
연습문제

12장.기호실행원리
12.1기호실행개요
12.1.1기호적vs구체적실행
12.1.2기호실행의다양한방법론분류및각한계점
12.1.3기호실행의확장용이성향상하기
12.2Z3을이용한제약조건풀이
12.2.1명령어의도달가능성증명
12.2.2명령어의도달불가능성증명
12.2.3수식의유효성증명
12.2.4표현식간소화
12.2.5비트벡터를사용해기계어코드의제약조건모델링하기
12.2.6비트벡터로표현된모호한표현식풀이하기
12.3요약
연습문제

13장.Triton을이용한기호실행실습
13.1Triton개요
13.2추상구문트리를이용해상태정보관리하기
13.3Triton을이용한백워드슬라이싱
13.3.1Triton헤더파일및Triton환경설정
13.3.2심벌환경설정파일
13.3.3명령어에뮬레이팅
13.3.4Triton의아키텍처설정
13.3.5백워드슬라이스계산
13.4Triton을이용한코드충족도확대
13.4.1기호변수생성
13.4.2새로운경로를위한모델찾기
13.4.3코드충족도도구실행
13.5자동으로취약점익스플로잇하기
13.5.1취약한프로그램
13.5.2취약한호출지점의주소찾기
13.5.3익스플로잇생성도구구현
13.5.4루트셸획득
13.6요약
연습문제

4부.부록

부록A.인텔64비트어셈블리요점정리
부록B.LIBELF를이용한PT_NOTE덮어쓰기구현
부록C.바이너리분석도구추천
부록D.참고문헌

출판사 서평

★이책에서다루는내용★

■ELF및PE바이너리분석,libbfd를이용한바이너리로더구현
■헥스값수정및바이러스코드삽입을통한ELF바이너리개조기법
■Capstone을사용한자체개발디스어셈블도구구현
■안티분석기법을우회하기위한바이너리계측방법론
■제어흐름탈취및데이터유출공격을막기위한오염분석적용
■기호실행을통한자동화취약점악용도구개발

★이책의대상독자★

산업계의보안전문가,학계의연구자,모의침투및해킹기술자,리버스엔지니어,악성코드분석가및바이너리분석에관심이있는컴퓨터공학전공학생들을대상으로한다.뿐만아니라더많은사람이바이너리분석에관심을갖고누구나접할수있도록저술했다.다만심화주제들을포괄하기때문에컴퓨터시스템과프로그래밍전반에대한배경지식이필요하다.이책의내용을이해하려면아래와같은지식이필요하다.

■C/C++프로그래밍언어에대해합리적인수준의이해
■운영체제의내부구조(프로세스는무엇인지,가상메모리란무엇인지등)와작동원리에대한기본지식
■리눅스셸(Linuxshell)사용법에대한이해(특히bash셸기준)
■x86/x86-64어셈블리언어에대한숙련도

만약프로그래밍경험이전무하거나컴퓨터의기반시스템에대한탐구를그다지선호하지않는다면이책이적합하지않을수있다.

★이책의구성★

1부에서는바이너리의형식을다룬다.이내용은앞으로이책의전개를이해하는데있어굉장히중요하다.만약ELF및PE바이너리포맷에익숙하며libbfd사용경험이있는독자라면1부의몇몇장을건너뛰어도좋다.
1장,‘바이너리란무엇인가’에서는바이너리형태의프로그램을철저히해부하기위한기본지식을소개한다.
2장,‘ELF바이너리포맷’에서는리눅스시스템의바이너리형식인ELF를살펴본다.
3장,‘PE바이너리포맷요약’에서는윈도우시스템에서사용되는PE바이너리형식을간략히다룬다.
4장,‘libbfd를이용한바이너리로더제작’에서는libbfd를사용해바이너리의구조를분석하는방법과이를통해직접바이너리로더를제작하는과정을보여준다.이렇게직접제작한도구는향후책의진행에서도계속사용할것이다.

2부에서는바이너리분석기초를설명하고그와관련된기술을다룬다.
5장,‘리눅스바이너리분석기초’에서는리눅스환경에서제공되는도구를활용해기본적인바이너리분석을수행하는과정을배운다.
6장,‘디스어셈블과바이너리분석기초’에서는디스어셈블기법과기초분석전략을전개할것이다.
7장,‘ELF파일에대한간단한코드삽입기법’에서는여러분이직접ELF바이너리파일을개조해볼수있는첫번째경험을할수있다.악성코드를삽입하거나헥스(hex)값을편집하는등의기술을선보일것이다.

3부에서는바이너리분석심화를설명하고대부분의최신동향을다룬다.
8장,‘디스어셈블도구자체개발’에서는Capstone을사용해여러분이직접여러분만의디스어셈블도구를만들수있도록안내한다.
9장,‘바이너리계측’에서는Pin이라는바이너리계측(binaryinstrumentation)을위한최적의도구를통해바이너리를개조하는방법을소개한다.
10장,‘동적오염분석원리’에서는바이너리분석시에프로그램내부의데이터흐름을추적하는동적오염분석(dynamictaintanalysis)방법론을소개하고그와관련된최신기술동향을다룬다.
11장,‘libdft를이용한동적오염분석실전’에서는직접동적오염분석을수행하는도구를만들고자libdft를이용하는방법을배운다.
12장,‘기호실행원리’에서는복잡한프로그램의내부를자동으로구석구석탐색하는고급기법인기호실행(symbolicexecution)의기본원리를설명한다.
13장,‘Triton을이용한기호실행실전’에서는기호실행을확인할수있는도구를만들고자Triton을활용할것이다.

4부에서는이책을읽을때유용하게활용할수있는부록을준비했다.
부록A,‘x86어셈블리요약본’에서는x86어셈블리언어에아직익숙하지않은독자들을배려해관련내용을간략히요약했다.
부록B,‘lebelf를사용해PT_NOTE덮어쓰기실습’에서는7장에서다룬elfinject도구의구체적인구현내용을담았다.또한이를위해사용된libelf를자세히설명했다.
부록C,‘바이너리분석도구목록’에서는여러분이사용하면좋을바이너리분석도구들의목록을기재했다.
부록D,‘더읽어보기’에서는이책에서다루고있는내용에참고가될만한관련서적과논문목록의출처를명시했다.