Top

소프트웨어 취약점 분석을 위한 리버싱과 보안 평가 (세트)

  • 지은이마크 다우드, 존 맥도날드, 저스틴 슈, 크리스 카스퍼스키, 엘다드 에일람
  • 옮긴이삼성SDS 정보보안연구회, 서준석, 윤근용
  • ISBN : 9788960775169
  • 124,000원
  • 2014년 01월 20일 펴냄
  • 페이퍼백 | 2,640쪽 | 188*250mm
  • 시리즈 : 해킹과 보안

책 소개

세트 구성: 전3권
『소프트웨어 보안 평가 The Art of Software Security Assessment』 소개

이 책은 소프트웨어 보안 감사에 대하여 이전까지 쓰여진 어떤 책보다 상세하고, 정교하고 유용한 가이드를 제공한다. 능력 있는 보안 컨설턴트이자 VPN 같은 애플리케이션의 알려지지 않은 취약점을 개인적으로 연구하는 저자들의 특별한 경험을 바탕으로, 감지하기 어렵고 잘 숨겨진 보안 취약점들을 처음부터 끝까지 밝혀내는 방법을 소개한다. 이 책에서는 유닉스/리눅스와 윈도우 환경 모두에 대한 소프트웨어 취약점에 대한 모든 범위를 다룸으로써 네트워크와 웹 소프트웨어를 포함한 모든 종류의 애플리케이션과 함수에 대한 보안감사를 할 수 있게 해준다. 또한 과거 산업 전반에서 이목을 끌었던 취약점에 대한 소스코드 사례를 이용해 기술을 가르쳐준다.

이 책에서 다루는 내용

■ 소스코드 감사: 이론, 실전, 방법론, 알려지지 않은 자료 교환
■ 보안 소프트웨어 디자인과 보안심사 간 불일치 조율
■ 구조 리뷰 수행
■ 메모리 관리, 데이터 타입, 비정상적인 데이터와 관련된 취약점 식별 방법
■ 유닉스/리눅스 평가: 권한, 파일 및 절차
■ 객체나 파일시스템을 포함한 윈도우 관련 이슈
■ 프로세스 간 통신, 동기화 및 상태 감사
■ 네트워크 소프트웨어 평가: IP 스택, 방화벽, 일반적인 애플리케이션 프로토콜
■ 웹 애플리케이션과 기술 감사

이 책의 대상 독자

이 책은 경험이 있는 개발자가 이해할 수 있게 작성됐다. 독자는 적어도 하나의 프로그래밍 언어에 능통해야 하며, 기본적인 C/C++ 프로그래밍에 익숙해야 한다. 이 책의 여러 단계에 걸쳐 인텔 어셈블리 언어가 사례로 사용됐지만, 최소한으로 사용했으며 최대한 C코드와 비슷하게 옮기려고 노력했다. 가장 일반적인 운영체제와 자주 사용되는 플랫폼을 사용했고, 최대한 플랫폼에 제약을 받지 않은 일반적인 내용을 포함하게 최선을 다해 만들었다. 필요에 따라 이 책에서 다루지 않는 배경 지식을 제공하기 위해 추가적인 리소스를 참조했다.

『해킹의 꽃 디스어셈블링 Hacker Disassembling Uncovered』 소개

이 책은 고급 해커의 필수 능력인 디스어셈블링 기법을 집중적으로 다룬다. 분석에 필요한 기본 도구와 어셈블리어 분석을 시작으로 각종 보안 메커니즘을 우회할 수 있는 방법을 설명한다. 디버깅, 디스어셈블링에 대한 기본 지식부터 커널 분석, 고급 패치 기술 등 분석 과정에서 마주칠 수 있는 깊이 있는 주제들을 다양한 관점과 예제를 통해 학습할 수 있는 훌륭한 분석 길잡이가 되어 줄 것이다. .

이 책에서 다루는 내용

디스어셈블이 필요한 상황, 특정 언어 구조체를 분석하기 위한 시작점, 보호 메커니즘 개발자가 숨겨 놓은 트랩에 빠지지 않고 수백 메가에 육박하는 코드 밀림에서 길을 잃지 않는 방법을 알려주는 책이다. 특히 이 개정2판에서는 실제 디스어셈블링 기법에 관련된 내용이 추가됐다. 특히 메모리 덤프 분석, 합법적인 소프트웨어 보호 메커니즘, 악성 프로그램 관련 내용이 새로운 단원으로 추가됐다. 또한 관련 예제와 원리들은 최신 동향에 맞춰 수정했다. 안티디버깅 기법 우회, 패킹, 암호화, 다형성, 간단한 난독화 코드 극복과 관련된 내용에 주안점을 두고 작성했다.

『리버싱』 소개

소프트웨어를 해부해서 설계와 구현 내용, 심지어 소스코드까지도 알아낼 수 있어서 최근 보안업계의 화두로 떠오른 리버싱. 복제방지기술 무력화와 상용보안대책 무력화로 무장한 해커들의 리버싱 공격 패턴을 파악하기 위한 최신 기술을 담은 해킹 보안 업계 종사자의 필독서. 소프트웨어의 약점을 찾아내 보완하고, 해커의 공격이나 악성코드를 무력화하며, 더 좋은 프로그램을 개발할 수 있도록 프로그램의 동작 원리를 이해하는 데도 효율적인 리버스 엔지니어링의 비밀을 파헤친다.

이 책에서 다루는 내용

■ IA-32 호환 프로세서용 컴파일러가 만든 어셈블리 언어 코드를 읽는 방법
■ 문서화되지 않은 파일 포맷이나 네트워크 프로토콜 해석
■ 리버스 엔지니어링이 합법인 경우와 불법인 경우, 그리고 불법일 때의 이유
■ 리버싱을 활용해 해커가 복사 방지 기술을 무력화하는 방법
■ 리버스 엔지니어링을 적용해 악성코드를 무력화하는 방법
■ 코드 리버싱을 막는 방어책과 효과적인 수행 방법
■ 닷넷 플랫폼 리버싱과 어셈블리 언어인 MSIL
■ 실제 악성코드 프로그램 분석 방법
■ 악성코드 프로그램을 이용해 공격자가 감염된 시스템 제어권을 획득하는 과정

