책 소개
세트 구성: 전2권
1) 『해킹 맛보기: 화이트햇 해커를 꿈꾸는 이들을 위한 해킹 입문서』
2) 『(개정판) 해킹: 공격의 예술』
[부록 CD 1: 이 책에 담긴 라이브CD를 이용해 자신만의 공격을 해볼 수 있다]
『해킹 맛보기: 화이트햇 해커를 꿈꾸는 이들을 위한 해킹 입문서』 소개
해커 양성이 전 세계적인 이슈로 떠오르면서 해커에게 요구되는 정보와 기술의 양도 급격히 증가하고 있다. 세계적인 해킹대회인 데프콘에서 수상한 경력을 비롯해 여러 국내외 해킹대회에서 다수 우승하며 활약 중인 화이트햇 해커들이 집필한 이 책은 '해킹'과 '해커'를 둘러싼 다양한 지적 호기심을 충족시켜줄 것이다. 특히 해커를 꿈꾸는 이들이 꼭 알아야 할 필수 지식과 핵심 기술을 전달하는 데 초점을 맞췄다. 이 책은 해킹의 개요를 시작으로 웹 해킹, 리버스 엔지니어링, 시스템 해킹, 버그 헌팅, 디지털 포렌식, 취약점/해킹 마켓 등의 주제를 8개 장에 걸쳐 차례로 다룰 뿐 아니라, 건전한 보안의식 함양 등 화이트햇 해커의 기본을 전달하는 데에도 노력을 기울였다. 블랙햇 해커의 해킹 공격에 맞서고자 하는 미래의 화이트햇 해커들에게 이 책은 풍부한 설명과 예제가 담긴 유용한 입문서다.
이 책에서 다루는 내용
■ 해커의 의미, 해커 윤리, 해킹 학습 노하우, 합법적 해킹 실습 방법, 해커들의 축제
■ 구글 해킹, 파일 업로드, XSS, SQL 삽입 공격 및 대응 방법
■ 리버스 엔지니어링, 디버깅, 어셈블리, 코드 패치, 메모리 패치, 디컴파일
■ 명령어 삽입 공격, 레이스 컨디션 공격, 메모리 오염 공격, 버퍼 오버플로우
■ 데이터 삭제, 데이터 복구, 메모리 포렌식, 안티 포렌식
■ 취약점 마켓, 버그 바운티, 블랙마켓, 악성코드, 공격 툴
이 책의 대상 독자
■ 해킹과 보안 분야에 입문하려는 독자
■ 해킹과 보안 분야를 공부하고 있는 독자
■ 해킹과 보안 분야를 기술적 관점에서 이해하고 싶은 독자
『(개정판) 해킹: 공격의 예술』 소개
프로그래밍에서부터 공격 가능한 기계어 코드까지 해킹에 필요한 모든 것을 다룸으로써 해킹의 세계를 좀 더 쉽게 이해할 수 있도록 해킹의 예술과 과학을 설파한 책. 해킹을 공부하고 싶지만 어디서부터 시작해야 할지 모르는 초보 해커들에게 해킹의 진수를 알려주는 한편, 실제 코드와 해킹 기법, 동작 원리에 대한 설명이 가득한 간결하고 현실적인 해킹 가이드다. 기본적인 C 프로그래밍에서부터 기본 공격 기법, 네트워크 공격, 셸코드 공격과 그에 대한 대응책까지 해킹의 거의 모든 부분을 다룬다. .
소개
진정한 해킹을 위한 핵심 기술
해킹은 어려운 문제에 대한 새로운 해결책을 찾거나 조잡한 프로그램의 보안 취약점을 찾는 등의 창조적인 문제를 해결하는 예술이다. 많은 사람이 자신이 해커라고 생각하지만 최고의 해커가 되는 데 필요한 핵심 기술을 갖고 있는 사람은 거의 없다.
이 책의 저자 존 에릭슨은 현존하는 공격 기법의 실행을 단순히 보여주는 데 그치지 않고 비밀스러운 해킹 기법이 실제로 어떻게 동작하는지 설명한다. 해킹의 예술과 과학을 모두와 공유하기 위해, 이 책 『(개정판) 해킹: 공격의 예술』은 해커의 관점으로 C 프로그래밍의 핵심을 소개한다.
책에 포함된 라이브CD에는 리눅스 프로그래밍, 디버깅 환경이 완벽히 갖춰져 있다. 사용 중인 운영체제의 수정이나 변경 없이 사용할 수 있다. CD에 있는 예제를 따라 해보면서 해킹 기법을 자신의 것으로 만들 수 있을 것이다. 직접 코드를 디버깅해보고, 버퍼 오버플로우, 네트워크 통신 하이재킹, 보호기법 우회도 해보고, 암호학적 취약점을 공격하거나, 심지어 새로운 공격 기법을 개발해볼 수도 있다.
해커는 항상 앞으로 나아가야 하며, 미지의 것을 조사하고, 해커의 예술을 진화시켜야 한다. 프로그래밍을 잘 모르더라도, 『(개정판) 해킹: 공격의 예술』이 프로그래밍의 이해, 기계 아키텍처, 네트워크 통신 등의 현존하는 해킹 기법을 알려줄 것이다. 라이브CD의 리눅스 환경에서 책에서 배운 내용을 직접 실현해볼 수 있다. 이제, 창의력만 있으면 된다.
이 책에서 다루는 내용
■ C, 어셈블리, 셸 스크립트를 이용한 프로그래밍
■ 버퍼 오버플로우와 포맷 스트링을 이용해 임의 코드 실행을 위한 시스템 메모리 공격
■ 실제 동작의 이해를 위해 디버거를 이용한 프로세서 레지스터와 시스템 메모리 조사
■ 실행 불가능 스택과 침입 탐지 시스템 같은 똑똑한 보안 대응책
■ 포트 바인딩이나 커넥트백 셸 코드를 이용한 원격 서버 접근, 서버 로그를 바꿔 흔적 숨기기
■ 네트워크 트래픽 리다이렉트, 열린 포트 숨기기, TCP 연결 하이재킹
■ FMS 공격으로 암호화된 무선 트래픽 크랙, 비밀번호 확률 매트릭스를 이용한 빠른 전수 조사 공격
목차
목차
- 『해킹 맛보기: 화이트햇 해커를 꿈꾸는 이들을 위한 해킹 입문서』
- 1장 맛보기
- 1.1 개요
- 1.2 해커의 정확한 의미
- 1.3 해킹 입문 시 가장 중요한 것
- 1.4 해커의 공격 시나리오
- 1.5 해킹 학습 노하우
- 1.5.1 효과적인 해킹 학습 방법론
- 1.5.2 교류를 통한 배움
- 1.6 해킹 실습의 정석
- 1.6.1 워게임
- 1.6.2 해킹대회
- 1.6.3 가상 환경
- 1.6.4 허가된 시스템
- 1.7 해커들의 축제
- 1.7.1 컨퍼런스
- 1.7.2 이벤트
- 1.8 마치며
- 2장 웹 해킹
- 2.1 개요
- 2.2 사례
- 2.3 환경 구축
- 2.3.1 윈도우 환경에서의 APM 구축
- 2.3.2 툴 설치
- 2.4 구글 해킹
- 2.4.1 검색을 이용한 공격
- 2.4.2 구글 해킹 예제
- 2.4.3 구글 해킹 도구
- 2.4.4 방어 기법
- 2.5 파일 업로드
- 2.5.1 웹 쉘 제작
- 2.5.2 파일 업로드 취약점 공격
- 2.5.3 파일 업로드 우회 기법
- 2.5.4 파일 업로드 방어 기법
- 2.6 크로스 사이트 스크립팅
- 2.6.1 크로스 사이트 스크립팅
- 2.6.2 쿠키 공격
- 2.6.3 크로스 사이트 스크립팅으로 가능한 것들
- 2.6.4 사이트 간 요청 위조 공격
- 2.6.5 방어 기법
- 2.7 데이터베이스 해킹
- 2.7.1 공격에 필요한 구문
- 2.7.2 공격
- 2.7.3 방어 기법
- 2.8 웹 해킹 음미하기
- 2.9 마치며
- 3장 리버스 엔지니어링
- 3.1 개요
- 3.2 사례
- 3.2.1 컴퓨터 원리와 구조 이해
- 3.2.2 프로그램 유지보수
- 3.2.3 개발에 활용
- 3.2.4 보안점검 및 취약점
- 3.2.5 악성코드 분석
- 3.3 환경 구축
- 3.3.1 Visual Studio Express
- 3.3.2 올리디버거
- 3.3.3 계산기
- 3.4 기초 지식
- 3.4.1 중앙연산처리장치
- 3.4.2 레지스터
- 3.4.3 메모리 구조
- 3.4.4 어셈블리어 vs. C 언어
- 3.4.5 컴파일, 디컴파일
- 3.4.6 바이트 오더
- 3.4.7 디버깅
- 3.5 한 줄 리버싱
- 3.5.1 지역 변수
- 3.5.2 전역 변수
- 3.5.3 구조체
- 3.5.4 if 리버싱
- 3.5.5 switch 리버싱
- 3.5.6 for 리버싱
- 3.5.7 while 리버싱
- 3.6 함수 리버싱
- 3.6.1 콜링 컨벤션
- 3.6.2 함수 호출 리턴값 확인
- 3.6.3 함수 프롤로그, 에필로그
- 3.6.4 지역 변수, 전역 변수, 포인터
- 3.7 패치
- 3.7.1 원하는 코드 위치 찾기
- 3.7.2 메모리 패치
- 3.7.3 코드 패치
- 3.7.4 파일 저장
- 3.8 실전
- 3.8.1 비밀번호
- 3.8.2 시리얼
- 3.8.3 네트워크 통신
- 3.9 리버스 엔지니어링 음미하기
- 3.10 마치며
- 4장 시스템 해킹
- 4.1 개요
- 4.2 사례
- 4.3 시스템 해킹 기법의 목표
- 4.4 환경 구축
- 4.4.1 파이썬
- 4.5 명령어 삽입 공격
- 4.5.1. 개요
- 4.5.2 명령어 처리기
- 4.6.3 명령어 삽입 공격
- 4.5.4 명령어 삽입 취약점이 발생하는 패턴
- 4.5.5 명령어 삽입 공격에 사용되는 명령어 처리기 연산자
- 4.6 레이스 컨디션
- 4.6.1 개요
- 4.6.2 레이스 컨디션 취약점
- 4.7 메모리 오염 공격
- 4.7.1 메모리 오염 공격
- 4.7.2 버퍼 오버플로우 공격
- 4.7.3. 형식 문자열
- 4.7.4 정수 오버플로우/언더플로우 공격
- 4.8 실전
- 4.8.1 크래시 발생시키기
- 4.8.2 EIP 덮어쓰기
- 4.9 시스템 해킹 음미하기
- 4.10 마치며
- 5장 버그 헌팅
- 5.1 개요
- 5.2 취약점을 찾는 방법
- 5.2.1 소스 코드 감사
- 5.2.2 바이너리 감사
- 5.2.3 퍼징
- 5.3 취약점의 종류
- 5.3.1 메모리 오염
- 5.3.2 설계
- 5.4 웹에서의 버그 헌팅
- 5.4.1 제로보드 XE 원격 코드 실행 1
- 5.4.2 제로보드 XE 원격 코드 실행 2
- 5.5 안드로이드에서 버그 헌팅
- 5.5.1 애플리케이션 권한 상승 취약점
- 5.6 윈도우 소프트웨어에서 버그 헌팅
- 5.6.1 곰플레이어 원격 코드 실행 취약점
- 5.6.2 한글 원격 코드 실행 취약점
- 5.7 버그 헌팅 음미하기
- 5.8 마치며
- 6장 디지털 포렌식
- 6.1 개요
- 6.2 사례
- 6.3 환경 구축
- 6.4 파일 삭제 복구
- 6.4.1 실습 파일 생성 및 기본 구조 확인
- 6.4.2 파일 삭제
- 6.4.3 파일 카빙
- 6.5 메모리 포렌식
- 6.5.1 메모리 포렌식 기초 지식
- 6.5.2 메모리 덤프
- 6.5.3 메모리 분석
- 6.6 안티 포렌식
- 6.6.1 안티 포렌식 기본 개념
- 6.6.2 스테가노그래피
- 6.6.3 데이터 완전 삭제
- 6.7 실전
- 6.7.1 디지털 포렌식 챌린지
- 6.7.2 국제 해킹대회 포렌식 문제
- 6.8 디지털 포렌식 음미하기
- 6.9 마치며
- 7장 취약점 마켓
- 7.1 개요
- 7.2 사례
- 7.3 환경 구축
- 7.4 취약점 시장
- 7.4.1 ZDI
- 7.4.2 iDefense
- 7.5 취약점 보상 프로그램
- 7.5.1 구글
- 7.5.2 페이스북
- 7.5.3 트위터
- 7.5.4 삼성전자
- 7.5.5 마이크로소프트
- 7.5.6 국가기관
- 7.6 마치며
- 8장 해킹 마켓
- 8.1 개요
- 8.2 블랙마켓
- 8.2.1 구조
- 8.2.2 가입
- 8.2.3 다양한 공격 툴
- 8.2.4 튜토리얼
- 8.2.5 마켓
- 8.2.6 거래 상품
- 8.3 마켓 거래
- 8.4 마치며
- 『(개정판) 해킹: 공격의 예술』
- 0x100장 들어가며
- 0x200장 프로그래밍
- __0x210 프로그래밍이란?
- __0x220 가상 코드
- __0x230 제어 구조
- ____0x231 If-Then-Else
- ____0x232 While/Until 루프
- ____0x233 For 루프
- __0x240 기본적인 프로그래밍 개념
- ____0x241 변수
- ____0x242 산술 연산자
- ____0x243 비교 연산자
- ____0x244 함수
- __0x250 직접 해보기
- ____0x251 큰 그림 이해하기
- ____0x252 x86 프로세서
- ____0x253 어셈블리 언어
- __0x260 기본으로 돌아가기
- ____0x261 문자열
- ____0x262 Signed, Unsigned, Long, Short
- ____0x263 포인터
- ____0x264 형식 문자열
- ____0x265 형 변환
- ____0x266 커맨드라인 인자
- ____0x267 변수 범위
- __0x270 메모리 세그먼트
- ____0x271 C에서의 메모리 세그먼트
- ____0x272 힙 사용하기
- ____0x273 오류 확인된 malloc()
- __0x280 기초 쌓기
- ____0x281 파일 접근
- ____0x282 파일 권한
- ____0x283 사용자 ID
- ____0x284 구조체
- ____0x285 함수 포인터
- ____0x286 가상 난수
- ____0x287 확률 게임
- 0x300장 공격
- __0x310 일반 공격 기법
- __0x320 버퍼 오버플로우
- ____0x321 스택 기반 버퍼 오버플로우의 취약점
- __0x330 BASH 셸로 해킹하기
- ____0x331 환경 변수 이용하기
- __0x340 기타 세그먼트 오버플로우
- ____0x341 힙 기반 오버플로우
- ____0x342 함수 포인터 오버플로우
- __0x350 포맷 스트링
- ____0x351 포맷 인자
- ____0x352 포맷 스트링 취약점
- ____0x353 임의의 메모리 주소에서 읽기
- ____0x354 임의의 메모리 주소에 쓰기
- ____0x355 인자에 직접 접근
- ____0x356 쇼트 쓰기 기법
- ____0x357 소멸자를 이용한 우회법
- ____0x358 노트 검색 프로그램의 취약점
- ____0x359 전역 오프셋 테이블 덮어쓰기
- 0x400장 네트워킹
- __0x410 OSI 모델
- __0x420 소켓
- ____0x421 소켓 함수
- ____0x422 소켓 주소
- ____0x423 네트워크 바이트 순서
- ____0x424 인터넷 주소 변환
- ____0x425 간단한 서버 예제
- ____0x426 웹 클라이언트 예제
- ____0x427 작은 웹서버
- __0x430 하위 계층 해부
- ____0x431 데이터링크 계층
- ____0x432 네트워크 계층
- ____0x433 전송 계층
- __0x440 네트워크 스니핑
- ____0x441 로 소켓 스니퍼
- ____0x442 libpcap 스니퍼
- ____0x443 계층 해독
- ____0x444 능동 스니핑
- __0x450 서비스 거부
- ____0x451 SYN 홍수
- ____0x452 죽음의 핑
- ____0x453 티어드랍
- ____0x454 핑 홍수
- ____0x455 증폭 공격
- ____0x456 분산 DoS 홍수
- __0x460 TCP/IP 하이재킹
- ____0x461 RST 하이재킹
- ____0x462 지속되는 하이재킹
- __0x470 포트 스캐닝
- ____0x471 스텔스 SYN 스캔
- ____0x472 FIN, X-mas, Null 스캔
- ____0x473 가짜 스캔 패킷 이용
- ____0x474 유휴 스캐닝
- ____0x475 사전 방어(가리개)
- __0x480 네트워크 건너 해킹하기
- ____0x481 GDB로 분석하기
- ____0x482 tinyweb 공격해보기
- ____0x483 포트 바인딩 셸코드
- 0x500장 셸코드
- __0x510 어셈블리와 C
- ____0x511 어셈블리 리눅스 시스템 콜
- __0x520 셸코드로 가는 길
- ____0x521 스택을 사용한 어셈블리 명령
- ____0x522 GDB로 조사
- ____0x523 널 바이트 제거
- __0x530 셸을 생성하는 셸코드
- ____0x531 권한 문제
- ____0x532 셸코드 좀 더 작게 만들기
- __0x540 포트 바인딩 셸코드
- ____0x541 표준 파일 서술자 복제
- ____0x542 분기 제어 구조
- __0x550 커넥트 백 셸코드
- 0x600장 대응책
- __0x610 탐지 대응책
- __0x620 시스템 데몬
- ____0x621 시그널
- ____0x622 tinyweb 데몬
- __0x630 주요 툴
- ____0x631 tinywebd 공격 툴
- __0x640 로그 파일
- ____0x641 군중 속에 숨기
- __0x650 보지 못하고 지나치기
- ____0x651 한 번에 하나씩
- ____0x652 원래대로 만들기
- ____0x653 자식 프로세스 호출
- __0x660 고급 위장법
- ____0x661 로그의 IP 주소 스푸핑
- ____0x662 로그없는 공격
- __0x670 전체 기반 시스템
- ____0x671 소켓 재사용
- __0x680 페이로드 은닉
- ____0x681 문자열 인코딩
- ____0x682 썰매 숨기는 방법
- __0x690 버퍼 제한
- ____0x691 다형의 출력 가능한 ASCII 셸코드
- __0x6a0 대응책 보강
- __0x6b0 실행 불가능 스택
- ____0x6b1 ret2libc
- ____0x6b2 system()으로 리턴
- __0x6c0 임의 스택 공간
- ____0x6c1 BASH와 GDB로 조사
- ____0x6c2 linux-gate 이용기
- ____0x6c3 응용 지식
- ____0x6c4 첫 번째 시도
- ____0x6c5 도박하기
- 0x700장 암호학
- __0x710 정보 이론
- ____0x711 절대적 보안
- ____0x712 원타임 패드
- ____0x713 양자 키 분배
- ____0x714 계산 불능 보안
- __0x720 알고리즘 실행 시간
- ____0x721 점근 표기법
- __0x730 대칭 암호 방식
- ____0x731 러브 그로버의 양자 검색 알고리즘
- __0x740 비대칭 암호화
- ____0x741 RSA
- ____0x742 피터 쇼어의 양자 인수분해 알고리즘
- __0x750 혼성 암호
- ____0x751 맨 인 더 미들 공격
- ____0x752 SSH 프로토콜 호스트 핑거프린트 버전 이용
- ____0x753 퍼지 핑거프린트
- __0x760 비밀번호 크래킹
- ____0x761 사전 공격
- ____0x762 전수 조사 공격
- ____0x763 해시 룩업 테이블
- ____0x764 비밀번호 확률 행렬
- __0x770 무선 802.11b 암호화
- ____0x771 WEP
- ____0x772 RC4 스트림 암호 방식
- __0x780 WEP 공격
- ____0x781 오프라인 전수 조사 공격
- ____0x782 키스트림 재사용
- ____0x783 IV 기반 복호화 사전 테이블
- ____0x784 IP 리다이렉션
- ____0x785 Fluhrer, Mantin, Shamir 공격
- 0x800장 결론
- __0x810 참고 문헌