이미 소장하고 있다면 판매해 보세요.
|
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 ___정리 참고 문헌 |
|
저자 서문
지난 몇 년간 특히 소프트웨어 취약점을 비롯한 컴퓨터 보안 분야에 있어서 놀라운 변화가 있었다. 서점에는 보안성을 고려한 개발(secure development) 및 소프트웨어의 취약점을 공격(exploiting software)하는 방법을 소개하는 책들만 모아놓은 코너도 생겨났다. 애플리케이션 보안을 다루는 책들은 소프트웨어 디자이너나 개발자의 관점으로 애플리케이션에서 소프트웨어 취약점이 발생하지 않게 하는 테크닉에 중점을 둔다. 이런 테크닉은 견고한 보안 설계 원칙과 위협 모델링부터 시작해서 베스트 프랙티스 방어 개발 전략을 구현하는 모든 방법을 설명한다. 이런 책들은 애플리케이션 개발에 대한 방어의 근간을 만드는 데 도움이 되지만, 취약점의 본질은 거의 다루지 않고 어떻게 취약점을 회피하는지에만 초점을 맞춘다. 더욱이 모든 개발이 기본부터 보안 애플리케이션을 고려할 수 있는 것도 아니다. 현실적으로는 이미 공통적으로 사용하는 거대한 코드모음(codebases)이 있고 제한된 시간과 예산을 고려해야 하기 때문이다. 반면 보안 코딩의 목표는 “조금이라도 취약점이 발생할 수 있는 방법은 사용하지 말라!”라고 말한다. 이 사실이 맞기는 하지만, 너무 비용이 많이 들거나 시간을 많이 소모함으로써 합리적이지 않는 경우도 종종 발생하기 때문에 침투 테스트와 윤리적 해킹에 관심을 돌리게 된다. 이런 주제는 시중에서 다양한 범위의 지식을 얻을 수 있고, 소프트웨어 시스템의 생성, 입력, 삭제, 수정 테스트 시 유용하게 이용할 수 있다. 그렇지만 기술적으로 상세한 자료들조차도 취약점의 공격에만 초점을 두고 있을 뿐 취약점이 발견되는 첫 번째 위치를 어떻게 찾아야 하는지에 대해서는 거의 다루지 않는다. 이러한 접근은 현존하는 애플리케이션의 문제점을 어떻게 찾아내며, 합리적인 수준의 소프트웨어 안전을 보장할 수 있는지에 대한 문제점을 남겨둔다. 이는 전문적인 소프트웨어 보안을 평가하는 사람들에게 직면한 문제다. 보안 시스템의 설치, 테스트에 대한 관심은 더욱 증가하고 있지만 취약점을 찾을 수 있는 현실적인 방법을 설명하는 자료는 그리 많지 않다. 결국 취약점을 찾아가는 절차는 복잡한 이슈에 대한 깊이 있는 기술적인 이해가 필요하며, 애플리케이션 분석에도 체계적인 접근이 필요하다. 취약점을 어떻게 찾을 것인가에 대한 공식적인 언급이 없다면 소프트웨어 보안 산업은 소프트웨어 보안 평가의 기준을 확립하거나 다음 세대를 교육할 수 없다. 나는 이런 질문에 답을 찾고, 보안 소프트웨어 개발과 개발 후 심사에서의 차이점을 좁히는 데 도움을 주기 위해 이 책을 썼다. 이 책은 주로 컨설턴트나 보안 전문가를 위해 쓰였으나, 나머지 IT 분야에 종사하는 사람들에게도 도움이 되는 내용을 포함하고 있다. 개발자는 이 책을 통해 언어와 운영체제가 어떻게 동작하며 이런 요소들이 안전해 보이는 애플리케이션에 어떻게 취약점을 유발하는지, 그 차이와 뉘앙스를 이해할 수 있을 것이다. 품질 평가원(Quality Assurance Personnel)은 사내에서 개발한 소프트웨어의 무결성을 확신하거나, 다양한 공격을 받는 애플리케이션의 취약점을 감소시키는 가이드라인으로 이 책을 사용할 수 있을 것이다. 관리자는 네트워크상에서 애플리케이션의 보안 영향력을 평가하는 가이드라인으로 이 책을 사용할 수 있을 것이며, 향후 좀 더 나은 결정과 개발을 계획할 수 있을 것이다. 마지막으로 어떻게 애플리케이션을 평가하는지 관심이 있는 독자는 이 책에서 애플리케이션 보안 검토에 대한 중요한 정보를 얻고, 점검 기술을 향상시키는 데 도움을 받을 수 있을 것이다. 옮긴이의 말 내용도 분량도 엄청나고 방대한 책이다. 공역자도, 검수자도 많아 통일된 내용으로 정리하기가 매우 어려웠지만, 꼭 번역을 완수해야 한다는 책임감을 느끼게 해주는 책이었다. 보안을 시작해서 실력이 오르지 않고 정체기에 있는 많은 보안 담당자, 컨설턴트, 학습자의 실력을 두 단계 향상시켜줄 수 있는 훌륭한 책이기 때문이다. 이 책은 보안컨설팅 전문가, 개발자, 모의해킹 담당자 모두가 만족할 수 있게 구성돼 있다. 즉, 개발 단계, 모델링 단계, 구현 단계에 대한 보안 가이드와 실전에 사용할 수 있는 소스코드를 포함하고 있고, 해당 점검 기술을 활용할 수 있도록 네트워크, 서버, 홈페이지 전반에 걸쳐 실전에 활용할 수 있는 내용이 포함돼 있다. 소스코드를 직접 실행하고 하나씩 알아가면서 기술 속에 담긴 진의를 터득할 수 있을 것이고, 이는 더욱 능력 있는 전문가로 나아가는 초석이 될 것이라 확신한다. 아무쪼록 방대한 분량에 지레 겁먹어서 미리 포기하지 말고 내용을 하나씩 자신의 것으로 만들어 보안전문가로서 한발 더 내디딜 수 있기를 희망한다. ---본문 중에서 |
|
이 책에서 다루는 내용
* 소스코드 감사: 이론, 실전, 방법론, 알려지지 않은 자료 교환 * 보안 소프트웨어 디자인과 보안심사 간 불일치 조율 * 구조 리뷰 수행 * 메모리 관리, 데이터 타입, 비정상적인 데이터와 관련된 취약점 식별 방법 * 유닉스/리눅스 평가: 권한, 파일 및 절차 * 객체나 파일시스템을 포함한 윈도우 관련 이슈 * 프로세스 간 통신, 동기화 및 상태 감사 * 네트워크 소프트웨어 평가: IP 스택, 방화벽, 일반적인 애플리케이션 프로토콜 * 웹 애플리케이션과 기술 감사 이 책의 대상 독자 이 책은 경험이 있는 개발자가 이해할 수 있게 작성됐다. 독자는 적어도 하나의 프로그래밍 언어에 능통해야 하며, 기본적인 C/C++ 프로그래밍에 익숙해야 한다. 이 책의 여러 단계에 걸쳐 인텔 어셈블리 언어가 사례로 사용됐지만, 최소한으로 사용했으며 최대한 C코드와 비슷하게 옮기려고 노력했다. 가장 일반적인 운영체제와 자주 사용되는 플랫폼을 사용했고, 최대한 플랫폼에 제약을 받지 않은 일반적인 내용을 포함하게 최선을 다해 만들었다. 필요에 따라 이 책에서 다루지 않는 배경 지식을 제공하기 위해 추가적인 리소스를 참조했다. 이 책의 구성 1부, 소프트웨어 보안 평가 소개(1~4장): 1부는 코드 진단 방법을 소개하고, 이를 어떻게 소프트웨어 개발 과정에 적용하는지 설명한다. 디자인 검토, 위협 모델링, 운영 검토의 기능(코드뿐 아니라 애플리케이션 전체의 평가를 위한 유용한 틀)을 배울 수 있다. 마지막으로 다양한 기능과 크기를 갖는 애플리케이션의 코드 검토를 수행하기 위한 포괄적이고 고차원적인 방법을 배울 수 있다. 2부, 소프트웨어 취약점(5~13장): 2부는 실질적인 점검 방법으로 관심을 옮겨 애플리케이션 코드에서 어떻게 특정 취약점을 찾아낼 수 있는지에 대해 배운다. 공격에 주로 이용되는 소프트웨어 취약 클래스들을 설명하며, 애플리케이션에서 어떻게 치명적인 보안 결함을 발견하는지에 대해 배울 수 있다. 실전에 적용할 수 있는 많은 보안 취약점의 사례가 주어지는데, 이러한 예를 통해 소스코드에서 소프트웨어 버그가 어떻게 동작하는지 이해할 수 있다. 3부, 소프트웨어 취약점 사례(14~18장)" 3부는 앞에서 배운 기법들의 실제적인 사례를 보여준다. 3부에서는 일반적인 애플리케이션 클래스들과 취약점을 내포하고 있는 여러 타입의 버그를 설명한다. 또한 2부에서 얻은 기술적인 지식을 어떻게 애플리케이션에 적용할 수 있는지 보여준다. 특히 네트워킹, 방화벽 기술, 웹 보안 기술 등을 설명하며, 각 장에서는 애플리케이션의 일반적인 프레임워크와 설계에서 일반적으로 나타날 수 있는 결함을 설명한다. 최소한 한 번은 책을 처음부터 끝까지 정독하는 것이 내용을 숙지하고 저자의 의도를 알 수 있는 가장 효과적인 학습 방법이다. 이런 접근 방법이 가장 효과적인 이유는 각 장마다 핵심적인 기술과 툴을 사용하기 위한 기회를 제공했기 때문이며, 이를 통한 애플리케이션 평가를 수행할 수 있다. 특히 각 섹션에서 중요한 개념에 대해 정리를 하는 데 사용한 칼럼과 참고에 관심을 기울이길 바란다. 물론 바쁜 일정 때문에 정독이 불가능한 독자를 위해 다른 타입의 검토에 초점을 맞춰 몇 개의 트랙으로 구분했다. 그러나 1~4장은 책 전체에 대한 개념을 확립하는 부분이므로, 모든 독자는 1부를 정독하기를 바란다. 그 후 필요에 따라 다음 트랙에 따라 해당 장들을 읽으면 된다. 유닉스 트랙(5~10장, 13장): 이 트랙은 일반적인 소프트웨어 취약점 클래스, 메모리 오염(corruption), 프로그램 제어 흐름, 형식이 정해진 데이터에 대해 언급하는 것으로 시작한다. 다음으로 다양한 유닉스 운영체제에 있는 특이점 때문에 비롯되는 유닉스 보안 문제점에 대해 설명하고, 마지막으로 대부분 플랫폼에서 공통적으로 존재하는 동기화 취약점을 언급한다. 윈도우 트랙(5~8장, 11~13장): 이 트랙도 유닉스와 마찬가지로 일반적으로 플랫폼이 갖고 있는 보안 문제를 다룬다. 그런 다음, 두 장에서 윈도우 API 및 관련 취약점을 설명한다. 마지막으로 이 트랙은 일반적인 동기화 취약점을 설명한다. 웹 보안 트랙(8장, 13장, 17~18장): 웹 진단은 일반적인 보안 취약점에 대한 이해뿐 아니라 웹 기반 프레임워크와 언어에 대한 이해를 필요로 한다. 이 트랙은 웹 기반 언어와 관련된 일반적인 취약 클래스를 설명하고, 웹에 특정하게 나타나는 보안을 언급한다. 유닉스/윈도우 관련 내용은 이 트랙에 포함되지 않았지만, 웹 애플리케이션의 운영 환경에 따라 연관이 있을 수 있다. 네트워크 응용 트랙(5~8장, 13장, 16장): 이 장들에서는 네트워크 클라이언트/서버 응용상에 나타날 수 있는 취약점을 잘 설명한다. 16장은 응용 프로토콜을 주로 설명하고, 또한 일반적인 응용 프로토콜 진단 방법에 대한 내용을 포함하고 있다. 다른 트랙과 마찬가지로 개발 환경에 따라 유닉스 또는 윈도우 관련 장이 필요할 수 있다. 네트워크 분석 트랙(5~8장, 13~16장): 이 트랙은 방화벽이나 IPS, 스니퍼, 라우팅 소프트웨어 등과 같은 네트워크 분석 애플리케이션을 상세히 설명한다. 널리 사용되는 네트워크 기반 기술 또는 이 제품에서 공통적으로 나타나는 일반적인 취약점들을 포함한다. 다른 트랙과 마찬가지로 개발 환경에 따라 유닉스 또는 윈도우 관련 장이 필요할 수 있다. |