이 책의 대상 독자

이 책은 여러 분야에 종사하는 사람들에게 도움이 되는 기술을 다양하게 다룬다. 운영체제, 어셈블리 언어, 컴파일 같은 소프트웨어의 다양한 로우레벨 측면을 알고 싶어 하는 소프트웨어 개발자는 특히 더 유용한 정보를 많이 찾을 수 있을 것이다. 운영체제나 소프트웨어 라이브러리, 특정 소프트웨어 컴포넌트 등 기존 코드를 빠르고 효과적으로 분석할 수 있는 기술을 향상시키려는 사람에게도 유용할 것이다. 이외에도 이 책은 보안이나 저작권 제어 등과 같은 다양한 주제도 들어 있으므로, 리버스 엔지니어링에 특별한 관심이 없더라도 이 책이 다루는 다양한 주제에서 흥미로운 내용을 찾을 수 있을 것이다.

이 책을 읽기 전 선수 지식을 제공하기 위해 나는 비교적 최신의 기술 사항들을 가능한 한 모두 다루려고 노력했다. 따라서 1부는 이 책을 읽는 데 꼭 필요한 기본 지식을 설명하면서 시작한다. 하지만 이 책에서 정말로 많은 것을 얻기 원하는 독자라면 어느 정도의 소프트웨어 개발 경험이나 지식은 갖추는 편이 좋다. 전문적인 소프트웨어 개발 경험은 전혀 없지만 현재 컴퓨터 공학을 전공하는 학생이라면 이 책을 읽는 데 큰 문제는 없을 것이다. 반대로 컴퓨터를 전공한 적은 없지만 수년간 프로그래밍 작업을 수행해 온 사람이라면 이 책에서 더 많은 내용을 배울 수 있을 것이다.

마지막으로 이 책은 로우레벨 소프트웨어와 리버스 엔지니어링 경험이 이미 있는 사람 중에서 흥미로운 고급 기술을 배우길 원하거나 기존 코드에서 상세한 정보를 추출하는 방법을 알고자 하는 사람들에게 도움이 많이 될 것이다.

저자/역자 소개

저자 소개

마크 다우드(Mark Dowd)

맥아피(McAfee)의 수석 보안 아키텍트로 근무하고 있으며, 애플리케이션 보안 분야에서 다년간의 경험을 갖고 있다. 인터넷 보안 시스템(ISS)인 엑스포스(X-Force)에서 다년간 수석 연구가로 근무한 경험을 기반으로 유비쿼터스 인터넷 소프트웨어 분야에서 수많은 취약점을 발견했으며, 마이크로소프트의 익스체인지 서버 같은 메일 전송 서비스, OpenSSH, 파이어폭스의 모질라 같은 인터넷 브라우저, VPN, 마이크로소프트의 SSL 같은 분야에서 주소 체계 등의 심각한 문제점을 찾거나 식별하는 데 탁월한 능력을 보여준다. 그의 연구는 산업계의 유명 컨퍼런스인 블랙햇이나 럭스콘(RUXCON)의 주제를 포괄하고 있다.

존 맥도날드(John McDonald)

다양한 분야의 기술 및 플랫폼을 포괄해 진보된 애플리케이션 보안 평가를 수행할 수 있는 전문성을 가진 네오햅시스(Neohapsis)의 상급 컨설턴트다. 보안 아키텍처나 맥아피, GmbH, 시티은행 등을 위한 취약점 연구가로 높은 평판을 갖고 있다. 취약점 연구가로서 솔라리스, BSD, 방화벽, OpenSSL, BIND 등의 이슈를 포함해 많은 분야의 취약점을 해결하는 데 도움을 주거나 취약점을 식별한다.

저스틴 슈(Justin Schuh)

애플리케이션 보안 점검을 수행하는 네오햅시스의 상급 컨설턴트이자 점검 리더로서 이식된 장치의 펌웨어부터 배포되는 기업 웹 애플리케이션까지 시스템의 다양한 범위에 걸쳐 보안 평가를 수행하고 있다. 네오햅시스에 들어가기 전에는 미국 국방부 및 관련 업체의 컴퓨터 보안 분야에서 10년 동안 근무했다. 대정부서비스를 할 때에는 미국 국가안전보장국(National Security Agency)의 침투 테스트 팀(Red Team)의 수석 선임 연구원의 역할을 했다.

크리스 카스퍼스키(Kris Kaspersky)

유명 기술 서적 저자로서, Hacker Uncovered 시리즈 도서들과, 『Code Optimization: Effective Memory Usage(코드 최적화: 효율적인 메모리 사용)』, 『CD Cracking Uncovered: Protection Against Unsanctioned CD Copying(알려지지 않은 CD 크래킹: 승인되지 않은 CD 복사를 방지하는 보호 기술)』, 『Data Recovery Tips & Solutions: Windows, Linux, and BSD(데이터 복구 팁 & 솔루션: 다양한 관점에서 보는 윈도우)』 등의 저서, 그리고 리눅스, BSD 해킹, 디스어셈블링, 코드 최적화 등과 관련한 다양한 기고문을 발표했다. 주로 컴파일러 개발, 최적화 기술, 보안 메커니즘 연구, 실시간 OS 커널 개발, 소프트웨어 보호 메커니즘, 안티 바이러스 프로그램 개발과 관련된 보안 및 시스템 프로그래밍을 주로 다룬다.

엘다드 에일람 (Eldad Eilam)

