CodeEngn Logo

Book


국내 리버스엔지니어링 관련 서적을 쉬어가기, 초급, 중급, 고급으로 분류 하였습니다.

추가 및 변경 신청은 Contact 메뉴에서 요청 해주세요.



루트킷 : 윈도우 커널 조작의 미학


정보

저자 : 그렉 호글런드,제임스 버틀러 저/윤근용 역
출판사 : 에이콘
출간일 : 2007년 11월 30일
페이지 : 360
ISBN-13 : 9788960770256
ISBN-10 : 8960770256
정가 : 33,000원


책소개

루트킷은 해커들이 공격하고자 하는 시스템에 지속적이면서 탐지되지 않은 채로 교묘히 접근할 수 있는 최고의 백도어라고 할 수 있다. 루트킷에 관한 최고의 전문가 두 명이 최초로 종합적인 루트킷 가이드를 집필했다. 루트킷이 무엇이고 어떻게 작동하며 제작하는지, 어떻게 루트킷을 탐지하는지 등에 대해 차례로 설명한다.


저자소개

저자 : 그렉 호글런드

소프트웨어 보안 분야의 개척자 역할을 수행해 왔다. 그는 현재 소프트웨어 보안 검증 서비스를 선도적으로 제공하는 기업인 HBGray 사의 CEO이다. 그렉은 최초의 네트워크 보안 취약점 스캐너(포춘 500대 기업의 절반 이상에 설치되었다) 중 하나를 제작한 후 최초의 윈도우NT 기반 루트킷을 작성하고 그것을 문서화했다. 또한 블랙 햇, RSA와 그 밖의 보안 컨퍼런스의 단골 발표자로도 활동하고 있고, 베스트셀러인 『Exploiting Software: How to Break Code』(Addison-Wesley, 2004)의 공동 저자이기도 하다.

저자 : 제임스 버틀러

HBGray의 기술 이사인 제임스 버틀러는 커널 프로그래밍과 루트킷 개발 분야의 최고 전문가 중 한명으로 손꼽히며, 호스트 기반 침입 탐지 시스템에 대한 폭넓은 경험을 갖췄다. 루트킷 탐지와 포렌식 시스템을 위한 VICE 프로그램의 개발자로, 과거 Enterasys의 보안 소프트웨어 선임 엔지니어 및 미국국가안전보장국의 컴퓨터 과학자로 재직한 바 있다. 또한 블랙 햇 보안 컨퍼런스의 단골 발표자이자 트레이너이며 매릴랜드 볼티모어 카운티 대학에서 컴퓨터공학 석사 학위를 취득했다. 그의 논문으로는 ‘IEEE Information Assurance Workshop’, ‘Phrack, USENIX ;login:’, ‘Information Management and Computer Security’ 등이 있다.

역자 : 윤근용

시스템 프로그래머로서 시스템에 대한 다양한 분야에 관심이 많으며 특히 보안 분야에 대한 관심이 높아 다년간 보안 업무에 종사하고 있다. 바이러스 보안 업체를 거쳐 현재는 NHN에서 보안 관련 프로젝트를 수행하고 있다. 역서로는 『웹 애플리케이션 해킹 대작전』(에이콘출판, 2007), 『실전해킹 절대내공』(에이콘출판, 2007)이 있다.


목차

1장 흔적을 남기지 말라 ... 23
공격자의 동기 이해 ... 24
은닉의 역할 ... 24
은닉이 필요 없는 경우 ... 25
루트킷이란? ... 26
왜 루트킷이 존재하는가? ... 26
원격 명령 실행과 제어 ... 27
소프트웨어 감청 ... 27
루트킷의 합법적인 이용 ... 28
루트킷의 역사 ... 29
루트킷은 어떻게 동작하는가? ... 30
패치 ... 30
이스터 에그 ... 31
스파이웨어 ... 31
소스 코드 조작 ... 31
소프트웨어 변경의 합법성 ... 32
무엇이 루트킷이 아닌가? ... 32
루트킷은 공격툴이 아니다 ... 33
루트킷은 바이러스가 아니다 ... 34
루트킷과 소프트웨어 공격 ... 35
왜 공격 코드가 여전히 문제인가? ... 37
공격을 위한 루트킷 기술 ... 38
HIPS ... 38
NIDS ... 39
IDS/IPS 우회하기 ... 40
포렌식 툴 우회하기 ... 40
결론 ... 41

2장 커널 조작 ... 43
커널의 중요 요소 ... 44
루트킷 설계 ... 45
커널 레벨 코드 소개 ... 48
윈도우 디바이스 드라이버 개발 ... 49
Device Driver Development Kit ... 49
빌드 환경 ... 50
파일 ... 50
Build 툴 ... 52
언로드 루틴 ... 53
드라이버 로드, 언로드 ... 54
디버그 메시지 로그하기 ... 54
유저 모드와 커널 모드 요소를 모두 포함하는 루트킷 ... 55
IPR ... 56
파일 핸들 생성 ... 60
심볼릭 링크 추가 ... 61
루트킷 로딩 ... 63
드라이버 로드를 위한 비정상적인 방법 ... 63
드라이버 로드를 위한 정상적인 방법 ... 65
리소스에서 .sys 파일 추출하기 ... 67
재부팅시 자동 시작 ... 69
결론 ... 71

