◈ 이 책에서 다루는 내용 ◈
◆ 디스어셈블리 코드 탐색 방법
◆ 기드라에 내장된 디컴파일러를 이용한 빠른 분석 방법
◆ 난독화된 바이너리 분석 방법
◆ 새로운 데이터 유형을 인식하도록 기드라 기능 확장 방법
◆ 새로운 기드라 분석기와 로더 생성 방법
◆ 새로운 프로세서와 명령어 셋 추가 방법
◆ 작업 자동화를 위한 기드라 스크립트 작성 방법
◆ 리버스 엔지니어링 협업을 위한 환경 설정 방법
◈ 이 책의 대상 독자 ◈
야심차고 경험이 풍부한 소프트웨어 리버스 엔지니어를 대상으로 한다. 리버스 엔지니어링 경험이 없어도 상관없다. 책의 초반부에서 리버스 엔지니어링을 소개하고, 기드라로 바이너리를 탐색하고 분석하는 데 필요한 배경 지식을 제공하기 때문이다. 자신의 툴킷에 기드라를 추가하고자 하는 숙련된 리버스 엔지니어라면 처음 2개의 부에서 기드라에 대한 기본적인 지식을 빠르게 숙지한 다음 관심 있는 장으로 이동해서 보면 된다. 기드라 사용 경험이 있는 사용자나 개발자라면 새로운 기드라 익스텐션을 만들고 자신의 경험과 지식을 기드라 프로젝트에 기여할 수 있도록 책의 후반부를 집중해서 볼 수도 있다.
◈ 이 책의 구성 ◈
총 5개의 부로 구성돼 있다. 1부에서는 디스어셈블리와 리버스 엔지니어링, 기드라 프로젝트를 소개한다. 2부에서는 기본적인 기드라 사용법을 설명하고, 3부에서는 사용자가 원하는 대로 사용자 지정 방법과 자동화 방법을 설명한다. 4부에서는 특정 유형의 기드라 모듈과 지원 개념을 설명한다. 5부에서는 리버스 엔지니어가 마주치게 되는 몇 가지 실제 상황에 기드라를 적용하는 방법을 설명한다.
1부: 소개
‘1장, 디스어셈블리 소개’에서는 디스어셈블리의 이론과 실행에 대해 소개하고 2가지 일반적인 디스어셈블리 알고리듬의 장단점을 살펴본다.
‘2장, 리버싱과 디스어셈블리 툴’에서는 리버스 엔지니어링과 디스어셈블리에서 사용할 수 있는 툴의 종류를 알아본다.
‘3장, 기드라를 만나다’에서 비로소 기드라를 만나고 그 기원과 기드라 오픈소스 툴을 사용하는 방법을 가볍게 살펴본다.
2부: 기본적인 기드라 사용법
‘4장, 기드라 시작하기’부터는 기드라와 함께하는 본격적인 여정이 시작된다. 프로젝트를 만들고, 파일을 분석하고, 기드라의 그래픽 사용자 인터페이스(GUI, Graphical User Interface)를 이해함으로써 기드라가 작동하는 모습을 처음 엿볼 수 있다.
‘5장, 기드라 데이터 디스플레이’에서는 파일 분석을 위한 기드라의 주요 툴인 CodeBrowser를 설명한다. 또한 CodeBrowser의 창 구성도 경험한다.
‘6장, 기드라의 디스어셈블리 이해’에서는 기드라 디스어셈블리를 이해하고 이용하는 데 필요한 기본적인 개념을 설명한다.
‘7장, 디스어셈블리 코드 변경’에서는 기드라의 분석을 보완하고 자체 분석 과정의 일부로 기드라 디스어셈블리를 조작하는 방법을 알아본다.
‘8장, 데이터 타입과 데이터 구조체’에서는 컴파일된 프로그램에서 발견되는 간단하거나 복잡한 데이터 구조체를 정의하고 변경하는 방법을 살펴본다.
‘9장, 상호 참조’에서는 상호 참조와 상호 참조가 그래프 작성을 어떻게 지원하는지 그리고 프로그램의 동작을 이해하는 데 어떻게 핵심적인 역할을 하는지 자세히 설명한다.
‘10장, 그래프’에서는 기드라의 그래프 기능과 바이너리 분석 툴로 그래프를 이용하는 방법을 설명한다.
3부: 자신을 위한 기드라 만들기
‘11장, 소프트웨어 리버스 엔지니어링 협업’에서는 기드라의 고유한 기능인 기드라를 이용한 협업 지원을 소개한다. 기드라 서버를 설정하는 방법 및 다른 분석가와 프로젝트를 공유하는 방법을 살펴본다.
‘12장, 기드라 사용자 정의’에서는 개별적인 분석 워크플로를 지원하고자 프로젝트와 툴을 설정함으로써 기드라를 사용자 정의하는 방법을 설명한다.
‘13장, 기드라의 세계관 확장’에서는 기드라가 새로운 바이너리 구조를 인식할 수 있게 라이브러리 시그니처 및 기타 특정 콘텐츠를 만들고 적용하는 방법을 알려준다.
‘14장, 기드라 스크립트’에서는 기드라의 인라인 편집기를 사용해 파이썬과 자바로 작성하는 기드라의 스크립트 기능을 소개한다.
‘15장, 이클립스와 기드라’에서는 이클립스를 기드라에 통합시키고 그에 따른 강력한 스크립트 기능으로 기드라 스크립트를 새로운 수준으로 끌러올릴 것이며, 예제를 통해 새로운 분석기를 만들어본다.
‘16장, 기드라 헤드리스 모드’에서는 GUI가 없는 헤드리스 모드에서 기드라를 사용하는 방법을 소개한다. 그리고 대규모의 반복적인 작업에서 헤드리스 모드가 제공하는 장점을 살펴본다.
4부: 심층 분석
‘17장, 기드라 로더’에서는 기드라에서 파일을 임포트하고 로드하는 방법을 자세히 설명한다. 그리고 이전에 인식되지 않은 파일 형식을 처리하기 위한 새로운 로더를 만들어본다.
‘18장, 기드라 프로세서’에서는 프로세서 아키텍처를 정의하기 위한 기드라의 SLEIGH 언어를 소개한다. 기드라에 새로운 프로세서와 명령을 추가하는 과정을 경험한다.
‘19장, 기드라 디컴파일러’에서는 기드라의 매우 인기 있는 기능 중 하나인 기드라 디컴파일러를 자세히 설명한다. 기드라 디컴파일러가 내부적으로 어떻게 동작하고 분석 과정에 어떻게 기여하는지 살펴본다.
‘20장, 컴파일러’에서는 다른 컴파일러로 컴파일되거나 대상 플랫폼이 다른 코드에 대해 설명한다.
5부: 실제 분석에 적용
‘21장, 난독화된 코드 분석’에서는 코드를 실행시키지 않는 정적 분석으로 난독화된 코드를 분석하는 방법을 설명한다.
‘22장, 바이너리 패치’에서는 분석을 수행하는 동안 기드라를 이용해 바이너리를 패치해서 새로운 버전의 패치된 바이너리를 만드는 방법을 설명한다.
‘23장, 바이너리 비교와 버전 추적’에서는 기드라를 이용해 두 바이너리 간의 차이점을 식별하는 방법과 바이너리의 버전을 추적하는 기능을 간단히 소개한다.
‘부록: IDA 사용자를 위한 기드라’에서는 IDA에 익숙한 사용자를 위해 IDA 용어와 사용법을 기드라의 유사한 기능에 매핑시키기 위한 팁과 트릭을 제공한다.
◈ 옮긴이의 말 ◈
리버스 엔지니어링은 전통적으로 소프트웨어 보안과 디지털 포렌식, 악성코드 분석, 보안 취약점 연구 등 사이버 보안 영역에서 필요한 중요 기술로 자리 잡고 있습니다. 오늘날의 IT 환경은 클라우드 컴퓨팅, 사물인터넷(IoT, Internet of Things), 인공지능(AI, Artificial Intelligence) 등 혁신적인 기술이 주도하고 있으며 앞으로도 새로운 IT 기술이 주도하는 방향으로 끊임없이 진화해갈 것입니다. 그러한 새로운 기술들은 새로운 기회를 제공하지만 새로운 형태의 보안 위협에 직면하게 하고 있습니다. 전통적인 보안 위협뿐만 아니라 새로운 형태의 보안 위협에 대응하는 데 기본적으로 필요한 기술이 소프트웨어 분석 능력입니다. 단순한 소프트웨어 분석 역량이 아닌 보안 위협의 본질을 파악하고 그것을 역추적할 수 있는 기술과 통찰력이 필요합니다. 이를 위해 사이버 보안 전문가에게 필요한 기본 도구 중 하나가 리버스 엔지니어링 도구입니다. 기드라는 오픈소스 리버스 엔지니어링 도구 중 가장 강력하고 유연합니다. 오픈소스이기 때문에 전 세계의 사이버 보안 전문가와 연구자들이 적극적으로 기능을 발전시키고 있다는 장점이 있습니다. 기드라는 강력한 디컴파일러와 디스어셈블러를 포함하고 있으며 복잡한 바이너리 분석을 손쉽게 수행할 수 있는 다양한 기능을 제공하고 있습니다.
기드라의 설치부터 기본 사용법 그리고 기드라가 제공하는 다양한 기능 및 활용 방법을 자세히 설명하며, 사용자가 필요하다면 자신만의 고유한 기능을 만들어 사용할 수 있는 방법까지 자세히 다루는 것이 이 책입니다. 즉, 리버스 엔지니어링을 수행해야 하는 사이버 보안 담당자를 위한 종합적이고 전문적인 안내서이자 실용적인 지침서라고 할 수 있습니다. 기드라를 활용한 리버스 엔지니어링의 세계를 깊이 이해하고 자신의 리버스 엔지니어링 능력을 한 단계 끌어올리는 기회가 되길 바랍니다.