Ghidra를 활용한 리버스 엔지니어링 입문 [NSA가 만든 Ghidra의 다양한 기능과 사용법]
- 원서명Ghidra Software Reverse Engineering for Beginners: Analyze, identify, and avoid malicious code and potential threats in your networks and systems (ISBN 9781800207974)
- 지은이A.P. 데이비드(A.P. David)
- 옮긴이장지나
- ISBN : 9791161755830
- 35,000원
- 2021년 11월 23일 펴냄
- 페이퍼백 | 364쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 해킹과 보안
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/ghidra-software
원서의 코드 실행 영상은 여기에서 보실 수 있습니다.
https://bit.ly/3ot3YAT
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
리버스 엔지니어링 입문자를 위한 Ghidra 가이드북이다. Ghidra의 역사, 구조, 기본적인 기능, 확장기능 개발, 스크립트 등 Ghidra의 모든 것을 소개한다. Ghidra로 실제 사용됐던 악성코드를 분석하며 주요 기능을 알아보고, 리버스 엔지니어링에 대한 전반적인 지식을 얻을 수 있다. 또한 Ghidra 플러그인을 직접 개발하고 Ghidra의 확장 기능을 활용하기 위한 정적, 동적 심볼릭 실행, SMT 솔버를 비롯한 고급 리버스 엔지니어링 주제를 다룬다.
이 책에서 다루는 내용
◆ Ghidra의 기능, 플러그인, 확장 기능 활용
◆ Ghidra에 기여할 수 있는 방법
◆ 악성코드 리버스 엔지니어링과 바이너리 감사 수행
◆ Ghidra 플러그인으로 리버스 엔지니어링 작업 자동화
◆ 자신만의 Ghidra 확장 기능, 스크립트 및 기능 개발
◆ Ghidra 스크립팅으로 실행 가능한 바이너리에서 취약점을 찾는 작업 자동화
◆ headless 모드에서의 Ghidra 사용 방법
이 책의 대상 독자
리버스 코드 엔지니어, 악성코드 분석가, 버그 헌터, 침투 테스터, 익스플로잇 개발자, 포렌식 전문가, 보안 연구자, 사이버 보안 학생을 대상으로 한다. 실제로 학습 곡선을 최소화하고 자신만의 도구를 쓰기 시작함으로써 Ghidra를 배우고자 하는 사람이라면 누구나 이 책을 즐기고 목표를 달성할 수 있다.
이 책의 구성
1장, ‘Ghidra 시작’에서는 Ghidra의 역사와 사용자 관점에서 프로그램의 개요를 다룬다.
2장, ‘Ghidra 스크립트를 통한 리버스 엔지니어링 작업 자동화’에서는 Ghidra 스크립트를 사용해 리버스 엔지니어링 작업을 자동화하는 방법을 설명하고 스크립트 개발을 소개한다.
3장, ‘Ghidra 디버그 모드’에서는 Ghidra 개발 환경설정 방법, Ghidra 디버그 방법, Ghidra 디버그 모드 취약점의 모든 내용을 다룬다.
4장, ‘Ghidra 확장 기능 사용’에서는 Ghidra 확장 기능을 설치하고 사용하는 방법을 보여줄 뿐만 아니라 Ghidra 기능을 개발하기 위한 배경을 설명한다.
5장, ‘Ghidra를 사용한 악성코드 리버싱’에서는 실제 악성코드 샘플을 리버싱해 악성코드 분석에 Ghidra를 사용하는 방법을 보여준다.
6장, ‘스크립팅 악성코드 분석’에서는 악성코드 샘플에서 발견된 셸코드 분석을 자바와 파이썬 두 언어를 모두 스크립팅해 5장의 내용에 이어서 설명한다.
7장, ‘Ghidra Headless Analyzer 사용’에서는 Ghidra Headless Analyzer를 설명하고 7장에서 개발한 스크립트로 획득한 악성코드 샘플에 적용한다.
8장, ‘Ghidra를 이용한 바이너리 감사’에서는 Ghidra로 메모리 손상 취약점을 찾고 이를 활용하는 방법을 설명한다.
9장, ‘스크립팅 바이너리 감사’에서는 8장에 이어 강력한 PCode 중간 표현을 활용해 스크립팅으로 버그 헌팅 프로세스를 자동화하는 방법을 설명한다.
10장, ‘Ghidra 플러그인 개발’에서는 Ghidra 플러그인 확장 기능이 구현된 Ghidra 기능을 최대한 활용할 수 있는 방법을 설명함으로써 Ghidra 확장 기능 개발을 자세히 설명한다.
11장, ‘새로운 바이너리 포맷 통합’에서는 실제 파일 포맷을 예로 들어 새로운 바이너리 포맷을 지원하는 Ghidra 확장 기능을 사용하는 방법을 설명한다.
12장, ‘프로세서 모듈 분석’에서는 SLEIGH 프로세서 사양 언어를 사용해 Ghidra 프로세서 모듈을 작성하는 방법을 설명한다.
13장, ‘Ghidra 커뮤니티에 기여’에서는 소셜 네트워크, 채팅을 사용해 개발, 피드백, 버그 보고서, 댓글 등으로 커뮤니티와 상호작용하는 방법을 설명한다.
14장, ‘고급 리버스 엔지니어링을 위한 Ghidra 확장’에서는 SMT solvers, 마이크로소프트 Z3, 정적 및 동적 symbex, LLVM, Angr과 같은 고급 리버스 엔지니어링 주제와 도구를 소개하고 Ghidra와 통합하는 방법을 설명한다.
목차
목차
- 1부. Ghidra 소개
- 1장. Ghidra 시작
- 기술적 요구 사항
- 위키리크스 Vault 7
- NSA 릴리스
- IDA 및 기타 많은 경쟁업체 대비 Ghidra
- Ghidra 개요
- Ghidra 설치
- Ghidra의 특징 개요
- 요약
- 질문
- 2장. Ghidra 스크립트를 통한 리버스 엔지니어링 작업 자동화
- 기술적 요구 사항
- 기존 스크립트 사용과 적용
- 스크립트 클래스
- 스크립트 개발
- 요약
- 질문
- 3장. Ghidra 디버그 모드
- 기술적 요구 사항
- Ghidra 개발 환경설정
- 소프트웨어 요구 사항 개요
- 자바 JDK 설치
- 이클립스 IDE 설치
- PyDev 설치
- GhidraDev 설치
- Ghidra 코드와 Ghidra 스크립트 디버깅
- 이클립스에서 Ghidra 스크립트 디버깅
- 이클립스에서 Ghidra 구성 요소 디버깅
- Ghidra RCE 취약점
- Ghidra RCE 취약점 설명
- Ghidra RCE 취약점 공격
- Ghidra RCE 취약점 수정
- 취약한 컴퓨터 찾기
- 요약
- 질문
- 더 읽을거리
- 4장. Ghidra 확장 기능 사용
- 기술적 요구 사항
- 기존 Ghidra 확장 기능 설치
- Sample Table Provider 플러그인의 코드 분석
- Ghidra 확장 기능 스켈레톤의 이해
- 분석기
- 파일 시스템
- 플러그인
- 익스포터
- 로더
- Ghidra 확장 기능 개발
- 요약
- 질문
- 더 읽을거리
- 2부. 리버스 엔지니어링
- 5장. Ghidra를 사용한 악성코드 리버싱
- 기술적 요구 사항
- 환경설정
- 악성코드 지표 찾기
- 문자열 찾기
- 인텔리전스 정보와 외부 소스
- import 함수 확인
- 흥미로운 악성코드 샘플 부분 분석
- 진입점 함수
- 0x00453340 함수 분석
- 0x00453C10 함수 분석
- 0x0046EA60 함수 분석
- 0x0046BEB0 함수 분석
- 0x0046E3A0 함수 분석
- 0x004559B0 함수 분석
- 0x004554E0 함수 분석
- 0x0046C860 함수 분석
- 0x0046A100 함수 분석
- 요약
- 질문
- 더 읽을거리
- 6장. 스크립팅 악성코드 분석
- 기술적 요구 사항
- Ghidra 스크립팅 API 사용
- 자바 프로그래밍 언어를 사용해 스크립트 작성
- 파이썬 프로그래밍 언어를 사용해 스크립트 작성
- 스크립트를 사용한 악성코드 샘플의 난독화 해제
- 델타 오프셋
- API 해시를 주소로 변환
- Ghidra 스크립팅을 사용해 해시 테이블 난독화 해제
- 스크립팅 결과 향상
- 요약
- 질문
- 더 읽을거리
- 7장. Ghidra Headless Analyzer 사용
- 기술적 요구 사항
- Headless 모드를 사용하는 이유
- 프로젝트 생성과 채우기
- 가져온 바이너리나 기존 바이너리에 대한 분석 수행
- 프로젝트에서 비GUI 스크립트 실행
- 요약
- 질문
- 더 읽을거리
- 8장. Ghidra를 이용한 바이너리 감사
- 기술적 요구 사항
- 메모리 손상 취약점 이해
- 스택 이해
- 스택 기반 버퍼 오버플로
- 힙의 이해
- 힙 기반 버퍼 오버플로
- 포맷 스트링
- Ghidra를 사용한 취약점 찾기
- 단순 스택 기반 버퍼 오버플로 공격
- 요약
- 질문
- 더 읽을거리
- 9장. 스크립팅 바이너리 감사
- 기술적 요구 사항
- 취약한 함수 찾기
- 심볼 테이블에서 안전하지 않은 C/C++ 함수 검색
- 스크립팅을 사용한 프로그램 디컴파일
- sscanf 콜러 검색
- 콜러 함수 열거
- PCode를 이용한 콜러 함수 분석
- PCode와 어셈블리어 비교
- PCode 검색과 분석
- 여러 아키텍처에서 동일한 PCode 기반 스크립트 사용
- 요약
- 질문
- 더 읽을거리
- 3부. Ghidra 확장
- 10장. Ghidra 플러그인 개발
- 기술적 요구 사항
- 기존 플러그인 개요
- Ghidra 배포에 포함된 플러그인
- 서드파티 플러그인
- Ghidra 플러그인 스켈레톤
- 플러그인 설명서
- 플러그인 코드 작성
- 플러그인에 대한 프로바이더
- Ghidra 플러그인 개발
- 플러그인 문서화
- 플러그인 클래스 구현
- 프로바이더 구현
- 요약
- 질문
- 더 읽을거리
- 11장. 새로운 바이너리 포맷 통합
- 기술적 요구 사항
- 원시 바이너리와 포맷 형식 바이너리의 차이점
- 원시 바이너리 이해
- 포맷된 바이너리 파일 이해
- Ghidra 로더 개발
- MZ(오래된 스타일 DOS 실행 파일) 파서
- 오래된 MZ(DOS 실행 파일) 로더
- 파일 시스템 로더 이해
- 파일 시스템 자원 로케이터
- 요약
- 질문
- 더 읽을거리
- 12장. 프로세서 모듈 분석
- 기술적 요구 사항
- 기존 Ghidra 프로세서 모듈 이해
- Ghidra 프로세서 모듈 스켈레톤 개요
- 프로세서 모듈 개발 환경설정
- 프로세서 모듈 스켈레톤 생성
- Ghidra 프로세서 개발
- 문서화 프로세서
- 패턴을 이용한 함수와 코드 식별
- 언어와 언어 변형 지정
- 요약
- 질문
- 더 읽을거리
- 13장. Ghidra 커뮤니티에 기여
- 기술적 요구 사항
- Ghidra 프로젝트 개요
- Ghidra 커뮤니티
- 기여도 탐색
- 법적 측면의 이해
- 버그 리포트 제출
- 새 기능 제안
- 질문 제출
- Ghidra 프로젝트에 풀 리퀘스트 제출
- 요약
- 질문
- 더 읽을거리
- 14장. 고급 리버스 엔지니어링을 위한 Ghidra 확장
- 기술적 요구 사항
- 고급 리버스 엔지니어링의 기본 지식
- 심볼릭 실행 학습
- SMT 솔버 학습
- 콘콜릭 실행에 대한 학습
- 고급 리버스 엔지니어링에 Ghidra 사용
- AngryGhidra로 Ghidra에 심볼릭 실행 기능 추가
- pcode-to-llvm을 사용해 PCode에서 LLVM으로 변환
- 요약
- 질문