리버스 엔지니어링 분야의 컨설턴트로서 고객에게 운영체제와 소프트웨어 리버스 엔지니어링의 전문 서비스를 제공한다. 수년간 개선되고 진일보된 리버스 엔지니어링 기술을 개발하려고 노력하는 중이다.

옮긴이 소개

삼성SDS 정보보안연구회

2001년 해킹바이러스연구회로 시작한 삼성SDS 정보보안연구회는 해킹 기술을 공격자 입장에서 생각하고, 이를 토대로 안전한 시스템 운영 방안을 찾기 위해 보안성 검토 기술, 점검 기술, 신기술 트렌드 등을 연구하는 사내 모임이다. 초기 30여 명으로 시작해 현재 200여 명으로 성장했다. 보안에 대해서 이야기하며 이를 통한 발전을 지향한다.

서준석

(주)한국정보보호교육센터에서 교육 관련 사업 관리 및 콘텐츠 연구를 수행했다. 온라인 보안 기술 커뮤니티인 보안프로젝트에서는 메타스플로잇 분석, 취약점 분석 부문 연구를 담당하고 있다. 다양한 시스템에 존재하는 취약점 연구에 관심이 있으며 최근에는 커널 시스템 분석에 초점을 맞춰 연구를 수행 중이다. 현재 고려대학교 정보보호대학원에 진학을 앞두고 있다. 『Nmap NSE를 활용한 보안 취약점 진단』(에이콘출판, 2013년)을 공저했다.

윤근용

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

목차

