한국어판 서문 ... 5 저자 소개 ... 6 감사의 글 ... 7 옮긴이의 말 ... 8 옮긴이 소개 ... 10 들어가며 ... 34 01장 웹 애플리케이션 보안 ... 43 웹 애플리케이션의 발전 ... 43 일반적인 웹 애플리케이션 기능 ... 45 웹 애플리케이션의 혜택 ... 46 웹 애플리케이션 보안 ... 47 "이 사이트는 안전합니다." ... 48 보안 문제의 핵심: 사용자가 임의의 입력 값을 제공할 수 있다 ... 50 주요 문제점 ... 52 새 보안 경계선 ... 54 웹 애플리케이션 보안의 미래 ... 55 정리 ... 56 02장 핵심 방어 메커니즘 ... 57 사용자 접근 처리 ... 55 인증 ... 58 세션 관리 ... 59 접근 제어 ... 60 사용자 입력 값 처리 ... 61 다양한 입력 값 ... 62 입력 값 조작에 대한 처리 방법 ... 63 경계 검증 ... 65 다단계 검증과 정규화 ... 68 공격자 핸들링 ... 70 에러 핸들링 ... 70 감사 로그 관리 ... 71 관리자에 경고 ... 73 공격으로부터의 방어 ... 74 애플리케이션 관리 ... 75 정리 ... 76 확인문제 ... 77 03장 웹 애플리케이션 기술 ... 79 HTTP 프로토콜 ... 79 HTTP 요청 ... 80 HTTP 응답 ... 81 HTTP 메소드 ... 82 URL ... 84 HTTP 헤더 ... 85 쿠키 ... 87 상태 코드 ... 88 HTTPS ... 90 HTTP 프록시 ... 90 HTTP 인증 ... 91 웹 기능 ... 92 서버 측 기능 ... 92 클라이언트 측 기능 ... 96 상태와 세션 ... 100 인코딩 스키마 ... 101 URL 인코딩 ... 101 유니코드 인코딩 ... 102 HTML 인코딩 ... 103 Base64 인코딩 ... 104 Hex 인코딩 ... 104 정리 ... 105 확인문제 ... 105 04장 애플리케이션 지도 작성 ... 107 컨텐츠와 기능 수집 ... 107 웹 스파이더링 ... 108 User-Directed 스파이더링 ... 111 숨겨진 컨텐츠의 발견 ... 113 애플리케이션 페이지와 기능 경로 ... 124 숨겨진 변수의 발견 ... 126 애플리케이션의 분석 ... 127 사용자 입력이 가능한 곳 확인 ... 128 서버 측 기술 확인 ... 130 서버 측 기능 확인 ... 136 핵심 공격 취약 영역 매핑 ... 140 정리 ... 141 확인문제 ... 142 05장 클라이언트 측 통제 우회 ... 145 클라이언트를 통한 데이터 전송 ... 145 숨겨진 폼 필드 ... 146 HTTP 쿠키 ... 149 URL 매개변수 ... 150 리퍼러 헤더 ... 151 변형된 데이터 ... 152 ASP.NET ViewState ... 153 사용자 데이터의 획득: HTML 폼 ... 158 길이 제한 ... 158 스크립트 기반 검증 ... 160 비활성화된 요소 ... 162 사용자 데이터의 획득: 씩 클라이언트 컴포넌트 ... 164 자바 애플릿 ... 164 액티브X 컨트롤 ... 173 쇽웨이브 플래시 객체 ... 179 클라이언트 측 데이터의 안전한 처리 ... 184 클라이언트를 통한 데이터 전송 ... 184 클라이언트가 생성한 데이터 검증 ... 185 로깅과 경고 ... 186 정리 ... 187 확인문제 ... 187 06장 인증 무력화 ... 189 인증 기술 ... 190 인증 메커니즘에서 발견되는 설계상의 결함 ... 191 나쁜 비밀번호 ... 191 무차별 대입 공격이 가능한 로그인 ... 192 불필요하게 상세한 로그인 실패 메시지 ... 195 로그인 정보의 전송 취약성 ... 197 비밀번호 변경 처리 ... 200 비밀번호 분실 처리 ... 201 "내 정보 기억하기"의 처리 ... 204 신분 전환 처리 ... 205 사용자 정보의 불완전한 검증 ... 207 고유하지 않은 사용자명 문제 ... 208 예측 가능한 사용자명 ... 210 추측 가능한 초기 비밀번호 ... 210 로그인 정보 전달 과정에서의 위험성 ... 211 사용자 인증 구현상의 결함 ... 212 장애 우회를 내포한 로그인 메커니즘 ... 212 다단계 로그인 메커니즘의 결함 ... 214 로그인 정보 보관상의 위험 ... 217 안전한 사용자 인증 처리 ... 218 안전한 로그인 정보의 사용 ... 219 로그인 정보의 기밀 유지 ... 219 로그인 정보의 제대로 된 검증 ... 220 정보 유출 방지 ... 222 무차별 대입 공격 차단 ... 224 비밀번호 변경 기능의 악용 차단 ... 226 계정 복구 기능 악용 차단 ... 227 로그, 감시, 통지 ... 228 정리 ... 229 확인문제 ... 229 07장 세션 관리 공격 ... 231 사용자의 상태에 대한 유지 필요 ... 232 세션 대안 ... 235 세션 토큰을 만드는 과정에서 발생하는 취약점 ... 236 중요한 토큰 ... 237 추측 가능한 토큰 ... 239 세션 토큰을 처리할 때 발생하는 취약점 ... 248 네트워크상의 토큰 노출 ... 248 로그에서 토큰 노출 ... 252 세션에 대한 취약한 토큰 매핑 ... 254 세션 종료의 취약점 ... 256 토큰 하이재킹에 대한 클라이언트 노출 ... 258 개방적인 쿠키 범위 ... 259 안전한 세션 관리 ... 263 강력한 토큰 생성 ... 264 토큰이 생성되고 나서 없어질 때까지 안전하게 보호 ... 265 로그, 감시, 경고 ... 269 정리 ... 270 확인문제 ... 271 08장 접근 통제 공격 ... 273 일반적인 취약점 ... 274 보안 기능이 허술하게 돼있는 경우 ... 275 식별자를 기반으로 한 기능 ... 277 여러 단계에 걸친 보안 기능 ... 278 정적 페이지 ... 279 안전하지 않은 접근 통제 방법 ... 280 접근 통제 공격 ... 281 안전한 접근 통제 ... 286 다계층 접근 통제 모델 ... 289 정리 ... 292 확인문제 ... 293 09장 코드 삽입 공격 ... 295 인터프리터 언어 안에 공격 코드 삽입 ... 296 SQL 내에 공격 코드 삽입 ... 298 기본적인 취약점 공격 ... 300 로그인 우회 ... 302 SQL 인젝션 취약점 검색 ... 303 인젝션에 이용되는 다양한 구문 ... 307 UNION 연산자 ... 310 데이터베이스에 대한 정보 수집 ... 316 유용한 데이터 추출 ... 317 ODBC 에러 메시지 해킹(MS-SQL에 한해) ... 324 필터 우회 ... 329 2차 SQL 인젝션 ... 334 발전된 공격 ... 335 SQL 인젝션을 넘어서: 데이터베이스 권한 상승 공격 ... 350 SQL 문법과 에러 참조 ... 354 SQL 인젝션의 방어 ... 361 운영체제 명령 삽입 ... 366 예제 1: Perl을 통한 삽입 ... 367 예제 2: ASP를 통한 인젝션 ... 369 운영체제 명령어 삽입 취약점 검색 ... 371 운영체제 명령어 삽입 공격의 방어 ... 374 웹 스크립트 언어 안에 공격 코드 삽입 ... 374 동적 실행 취약점 ... 375 파일 포함 취약점 ... 378 스크립트 삽입 취약점의 방어 ... 380 SOAP 안으로 공격 코드 삽입 ... 381 SOAP 인젝션 취약점의 검색과 공격 ... 383 SQL 인젝션의 방어 ... 384 XPath 안으로 공격 코드 삽입 ... 385 애플리케이션 로직 파괴 ... 386 다양한 XPath 인젝션 ... 387 블라인드 XPath 인젝션 ... 388 XPath 인젝션 취약점 검색 ... 389 XPath 인젝션의 방어 ... 390 SMTP 안으로 공격 코드 삽입 ... 391 이메일 헤더 조작 ... 391 SMTP 명령어 삽입 ... 392 SMTP 삽입 취약점 검색 ... 394 SMTP 인젝션의 방어 ... 396 LDAP 안으로 공격 코드 삽입 ... 396 쿼리 속성 삽입 ... 397 검색 필터 수정 ... 399 LDAP 인젝션 취약점 검색 ... 400 LDAP 인젝션 방어 ... 401 정리 ... 401 확인문제 ... 402 10장 경로 탐색 공격 ... 405 일반적인 취약점 ... 405 경로 탐색 취약점 검색 ... 407 공격할 대상의 위치 검색 ... 407 경로 탐색 취약점의 검색 ... 408 탐색 공격에 대한 보안 대책 우회 ... 411 경로 탐색 취약점의 공격 ... 416 경로 탐색 공격 예방법 ... 417 정리 ... 418 확인문제 ... 419 11장 애플리케이션 로직 공격 ... 421 로직 결함의 특징 ... 422 현실적으로 존재하는 로직 결함 ... 423 예제 1: 취약한 비밀번호 변경 함수 ... 423 예제 2: 체크아웃을 위한 절차 ... 424 예제 3: 보험 상품 위험성 ... 426 예제 4: 은행 털기 ... 429 예제 5: 감사 흔적의 삭제 ... 431 예제 6: 비즈니스 기능 제한의 파괴 ... 433 예제 7: 대량 구매 할인 시 존재하는 결함 ... 434 예제 8: 이스케이프의 회피 ... 436 예제 9: 검색 기능 악용 ... 437 예제 10: 디버그 메시지의 착취 ... 439 예제 11: 로그인 경쟁 ... 441 로직 결함의 회피 ... 443 정리 ... 445 확인문제 ... 446 12장 애플리케이션 사용자 공격 ... 447 크로스사이트 스크립팅 ... 448 반사된 크로스사이트 스크립팅 취약점 ... 450 저장된 크로스사이트 스크립팅 취약점 ... 457 DOM 기반의 크로스사이트 스크립팅 취약점 ... 460 실제적인 크로스사이트 스크립팅 공격 ... 462 체이닝 크로스사이트 스크립팅과 다른 공격 ... 465 크로스사이트 스크립팅 공격 페이로드 ... 466 크로스사이트 스크립팅 공격 전달 매커니즘 ... 474 크로스사이트 스크립팅 취약점 발견과 악용 ... 476 HTTP 쿠키와 크로스사이트 트레이싱 ... 497 크로스사이트 스크립팅 공격 예방 ... 500 리다이렉션 공격 ... 506 리다이렉션 취약점 발견과 악용 ... 506 리다이렉션 취약점 예방 ... 511 HTTP 헤더 인젝션 ... 512 헤더 인젝션 취약점 공격 ... 513 헤더 인젝션 취약점 예방 ... 516 프레임 인젝션 ... 517 프레임 인젝션 악용 ... 518 프레임 인젝션 예방 ... 519 요청 위조 ... 519 온사이트 요청 위조 ... 519 크로스사이트 요청 위조 ... 521 JSON 하이재킹 ... 525 JSON ... 526 JSON에 대한 공격 ... 526 JSON 하이재킹 취약점 발견 ... 529 JSON 하이재킹 예방 ... 529 세션 고정 ... 530 세션 고정 취약점 발견과 악용 ... 532 세션 고정 취약점 예방 ... 534 액티브X 컨트롤 공격 ... 534 액티브X 취약점 발견 ... 535 액리브X 취약점 예방 ... 537 로컬 프라이버시 공격 ... 538 장기간 유지되는 쿠키 ... 538 캐시된 웹 컨텐츠 ... 539 검색 기록 ... 540 자동 완성 기능 ... 540 로컬 프라이버시 공격 예방 ... 541 발전된 공격 기법 ... 542 Ajax 공격 안티 DNS 피닝 ... 546 브라우저 공격 프레임워크 ... 549 정리 ... 551 확인문제 ... 551 13장 맞춤 공격 자동화 ... 555 맞춤 자동화의 사용 ... 556 유효한 식별자 수집 ... 557 기본적인 접근 방법 ... 558 힌트 찾기 ... 558 공격 스크립트 ... 560 JAttack ... 562 유용한 데이터 대량 수집 ... 569 일반적인 취약점 퍼징 ... 572 공격 종합: 버프 인트루더 ... 577 페이로드 위치 설정 ... 578 페이로드 선택 ... 579 응답 분석 설정 ... 580 공격 1: 식별자 수집 ... 581 공격 2: 정보 수집 ... 584 공격 3: 애플리케이션 퍼징 ... 586 정리 ... 588 확인문제 ... 588 14장 정보 노출 공격 ... 591 에러 메시지 공격 ... 591 스크립트 에러 메시지 ... 592 스택 추적 ... 593 디버그 메시지 정보 ... 594 서버와 데이터베이스 메시지 ... 596 공개된 정보 이용 ... 597 중요한 에러 메시지 엔지니어링 ... 598 공개된 정보 수집 ... 599 추론 이용 ... 600 정보 노출 예방 ... 602 일반적인 에러 메시지 사용 ... 602 중요한 정보 보호 ... 603 클라이언트 측의 정보 노출 최소화 ... 604 정리 ... 604 확인문제 ... 605 15장 컴파일된 애플리케이션 공격 ... 609 버퍼 오버플로우 취약점 ... 610 스택 오버플로우 ... 610 힙 오버플로우 ... 611 "off-by-one" 취약점 ... 612 버퍼 오버플로우 취약점 탐색 ... 615 정수 취약점 ... 617 정수 오버플로우 ... 617 부호 관련 문제 ... 618 정수 취약점 탐지 ... 619 포맷 스트링 취약점 ... 620 포맷 스트링 취약점 탐지 ... 621 정리 ... 621 확인문제 ... 622 16장 애플리케이션 아키텍처 공격 ... 623 계층적 아키텍처 ... 623 다층 아키텍처 공격 ... 624 계층화된 구조 보호 ... 628 공유 호스팅과 애플리케이션 서비스 공급자 ... 631 가상 호스팅 ... 631 공유된 애플리케이션 서비스 ... 632 공유된 환경 공격 ... 633 공유된 환경 보호 ... 638 정리 ... 640 확인문제 ... 641 17장 웹서버 공격 ... 643 웹서버 설정 취약점 ... 643 디폴트 계정 ... 643 디폴트 컨텐츠 ... 645 디렉터리 목록 ... 649 위험한 HTTP 메소드 ... 650 프록시로서 웹서버 ... 652 잘못 설정한 가상 호스팅 ... 654 웹서버 설정 보안 ... 655 웹서버 소프트웨어의 취약점 ... 656 버퍼 오버플로우 취약점 ... 656 경로 탐색 취약점 ... 658 인코딩과 정형화 취약점 ... 659 웹서버 취약점 발견 ... 661 웹서버 소프트웨어 보안 ... 662 정리 ... 664 확인문제 ... 665 18장 소스코드 내의 취약점 발견 ... 667 코드 검토에 대한 접근 방식 ... 668 블랙박스와 화이트박스 테스트 ... 668 코드 검토 방법론 ... 669 일반적인 취약점 시그니처 ... 670 크로스사이트 스크립팅 ... 671 SQL 인젝션 ... 672 경로 탐색 ... 673 임의의 리다이렉션 ... 674 운영체제 명령어 인젝션 ... 675 백도어 비밀번호 ... 675 네이티브 소프트웨어 버그 ... 676 소스코드 주석 ... 678 자바 플랫폼 ... 678 사용자가 제공한 데이터 확인 ... 679 세션 상호작용 ... 680 잠재적으로 위험한 API ... 680 자바 환경 설정 ... 684 ASP.NET ... 685 사용자가 제공한 데이터 확인 ... 685 세션 상호작용 ... 686 잠재적으로 위험한 API ... 687 ASP.NET 환경 설정 ... 691 PHP ... 692 사용자가 제공한 데이터 확인 ... 692 세션 상호작용 ... 695 잠재적으로 위험한 API ... 695 PHP 환경 설정 ... 701 Perl ... 704 사용자가 제공한 데이터 확인 ... 705 세션 상호작용 ... 706 잠재적으로 위험한 API ... 706 Perl 환경 설정 ... 708 자바스크립트 ... 709 데이터레이스 코드 컴포넌트 ... 710 SQL 인젝션 ... 710 위험한 함수 호출 ... 712 코드 브라우징에 대한 도구 ... 712 정리 ... 713 확인문제 ... 714 19장 웹 애플리케이션 해커의 도구상자 ... 717 웹 브라우저 ... 717 인터넷 익스플로러 ... 718 파이어폭스 ... 718 오페라 ... 720 통합된 검사 스위트 ... 721 도구 작동법 ... 722 특징 비교 ... 734 인터셉팅 프록시의 대안 ... 741 취약점 스캐너 ... 743 스캐너에서 발견한 취약점 ... 743 스캐너의 한계 ... 745 스캐너가 직면할 기술적인 문제 ... 747 현재 사용되는 웹 스캐너 ... 749 취약점 스캐너 사용 ... 751 그 외의 도구 ... 753 닉토 ... 753 히드라 ... 753 커스텀 스크립트 ... 754 정리 ... 757 20장 웹 애플리케이션 해커의 공격 방법론 ... 759 일반적인 가이드라인 ... 761 1. 애플리케이션 컨텐츠 맵 작성 ... 763 1.1. 화면상의 컨텐츠 검토 ... 763 1.2. 공개된 리소스 검색 ... 764 1.3. 숨은 컨텐츠 발견 ... 765 1.4. 디폴트 컨텐츠 발견 ... 765 1.5. 식별자 지정 함수 목록화 ... 766 1.6. 디버그 매개변수 검사 ... 766 2. 애플리케이션 분석 ... 767 2.1. 기능 식별 ... 767 2.2. 데이터 입력 지점 검색 ... 767 2.3. 사용된 기술 식별 ... 768 2.4. 공격 취약 영역 맵 작성 ... 768 3. 클라이언트 측 통제 검사 ... 769 3.1. 클라이언트에 의해 전달되는 데이터 검사 ... 769 3.2. 사용자 입력에 대한 클라이언트 측 통제 검사 ... 770 3.3. 씩 클라이언트 컴포넌트 검사 ... 771 4. 인증 메커니즘 검사 ... 774 4.1. 메커니즘 이해 ... 774 4.2. 비밀번호 강력도 검사 ... 775 4.3. 사용자 이름 목록화 검사 ... 775 4.4. 비밀번호 추측 공격 가능성 검사 ... 776 4.5. 계정 복구 기능 검사 ... 776 4.6. 자동 로그인 기능 검사 ... 777 4.7. 의인화 기능 검사 ... 778 4.8. 사용자 이름 유일성 검사 ... 778 4.9. 자동 생성되는 계정의 예측 가능성 검사 ... 779 4.10. 사용자 계정 정보가 안전하지 않게 전달되는지 검사 ... 779 4.11. 안전하지 않게 사용자 계정 정보가 배포되는지 검사 ... 780 4.12. 로직 결함 검사 ... 780 4.13. 다른 사용자의 권한을 얻기 위한 공격 ... 782 5. 세션 관리 메커니즘 검사 ... 783 5.1. 메커니즘 이해 ... 783 5.2. 생성되는 토큰의 의미 검사 ... 784 5.3. 토큰의 예측 가능성 검사 ... 785 5.4. 안전하지 않은 토큰 전송 검사 ... 786 5.5. 로그 내에 세션 토큰 노출 검사 ... 787 5.6. 세션에 토큰 매핑 검사 ... 787 5.7. 세션 종료 검사 ... 788 5.8. 세션 고정 검사 ... 789 5.9. XSRF 검사 ... 789 5.10. 쿠키 영역 검사 ... 790 6. 접근 통제 검사 ... 791 6.1. 접근 통제 요구 이해 ... 791 6.2. 여러 계정으로 검사 ... 792 6.3. 제한된 접근으로 검사 ... 792 6.4. 안전하지 않은 접근 통제 방법 검사 ... 793 7. 입력 기반 취약점 검사 ... 794 7.1. 모든 요청 매개변수 퍼징 ... 794 7.2. SQL 인젝션 검사 ... 798 7.3. XSS와 기타 응답 인젝션 검사 ... 800 7.4. 운영체제 명령어 인젝션 검사 ... 803 7.5. 경로 탐색 검사 ... 804 7.6. 스크립트 인젝션 검사 ... 807 7.7 파일 포함 검사 ... 807 8. 특정 기능에 대한 입력 값 취약점 검사 ... 808 8.1. SMTP 인젝션 검사 ... 808 8.2. 네이티브 소프트웨어 취약점 검사 ... 809 8.3. SOAP 인젝션 검사 ... 811 8.4. LDAP 인젝션 검사 ... 812 8.5. XPath 인젝션 검사 ... 813 9. 로직 결함 검사 ... 814 9.1. 핵심 공격 취약 영역 식별 ... 814 9.2. 다단계 처리 검사 ... 814 9.3. 불완전한 입력 값 처리 검사 ... 815 9.4. 신뢰 경계 구간 검사 ... 816 9.5. 처리 로직 검사 ... 816 10. 공유된 호스팅 환경 취약점 검사 ... 817 10.1. 공유된 환경에서 애플리케이션 분리 검사 ... 817 10.2 ASP 호스팅된 애플리케이션 사이의 분리 검사 ... 818 11. 웹서버 취약점 검사 ... 818 11.1. 디폴트 자격 증명 검사 ... 819 11.2. 디폴트 컨텐츠 검사 ... 819 11.3. 위험한 HTTP 메소드 검사 ... 819 11.4. 프록시 기능 검사 ... 820 11.5. 가상 호스팅의 잘못된 설정 검사 ... 820 11.6. 웹서버 소프트웨어 버그 검사 ... 821 12. 그밖의 다양한 검사 ... 821 12.1. DOM 기반 공격 검사 ... 822 12.2. 프레임 인젝션 검사 ... 823 12.3. 로컬 프라이버시 취약점 검사 ... 823 12.4. 정보 노출 추적 ... 824 12.5. 약한 SSL 암호 검사 ... 825 찾아보기 ... 826