마스터링 리버스 엔지니어링

소프트웨어 취약점을 분석하는 해커 친화적 기술

취약점을 이용하거나 방어코드를 강화하기 위해 소프트웨어를 분석하고 싶다면 리버스 엔지니어링을 연구해야 한다. 리버스 엔지니어링은 해커 친화적인 기술로써, 보안 결함과 의심스러운 개인정보 이슈를 파헤치는 데 사용된다.

이 책에서는 소스코드나 설계 문서 없이도 소프트웨어를 분석하는 방법을 배운다. 먼저 컴퓨터와 의사소통을 하기 위해 사용되는 저수준 언어로 학습을 시작한 다음 실제 리버스 엔지니어링 기술을 다루는 것으로 넘어갈 것이다. 다음으로 IDA Pro, x86dbg 등의 유용한 도구를 이용한 분석 기법을 알아본다. 각 장을 거치면서 암호화와 패킹 그리고 난독화, 안티 디버깅, 분석방지 트릭 등 리버스 엔지니어링을 할 때 마주치는 활용 사례와 그것을 식별하고 극복하는 방법 등을 살펴보게 된다. 마지막으로, 코드가 포함된 다른 유형의 파일을 분석하는 방법을 알아본다.

이 책을 다 읽을 때쯤이면, 리버스 엔지니어링을 자신 있게 수행할 수 있게 될 것이다.

★ 이 책에서 다루는 내용 ★

  • 핵심 리버스 엔지니어링
  • 맬웨어 구성요소 식별 및 추출
  • 리버스 엔지니어링에 사용되는 도구 활용
  • 가상화된 환경에서의 프로그램 실행
  • 디버깅 방지 및 분석 방지 트릭 식별 및 분석

레지날드 웡(Reginald Wong)

레지날드 웡은 15 년 이상 소프트웨어 보안 업계에 종사해 왔다. 현재 J2 Global 기업인 바이퍼 시큐리티(Vipre Security)에서 공격 및 악성코드에 중점을 두며 다양한 보안 기술을 다루는 수석 악성코드 탐지 연구원으로 근무하고 있다. 그는 이전에 트렌드 마이크로(Trend Micro)에서 악성코드 탐지의 미래 지향적 기술을 다루는 휴리스틱 팀(Heuristics team)의 리더로 일했다.

강병탁([email protected])

현재 에이아이스페라(AI Spera)의 대표이사로 사이버 위협 인텔리전스(CTI) 프로젝트를 진행하고 있으며 고려대학교 정보보호대학원 산학협력중점교수를 역임하고 있다. 이전에는 네오플 인프라기술실 실장으로 시스템/보안/DB/인프라개발 등 인프라 기술을 총괄했으며, 넥슨 아메리카에서는 InfoSec Team 팀장으로 미국 지사의 보안조직을 설립, 보안프로세스구축/침입탐지/컴플라이언스 업무를 해 왔고, 넥슨 코리아에서는 게임보안팀을 설립, 팀장으로 라이브 게임의 보안성 향상과 침해대응 업무를 해 왔다. 월간 마소에서 해킹/보안을 주제로 약 3년간 테크니컬 라이터로 활동했고, 각종 대학교와 기관 등에서 해킹/보안을 주제로 한 정기/특별 강의를 다년간 진행했다. 저서로는 《인프라 보안》 《리버스 엔지니어링 바이블》이 있다.

최화재([email protected])

