책 소개
요약
루트킷과 부트킷이 어떻게 컴퓨터의 부팅 과정에 침투해 악의적인 동작을 수행할 수 있는지 구체적으로 설명한다. 1부에서는 루트킷에 대해 살펴보는 것으로 시작한다. 여기서 역사적으로 루트킷의 활동 무대였던 윈도우 커널의 내부도 소개한다. 과거 가장 흥미로웠던 루트킷인 TDL3와 Festi를 소개하고 이들이 어떻게 윈도우 커널을 조작해 동작하는지 설명한다. 2부에서는 윈도우가 커널모드 코드서명, ELAM, 시큐어부트와 가상보안모드로 커널모드 보안을 강화한 후에 나온 부트킷과 OS의 부트 프로세스로 초점을 옮겨본다. 공격자의 관점에서 부트 프로세스의 각 단계들인 MBR, VBR, 파티션 테이블 및 boogmgr을 세밀하게 분석해 보고, 특히 UEFI 펌웨어의 구조와 취약점에 집중해 본다. 마지막으로 3부에서는 BIOS와 펌웨어를 대상으로 하는 고전적인 OS 루트킷 공격과 새로운 부트킷 공격 모두에 대한 포렌식에 초점을 맞춘다.
추천의 글
“지능형 멀웨어를 밝혀내온 경력을 가진 전문가의 발자취를 따르라.”
— 로드리고 루비라 브랑코(Rodrigo Rubira Branco)
이 책에서 다루는 내용
◆ 32비트와 64비트, UEFI 모드에서의 윈도우 부팅 방법과 취약점을 찾을 수 있는 지점
◆ 시큐어 부트 같은 부트 프로세스 보안 메커니즘의 세부 정보와 가상화 보안 모드(VSM) 및 디바이스 가드의 개요
◆ Rovnix/Carberp, Gapz, TDL4 같은 부트킷과 TDL3, Festi 같은 악명 높은 루트킷을 포함해 실제 악성코드를 분석하기 위한 리버스 엔지니어링 및 포렌식 기술
◆ Bochs 및 IDA Pro 같은 에뮬레이션, 도구로 정적 및 동적 분석을 수행하는 방법
◆ BIOS 및 UEFI 펌웨어를 공격하는 위협 전파 단계를 이해해 탐지 기법 만들기
◆ VMware 워크스테이션 같은 가상화 도구를 사용해 부트킷을 리버스 엔지니어링하고 인텔 Chipsec 도구로 포렌식 분석하는 방법
이 책의 대상 독자
고도화된 지속적 멀웨어 위협이 OS 레벨 보안을 우회하는 방법을 궁금해하는 다양한 분야의 정보보호 연구원들을 위한 책이다. 다만 PC 멀웨어 분석가뿐만 아니라 더 넓은 독자까지 대상으로 목표를 잡았다. 임베디드 시스템 개발자와 클라우드 보안 전문가도 이 책이 유용하다는 것을 알게 되기를 바란다.
이 책의 구성
1부, ‘루트킷’에서는 전성기 때의 고전적인 OS 레벨 루트킷을 살펴본다.
1장, ‘루트킷에 들어있는 것: TDL3 사례 연구’에서는 과거 흥미로웠던 루트킷 중 하나를 이야기하면서 루트킷이 어떻게 동작하는지 살펴본다.
2장, ‘Festi 루트킷: 가장 진보된 스팸과 DDoS 봇’에서는 스팸 전송 및 DDoS 공격을 하고자 한때 가장 고도화된 은폐 기법을 사용했던 Festi 루트킷을 분석한다.
3장, ‘루트킷 감염 관찰’에서는 여정을 운영체제 커널의 깊은 곳으로 이끌어줄 것이다.
2부, ‘부트킷’에서는 부트킷의 진화와 진화를 촉발시킨 조건과 이런 위협을 리버스 엔지니어링하는 기술로 초점을 옮겨본다.
4장, ‘부트킷의 진화’에서는 부트킷의 출현과 발전을 이끈 진화 세력을 좀 더 깊이 알아본다.
5장, ‘운영체제 부트 프로세스’에서는 윈도우 부트 프로세스의 내부 동작과 이것이 그동안 어떻게 변해 왔는지를 다룬다.
6장, ‘부트 프로세스 보안’에서는 조기 실행 안티멀웨어(ELAM, Early Launch Anti-Malware) 모듈, 커널 모드 코드 서명 정책과 이것의 취약점, 새로운 가상화 기반 보안 같은 윈도우 부팅 프로세스 방어 기술을 알아본다.
7장, ‘부트킷 감염 기법’에서는 부트 섹터를 감염시키는 방법을 세밀하게 조사하고 이런 방법들이 시간이 지남에 따라 어떻게 진화해왔는지 살펴본다.
8장, ‘IDA Pro를 이용한 부트킷 정적 분석’에서는 부트킷 감염에 대한 정적 분석을 하기 위한 방법과 도구를 다룬다.
9장, ‘부트킷 동적 분석: 에뮬레이션과 가상화’에서는 Bochs 에뮬레이터와 VMWare의 내장 GDB 디버거를 이용한 동적 분석 방법에 초점을 맞춘다.
10장, ‘MBR과 VBR 감염 기법의 발전: Olmasco’에서는 부트킷을 부트 프로세스의 더 낮은 레벨까지 내려가게 해줬던 은폐 기법의 진화를 추적해본다.
11장, ‘IPL 부트킷: Rovnix와 Carberp’에서는 온라인 뱅킹을 공격했던 가장 복잡한 두 개의 루트킷인 Rovnix와 Carberp의 내부를 살펴본다.
12장, ‘Gapz: 진보된 VBR 감염’에서는 부트킷 은폐 기법 진화의 정점에 올랐던 Gapz 루트킷를 알아본다.
13장, ‘MBR 랜섬웨어의 부상’에서는 부트킷이 어떻게 랜섬웨어 위협으로 되돌아왔는지 살펴본다.
14장, ‘UEFI 부팅과 MBR/VBR 부트 프로세스’에서는 최신 멀웨어의 진화를 밝혀내는 데 필수 정보인 UEFI BIOS 설계에서의 부트 프로세스를 알아본다.
15장, ‘최신 UEFI 부트킷’에서는 다양한 BIOS 임플란트에 대해 우리가 진행하던 연구를 다룬다. 개념 증명했던 것들과 실제로 세상에 퍼졌던 것들을 모두 설명한다.
16장, ‘UEFI 펌웨어 취약점’에서는 BIOS 임플란트의 도입을 가능하게 했던 다양한 종류의 최신 BIOS 취약점을 심도 있게 살펴본다.
3부, ‘방어와 포렌식 기법’에서는 부트킷, 루트킷과 기타 BIOS 위협의 포렌식을 다룬다.
17장, ‘UEFI 시큐어 부트 동작 방식’에서는 시큐어 부트 기술의 작동 방법과 발전, 취약점 및 효과를 깊이 있게 살펴본다.
18장, ‘숨겨진 파일 시스템 분석 접근 방식’에서는 멀웨어가 사용하는 숨겨진 파일 시스템을 간략히 살펴보고 탐지하는 방법을 설명한다.
19장, ‘BIOS/UEFI 포렌식: 펌웨어 수집과 분석 접근 방법’에서는 최첨단 위협을 탐지하는 접근법들을 살펴본다.
목차
목차
- 1부. 루트킷
- 1장. 루트킷에 들어있는 것: TDL3 사례 연구
- TDL3 전파의 역사
- 감염 루틴
- 데이터 흐름 제어
- 자체 링커 도입
- TDL3의 커널 모드 후킹이 동작하는 방식
- 숨겨진 파일 시스템
- 결론: TDL3 천적을 만나다
- 2장. Festi 루트킷: 가장 진보된 스팸과 DDoS 봇
- Festi 봇넷 사례
- 루트킷 드라이버 상세 분석
- C&C 통신에 대한 Festi 설정 정보
- Festi의 객체지향 프레임워크
- 플러그인 관리
- 내장 플러그인
- 가상 머신 방어 기법
- 안티디버깅 기법
- 디스크에서 악성 드라이버를 숨기는 방법
- Festi 레지스트리 키를 보호하는 방법
- Festi 네트워크 통신 프로토콜
- 초기화 단계
- 작업 단계
- 보안 및 포렌식 소프트웨어 우회
- C&C 중단에 대비한 도메인 생성 알고리듬
- 악성 기능
- 스팸 모듈
- DDoS 엔진
- Festi 프록시 플러그인
- 결론
- 3장. 루트킷 감염 관찰
- 가로채기 기법
- 시스템 이벤트 가로채기
- 시스템 콜 가로채기
- 파일 동작 가로채기
- 객체 디스패처 가로채기
- 시스템 커널 복원
- 위대한 루트킷들의 기술 경쟁: 추억의 노트
- 결론
- 가로채기 기법
- 2부. 부트킷
- 4장. 부트킷의 진화
- 최초의 부트킷
- 부트 섹터 감염자
- 엘크 클로너와 Load Runner
- 브레인 바이러스
- 부트킷의 진화
- BSI 시대의 끝
- 커널 모드 코드 서명 정책
- 시큐어 부트의 부상
- 최신 부트킷
- 결론
- 최초의 부트킷
- 5장. 운영체제 부트 프로세스
- 윈도우 부트 프로세스의 상위 레벨 개요
- 레거시 부트 프로세스
- 윈도우 부트 프로세스
- BIOS와 사전 부트 환경
- 마스터 부트 레코드
- 볼륨 부트 레코드와 초기 프로그램 로더
- bootmgr 모듈과 부트 설정 데이터
- 결론
- 6장. 부트 프로세스 보안
- 조기 실행 안티멀웨어 모듈
- API 콜백 함수
- 부트킷이 ELAM을 우회하는 방법
- 마이크로소프트 커널 모드 코드 서명 정책
- 무결성 검사 대상 커널 모드 드라이버
- 드라이버 서명의 위치
- 기존 코드 무결성의 약점
- ci.dll 모듈
- 방어를 위한 윈도우 8 변경 사항
- 시큐어 부트 기술
- 윈도우 10의 가상화 기반 보안
- 2단계 주소 변환
- 가상화 보안 모드와 디바이스 가드
- 드라이버 개발에 대한 디바이스 가드 제약
- 결론
- 조기 실행 안티멀웨어 모듈
- 7장. 부트킷 감염 기법
- MBR 감염 기법
- MBR 코드 변조: TDL4 감염 기법
- MBR 파티션 테이블 수정
- VBR/IPL 감염 기술
- IPL 변조: Rovnix
- VBR 감염: Gapz
- 결론
- MBR 감염 기법
- 8장. IDA Pro를 이용한 부트킷 정적 분석
- Bootkit MBR 분석
- MBR 로드와 복호화
- BIOS 디스크 서비스 분석
- 감염된 MBR의 파티션 테이블 분석
- VBR 분석 기법
- IPL 분석
- 다른 부트킷 컴포넌트 평가
- 고급 IDA Pro 사용법: 사용자 정의 MBR 로더 작성
- loader.hpp 이해
- accept_file 구현
- load_file 구현
- 파티션 테이블 구조체 생성
- 결론
- 연습문제
- Bootkit MBR 분석
- 9장. 부트킷 동적 분석: 에뮬레이션과 가상화
- Bochs를 이용한 에뮬레이션
- Bochs 설치
- Bochs 환경 구축
- 디스크 이미지 감염
- Bochs 내장 디버거 사용
- Bochs와 IDA의 연동
- VMware 워크스테이션을 통한 가상화
- VMware Workstation 설정
- VMware GDB와 IDA의 조합
- 마이크로소프트 하이퍼-V와 오라클 VirtualBox
- 결론
- 연습문제
- Bochs를 이용한 에뮬레이션
- 10장. MBR과 VBR 감염 기법의 발전: Okmasco
- 드로퍼
- 드로퍼의 리소스
- 향후 개발을 위한 추적 기능
- 안티디버깅 방지와 안티에뮬레이션 기법
- 부트킷 기능
- 부트킷 감염 기술
- 감염된 시스템의 부트 프로세스
- 루트킷 기능
- 하드 드라이브 디바이스 객체 후킹과 페이로드 인젝션
- 숨겨진 파일 시스템 유지 관리
- 네트워크 우회 통신을 위한 전송 계층 드라이버 인터페이스 구현
- 결론
- 드로퍼
- 11장. IPL 부트킷: Rovnix와 Carberp
- Rovnix의 발전
- 부트킷 아키텍처
- 시스템 감염
- 감염 후 부트 프로세스와 IPL
- 다형성 복호화 코드 구현
- VMware와 IDA Pro로 Rovnix 부트로더 복호화
- 윈도우 부트로더 패치를 통한 제어권 획득
- 악성 커널 모드 드라이버 로드
- 커널 모드 드라이버의 기능
- 페이로드 모듈 인젝션
- 은폐형 자기 방어 메커니즘
- 숨겨진 파일 시스템
- 파티션을 가상 FAT 시스템으로 포맷
- 숨겨진 파일 시스템 암호화
- 숨겨진 파일 시스템 접근
- 숨겨진 통신 채널
- 사례 연구: Carberp와의 관계
- Carberp의 개발
- Dropper의 개선
- 유출된 소스코드
- 결론
- Gapz 드로퍼
- 드로퍼 알고리듬
- 드로퍼 분석
- HIPS 우회
- Gapz 부트킷으로 시스템 감염
- BIOS 파라미터 블록 검토
- VBR 감염
- 악성 커널 모드 드라이버 로드
- Gapz 루트킷 기능
- 숨겨진 스토리지
- 멀웨어 방지 소프트웨어에 대한 자기 방어
- 페이로드 인젝션
- 페이로드 통신 인터페이스
- 자체 네트워크 프로토콜 스택
- 결론
- 랜섬웨어의 간략한 역사
- 부트킷 기능이 있는 랜섬웨어
- 랜섬웨어 동작 방식
- Petya 랜섬웨어 분석
- 관리자 권한 획득
- 하드 드라이브 감염(1단계)
- 악성 부트로더 설정 데이터 암호화
- 시스템 크래시
- MFT 암호화(2단계)
- 마무리: Petya에 대한 최종 고찰
- Satana 랜섬웨어 분석
- Satana 드로퍼
- MBR 감염
- 드로퍼 디버그 정보
- Satana 악성 MBR
- 마무리: Satana에 대한 최종 생각
- 결론
- 통합된 확장 가능 펌웨어 인터페이스
- 레거시 BIOS와 UEFI 부트 프로세스의 차이점
- 부트 프로세스 흐름
- 디스크 파티셔닝: MBR과 GPT
- 기타 차이점
- GUID 파티션 테이블 규격
- UEFI 펌웨어 동작 방식
- UEFI 규격
- 운영체제 로더 내부
- 윈도우 부트로더
- UEFI 펌웨어의 보안 이점
- 결론
- BIOS 위협의 역사
- WinCIH, BIOS를 공격하는 최초의 멀웨어
- Mebromi
- 기타 위협과 대응
- 모든 하드웨어에 있는 펌웨어
- UEFI 펌웨어 취약점
- 메모리 보호 비트의 효과
- 보호 비트 확인
- BIOS를 감염시키는 방법
- 서명되지 않은 UEFI 옵션 ROM 수정
- DXE 드라이버 추가나 수정
- 루트킷 인젝션의 이해
- 실제 UEFI 루트킷
- 해킹 팀의 Vector-EDK 루트킷
- 결론
- 펌웨어를 취약하게 만드는 것
- UEFI 펌웨어 취약점 분류
- 취약점 공격 이후
- 감염된 공급망 취약점
- 공급망 취약점 완화
- UEFI 펌웨어 보호의 역사
- BIOS 보호 동작 방식
- SPI 플래시 보호 및 취약성
- 인증되지 않은 BIOS 업데이트의 위험
- 시큐어 부트를 통한 BIOS 보호
- 인텔 부트 가드
- 인텔 부트 가드 기술
- 부트가드의 취약점
- SMM 모듈의 취약점
- SMM 이해
- SMI 핸들러 취약점 공격
- S3 부트 스크립트의 취약점
- S3 부트 스크립트 이해
- S3 부트 스크립트 취약점 공략
- S3 부트 스크립트 취약점 공격
- S3 부트 스크립트 취약점 수정
- 인텔 관리 엔진의 취약점
- ME 취약점의 역사
- ME 코드 공격
- 사례 연구: 인텔 AMT과 BMC에 대한 공격
- 결론
- 시큐어 부트란?
- UEFI 시큐어 부트의 세부 구현
- 부팅 절차
- 디지털 서명을 통한 실행 파일 인증
- db 데이터베이스
- dbx 데이터베이스
- 시간 기반 인증
- 시큐어 부트 키
- UEFI 시큐어 부트: 전체 그림
- 시큐어 부트 정책
- 시큐어 부트를 이용한 부트킷 방어
- 시큐어 부트 공격
- 시큐어 부트 비활성화를 위한 PI 펌웨어 패치
- 보안 검사를 우회하기 위한 UEFI 변수 수정
- 검증 부트와 계측 부트를 통한 시큐어 부트 보호
- 검증 부트
- 계측 부트
- 인텔 부트가드
- ACM 찾기
- FIT 분석
- 인텔 부트가드 설정
- ARM 신뢰 부트 보드
- ARM 신뢰 영역
- ARM 부트로더
- 신뢰 부트 흐름
- 검증 부트와 펌웨어 루트킷
- 결론
- 숨겨진 파일 시스템 개요
- 숨겨진 파일 시스템의 부트킷 데이터 추출
- 전원이 꺼진 시스템의 데이터 가져오기
- 동작 중인 시스템에서 데이터 읽기
- 미니포트 스토리지 드라이버 후킹
- 숨겨진 파일 시스템 이미지 파싱
- HiddenFsReader 도구
- 결론
- 포렌식 기술의 제약
- 펌웨어 포렌식이 중요한 이유
- 공급망 공격
- 펌웨어 취약점을 통한 BIOS 감염
- 펌웨어 수집의 이해
- 소프트웨어 방식의 펌웨어 수집
- PCI 설정 영역 레지스터 찾기
- SPI 설정 레지스터 주소 계산
- SPI 레지스터 사용
- SPI 플래시에서 데이터 읽기
- 소프트웨어 접근 방식의 단점 고려
- 펌웨어 수집에 대한 하드웨어 접근 방식
- 레노버 싱크패드 T540p 사례 연구 검토
- SPI 플래시 메모리칩 찾기
- FT2232 미니 모듈로 SPI 플래시 읽기
- UEFITool로 펌웨어 이미지 분석
- SPI 플래시 영역 알아보기
- UEFITool로 SPI 플래시 영역 살펴보기
- BIOS 영역 분석
- Chipsec으로 펌웨어 이미지 분석
- Chipsec 아키텍처 알아보기
- Chipsec 유틸로 펌웨어 분석
- 결론