목차
  • 『소프트웨어 보안 평가 The Art of Software Security Assessment』
  • 1부 소프트웨어 보안 평가 소개
  • 1장 소프트웨어 기본 취약점
    • 소개
    • 취약점
      • 보안 정책
      • 보안 요구 사항
    • 감사의 필요성
      • 코드 감사와 블랙박스 테스트
      • 코드 감사와 개발 라이프 사이클
    • 취약점 분류
      • 설계 취약점
      • 구현 취약점
      • 운영 취약점
      • 구별의 애매모호함
    • 공통점
      • 입력과 데이터 흐름
      • 신뢰 관계
      • 가정과 잘못된 신뢰
      • 인터페이스
      • 환경 공격
      • 예외 조건
    • 정리
  • 2장 설계 검토
    • 소개
    • 소프트웨어 설계의 기본
      • 알고리즘
      • 추상화와 분해
      • 신뢰 관계
      • 소프트웨어 설계의 원칙
      • 설계 결함
    • 보안 정책 강화
      • 인증
      • 인가
      • 책임 추적성
      • 기밀성
      • 무결성
      • 가용성
    • 위협 모델링
      • 정보 수집
      • 애플리케이션 아키텍처 모델링
      • 위협 식별
      • 발견한 위협의 문서화
      • 구현 리뷰에 대한 우선순위 매기기
    • 정리
  • 3장 운영 검토
    • 소개
    • 취약점 노출
      • 공격 영역
      • 안전하지 않은 초기 설정
      • 접근 제어
      • 불필요한 서비스
      • 보안 채널
      • 스푸핑과 식별
      • 네트워크 프로파일
    • 웹과 관련된 고려 사항
      • HTTP 요청 방법
      • 디렉토리 인덱싱
      • 파일 처리기
      • 인증
      • 기본 사이트 설치
      • 너무 자세한 에러 메시지
      • 대중화된 관리자 인터페이스
    • 보호 대책
      • 개발 대책
      • 호스트 기반 대책
      • 네트워크 기반 대책
    • 정리
  • 4장 애플리케이션 검토 프로세스
    • 소개
    • 애플리케이션 검토 프로세스의 개요
      • 근거
      • 프로세스 개요
    • 사전 평가
      • 범위 산정
      • 애플리케이션 접근
      • 정보 수집
    • 애플리케이션 검토
      • 단순 검토의 회피
      • 반복 프로세스
      • 초기 준비
      • 계획
      • 작업
      • 반영
    • 문서화와 분석
    • 보고와 치료 지원
    • 코드 탐색
      • 외부 흐름 민감도
      • 추적 방향
    • 코드 감사 전략
      • 코드 이해 전략
      • 후보 지점 전략
      • 설계 일반화 전략
    • 코드 감사 기법
      • 내부 흐름 분석
      • 서브시스템과 의존성 분석
      • 코드 다시 읽기
      • 탁상 검사
      • 테스트 케이스
    • 코드 감사자의 도구상자
      • 소스코드 탐색기
      • 디버거
      • 이진 탐색 도구
      • 퍼지 테스팅 도구
    • 사례 연구: OpenSSH
      • 사전 평가
      • 구현 분석
      • 고수준 공격
      • 결과의 문서화
    • 정리
  • 2부 소프트웨어 취약점
  • 5장 메모리 오염
    • 소개
    • 버퍼 오버플로우
      • 프로세스 메모리 레이아웃
      • 스택 오버플로우
      • 힙 오버플로우
      • Off-by-One 에러
      • 전역, 정적 데이터 오버플로우
    • 셸코드
      • 코드 작성법
      • 메모리에서 코드 찾기
    • 보호 메커니즘
      • 스택 쿠키
      • 힙 구현 강화
      • 비실행 스택과 힙 보호
      • 주소 공간 구조 랜덤화
      • SafeSEH
      • 함수 포인트 난독화
    • 메모리 오염의 영향 평가
      • 메모리에서 버퍼의 위치
      • 다른 데이터로 덮어쓰기 되는 것
      • 덮어쓰기가 가능한 바이트 수
      • 메모리를 오염시키는 데 사용될 수 있는 데이터
      • 메모리 블록의 공유
      • 적용해야 할 보호
    • 정리
  • 6장 C 언어 이슈
    • 소개
    • C 언어 배경
      • 데이터 저장 개요
      • 바이너리 인코딩
      • 바이트 오더
      • 보편적 구현
    • 산술적 경계 조건
      • 부호 없는 정수 경계
      • 부호 있는 정수 경계
    • 형 변환
      • 개요
      • 변환 규칙
      • 단순 변환
      • 정수 승격
      • 정수 승격의 응용
      • 일반 산술 변환
      • 일반 산술 변환 응용
      • 형 변환 요약
    • 형 변환 취약점
      • 부호 있는/부호 없는 변환
      • 부호 확장
      • 절단
      • 비교
    • 연산자
      • sizeof 연산자
      • 예상하지 못한 결과
    • 포인터 연산
      • 포인터 개요
      • 포인터 연산 개요
      • 취약점
    • 기타 C 특성
      • 연산 순서
      • 구조체 패딩
      • 우선순위
      • 매크로/전처리기
      • 오탈자
    • 정리
  • 7장 프로그램 구성 요소
    • 소개
    • 감사 변수의 사용
      • 변수의 관계
      • 구조체와 객체의 잘못된 처리
      • 변수 초기화
      • 산술 연산 경계
      • 변수 타입 혼동
      • 리스트와 테이블
    • 제어 흐름 감사
      • 반복문의 구조
      • 흐름 전환 구문
      • Switch 구문
    • 함수 감사
      • 함수 감사 로그
      • 반환 값의 확인과 해석
      • 함수 부수 효과
      • 인자의 의미
    • 메모리 관리에 대한 감사
      • ACC 로그
      • 할당 함수
      • 할당자의 스코어카드와 에러의 영역
      • 이중 메모리 해제
    • 정리
  • 8장 문자열과 메타문자
    • 소개
    • C 언어의 문자열 처리
      • 범위가 제한되지 않은 문자열 함수
      • 범위를 제한하는 문자열 함수
      • 일반적인 이슈
    • 메타문자
      • 삽입된 구분자
      • NUL 문자 주입
      • 절단
    • 일반적인 메타문자 형식
      • 경로 메타문자
      • C 형식 문자열
      • 셸 메타문자
      • 펄 open()
      • SQL 질의
    • 메타문자 필터링
      • 메타문자 제거
      • 이스케이프 메타문자
      • 메타문자 회피
    • 문자 집합과 유니코드
      • 유니코드
      • 윈도우 유니코드 함수
    • 정리
  • 9장 유닉스 I: 권한과 파일
    • 소개
    • 유닉스 기초
      • 사용자와 그룹
      • 파일과 디렉토리
      • 프로세스
    • 권한 모델
      • 권한 프로그램
      • 사용자 ID 함수
      • 그룹 ID 함수
    • 권한 취약점
      • 권한의 무모한 사용
      • 영구적인 권한 제거
      • 임시 권한 제거
      • 감사 권한 관리 코드
      • 권한 확장
    • 파일 보안
      • 파일 ID
      • 파일 권한
      • 디렉토리 권한
      • 파일 운영과 권한 관리
      • 파일 생성
      • 디렉토리 안정성
      • 파일명과 경로
      • 위험한 장소
      • 흥미로운 파일
    • 파일 내부
      • 파일 디스크립터
      • inode
      • 디렉토리
    • 링크
      • 심볼릭 링크
      • 하드 링크
    • 경쟁 상태
      • 검사 시점과 사용 시점
      • stat() 함수 계열
      • 돌아온 파일 경쟁
      • 권한 상승
      • 소유권 상승
      • 디렉토리 권한 획득
    • 임시 파일
      • 고유 파일 생성
      • 파일 재사용
      • 임시 디렉토리 청소
    • 표준 입출력 파일 인터페이스
      • 파일 열기
      • 파일에서 읽기
      • 파일에 쓰기
      • 파일 닫기
    • 정리
  • 10장 유닉스 II: 프로세스
    • 소개
    • 프로세스
      • 프로세스 생성
      • fork() 변형 모델
      • 프로세스 종료
      • fork()와 파일 오픈
    • 프로그램 호출
      • 직접 호출
      • 간접 호출
    • 프로세스 속성
      • 프로세스 속성 유지
      • 리소스 제한
      • 파일 디스크립터
      • 환경 배열
      • 프로세스 그룹, 세션, 터미널
    • 프로세스 간 통신
      • 파이프
      • 명명된 파이프
      • 시스템 V IPC
      • 유닉스 도메인 소켓
    • 원격 프로시저 호출
      • RPC 정의 파일
      • RPC 디코딩 경로
      • 인증
    • 정리
  • 11장 윈도우 I: 객체와 파일 시스템
    • 소개
    • 배경
    • 객체
      • 객체 네임스페이스
      • 객체 핸들
    • 세션
      • 보안 ID
      • 로그온 권한
      • 액세스 토큰
    • 보안 기술자
      • 액세스 마스크
      • ACL 상속
      • 기술자 프로그래밍 인터페이스
      • ACL 권한 감사
    • 프로세스와 스레드
      • 프로세스 로딩
      • ShellExecute와 ShellExecuteEx
      • DLL 로딩
      • 서비스
    • 파일 접근
      • 파일 권한
      • 파일 I/O API
      • 링크
    • 레지스트리
      • 키 권한
      • 키와 값 스쿼팅
    • 정리
  • 12장 윈도우 II: 프로세스 간 통신
    • 소개
    • 윈도우 IPC 보안
      • 리다이렉터
      • 가장
    • 윈도우 메시징
      • 윈도우 스테이션 객체
      • 데스크톱 객체
      • 윈도우 메시지
      • 섀터 공격
      • DDE
      • 터미널 세션
    • 파이프
      • 파이프 권한
      • 명명된 파이프
      • 파이프 생성
      • 파이프에서의 가장
      • 파이프 스쿼팅
    • 메일슬롯
      • 메일슬롯 권한
      • 메일슬롯 스쿼팅
    • 원격 프로시저 호출
      • RPC 연결
      • RPC 전송
      • 마이크로소프트 인터페이스 정의 언어
      • IDL 파일 구조
      • 애플리케이션 설정 파일
      • RPC 서버
      • RPC에서의 가장
      • 컨텍스트 핸들과 상태
      • RPC에서의 스레드
      • RPC 애플리케이션 감사
    • COM
      • COM: 빠른 지침서
      • DCOM 설정 유틸리티
      • DCOM 서브시스템 접근 권한
      • DCOM 접근 제어
      • DCOM에서의 가장
      • MIDL 다시 살펴보기
      • 액티브 템블릿 라이브러리
      • DCOM 애플리케이션 감사
      • COM 등록 리뷰
      • 액티브X 보안
    • 정리
  • 13장 동기화와 상태
    • 소개
    • 동기화 문제
      • 재진입과 비동기 안전 코드
      • 경쟁 상태
      • 기아 상태와 교착 상태
    • 프로세스 동기화
      • 시스템 V 프로세스 동기화
      • 윈도우 프로세스 동기화
      • 내부 프로세스 동기화의 취약점
    • 신호
      • 신호 전송
      • 신호 처리
      • 위치 점프
      • 신호 취약점
      • 신호 스코어보드
    • 스레드
      • PThreads API
      • 윈도우 API
      • 스레딩 취약점
    • 정리
  • 3부 소프트웨어 취약점 사례
  • 14장 네트워크 프로토콜
    • 소개
    • 인터넷 프로토콜
      • IP 주소 기초
      • IP 패킷의 구조
      • IP 헤더 검증 기초
      • IP 옵션 처리
      • 발신지 라우팅
      • 단편화
    • UDP
      • 기본적인 UDP 헤더 검증
      • UDP 이슈
      • 전송 제어 프로토콜
      • 기본적인 TCP 헤더 검증
      • TCP의 옵션 처리
      • TCP 커넥션
      • TCP 스트림
      • TCP 처리
    • 정리
  • 15장 방화벽
    • 소개
    • 방화벽 개요
      • 프록시와 패킷 필터
      • 공격 지점
      • 프록시 방화벽
      • 패킷 필터링 방화벽
    • 상태 비보존 방화벽
      • TCP
      • UDP
      • FTP
      • 단편화
    • 간단한 상태 보존 방화벽
      • TCP
      • UDP
      • 방향성
      • 단편화
    • 상태 보존 인스펙션 방화벽
      • 계층화 이슈
    • 스푸핑 공격
      • 떨어진 곳에서의 스푸핑
      • 근거리에서의 스푸핑
      • 멀리 떨어진 곳에서의 유령 공격
    • 정리
  • 16장 네트워크 응용 프로토콜
    • 소개
    • 응용 프로토콜 감사
      • 문서 수집
      • 알려지지 않은 프로토콜의 요소 확인
      • 데이터 타입과 프로토콜 매치
      • 데이터 검증
      • 시스템 리소스 접근
    • 하이퍼텍스트 전송 규약
      • 헤더 해석
      • 리소스 접근
      • 유틸리티 함수
      • 데이터 포스팅
    • 인터넷 보안 연합과 키 관리 프로토콜
      • 페이로드
      • 페이로드 유형
      • 암호화 취약점
    • 추상 구문 기법(ASN.1)
      • 기본 인코딩 규칙
      • 표준 인코딩과 식별 인코딩
      • BER, CER, DER 구현의 취약점
      • 묶음 인코딩 규칙(PER)
      • XML 인코딩 규칙
      • XER 취약점
    • 도메인 네임 시스템
      • 도메인 네임과 리소스 레코드
      • 네임 서버와 리졸버
      • 영역
      • 리소스 레코드 규약
      • 기본 사용 사례
      • DNS 프로토콜 구조 입문
      • DNS 네임
      • 길이 변수
      • DNS 스푸핑
    • 정리
  • 17장 웹 애플리케이션
    • 소개
    • 웹 기술 개요
      • 기본
      • 정적 콘텐츠
      • CGI
      • 웹 서버 API
      • 서버 측 인클루드
      • 서버 측 변환
      • 서버 측 스크립팅
    • HTTP
      • 개요
      • 버전
      • 헤더
      • 메소드
      • 매개변수와 폼
    • 상태(State)와 HTTP 인증
      • 개요
      • 클라이언트 IP 주소
      • 레퍼러 요청 헤더
      • HTML과 URL에 상태 삽입
      • HTTP 인증
      • 쿠키
      • 세션
    • 아키텍처
      • 중복
      • 프레젠테이션 로직
      • 비즈니스 로직
      • 다층 구조
      • 비즈니스 계층
    • 웹 계층: 모델-뷰-컨트롤러
    • 문제 영역
      • 클라이언트 관점
      • 클라이언트 제어
      • 페이지 흐름
      • 세션
      • 인증
      • 인가와 접근 제어
      • 암호화와 SSL/TLS
      • 피싱과 위장
    • 일반 취약점
      • SQL 인젝션
      • 운영체제와 파일 시스템 상호작용
      • XML 인젝션
      • XPath 인젝션
      • 크로스사이트 스크립팅
      • 스레딩 이슈
      • C/C++ 문제
    • 웹의 척박한 현실
    • 점검 전략
    • 정리
  • 18장 웹 테크놀로지
    • 소개
    • 웹 서비스와 서비스 지향 아키텍처
      • SOAP
      • REST
      • AJAX
    • 웹 애플리케이션 플랫폼
    • CGI
      • 인덱스된 쿼리
      • 환경 변수
      • 경로 혼란
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 테인트 모드
    • PHP
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
    • 자바
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • JSP 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 스레딩 이슈
      • 설정
    • ASP
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
    • ASP.NET
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
      • ViewState
    • 정리

  • 『해킹의 꽃 디스어셈블링 Hacker Disassembling Uncovered』
  • 1부 해킹 툴의 소개
  • 1장 해킹 툴 입문
    • 디버거
    • 디스어셈블러
    • 디컴파일러
    • 헥스 편집기
    • 언패커
    • 덤퍼
    • 리소스 편집기
    • 스파이
    • 감시 프로그램
    • 수정 프로그램
    • 보호 CD 복사기
  • 2장 유닉스용 해킹 툴
    • 디버거
    • 디스어셈블러
    • 스파이
    • 헥스 편집기
    • 덤퍼
    • 자동화된 보호 툴
  • 3장 디버거 에뮬레이션과 에뮬레이터
    • 에뮬레이터 소개
    • 역사적 개요
    • 대표적인 에뮬레이터
    • 에뮬레이터 선택
  • 4장 어셈블러 소개
    • 어셈블리어의 철학
    • C 예제로 어셈블리 개념 설명
    • 작업공간으로서 어셈블리 삽입
    • 사용 가능한 툴
    • 어셈블리 번역기의 개요와 비교
  • 2부 기본 해킹 기술
  • 5장 기본 해킹 기술 익히기
    • 비밀 키 유형에 따른 보호 메커니즘 분류
    • 보호 강도
    • 상용 솔루션의 단점
    • 사용 기술의 구현 에러
    • 심각한 결과를 야기하는 사소한 오류의 정리
  • 6장 시작 준비
    • 보호 기술 제작과 크랙
    • 디스어셈블러 익히기
    • 실전 크랙 예제
    • 정리
  • 7장 애플리케이션 디버깅 익히기
    • 디버깅 소개
    • 디스어셈블러와 디버거를 같이 사용
    • API 함수에 브레이크 포인트 설정
    • 메시지에 브레이크 포인트 설정
    • 데이터에 브레이크 포인트 설정
    • 스택 역추적
    • DLL 디버깅
    • 정리
  • 8장 유닉스와 리눅스 환경에서의 디버깅 특성
    • GDB 기반의 Ptrace
    • GDB에서 바이너리 파일 디버깅
  • 9장 Linice로 수행하는 커널 디버깅의 기초
    • 시스템 요구 사항
    • Linice 컴파일과 설정
    • 시스템 부팅과 디버거 실행
    • Linice로 작업할 때 지켜야 할 기본 원칙
    • 정리
  • 10장 고급 디버깅 주제
    • 소프트아이스를 로그 수집기로 사용
    • 무작위 브레이크 포인트로 해킹 트릭 사용
    • 범위 설정을 통한 크래킹
    • 정리
  • 3부 고급 디스어셈블링 기술
  • 11장 32비트 PE 파일 디스어셈블링
    • 다양한 실행 환경에서 PE 파일 구조의 특징
    • 일반적인 개념과 PE 파일의 요구 사항
    • PE 파일 구조
    • PE 파일에 코드를 삽입하거나 제거하는 기술
    • 정리
  • 12장 리눅스와 BSD에서 ELF 파일 디스어셈블링
    • 필요한 도구
    • ELF 파일 구조
    • ELF 파일에 외부 코드 삽입
    • 리눅스에서 간단한 크랙미 프로그램을 디스어셈블링
    • 정리
  • 13장 x86-64 아키텍처에서 수행하는 디스어셈블링
    • 소개
    • 필요한 도구
    • x86-64 아키텍처의 개요
    • 64비트 모드로 전환
    • x86-64 환경에서 만드는 ‘Hello, World’ 프로그램
    • 정리
  • 14장 리눅스 커널 디스어셈블링과 해킹
    • 디스어셈블링 리눅스 커널
    • 커널 해킹의 비밀
  • 15장 고급 패칭 기법
    • 온라인 패칭의 비밀과 트릭
    • 클라이언트 프로그램을 크래킹하는 잘 알려지지 않은 방법
    • 윈도우 NT/2000/XP 커널 핵
    • BSOD 이후의 세계가 존재하는가?
    • 참고 사이트
    • 정리
  • 16장 기타 형식의 파일 디스어셈블링
    • PDF 파일 디스어셈블링
    • 정리
  • 4부 실제 코드 연구
  • 17장 윈도우에서의 숨바꼭질
    • 윈도우 환경을 위한 안티디버깅 기법
    • 윈도우 환경에서 사용되는 스텔스 기법
    • 정리
  • 18장 패커 극복법
    • 예비 분석
    • 언패킹과 대체 방안
    • 언패킹 알고리즘
    • 오리지널 진입점 검색
    • 보호된 애플리케이션을 덤프
    • 정리
  • 19장 난독화 극복법
    • 난독화 도구의 작동 원리
    • 난독화된 프로그램을 크랙하는 방법
    • 블랙박스 접근법
    • 가상머신 지하 감옥
    • 정리
  • 20장 리눅스와 BSD에서의 패커 극복법
    • 패커가 성능에 미치는 영향
    • UPX
    • Burneye
    • Shiva
    • 패커 비교
    • 정리
  • 21장 악성코드 디버깅과 디스어셈블링
    • 디버거를 활용한 방첩 활동
    • 공격 코드 감사와 디스어셈블링
    • 참고 자료
    • 정리
  • 찾아보기
  • 『리버싱』
  • 1부 리버싱 101
  • 1장 기초
    • 리버스 엔지니어링
    • 소프트웨어 리버스 엔지니어링: 리버싱
    • 리버싱 적용
      • 보안 관련 리버싱
        • 악성코드 소프트웨어
        • 암호 알고리즘 리버싱
        • 디지털 저작권 관리
        • 프로그램 바이너리 감사
      • 소프트웨어 개발에서의 리버싱
        • 소프트웨어 간의 상호 운용
        • 경쟁 제품 분석
        • 소프트웨어의 품질과 안정성 측정
    • 로우레벨 소프트웨어
      • 어셈블리 언어
      • 컴파일러
      • 가상 머신과 바이트 코드
      • 운영체제
    • 리버싱 절차
      • 시스템 레벨 리버싱
      • 코드 레벨 리버싱
    • 사용 툴
      • 시스템 모니터링 툴
      • 디스어셈블러
      • 디버거
      • 디컴파일러
    • 리버싱은 합법적인 작업인가
      • 상호 운용성
      • 경쟁
      • 저작권법
      • 영업 비밀과 특허권
      • 디지털 밀레니엄 저작권법
      • DMCA 사례
      • 사용권 계약
    • 예제 코드와 툴
    • 정리
  • 2장 로우레벨 소프트웨어
    • 하이레벨 관점
      • 프로그램 구조
        • 모듈
        • 공통 구성 요소
      • 데이터 처리
        • 변수
        • 사용자 정의 데이터 구조체
        • 리스트
      • 제어 흐름
      • 하이레벨 언어
        • C
        • C++
        • 자바
        • C#
    • 로우레벨 관점
      • 로우레벨 데이터 처리
        • 레지스터
        • 스택
        • 실행 데이터 섹션
      • 제어 흐름
    • 어셈블리 언어 입문
      • 레지스터
      • 플래그
      • 명령 포맷
      • 기본 명령
        • 데이터 이동
        • 산술 연산
        • 비교 연산
        • 조건 분기
        • 함수 호출
      • 코드 예
    • 컴파일러 기초
      • 컴파일러란
      • 컴파일러 아키텍처
        • 프런트엔드
        • 중간 표현
        • 최적화기
        • 백엔드
      • 리스팅 파일
      • 사용 컴파일러
    • 실행 환경
      • 소프트웨어 실행 환경(가상 머신)
        • 바이트 코드
        • 인터프리터
        • Just-in-Time 컴파일러
        • 리버싱 전략
      • 최신 프로세서에서의 하드웨어 실행 환경
        • Intel NetBurst
        • μops(Micro-Ops)
        • 파이프라인
        • 분기 예측
    • 정리
  • 3장 윈도우 기초
    • 컴포넌트와 기본 아키텍처
      • 간략한 역사
      • 특징
      • 지원 하드웨어
    • 메모리 관리
      • 가상 메모리와 페이징
        • 페이징
        • 페이지 폴트
      • 워킹 셋
      • 커널 메모리와 유저 메모리
      • 커널 모드 공간
      • 섹션 객체
      • VAD 트리
      • 유저 모드 메모리 할당
      • 메모리 관리 API
    • 객체와 핸들
      • 네임드 객체
    • 프로세스와 스레드
      • 프로세스
      • 스레드
      • 컨텍스트 스위칭
      • 동기화 객체
      • 프로세스 초기화 과정
    • 애플리케이션 프로그래밍 인터페이스
      • Win32 API
      • 네이티브 API
      • 시스템 콜 메커니즘
    • 실행 포맷
      • 기본 개념
      • 이미지 섹션
      • 섹션 정렬
      • 동적 링크 라이브러리
      • 헤더
      • 임포트와 익스포트
      • 디렉터리
    • 입력과 출력
      • I/O 시스템
      • Win32 서브시스템
        • 객체 관리자
    • 구조화된 예외 처리
    • 정리
  • 4장 리버싱 툴
    • 다양한 리버싱 방법
      • 오프라인 코드 분석(Dead-Listing)
      • 라이브 코드 분석
    • 디스어셈블러
      • IDA Pro
    • ILDasm
  • 디버거
    • 유저 모드 디버거
      • OllyDbg
      • WinDbg를 이용한 유저 모드 디버깅
      • IDA Pro
      • PEBrowse Professional Interactive
    • 커널 모드 디버거
      • WinDbg를 이용한 커널 모드 디버깅
      • Numega SoftICE
      • 가상 머신에서의 커널 디버깅
  • 디컴파일러
  • 시스템 모니터링 툴
  • 패치 툴
    • Hex Workshop
  • 기타 리버싱 툴
    • 실행 이미지 덤프 툴
      • DUMPBIN
      • PEView
      • PEBrowse Professional
  • 정리
  • 2부 리버싱 응용
  • 5장 리버싱 실전
    • 리버싱과 상호운용성
    • 기본 원칙
    • 문서화되지 않은 API를 찾는 방법
      • 찾고자 하는 것
    • 사례 연구: NTDLL.DLL의 Generic Table API
      • RtlInitializeGenericTable
      • RtlNumberGenericTableElements
      • RtlIsGenericTableEmpty
      • RtlGetElementGenericTable
        • 셋업과 초기화
        • 로직과 구조
        • 검색 루프 1
        • 검색 루프 2
        • 검색 루프 3
        • 검색 루프 4
        • 소스코드 추출
      • RtlInsertElementGenericTable
        • RtlLocateNodeGenericTable
        • RtlRealInsertElementWorker
        • Splay 트리
      • RtlLookupElementGenericTable
      • RtlDeleteElementGenericTable
      • 분석한 내용 종합
    • 정리
  • 6장 파일 포맷 분석
    • Cryptex
    • Cryptex 사용
    • Cryptex 리버싱
    • 패스워드 검증 과정
      • “Bad Password” 메시지 잡아내기
      • 패스워드 변환 알고리즘
      • 패스워드 해싱
    • 디렉터리 구조
      • 디렉터리 처리 코드 분석
      • 파일 엔트리 분석
    • 디렉터리 구조 덤프
    • 파일 추출 과정
      • 파일 목록 검색
      • 파일 복호화
      • 부동소수점 연산
      • 복호화 루프
      • 해시 값 검증
    • 정리
    • 좀 더 자세히
    • 결론
  • 7장 프로그램 바이너리 감사
    • 문제점 정의
    • 보안 취약점
      • 스택 오버플로우
        • 간단한 스택 보안 취약점
        • 내부 구현
        • 스택 검사
        • 비실행 가능 메모리
      • 힙 오버플로우
      • 문자열 필터
      • 정수 오버플로우
        • 사용자 입력 정수에 대한 산술 연산
      • 형 변환 에러
    • 사례: IIS 인덱싱 서비스 보안 취약점
      • CVariableSet::AddExtensionControlBlock
      • DecodeURLEscapes
    • 정리
  • 8장 악성코드 리버싱
    • 악성코드의 종류
      • 바이러스
      • 트로이 목마
      • 백도어
      • 모바일 코드
      • 애드웨어/스파이웨어
    • 스틱키 소프트웨어
    • 미래의 악성코드
      • 정보 탈취 웜
      • 바이오스/펌웨어 악성코드 331
    • 악성코드의 목적
    • 악성코드 취약점
    • 다형성
    • 변종
    • 안전한 리버싱 환경 구축
    • Backdoor.Hacarmy.D
      • 실행 파일 언패킹
      • 최초 실행
      • 설치
      • 네트워크 연결
      • 서버에 연결
      • 채널에 접속
      • 백도어와 통신
      • SOCKS4 서버 실행
      • 자체 제거
    • Backdoor.Hacarmy.D: 명령 레퍼런스
    • 정리
  • 3부 크래킹
  • 9장 저작권 침해와 불법 복사 방지
    • 저작권
    • 사회적 측면
    • 소프트웨어 저작권 침해
      • 문제 정의
      • 보안 결함
      • 필요 조건
      • 이론적으로 크랙이 불가능한 모델
    • 보호 유형
      • 매체 기반 보호
      • 시리얼 번호
      • 질의 응답과 온라인 인증
      • 하드웨어 기반의 보호
      • 서비스로서의 소프트웨어
    • 진보된 보호 개념
      • 크립토 프로세서
    • 디지털 저작권 관리
      • DRM 모델
        • 윈도우 미디어 저작권 관리자
        • 시큐어 오디오 패스
    • 워터 마크
    • 신뢰 컴퓨팅
    • 복사 방지 기술 공격
    • 정리
  • 10장 안티 리버싱 기술
    • 안티 리버싱이 필요한 이유
    • 기본적인 안티 리버싱 방법
    • 심볼 정보 제거
    • 코드 암호화
    • 안티 디버거 기술
      • 디버거 기본
      • IsDebuggerPresent API
      • SystemKernelDebuggerInformation
      • 싱글 스텝 인터럽트를 이용한 SoftICE 탐지
      • 트랩 플래그
      • 코드 체크섬
    • 안티 디스어셈블러
      • 선형 스윕 디스어셈블러
      • Recursive Traversal 디스어셈블러
      • 적용
    • 코드 난독화
    • 제어 흐름 변환
      • Opaque Predicates
      • 안티 디컴파일러
      • Table Interpretation
      • 인라인닝과 아웃라이닝
      • 인터리빙 코드
      • 순서 변환
    • 데이터 변환
      • 변수 인코딩
      • 배열 재구성
    • 정리
  • 11장 보호 기술 파괴
    • 패치
    • Keygen
    • 키 생성 알고리즘 추출
    • 고급 크래킹: Defender
      • Defender의 초기화 루틴 리버싱
      • 복호화된 코드 분석
      • 사라진 SoftICE
      • 스레드 리버싱
      • “Killer” 스레드 무력화
      • KERNEL32.DLL 로딩
      • 함수 재암호화
      • 엔트리 포인트로 다시 돌아가서
      • 프로그램 파라미터 파싱
      • 사용자 이름 처리
      • 사용자 정보 검증
      • 코드 복호화
      • Defender에 대한 무작위 대입
    • Defender의 보호 기술
      • 함수 레벨의 암호화
        • 상대적으로 강력한 암호 블록 체인
        • 재 암호화
      • 애플리케이션/운영체제와의 인터페이스 난독화
      • 프로세서 타임 스탬프 검증 스레드
      • 실행 시에 복호화 키 생성
        • 상호 의존 키
        • 사용자 입력 기반의 복호화 키
      • 인라이닝
    • 정리
  • 4부 디스어셈블리 너머
  • 12장 닷넷 리버싱
    • 기반 지식
    • 닷넷 기본
      • 매니지드 코드
      • 닷넷 프로그래밍 언어
      • 공통 타입 시스템
    • 중간 언어
      • 평가 스택
      • 활성화 레코드
      • IL 명령
      • IL 코드 샘플
        • Counting Items
        • 링크드 리스트 샘플
    • 디컴파일러
    • 난독기
      • 심볼 이름 변경
      • 제어 흐름 변경
      • 디컴파일과 디스어셈블리 차단
    • 난독화된 코드 리버싱
      • XenoCode
      • Preemptive Solutions의 DotFuscator
      • Remotesoft 난독기와 링커
      • Remotesoft Protector
      • 어셈블리 프리컴파일
      • 어셈블리 암호화
    • 정리
  • 13장 디컴파일
    • 네이티브 코드 디컴파일
    • 전형적인 디컴파일러의 구조
    • 중간 표현
      • 표현식과 표현식 트리
      • 제어 흐름 그래프
    • 프론트엔드
      • 의미 분석
      • 제어 흐름 그래프 생성
    • 코드 분석
      • 데이터 흐름 분석
        • 단일 정적 할당
        • 데이터 전달
        • 레지스터 변수 구별
        • 데이터 타입 전달
      • 타입 분석
        • 기본 데이터 타입
        • 복잡한 데이터 타입
      • 제어 흐름 분석
      • 라이브러리 함수의 구별
    • 백엔드
    • 실제 IA-32 디컴파일러
    • 정리
  • 부록 A 코드 구조 해석
  • 부록 B 컴파일된 연산의 이해
  • 부록 C 프로그램 데이터 해석
  • 도서 오류 신고

    도서 오류 신고

    에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

    오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

    (예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안