머리말 ... xvi 서론 ... xx 우리는 안전하다, 우리는 방화벽을 갖추고 있다. ... xxii 오류는 인간의 것이다. ... xxii 벽에 쓰기(방화벽에 쓰기) ... xxii 이 책의 구성 ... xxii 각 부의 구성 ... xxii 각 장의 구성 ... xxiv 맺음말 ... xxvi 감사의 글 ... xxvi 기고가 ... xxvi Part 1 E-커머스 영역 ... 1 사례 연구 : Acme Art 주식회사, 해킹당하다!!! ... 2 Chapter 1 웹 언어들 : 21세기의 바빌론 ... 11 개요 ... 12 웹의 언어들 ... 13 HTML ... 13 동적 HTML(DHTML) ... 16 XML ... 16 XHTML ... 17 펄(Perl) ... 18 콜드퓨전(ColdFusion) ... 25 액티브 서버 페이지(Active Server Pages) ... 28 CGI ... 34 자바(Java) ... 39 요약 ... 52 Chapter 2 웹 서버와 데이터베이스 서버 ... 55 개요 ... 56 웹 서버들 ... 56 아파치 ... 56 마이크로소프트의 Internet Information Server(IIS) ... 63 데이터베이스 서버들 ... 72 마이크로소프트 SQL 서버 ... 74 오라클 ... 82 요약 ... 93 Chapter 3 쇼핑 카트와 지불 통로 ... 95 개요 ... 96 상점의 혁명 ... 97 온라인 쇼핑 ... 100 쇼핑 카트 시스템들 ... 101 온라인 쇼핑 카트의 범위와 수명 ... 101 선택한 컴포넌트의 수집, 분석, 비교 ... 102 전체 금액의 자취를 유지하기 ... 102 생각의 변화 ... 102 구매 처리 ... 102 쇼핑 카트 애플리케이션의 구현 ... 104 상품 카탈로그 ... 105 세션 관리 ... 105 데이터베이스 연동 ... 105 지불 통로와의 통합 ... 106 잘못 구현된 쇼핑 카트의 예들 ... 106 카렐로(Carello) 쇼핑 카트 ... 106 DCShop 쇼핑 카트 ... 106 Hassan Consulting의 쇼핑 카트 ... 107 Cart32와 여러 가지 다른 쇼핑 카트들 ... 107 지불 처리 ... 107 주문 마치기 ... 108 지불 방법 ... 108 검증과 사기 방지 ... 108 주문 처리와 영수증의 생성 ... 108 지불 처리 시스템의 개요 ... 109 주문 확인 페이지 ... 109 신용카드 사기와 싸우기 위한 획기적인 방법들 ... 109 지불 통로 인터페이스 ... 111 거래 데이터베이스 인터페이스 ... 111 지불 통로와의 연동 - 예 ... 112 지불 시스템 구현 논점들 ... 115 통합 ... 115 임시 정보 ... 115 SSL ... 116 사용자 프로필의 저장 ... 116 PayPal - 개인이 온라인 지불을 받을 수 있도록 해주는 사이트 ... 116 쇼핑 카트와 지불 통로와의 잘못된 통합으로 인한 취약점들 ... 117 요약 ... 118 Chapter 4 HTTP와 HTTPS : 해킹 프로토콜들 ... 119 개요 ... 120 웹의 프로토콜들 ... 121 HTTP ... 121 HTTPS(SSL을 통한 HTTP) ... 127 요약 ... 132 Chapter 5 URL : 웹 해커의 무기 ... 133 개요 ... 134 URL 구조 ... 135 웹 해커의 심리 ... 137 URL들과 파라미터 전달 ... 138 URL 인코딩 ... 140 메타 문자들 ... 140 URL 문자열에서 특수 문자들 표시하기 ... 141 메타 문자들과 입력 검증 ... 142 유니코드 인코딩 ... 143 해킹당한 Acme 아트 센터 ... 144 URL 인코딩의 남용 ... 144 유니코드의 취약점 ... 144 유니코드 인코딩과 코드 레드의 쉘 코드 ... 145 이중 해석 또는 과잉 해석으로 인한 취약점 ... 147 HTML 폼 ... 149 HTML 폼의 해부 ... 150 입력 요소들 ... 152 GET과 POST를 통한 파라미터 전달 ... 152 요약 ... 158 Part 2 URL 해결되어지다 ... 161 사례 연구 : 정찰대가 기업의 자산을 새어나가게 만든다 ... 162 Chapter 6 웹 : 그 숨겨진 세계 ... 165 개요 ... 166 웹 애플리케이션의 컴포넌트들 ... 166 프런트 엔드 웹 서버 ... 167 웹 애플리케이션 실행 환경 ... 169 데이터베이스 서버 ... 171 컴포넌트 작성하기 ... 171 기본적으로 주어지는 애플리케이션 처리 환경 ... 171 웹 서버 API와 플러그인 ... 171 URL 매핑과 내부의 프록시 설정 ... 173 백-엔드 애플리케이션 서버와의 프록시 설정 ... 173 설정 예들 ... 173 데이터베이스 접속 ... 177 각 언어가 제공하는 데이터베이스 API들의 사용 ... 178 예들 ... 178 해커들 중 가장 뛰어난 기술을 가진 해커 ... 179 ODBC 사용 ... 181 JDBC 사용 ... 182 특수화된 웹 애플리케이션 서버들 ... 183 URL로부터 웹 애플리케이션 컴포넌트들을 식별하기 ... 183 기술을 식별하기 위한 기본사항들 ... 184 예들 ... 186 추가적인 예들 ... 188 기술 식별을 위한 더 진보적인 방법들 ... 191 예들 ... 191 데이터베이스 서버들을 식별하기 ... 193 대응책들 ... 195 법칙 1 : HTTP 헤더를 통해 일어나는 정보의 누출을 최소화하라 ... 196 법칙 2 : 브라우저로 전송되는 에러 정보를 차단하라 ... 196 요약 ... 196 Chapter 7 행간의 뜻을 알아내자 ... 197 개요 ... 198 HTML을 통한 정보 누출 ... 199 브라우저가 여러분에게 보여 주지 않는 것이 무엇인가 ... 199 넷스케이프 네비게이터 - View|Page Source ... 200 인터넷 익스플로러 - View|Source ... 202 살펴보아야 할 단서들 ... 203 HTML 주석들 ... 203 수정사항에 대한 이력 ... 204 개발자 또는 저자에 대한 상세 정보 ... 204 웹 애플리케이션의 다른 영역으로의 상호 참조 ... 204 기억해야 할 사항들과 위치 지정자들 ... 205 애플리케이션 서버들에 의해 삽입된 주석들 ... 206 오래된 '주석 처리되어 작동하지 않는' 코드 ... 207 내부 그리고 외부로 연결되는 하이퍼링크들 ... 207 이메일 주소와 사용자명 ... 208 UBE, UCE, 무의미한 메일, 그리고 스팸 메일 ... 209 키워드와 메타 태그들 ... 209 숨겨진 필드들 ... 210 클라이언트측 스크립트들 ... 211 자동으로 소스를 이동해 주는 기법들 ... 212 wget의 이용 ... 213 grep의 이용 ... 216 Sam Spade, Black Widow, 그리고 Teleport Pro ... 218 요약 ... 219 Chapter 8 사이트 연계 분석 ... 221 개요 ... 222 HTML과 사이트 연계 분석 ... 222 사이트 연계 분석을 위한 방법론 ... 223 단계 1 : 웹 사이트 수집하기 ... 225 수작업으로 사이트 수집하기 ... 225 HTTP 응답 헤더를 더 자세히 살펴보기 ... 225 사이트 연계를 분석하기 위한 몇 가지 대중적인 도구들 ... 226 단계 1 정리 ... 230 수집기들과 방향 재설정 ... 231 단계 2 : 애플리케이션 구조 내에서 컴포넌트들의 논리적인 그룹 생성하기 ... 233 단계 2 정리 ... 236 단계 3 : 각각의 웹 리소스 분석하기 ... 236 1. 확장자 분석 ... 237 2. URL 경로 분석 ... 237 3. 세션 분석 ... 238 4. 폼 판단 ... 239 5. 애플릿과 객체 식별 ... 239 6. 클라이언트측 스크립트 평가 ... 240 7. 주석과 이메일 주소 분석 ... 241 단계 3 정리 ... 241 단계 4 : 웹 리소스들의 목록 생성 ... 242 요약 ... 243 Part 3 해커들은 어떻게 해킹을 하는가? ... 245 사례 연구 : 어떻게 Boris가 Anna의 미술용품에 대한 요구를 충족시켜 주었는가? ... 246 Chapter 9 사이버 낙서 ... 249 개요 ... 250 Acme 여행사 웹 사이트의 훼손 ... 250 목표 대상 네트워크의 지도 만들기 ... 253 프록시 서버를 역으로 사용하기 ... 255 HTTP 인증을 강제 수행하기 ... 258 디렉토리 탐색 ... 262 훼손된 페이지들을 업로드하기 ... 266 무엇이 잘못되었는가? ... 269 HTTP 강제 인증 도구들 ... 272 Brutus ... 272 WebCracker 4.0 ... 274 Acme 여행사가 당했던 해킹에 대한 대응책들 ... 276 역프록싱을 하지 못하게 설정하기 ... 276 더 강력한 HTTP 인증 비밀번호 사용하기 ... 277 디렉토리 탐색을 하지 못하게 설정하기 ... 277 요약 ... 278 Chapter 10 E-Shoplifting ... 279 개요 ... 280 온라인 상점 구축하기 ... 281 상품 소개 ... 282 쇼핑 카트 ... 282 결제 페이지 ... 283 데이터베이스 ... 283 모든 요소들의 통합 ... 283 온라인 상점들의 혁명 ... 283 Acme 패션 주식회사를 털다 ... 285 Acme의 온라인 상점을 구축하다 ... 286 문제점 추적 ... 287 클라이언트측 검증을 지나치기 ... 294 숨겨진 필드들을 살펴보기 위해 검색 엔진을 사용하기 ... 295 www.acme-fashions.com을 정비하다 ... 301 정비된 시스템에 새로운 문제점이 등장하다 ... 301 이후의 재발 방지 대응책들 ... 307 원격 명을 실행한 쇼핑 카트들 ... 308 요약 ... 310 Chapter 11 데이터베이스 접근 ... 311 개요 ... 312 직접적인 SQL 공격 ... 312 중고차 매매 사이트가 해킹당하다 ... 315 입력 정보 검증 ... 315 대응책 ... 321 요약 ... 322 Chapter 12 자바 : 원격 명령 실행 ... 323 개요 ... 324 자바 기반 기술 ... 325 자바 애플리케이션 서버들의 구조 ... 326 자바 웹 서버 공격하기 ... 327 자바 애플리케이션 서버의 헛점 식별하기 ... 329 예 : 온라인 주식 거래 포탈 ... 329 FileServlet 호출 ... 333 대응책 ... 342 자바 웹 서버를 강화하자 ... 342 다른 개념적인 대응책들 ... 343 요약 ... 345 Chapter 13 다른 사람 훙내내기 ... 347 개요 ... 348 세션 가로채기(hijacking) : 도둑맞은 신원과 깨진 데이트 ... 348 3월 5일 아침 7시 - Alice의 집 ... 348 아침 8시 30분 - Alice의 직장 ... 350 오전 10시 - Bob의 사무실 ... 351 오전 11시 - Bob의 사무실 ... 353 오후 12시 30분 - Alice의 사무실 ... 356 저녁 9시 30분 - Bertolini 이탈리안 식당 ... 357 세션 가로채기 ... 357 세션 가로채기 공격의 해부 ... 360 애플리케이션 상태 다이어그램 ... 360 HTTP와 세션 추적 ... 362 무상태 애플리케이션과 상태 유지 애플리케이션 ... 364 쿠키와 숨겨진 필드들 ... 365 유닉스 플랫폼에서 넷스케이프를 사용한 쿠키 제어 ... 366 쿠키 ... 366 숨겨진 필드들 ... 367 세션과 상태 추적의 구현 ... 367 세션 식별자는 유일해야만 한다 ... 367 세션 식별자는 '추측 가능'하지 않아야 한다 ... 368 세션 식별자는 독립적이어야 한다 ... 368 세션 식별자는 클라이언트측 연결과 매핑되어야 한다 ... 368 요약 ... 369 Chapter 14 버퍼 오버플로 : 온-더-플라이 ... 371 개요 ... 372 예 ... 372 버퍼 오버플로 ... 373 버퍼 오버플로 : 가장 간단한 형태 ... 374 버퍼 오버플로 : 예 ... 380 사후의 대응책 ... 386 요약 ... 386 Part 4 고차원적인 웹 쿵후 ... 389 사례 연구 ... 390 Chapter 15 웹 해킹 : 자동화된 도구들 ... 393 개요 ... 394 Netcat ... 394 Whisker ... 396 Brute Force ... 399 Brutus ... 401 Acilles ... 406 Cookie Pal ... 408 Teleport Pro ... 419 보안 권고사항들 ... 420 요약 ... 421 Chapter 16 웜(Worms) ... 423 개요 ... 424 코드 레드 웜(Code Red Worm) ... 424 2000년 1월 26일 ... 424 2001년 6월 18일 : 첫 번째 공격 ... 425 2001년 7월 12일 ... 425 2001년 7월 19일 ... 427 2001년 8월 4일 ... 428 님다 웜(Nimda Worm) ... 429 웜 진화와 싸우기 ... 431 반응과 응답 ... 432 요약 ... 432 Chapter 17 IDS 패배시키기 ... 433 개요 ... 434 IDS 기본사항들 ... 434 네트워크 IDS들 ... 435 호스트 기반 IDS들 ... 435 IDS 정확성 ... 436 IDS 지나가기(Getting Past) ... 436 보안 해킹 - SSL을 통한 해킹 ... 437 예 ... 437 SSL을 통한 공격 터널링 ... 440 SSL을 통한 침입 탐지 ... 441 SSL 트래픽 스니핑(Sniffing) ... 442 다형의(Polymorphic) URL들 ... 445 16진수 인코딩 ... 446 잘못된 유니코드/과도한 인코딩 ... 447 거짓 경로들을 추가하기 ... 448 슬래시-닷-슬래시(/./) 문자열을 삽입하기 ... 448 비표준 경로 구분자들의 사용 ... 449 다중 슬래시들의 사용 ... 449 다양한 기술들의 혼합 ... 450 잘못된 긍정(False Positives)을 발생시키기 ... 450 잠재적 대응책들 ... 451 취약점 점검자로서 IDS 회피 ... 452 SSL 해독 ... 452 URL 디코딩 ... 453 요약 ... 453 부록 A : 웹과 데이터베이스가 사용하는 포트 목록 ... 455 부록 B : HTTP/1.1과 HTTP/1.0의 요청 방식과 필드 정의들 ... 459 부록 C : 원격으로 명령 실행하는 예 ... 463 부록 D : 소스 코드, 파일, 그리고 디렉토리의 노출 속임수 표 ... 467 부록 E : 리소스들과 관련 링크들 ... 475 부록 F : 웹 관련된 도구들 ... 477 찾아보기 ... 481