현재 에이아이스페라(AI Spera) 연구소 개발팀 팀장으로 사이버 위협 인텔리전스(CTI) 프로젝트를 진행하고 있다. 고려대학교 컴퓨터통신공학부, 동 대학원 정보보호학과 해킹대응기술연구실을 졸업하였으며 이전에는 국방과학연구소(ADD) 제2기술연구본부에서 사이버전 기술 연구개발업에 종사하였고 한국인터넷진흥원(KISA)의 K-Shield 1기로 활동하였다. 주요 논문 및 특허로는 MMORPG 분야에서 머신러닝으로 부정 사용자 탐지, SCADA 환경에서 자기유사도를 이용한 침입탐지 시스템 연구, 코드 은닉 및 침입탐지 장치, 24Bit BMP 이미지를 이용한 쉘코드 은닉 기법 등이 있다.

  • ▣ 01장: 리버싱 준비
    • 리버스 엔지니어링
    • 기술적 요구 사항
    • 리버스 엔지니어링 프로세스
      • 승인 유도
      • 정적 분석(static analysis)
      • 동적 분석(dynamic analysis)
      • 저수준 분석
      • 리포팅
    • 도구들
      • 바이너리 분석 도구
      • 디스어셈블러
      • 디버거
      • 모니터링 도구들
      • 디컴파일러
    • 맬웨어 취급법
    • 기본 분석 랩 환경 설정
      • 설정 방법
    • 샘플 코드
    • 정리
    •  
  • ▣ 02장: 숨겨진 구성 요소의 식별과 추출
    • 기술적 요구 사항
    • 운영 체제 환경
      • 파일 시스템
      • 메모리
      • 레지스트리 시스템
    • 맬웨어의 일반적인 행위
      • 지속성
      • 맬웨어 전파
      • 페이로드 – 내부의 악
    • 도구
      • 오토런(Autoruns)
      • 프로세스 익스플로러(Process Explorer)
    • 정리
    • 더 읽을 거리
    •  
  • ▣ 03장: 저수준 언어
    • 기술적 요구사항
    • 이진수
      • 진법 변환
      • 이진 산술
      • 부호 있는 숫자
      • x86
      • 메모리 주소 지정
    • 기본 지침
      • Opcode 바이트
      • 데이터 복사
      • 산술 연산
      • 비트 대수
      • 제어 흐름
      • 스택 조작
    • 도구 – 빌더와 디버거
      • 유명한 어셈블리 빌더
      • x86 디버거
    • Hello World
      • FASM 설치
      • 코드 작성, 컴파일, 실행
      • 빌드할 때 발생하는 일반적인 오류 처리
      • 프로그램 해부
    • Hello World 이후
      • API 호출
      • 디버깅
      • 정리
    • 더 읽을 거리
    •  
  • ▣ 04장: 정적 및 동적 리버싱
    • 검사와 정적 분석
      • 정적 분석
      • 파일 유형 및 헤더 분석
      • 다른 정보
      • 데드리스팅
    • 동적 분석
      • 메모리 영역과 프로세스 매핑
      • 프로레스 및 스레드 모니터링
      • 네트워크 트래픽
      • 시스템 변경 모니터링
      • 실행 후 차이점
      • 디버깅
    • 직접 수행할 내용
    • 정리
    • 참조
    •  
  • ▣ 05장: 툴 소개
    • 분석 환경
      • 가상 시스템
      • 윈도우
      • 리눅스
    • 정보 수집 도구
      • 파일 형식 정보
      • 해시 식별
      • 문자열
      • 모니터링 도구
      • 기본 명령줄 도구
    • 디스어셈블러
    • 디버거
    • 디컴파일러
    • 네트워크 도구
    • 편집 도구
    • 공격 도구
    • 자동화 도구
    • 소프트웨어 포렌식 도구
    • 자동화된 동적 분석
    • 온라인 서비스 사이트
    • 정리
    •  
  • ▣ 06장: 리눅스 플랫폼에서의 리버스 엔지니어링
    • 설치
    • 리눅스 실행 파일 - hello world
      • dlroW olleH
      • 더 나은 디버거
      • 패스워드가 무엇일까?
    • 네트워크 트래픽 분석
    • 정리
    • 더 읽을 거리
    •  
  • ▣ 07장: 윈도우 플랫폼에서의 리버스 엔지니어링
    • 기술적 요구사항
    • Hello World
      • API 배우기
    • 패스워드는 무엇인가?
      • 정적 분석
      • 빠른 실행
      • 데드리스팅
      • 디버깅을 통한 동적 분석
      • 디컴파일러
    • 정리
    • 더 읽을 거리
    •  
  • ▣ 08장: 샌드박싱 - 리버싱을 위한 컴포넌트 가상화
    • 에뮬레이션
      • x86 호스트에서 윈도우와 리눅스의 에뮬레이션
    • 익숙치 않은 환경에서의 분석
      • QEMU에서의 리눅스 ARM 게스트
      • Bochs MBR 디버깅
    • 정리
    • 더 읽을 거리
    •  
  • ▣ 09장: 바이너리 난독화 기술
    • 스택에서의 데이터 어셈블리
      • 코드 어셈블리
    • 암호화된 데이터 식별
      • 루프 코드
      • 단순 연산
      • 단순 XOR 복호화
    • 다른 메모리 영역의 데이터 어셈블리
    • x86dbg를 사용한 복호화
    • 다른 난독화 기술
      • 제어 흐름 평탄화 난독화
      • 쓰레기 코드 삽입
      • 메타몰픽을 이용한 코드 난독화
      • 동적 라이브러리 로딩
      • PEB 정보 이용
    • 정리
    •  
  • ▣ 10장: 패킹과 암호화
    • OS에서 네이티브 실행 파일이 로딩되는 원리
    • 패커, 크립터, 난독화, 프로텍터, SFX
      • 패커 또는 컴프레서
      • 크립터
      • 난독화 도구
      • 프로텍터
      • SFX 자체 압축해제 파일
    • 언패킹
      • UPX 도구
      • 패커 디버깅
    • 메모리에서 프로세스 덤프
      • 버추얼박스로 메모리 덤프
      • 볼라틸리티를 이용해 프로세스를 파일로 추출하기
    • 언패킹된 상태의 실행 파일은 어떨까?
    • 그 외의 파일 형식
    • 정리
    •  
  • ▣ 11장: 분석 방지 기술
    • 안티 디버깅 기술
      • IsDebuggerPresent
      • PEB 안에서의 디버그 플래그
      • NtQueryInformationProcess의 디버거 정보
      • 타이밍 트릭
      • SEH를 통한 실행 흐름 전달
    • 안티 VM 트릭
      • VM에서 실행되는 프로세스 이름
      • VM 파일과 디렉터리의 존재
      • 기본 MAC 주소
      • VM에 의해 만들어지는 레지스트리 항목
      • VM 장치
      • CPUID 결과
    • 안티 에뮬레이션 트릭
    • 안티 덤프 트릭
    • 정리
    •  
  • ▣ 12장: 윈도우 실행 파일 실전 리버스 엔지니어링
    • 준비할 것
    • 초기 정적 분석
      • 초기 파일 정보
      • 데드리스팅
    • 디버깅
      • 알려지지 않은 이미지
      • 분석 요약
    • 정리
    • 더 읽을 거리
    •  
  • ▣ 13장: 다양한 파일 형식 리버싱
    • HTML 스크립트 분석
    • MS 오피스 매크로 분석
    • PDF 파일 분석
    • SWF 파일 분석
      • SWFTools
      • FLASM
      • Flare
      • XXXSWF
      • JPEXS SWF 디컴파일러
    • 정리
    • 더 읽을 거리