3장 하드웨어 레벨의 지식 ... 73
링 제로 ... 74
테이블, 테이블 그리고 또 테이블 ... 76
메모리 페이지 ... 77
메모리 접근 검사 ... 78
페이징과 주소 변환 ... 79
페이지 테이블 ... 81
페이지-디렉토리 엔트리 ... 83
페이지-테이블 엔트리 ... 83
페이지 테이블의 읽기 전용 속성 ... 84
멀티 프로세스와 멀티 페이지 디렉토리 ... 84
프로세스와 스레드 ... 85
메모리 디스크립터 테이블 ... 86
글로벌 디스크립터 테이블 ... 87
로컬 디스크립터 테이블 ... 87
코드 세그먼트 ... 87
콜 게이트 ... 87
인터럽트 디스크립터 테이블 ... 88
다른 형태의 게이트 ... 91
시스템 서비스 디스패치 테이블 ... 91
컨트롤 레지스터 ... 92
컨트롤 레지스터 0 ... 92
그 밖의 컨트롤러 레지스터들 ... 93
EFlags 레지스터 ... 93
멀티 프로세서 시스템 ... 93
결론 ... 95

4장 전통적인 후킹 기술 ... 97
애플리케이션 레벨의 후킹 ... 97
임포트 어드레스 테이블 후킹 ... 99
인라인 함수 후킹 ... 100
사용자 프로세스 영역으로 DLL 인젝션하기 ... 103
커널 후킹 ... 108
시스템 서비스 디스크립터 테이블 후킹 ... 109
인터럽트 디스크립터 테이블 후킹 ... 118
디바이스 드라이버 오브젝트의 Major Function 후킹 ... 123
하이브리드 후킹 ... 133
프로세스의 주소 공간으로 진입하기 ... 134
후킹을 위한 메모리 공간 ... 138
결론 ... 140

5장 런타임 패치 ... 141
우회 패치 ... 142
MigBot을 이용한 실행 흐름 변경 ... 143
함수의 바이트 코드 검사 ... 145
원래의 명령어 바이트 ... 146
NonPagedPool 메모리 이용 ... 149
런타임 주소 결정 ... 149
점프 템플릿 ... 153
인터럽트 후킹 예제 ... 154
기타 유사한 방법들 ... 161
결론 ... 162

6장 계층 드라이버 ... 163
키보드 스니퍼 ... 164
IRP와 스택 로케이션 ... 166
KLOG 루트킷 ... 169
파일 필터 드라이버 ... 183
결론 ... 197

7장 커널 오브젝트 직접 변경 ... 199
DKOM의 장점과 단점 ... 200
운영체제 버전 판단하기 ... 202
유저 모드에서 운영체제 버전 판단 ... 202
커널 모드에서 운영체제 버전 판단 ... 204
레지스트리를 이용한 운영체제 버전 판단 ... 204
유저 모드 프로세스에서 디바이스 드라이버로의 통신 ... 206
DKOM을 이용한 은닉 ... 210
프로세스 은닉 ... 210
디바이스 드라이버 은닉 ... 216
동기화 이슈 ... 220
DKOM을 이용한 토큰의 권한과 그룹 변경 ... 224
프로세스 토큰 변경 ... 225
윈도우 이벤트 뷰어 속이기 ... 239
결론 ... 241

8장 하드웨어 조작 ... 243
왜 하드웨어인가? ... 245
펌웨어 변경 ... 246
하드웨어 접근 ... 247
하드웨어 주소 지정 ... 247
하드웨어 접근은 RAM에 접근하는 것과 다르다 ... 248
타이밍 ... 249
I/O 버스 ... 249
BIOS에 접근 ... 251
PCI, PCMCIA 디바이스 접근 ... 252
예 : 키보드 컨트롤러 접근 ... 252
8259 키보드 컨트롤러 ... 253
키보드 LED 변경 ... 253
하드 리부팅 ... 260
키보드 모니터링 ... 260
마이크로코드 업데이트 ... 267
결론 ... 268

9장 은닉 채널 ... 269
원격 명령 및 제어 그리고 데이터 빼내기 ... 270
TCP/IP 프로토콜 위장 ... 271
트래픽 패턴의 인지 ... 272
데이터를 있는 그대로 전송하지 말라 ... 273
시간을 이용하라 ... 274
DNS 패킷 안에 숨겨라 ... 274
아스키 문자 숨기기 ... 274
다른 TCP/IP 채널 이용 ... 275
TDI를 이용한 루트킷 ... 276
어드레스 스트럭처 생성 ... 277
로컬 어드레스 오브젝트 생성 ... 279
TDI 엔드 포인트 생성 ... 283
엔드 포인트와 로컬 어드레스 연결 ... 286
리모트 서버로 연결 - TCP 핸드쉐이크 전송 ... 288
리모트 서버로 데이터 전송 ... 290
네트워크 패킷 변경 ... 293
윈도우XP에서의 로우 소켓 구현 ... 293
인터페이스에 바인딩 ... 294
로우 소켓 스니핑 ... 295
로우 소켓을 이용한 무차별적인 스니핑 ... 296
로우 소켓을 이용한 패킷 전송 ... 297
소스 포트, 주소 위조 ... 297
바운싱 패킷 ... 298
NDIS를 이용한 루트킷 ... 299
프로토콜 등록 ... 299
프로토콜 드라이버 콜백 ... 304
패킷 전체 이동 ... 309
호스트 에뮬레이션 ... 317
자체 MAC 주소 생성 ... 317
ARP 처리 ... 317
IP 게이트웨이 ... 320
패킷 전송 ... 320
결론 ... 325

10장 루트킷 탐지 ... 327
존재 탐지 ... 328
출입문 보호 ... 328
메모리 스캐닝 ... 331
후킹 탐지 ... 331
행동 탐지 ... 341
숨겨진 파일과 레지스트리 키 탐지 ... 341
숨겨진 프로세스 탐지 ... 342
결론 ... 345

Linode is a privately owned virtual private server provider based in Galloway, New Jerse