본문내용 바로가기
MD의선택 무료배송 이벤트 사은품 소득공제

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

해킹과 보안
데니스 앤드리스 지음 | 박재유 옮김 | 에이콘출판 | 2021년 03월 30일 출간
  • 정가 : 43,000원
    판매가 : 38,700 [10%↓ 4,300원 할인]
  • 혜택 :
    [기본적립] 2150원 적립 [5% 적립] [추가적립] 5만원 이상 구매 시 2,000원 추가적립 안내 [회원혜택] 회원 등급 별, 3만원 이상 구매 시 2~4% 추가적립 안내 [리뷰적립] 리뷰 작성 시 e교환권 최대 300원 추가적립 안내
  • 추가혜택 : 포인트 안내 도서소득공제 안내 추가혜택 더보기
  • 배송비 : 무료 배송비 안내
  • 배송일정 : 서울특별시 종로구 세종대로 기준 지역변경
    지금 주문하면 내일(19일,수) 도착 예정 배송일정 안내
  • 바로드림 : 인터넷으로 주문하고 매장에서 직접 수령 안내 바로드림 혜택
    휴일에는 바로드림 픽업으로 더 빨리 받아 보세요. 바로드림 혜택받고 이용하기

이 책의 이벤트

해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
  • IT 개발서적 2만원 이상 구매 시 개발자 매거진 <리드잇..
    2022.01.10 ~ 2022.02.28
  • 에이콘 도서 3만원 이상 구매 시 메모리게임 카드pack 선택가..
    2022.01.10 ~ 2022.02.09
  • 다른 개발자들은 무슨 책 읽고 있을까?
    2021.12.02 ~ 2022.12.31
  • 책을 통해 성장해나가는 개발자를 응원합니다.
    2017.06.22 ~ 2025.07.31
상품상세정보
ISBN 9791161755069(1161755063)
쪽수 616쪽
크기 188 * 234 * 35 mm /1107g 판형알림
이 책의 원서/번역서 Practical Binary Analysis / Andriesse, Dennis

책소개

이 책이 속한 분야

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

작가의 말

바이너리 분석은 컴퓨터 공학과 해킹 분야에서 가장 매혹적이면서도 한편으로는 가장 난제가 많은 과목이다. 관련 정보가 턱없이 부족해서 학습 난이도가 높은 편이다.
역공학(reverse engineering)과 악성 코드 분석(malware analysis) 관련 책은 차고 넘치는 데 반해, 바이너리 계측(binary instrumentation), 동적 오염 분석(dynamic taint analysis), 기호 실행(symbolic execution)과 같은 최신 바이너리 분석 기술의 연구 동향을 알려 주는 책은 없다. 그래서 바이너리 분석 분야에 입문하려는 사람들은 인터넷 골목을 구석구석 돌아다니며 정보를 찾아야 한다. 그마저도 상당수는 구식 방법이거나 부정확한 뉴스 기사, 애매한 토막글에 불과하다. 한편 연구자들이 작성하는 일명 학구적인(academic) 논문의 경우에는 바이너리 분석에 대해 방대한 양의 배경 지식을 이미 모두가 알고 있는 것처럼 가정하고 더욱 어려운 내용을 전개하려 한다. 그래서 논문을 먼저 읽으며 거꾸로 바이너리 분석의 기초를 습득하려 하면, 마치 닭이 먼저인지 달걀이 먼저인지 모를 모순에 빠지고 만다. 설상가상으로 바이너리 분석 기법을 구현한 라이브러리나 도구는 상세한 문서를 제공하지 않는다. 있다 하더라도 설명이 불완전해 이를 통한 학습도 어렵다.
이 책을 통해 바이너리 분석 분야에서 필요한 모든 중요한 주제가 일목요연하고 손쉽게 전달되어 높았던 진입 장벽이 허물어지기를 고대한다. 이 책을 읽은 후에는 바이너리 분석 분야의 급변하는 현 상황에 대한 통찰을 얻고, 직접 현장에 과감히 뛰어들 수 있을 것이다.

목차

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. 참고 문헌

추천사

허버트 보스(교수, 암스테르담 자유대학교, 시스템 및 네트워크 보안)

데니스 앤드리스는 바이너리 분석 분야의 전문가다. 그는 굉장히 복잡한 개념을 아주 단순하게 설명하면서도, 지나치게 내용을 축소해 핵심을 놓치는 일이 없다.

책 속으로

★ 옮긴이의 말 ★

기존의 바이너리 분석은 소위 '리버스 엔지니어링(역공학)'이라는 이름으로, 숙련된 전문가들이 직접 소프트웨어의 취약점을 찾거나, 악성코드의 침해행위에 대응하기 위한 수작업이었다. 하지만 현대의 소프트웨어가 복잡해지고 난독화 등의 방법까지 등장하게 되면서, 소수의 손에만 의존하기에는 자원적 측면에서 한계에 다다랐다. 이제는 이 모든 작업을 '자동화'할 수 있는 방법이 필요하다. 제목을 단순히 기존에 출시된 여러 서적처럼 '역공학’이란 표현을 사용하지 않고, '바이너리 분석’으로 명명한 것은 바로 자동화 가능... 더보기

출판사 서평

★ 이 책에서 다루는 내용 ★

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

★ 이 책의 대상 독자 ★

산업계의 보안 전문가, 학계의 연구자, 모의침투 및 해킹 기술자... 더보기

Klover 리뷰 (0)

북로그 리뷰 (0) 쓰러가기

북로그 리뷰는 본인 인증 후 작성 가능합니다.
책이나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 내용은 비공개 처리 될 수 있습니다.
※ 북로그 리뷰 리워드 제공 2021. 4. 1 종료

문장수집 (0) 문장수집 쓰기 나의 독서기록 보기
※구매 후 문장수집 작성 시, 리워드를 제공합니다. 안내

교환/반품/품절안내

※ 상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

교환/반품/품절안내
반품/교환방법 마이룸 > 주문관리 > 주문/배송내역 > 주문조회 > 반품/교환신청 ,
[1:1상담>반품/교환/환불] 또는 고객센터 (1544-1900)

※ 오픈마켓, 해외배송주문, 기프트 주문시 [1:1상담>반품/교환/환불]
    또는 고객센터 (1544-1900)
반품/교환가능 기간 변심반품의 경우 수령 후 7일 이내,
상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내
반품/교환비용 변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
반품/교환 불가 사유
  • 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
    (단지 확인을 위한 포장 훼손은 제외)
  • 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    예) 화장품, 식품, 가전제품(악세서리 포함) 등
  • 복제가 가능한 상품 등의 포장을 훼손한 경우
    예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집
  • 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우 ((1)해외주문도서)
  • 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
  • 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
  • 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에
    해당되는 경우
(1) 해외주문도서 : 이용자의 요청에 의한 개인주문상품으로 단순변심 및 착오로 인한 취소/교환/반품 시 ‘해외주문 반품/취소 수수료’ 고객 부담 (해외주문 반품/취소 수수료 : ①서양도서-판매정가의 12%, ②일본도서-판매정가의 7%를 적용)
상품 품절 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는
이메일과 문자로 안내드리겠습니다.
소비자 피해보상
환불지연에 따른 배상
  • 상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은
    소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨
  • 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의
    소비자 보호에 관한 법률에 따라 처리함

이 책의 원서/번역서

안내
바로가기
  • 우측 확장형 배너 2
  • 우측 확장형 배너 2
최근 본 상품