장바구니 담기 close

장바구니에 상품을 담았습니다.

실전 바이너리 분석

실전 바이너리 분석

  • 데니스앤드리스
  • |
  • 에이콘출판
  • |
  • 2021-03-30 출간
  • |
  • 616페이지
  • |
  • 188 X 235 X 29 mm
  • |
  • ISBN 9791161755069
판매가

43,000원

즉시할인가

38,700

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
38,700

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




★ 이 책에서 다루는 내용 ★

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

★ 이 책의 대상 독자 ★

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

■ C/C++ 프로그래밍 언어에 대해 합리적인 수준의 이해
■ 운영체제의 내부 구조(프로세스는 무엇인지, 가상 메모리란 무엇인지 등)와 작동 원리에 대한 기본 지식
■ 리눅스 셸(Linux shell) 사용법에 대한 이해(특히 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이라는 바이너리 계측(binary instrumentation)을 위한 최적의 도구를 통해 바이너리를 개조하는 방법을 소개한다.
10장, ‘동적 오염 분석 원리’에서는 바이너리 분석 시에 프로그램 내부의 데이터 흐름을 추적하는 동적 오염 분석(dynamic taint analysis) 방법론을 소개하고 그와 관련된 최신 기술 동향을 다룬다.
11장, ‘libdft를 이용한 동적 오염 분석 실전’에서는 직접 동적 오염 분석을 수행하는 도구를 만들고자 libdft를 이용하는 방법을 배운다.
12장, ‘기호 실행 원리’에서는 복잡한 프로그램의 내부를 자동으로 구석구석 탐색하는 고급 기법인 기호 실행(symbolic execution)의 기본 원리를 설명한다.
13장, ‘Triton을 이용한 기호 실행 실전’에서는 기호 실행을 확인할 수 있는 도구를 만들고자 Triton을 활용할 것이다.

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


목차


1부. BINARY FORMATS

1장. 바이너리란 무엇인가
1.1 C언어로 작성된 프로그램의 컴파일 과정
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.1 ELF 파일 헤더
2.1.1 e_ident 배열
2.1.2 e_type, e_machine, e_version 필드
2.1.3 e_entry 필드
2.1.4 e_phoff와 e_shoff 필드들
2.1.5 e_flags 필드
2.1.6 e_ehsize 필드
2.1.7 e_*entsize 와 e_*num 필드
2.1.8 e_shstrndx 필드
2.2 섹션 헤더
2.2.1 sh_name 필드
2.2.2 sh_type 필드
2.2.3 sh_flags 필드
2.2.4 sh_addr, sh_offset, sh_size 필드
2.2.5 sh_link 필드
2.2.6 sh_info 필드
2.2.7 sh_addralign 필드
2.2.8 sh_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.1 p_type 필드
2.4.2 p_flags 필드
2.4.3 p_offset, p_vaddr, p_paddr, p_filesz, p_memsz 필드
2.4.4 p_align 필드
2.5 요약
연습 문제

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

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


2부. BINARY ANALYSIS FUNDAMENTALS

5장 리눅스 바이너리 분석 기초
5.1 file 명령어를 사용해 식별하기
5.2 ldd 명령어를 사용해 의존성 점검하기
ASCII 코드 신속하게 찾기
5.3 xxd 명령어를 사용해 파일 내부 내용 확인하기
5.4 readelf 명령어를 사용해 ELF 파일 형식 추출하기
5.5 nm 명령어를 사용해 심벌 정보 분석하기
5.6 strings 명령어를 사용해 단서 찾기
5.7 strace와 ltrace 명령어를 사용해 시스템콜 및 라이브러리 호출 추적하기
5.8 ojdump 명령어를 사용해 기계어 수준 동작 확인하기
5.9 gdb 명령어를 사용해 동적으로 문자열 버퍼 덤프하기
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.2 LD_PRELOAD를 사용해 공유 라이브러리 동작 변경하기
7.2.1 힙 오버플로 취약점
7.2.2 힙 오버플로 탐지하기
7.3 코드 섹션 끼워넣기
7.3.1 ELF 섹션 끼워넣기: 전체적 맥락
7.3.2 elfinject 를 사용해 ELF 섹션 삽입하기
7.4 삽입된 코드 호출하기
7.4.1 엔트리 포인트 개조
7.4.2 생성자와 소멸자 탈취하기
7.4.3 GOT 엔트리 탈취하기
7.4.4 PLT 엔트리 탈취하기
7.4.5 직접 및 간접 호출 조작하기
7.5 요약
연습문제

3부. ADVANCED BINARY ANALYSIS

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

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

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

11장. LIBDFT를 이용한 동적 오염 분석 도구 개발
11.1 libdft 소개
11.1.1 libdft 내부 구조
11.1.2 오염 정책
11.2 DTA를 사용해 원격 제어 탈취 탐지하기
11.2.1 오염 정보 확인하기
11.2.2 오염원: 수신된 바이트의 오염
11.2.3 오염 지역: execve 함수의 매개 변수 점검하기
11.2.4 제어권 탈취 시도 탐지하기
11.3 암시적 제어 흐름을 통해 DTA 우회하기
11.4 DTA를 사용해 데이터 유출 탐지하기
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.2 Z3을 이용한 제약조건 풀이
12.2.1 명령어의 도달 가능성 증명
12.2.2 명령어의 도달 불가능성 증명
12.2.3 수식의 유효성 증명
12.2.4 표현식 간소화
12.2.5 비트 벡터를 사용해 기계어 코드의 제약 조건 모델링하기
12.2.6 비트 벡터로 표현된 모호한 표현식 풀이하기
12.3 요약
연습문제

13장. Triton을 이용한 기호 실행 실습
13.1 Triton 개요
13.2 추상 구문 트리를 이용해 상태 정보 관리하기
13.3 Triton을 이용한 백워드 슬라이싱
13.3.1 Triton 헤더 파일 및 Triton 환경 설정
13.3.2 심벌 환경 설정 파일
13.3.3 명령어 에뮬레이팅
13.3.4 Triton의 아키텍처 설정
13.3.5 백워드 슬라이스 계산
13.4 Triton을 이용한 코드 충족도 확대
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. 참고 문헌

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.