책 소개
[ 소개 ]
세상을 해킹하자.
인터넷 어디든 존재하지만 안전하지 않은 웹 애플리케이션. 은행, 제조업체 등 많은 기업의 웹 애플리케이션에는 수많은 취약점이 존재하며, 공격자에게 개인 정보를 유출하고 부정을 유발하거나 다른 시스템을 파괴하도록 허용하고 있다. 혁신적인 내용을 담은 이 책은 악의적인 해커들이 웹 애플리케이션을 어떻게 공격하는지 보여준다.
이 책은 보안/해킹 분야 전문가들이 집필한 실전서로서, 실제 취약점을 찾기 위해 어떤 방법으로 접근해야 하는지, 웹 애플리케이션에서 존재하는 취약점을 찾고 공격하기 위해 어떤 과정을 거쳐야 하는지 자세히 설명한다. 이 책에서 다음과 같은 내용을 배울 수 있을 것이다.
■ 웹 애플리케이션의 핵심 보안 메커니즘을 공격하고 특정 권한을 획득하는 방법
■ 공격 취약 영역을 분석하고 잠재적으로 공격 가능한 지점을 찾는 방법
■ HTML, 자바, 액티브X, 플래시에 구현돼있는 클라이언트 측 통제를 무너뜨리는 방법
■ 애플리케이션에 존재하는 로직 결함을 발견하는 방법
■ 더 빠르고 원하는 결과를 쉽게 얻기 위해 자동화된 도구를 이용하는 공격 방법
■ C#, 자바, PHP 같은 프로그래밍 언어에서 소스코드를 분석해 일반적인 취약점을 찾는 방법
지피지기면 백전백승
애플리케이션을 보호하기 위해서는 애플리케이션에 존재하는 취약점을 먼저 파악하고 있어야 한다. 웹 애플리케이션 설계자나 관리자라면 이 책을 읽고 모든 공격을 방어하는 데 필요한 보호 방법을 습득함으로써 웹 애플리케이션을 빈틈없이 대비할 수 있을 것이다. 개발자라면 웹 애플리케이션을 안전하게 개발하기 위해 어떻게, 어느 부분을 강화해야 하는지 배울 수 있을 것이다.
[ 이 책의 대상 독자 ]
이 책을 읽어야 하는 가장 주요한 독자는 웹 애플리케이션을 공격하는 방법에 전문적이거나 개인적인 관심이 높은 모든 사람이다. 또한 웹 애플리케이션을 개발하거나 관리하는 사람을 위한 책이기도 하다. 웹 애플리케이션 개발자나 관리자는 해커들이 공격하는 방법을 이해하고 익힘으로써 현재 개발하거나 관리하고 있는 웹 애플리케이션을 보호하는 방법을 배울 수 있을 것이다.
[ 이 책의 구성 ]
이 책의 앞부분은 현재 웹 애플리케이션 보안 현황과 가까운 미래에 웹 애플리케이션 보안이 어떻게 발전될지에 대한 동향을 설명하는 장으로 시작한다. 중반부터는 핵심 주제인 웹 애플리케이션을 공격하는 데 사용하는 기술들을 설명한다. 뒷부분은 이 책에서 소개한 다양한 기술적, 방법적 요소를 포함하고 있는 세 개의 장으로 결론을 맺는다.
[ 소스코드 ]
http://mdsec.net/wahh/code1e.html에서 이 책에 나오는 소스코드와 각종 보충자료를 찾을 수 있다.
■ 책에 나오는 스크립트 소스코드
■ 책에 나오는 자원들과 도구에 대한 현재 링크 목록
■ 일반 애플리케이션을 공격하는 데 필요한 작업 체크 리스트
■ 각 장 확인문제에 대한 해답
■ 책에서 다룬 많은 취약점 등 해킹 문제에 대한 도전
목차
목차
- 01장 웹 애플리케이션 보안 43
- 웹 애플리케이션의 발전 43
- 일반적인 웹 애플리케이션 기능 45
- 웹 애플리케이션의 혜택 46
- 웹 애플리케이션 보안 47
- “이 사이트는 안전합니다.” 48
- 보안 문제의 핵심: 사용자가 임의의 입력 값을 제공할 수 있다 50
- 주요 문제점 52
- 미성숙된 보안 의식 52
- 자체 개발 52
- 개발하기 쉽다는 함정 52
- 빠르게 진화하는 위협 프로파일 53
- 자원과 시간 제약 요소 53
- 지나치게 확장돼 응용된 기술 53
- 새 보안 경계선 54
- 웹 애플리케이션 보안의 미래 55
- 정리 56
- 웹 애플리케이션의 발전 43
- 02장 핵심 방어 메커니즘 57
- 사용자 접근 처리 58
- 인증 58
- 세션 관리 59
- 접근 제어 60
- 사용자 입력 값 처리 61
- 다양한 입력 값 62
- 입력 값 조작에 대한 처리 방법 63
- 위험하다고 알려진 것들은 모두 차단 63
- 안전하다고 알려진 것들은 모두 수용 64
- 불순물 제거 64
- 안전한 데이터 처리 65
- 의미론적 검증 65
- 경계 검증 65
- 다단계 검증과 정규화 68
- 공격자 핸들링 70
- 에러 핸들링 70
- 감사 로그 관리 71
- 관리자에 경고 73
- 공격으로부터의 방어 74
- 애플리케이션 관리 75
- 정리 76
- 확인문제 77
- 사용자 접근 처리 58
- 03장 웹 애플리케이션 기술 79
- HTTP 프로토콜 79
- HTTP 요청 80
- HTTP 응답 81
- HTTP 메소드 82
- URL 84
- HTTP 헤더 85
- 일반적인 헤더 85
- 요청 헤더 85
- 응답 헤더 86
- 쿠키 87
- 상태 코드 88
- HTTPS 90
- HTTP 프록시 90
- HTTP 인증 91
- 웹 기능 92
- 서버 측 기능 92
- 자바 플랫폼 93
- ASP.NET 95
- PHP 95
- 클라이언트 측 기능 96
- HTML 96
- 하이퍼링크 96
- 폼 97
- 자바스크립트 99
- 씩 클라이언트(Thick Client) 컴포넌트 100
- 상태와 세션 100
- 서버 측 기능 92
- 인코딩 스키마 101
- URL 인코딩 101
- 유니코드 인코딩 102
- HTML 인코딩 103
- Base64 인코딩 104
- Hex 인코딩 104
- 정리 105
- 확인문제 105
- HTTP 프로토콜 79
- 04장 애플리케이션 지도 작성 107
- 컨텐츠와 기능 수집 107
- 웹 스파이더링 108
- User-Directed 스파이더링 111
- 숨겨진 컨텐츠의 발견 113
- 무차별 대입 공격 기법 114
- 제시된 컨텐츠에서 추측 118
- 공개된 정보 이용 120
- 웹서버 프로그램의 이용 122
- 애플리케이션 페이지와 기능 경로 124
- 숨겨진 변수의 발견 126
- 애플리케이션의 분석 127
- 사용자 입력이 가능한 곳 확인 128
- 서버 측 기술 확인 130
- 배너 가져오기 130
- HTTP 핑거프린팅 130
- 파일 확장자 132
- 디렉터리명 134
- 세션 토큰 135
- 제3자 코드 컴포넌트 135
- 서버 측 기능 확인 136
- 요청 값 해부 137
- 애플리케이션 행동의 추측 138
- 핵심 공격 취약 영역 매핑 140
- 정리 141
- 확인문제 142
- 컨텐츠와 기능 수집 107
- 05장 클라이언트 측 통제 우회 145
- 클라이언트를 통한 데이터 전송 145
- 숨겨진 폼 필드 146
- HTTP 쿠키 149
- URL 매개변수 150
- 리퍼러 헤더 151
- 변형된 데이터 152
- ASP.NET ViewState 153
- 사용자 데이터의 획득: HTML 폼 158
- 길이 제한 158
- 스크립트 기반 검증 160
- 비활성화된 요소 162
- 사용자 데이터의 획득: 씩 클라이언트 컴포넌트 164
- 자바 애플릿 164
- 자바 바이트코드의 디컴파일 167
- 바이트코드 혼란 기법에 대응하기 170
- 액티브X 컨트롤 173
- 역공학 174
- 엑스포티드 함수 조작 176
- 컨트롤에 의해 처리된 입력 값의 고정 177
- 관리된 코드 디컴파일링 178
- 쇽웨이브 플래시 객체 179
- 자바 애플릿 164
- 클라이언트 측 데이터의 안전한 처리 184
- 클라이언트를 통한 데이터 전송 184
- 클라이언트가 생성한 데이터 검증 185
- 로깅과 경고 186
- 정리 187
- 확인문제 187
- 클라이언트를 통한 데이터 전송 145
- 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
- 숨겨진 시퀀스 240
- 시간 의존성 242
- 약한 무작위 번호 생성 244
- 세션 토큰을 처리할 때 발생하는 취약점 248
- 네트워크상의 토큰 노출 248
- 로그에서 토큰 노출 252
- 세션에 대한 취약한 토큰 매핑 254
- 세션 종료의 취약점 256
- 토큰 하이재킹에 대한 클라이언트 노출 258
- 개방적인 쿠키 범위 259
- 쿠키 도메인 제한 259
- 쿠키 경로 제한 262
- 안전한 세션 관리 263
- 강력한 토큰 생성 264
- 토큰이 생성되고 나서 없어질 때까지 안전하게 보호 265
- 페이지당 토큰 268
- 로그, 감시, 경고 269
- 민감한 세션 만료 269
- 정리 270
- 확인문제 271
- 사용자의 상태에 대한 유지 필요 232
- 08장 접근 통제 공격 273
- 일반적인 취약점 274
- 보안 기능이 허술하게 돼있는 경우 275
- 식별자를 기반으로 한 기능 277
- 여러 단계에 걸친 보안 기능 278
- 정적 페이지 279
- 안전하지 않은 접근 통제 방법 280
- 접근 통제 공격 281
- 안전한 접근 통제 286
- 다계층 접근 통제 모델 289
- 정리 292
- 확인문제 293
- 일반적인 취약점 274
- 09장 코드 삽입 공격 295
- 인터프리터 언어 안에 공격 코드 삽입 296
- SQL 내에 공격 코드 삽입 298
- 기본적인 취약점 공격 300
- 로그인 우회 302
- SQL 인젝션 취약점 검색 303
- 문자열 데이터 304
- 숫자 데이터 305
- 인젝션에 이용되는 다양한 구문 307
- SELECT문 307
- INSERT문 308
- UPDATE문 309
- DELETE문 310
- UNION 연산자 310
- 데이터베이스에 대한 정보 수집 316
- 유용한 데이터 추출 317
- 오라클 해킹 317
- MS-SQL 해킹 321
- ODBC 에러 메시지 해킹(MS-SQL에 한해) 324
- 테이블과 칼럼 이름의 추출 325
- 임의의 데이터 추출 327
- 반복 이용 328
- 필터 우회 329
- 막혀진 문자 회피 329
- 간단한 검증 우회 330
- SQL 주석 이용 330
- 막혀진 문자열 조작 331
- 동적 실행 이용 331
- 안전하지 않게 구현된 필터의 공격 332
- 2차 SQL 인젝션 334
- 발전된 공격 335
- 숫자를 이용한 데이터의 추출 336
- Out-of-Band 채널 이용 337
- 추론 이용: 조건 응답 341
- SQL 인젝션을 넘어서: 데이터베이스 권한 상승 공격 350
- MS-SQL 351
- 오라클 352
- MySQL 353
- SQL 문법과 에러 참조 354
- SQL 문법 355
- SQL 에러 메시지 357
- SQL 인젝션의 방어 361
- 부분적인 효과 361
- 매개변수화된 쿼리 363
- 더욱 철저한 방어 365
- 운영체제 명령 삽입 366
- 예제 1: Perl을 통한 삽입 367
- 예제 2: ASP를 통한 인젝션 369
- 운영체제 명령어 삽입 취약점 검색 371
- 운영체제 명령어 삽입 공격의 방어 374
- 웹 스크립트 언어 안에 공격 코드 삽입 374
- 동적 실행 취약점 375
- PHP에서의 동적 실행 375
- ASP에서 동적 실행 376
- 동적 실행 취약점의 발견 377
- 파일 포함 취약점 378
- 원격 파일 포함 378
- 로컬 파일 포함 379
- 파일 포함 취약점의 발견 379
- 스크립트 삽입 취약점의 방어 380
- 동적 실행 취약점 375
- 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
- 커스텀 인코딩을 이용한 파일명 생성 414
- 경로 탐색 취약점의 공격 416
- 경로 탐색 공격 예방법 417
- 정리 418
- 확인문제 419
- 11장 애플리케이션 로직 공격 421
- 로직 결함의 특징 422
- 현실적으로 존재하는 로직 결함 423
- 예제 1: 취약한 비밀번호 변경 함수 423
- 기능 423
- 가정 423
- 공격 424
- 예제 2: 체크아웃을 위한 절차 424
- 기능 425
- 가정 425
- 공격 425
- 예제 3: 보험 상품 위험성 426
- 기능 426
- 가정 427
- 공격 427
- 예제 4: 은행 털기 429
- 기능 429
- 가정 429
- 공격 430
- 예제 5: 감사 흔적의 삭제 431
- 기능 431
- 가정 432
- 공격 432
- 예제 6: 비즈니스 기능 제한의 파괴 433
- 기능 433
- 가정 433
- 공격 433
- 예제 7: 대량 구매 할인 시 존재하는 결함 434
- 기능 435
- 가정 435
- 공격 435
- 예제 8: 이스케이프의 회피 436
- 기능 436
- 가정 436
- 공격 436
- 예제 9: 검색 기능 악용 437
- 기능 438
- 가정 438
- 공격 438
- 예제 10: 디버그 메시지의 착취 439
- 기능 439
- 가정 440
- 공격 440
- 예제 11: 로그인 경쟁 441
- 기능 441
- 가정 441
- 공격 442
- 예제 1: 취약한 비밀번호 변경 함수 423
- 로직 결함의 회피 443
- 정리 445
- 확인문제 446
- 12장 애플리케이션 사용자 공격 447
- 크로스사이트 스크립팅 448
- 반사된 크로스사이트 스크립팅 취약점 450
- 취약점 악용 451
- 저장된 크로스사이트 스크립팅 취약점 457
- 업로드된 파일에 크로스사이트 스크립팅 저장 459
- DOM 기반의 크로스사이트 스크립팅 취약점 460
- 실제적인 크로스사이트 스크립팅 공격 462
- 체이닝 크로스사이트 스크립팅과 다른 공격 465
- 크로스사이트 스크립팅 공격 페이로드 466
- 가상 웹페이지 변조 466
- 트로이잔 삽입 467
- 사용자 행동 유도 468
- 신뢰 관계 악용 469
- 클라이언트 측 공격 증가 470
- 크로스사이트 스크립팅 공격 전달 매커니즘 474
- 반사와 DOM 기반의 크로스사이트 스크립팅 공격 전달 474
- 저장된 크로스사이트 스크립팅 공격 전송 476
- 크로스사이트 스크립팅 취약점 발견과 악용 476
- 반사된 크로스사이트 스크립팅 취약점 발견과 악용 478
- 저장된 크로스사이트 스크립팅 취약점 발견과 악용 491
- DOM 기반의 크로스 사이트 스크립팅 취약점 발견과 악용 493
- HTTP 쿠키와 크로스사이트 트레이싱 497
- 크로스사이트 스크립팅 공격 예방 500
- 반사되거나 저장된 크로스사이트 스크립팅 예방 500
- DOM 기반의 크로스사이트 스크립팅 예방 504
- XST 예방 505
- 반사된 크로스사이트 스크립팅 취약점 450
- 리다이렉션 공격 506
- 리다이렉션 취약점 발견과 악용 506
- 장애물 우회 공격 508
- 리다이렉션 취약점 예방 511
- 리다이렉션 취약점 발견과 악용 506
- HTTP 헤더 인젝션 512
- 헤더 인젝션 취약점 공격 513
- 쿠키 삽입 514
- 다른 공격 수행 514
- HTTP 응답 분리 514
- 헤더 인젝션 취약점 예방 516
- 헤더 인젝션 취약점 공격 513
- 프레임 인젝션 517
- 프레임 인젝션 악용 518
- 프레임 인젝션 예방 519
- 요청 위조 519
- 온사이트 요청 위조 519
- 크로스사이트 요청 위조 521
- XSRF 취약점 공격 522
- XSFR 취약점 예방 523
- JSON 하이재킹 525
- JSON 526
- JSON에 대한 공격 526
- 배열 생성자 함수 재정의 527
- 콜백 함수 구현 528
- JSON 하이재킹 취약점 발견 529
- JSON 하이재킹 예방 529
- 세션 고정 530
- 세션 고정 취약점 발견과 악용 532
- 세션 고정 취약점 예방 534
- 액티브X 컨트롤 공격 534
- 액티브X 취약점 발견 535
- 액티브X 취약점 예방 537
- 로컬 프라이버시 공격 538
- 장기간 유지되는 쿠키 538
- 캐시된 웹 컨텐츠 539
- 검색 기록 540
- 자동 완성 기능 540
- 로컬 프라이버시 공격 예방 541
- 발전된 공격 기법 542
- Ajax 공격 542
- 비동기 오프사이트 요청 544
- 안티 DNS 피닝 546
- 가설 연역적 공격 546
- DNS 피닝 548
- DNS 피닝에 대한 공격 548
- 브라우저 공격 프레임워크 549
- Ajax 공격 542
- 정리 551
- 확인문제 551
- 크로스사이트 스크립팅 448
- 13장 맞춤 공격 자동화 555
- 맞춤 자동화의 사용 556
- 유효한 식별자 수집 557
- 기본적인 접근 방법 558
- 힌트 찾기 558
- HTTP 상태 코드 558
- 응답 길이 559
- 응답 본문 559
- 위치 헤더 559
- 쿠키 설정 헤더 559
- 경과 시간 560
- 공격 스크립트 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
- 에러 메시지 공격 591
- 15장 컴파일된 애플리케이션 공격 609
- 버퍼 오버플로우 취약점 610
- 스택 오버플로우 610
- 힙 오버플로우 611
- “off-by-one” 취약점 612
- 버퍼 오버플로우 취약점 탐색 615
- 정수 취약점 617
- 정수 오버플로우 617
- 부호 관련 문제 618
- 정수 취약점 탐지 619
- 포맷 스트링 취약점 620
- 포맷 스트링 취약점 탐지 621
- 정리 621
- 확인문제 622
- 버퍼 오버플로우 취약점 610
- 16장 애플리케이션 아키텍처 공격 623
- 계층적 아키텍처 623
- 다층 아키텍처 공격 624
- 계층 간 신뢰 관계 공략 625
- 다른 계층 파괴 626
- 다른 계층 공격 627
- 계층화된 구조 보호 628
- 신뢰 관계 최소화 629
- 다른 컴포넌트 분리 629
- 심도 있는 방어 체계 적용 630
- 다층 아키텍처 공격 624
- 공유 호스팅과 애플리케이션 서비스 공급자 631
- 가상 호스팅 631
- 공유된 애플리케이션 서비스 632
- 공유된 환경 공격 633
- 접근 메커니즘 대상 공격 633
- 애플리케이션 간의 공격 635
- 공유된 환경 보호 638
- 고객 접근 보호 638
- 고객별 기능 분리 639
- 공유된 애플리케이션에서 컴포넌트 분리 640
- 정리 640
- 확인문제 641
- 계층적 아키텍처 623
- 17장 웹서버 공격 643
- 웹서버 설정 취약점 643
- 디폴트 계정 643
- 디폴트 컨텐츠 645
- 디버그 기능 645
- 샘플 기능 646
- 강력한 기능 647
- 디렉터리 목록 649
- 위험한 HTTP 메소드 650
- 프록시로서 웹서버 652
- 잘못 설정한 가상 호스팅 654
- 웹서버 설정 보안 655
- 웹서버 소프트웨어의 취약점 656
- 버퍼 오버플로우 취약점 656
- 마이크로소프트 IIS ISAPI 확장 657
- 아파치 Chunked 인코딩 오버플로우 657
- 마이크로소프트 IIS WebDAV 오버플로우 657
- iPlanet 검색 오버플로우 657
- 경로 탐색 취약점 658
- Accipiter DirectServer 658
- Alibaba 658
- Cisco ACS Acme.server 658
- McAfee EPolicy Orcestrator 658
- 인코딩과 정형화 취약점 659
- Allarie JRun 디렉터리 목록 취약점 659
- 마이크로소프트 IIS 유니코드 경로 탐색 취약점 659
- 오라클 PL/SQL Exclusion 목록 우회 660
- 웹서버 취약점 발견 661
- 웹서버 소프트웨어 보안 662
- 좋은 추적 기록을 가지고 있는 소프트웨어를 선택 662
- 벤더 패치 적용 662
- 보안 강화 수행 663
- 새로운 취약점 모니터링 663
- 강력한 방어 기능 사용 663
- 버퍼 오버플로우 취약점 656
- 정리 664
- 확인문제 665
- 웹서버 설정 취약점 643
- 18장 소스코드 내의 취약점 발견 667
- 코드 검토에 대한 접근 방식 668
- 블랙박스와 화이트박스 테스트 668
- 코드 검토 방법론 669
- 일반적인 취약점 시그니처 670
- 크로스사이트 스크립팅 671
- SQL 인젝션 672
- 경로 탐색 673
- 임의의 리다이렉션 674
- 운영체제 명령어 인젝션 675
- 백도어 비밀번호 675
- 네이티브 소프트웨어 버그 676
- 버퍼 오버플로우 취약점 676
- 정수 취약점 677
- 포맷 스트링 취약점 677
- 소스코드 주석 678
- 자바 플랫폼 678
- 사용자가 제공한 데이터 확인 679
- 세션 상호작용 680
- 잠재적으로 위험한 API 680
- 파일 접근 680
- 데이터베이스 접근 681
- 동적 코드 실행 682
- 운영체제 명령어 실행 682
- URL 리다이렉션 683
- 소켓 684
- 자바 환경 설정 684
- ASP.NET 685
- 사용자가 제공한 데이터 확인 685
- 세션 상호작용 686
- 잠재적으로 위험한 API 687
- 파일 접근 687
- 데이터베이스 접근 688
- 동적 코드 실행 689
- 운영체제 명령어 실행 690
- URL 리다이렉션 690
- 소켓 691
- ASP.NET 환경 설정 691
- PHP 692
- 사용자가 제공한 데이터 확인 692
- 세션 상호작용 695
- 잠재적으로 위험한 API 695
- 파일 접근 695
- 데이터베이스 접근 697
- 동적 코드 실행 699
- 운영체제 명령어 실행 699
- URL 리다이렉션 700
- 소켓 701
- PHP 환경 설정 701
- Register Globals 701
- 안전 모드 702
- Magic Quotes 703
- 그 외 옵션 704
- Perl 704
- 사용자가 제공한 데이터 확인 705
- 세션 상호작용 706
- 잠재적으로 위험한 API 706
- 파일 접근 706
- 데이터베이스 접근 706
- 동적 코드 실행 707
- 운영체제 명령어 실행 707
- URL 리다이렉션 708
- 소켓 708
- Perl 환경 설정 708
- 자바스크립트 709
- 데이터베이스 코드 컴포넌트 710
- SQL 인젝션 710
- 위험한 함수 호출 712
- 코드 브라우징에 대한 도구 712
- 정리 713
- 확인문제 714
- 코드 검토에 대한 접근 방식 668
- 19장 웹 애플리케이션 해커의 도구상자 717
- 웹 브라우저 717
- 인터넷 익스플로러 718
- 파이어폭스 718
- 오페라 720
- 통합된 검사 스위트 721
- 도구 작동법 722
- 인터셉팅 프록시 722
- 웹 애플리케이션 스파이더 727
- 애플리케이션 퍼저와 스캐너 730
- 수동적인 요청 도구 732
- 특징 비교 734
- 버프 스위트 737
- 파로스 738
- 웹 스크랩 740
- 인터셉팅 프록시의 대안 741
- Tamper 데이터 741
- Tamper IE 741
- 도구 작동법 722
- 취약점 스캐너 743
- 스캐너에서 발견한 취약점 743
- 스캐너의 한계 745
- 모든 웹 애플리케이션에는 특색이 있다 745
- 스캐너는 애플리케이션의 논리를 완벽히 이해할 수는 없다 746
- 스캐너는 즉석으로 만들어지는 것이 아니다 746
- 스캐너는 직관적이다 746
- 스캐너가 직면할 기술적인 문제 747
- 인증과 세션 조작 747
- 위험한 영향 748
- 개별적 기능 748
- 자동화에 대한 도전 749
- 현재 사용되는 웹 스캐너 749
- 취약점 스캐너 사용 751
- 그 외의 도구 753
- 닉토 753
- 히드라 753
- 커스텀 스크립트 754
- Wget 755
- Curl 756
- Netcat 756
- Stunnel 756
- 정리 757
- 웹 브라우저 717
- 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
- 3.3.1. 자바 애플릿 검사 771
- 3.3.2. 액티브X 컨트롤 검사 772
- 3.3.3. 쇽웨이브 플래시 객체 검사 773
- 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.12.1. 페일 오픈 상태 검사 780
- 4.12.2. 다단계 메커니즘 검사 781
- 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.3.1. 반사된 요청 매개변수 식별 800
- 7.3.2. 반사된 크로스사이트 스크립팅 검사 800
- 7.3.3. HTTP 헤더 인젝션 검사 801
- 7.3.4. 임의의 리다이렉션 검사 802
- 7.3.5. 저장된 공격 검사 802
- 7.4. 운영체제 명령어 인젝션 검사 803
- 7.5. 경로 탐색 검사 804
- 7.6. 스크립트 인젝션 검사 807
- 7.7. 파일 포함 검사 807
- 8. 특정 기능에 대한 입력 값 취약점 검사 808
- 8.1. SMTP 인젝션 검사 808
- 8.2. 네이티브 소프트웨어 취약점 검사 809
- 8.2.1. 버퍼 오버플로우 검사 809
- 8.2.2. 정수 취약점 검사 810
- 8.2.3. 포맷 스트링 취약점 검사 811
- 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
관련 블로그 글
웹 애플리케이션 해킹의 모든 걸 알려주는 위험한 책?
웹 애플리케이션 보안 취약점을 겨냥한 공격과 방어
대피드 스투타드, 마커스 핀토 지음 | 조도근, 김경곤, 장은경, 이현정 옮김
840쪽 | 40,000원 | 2008년 11월 21일 출간예정 | 해킹과 보안 시리즈 19
웹은 이제 단순히 컴퓨터 모니터안에서 펼쳐지는 가상세계를 넘어선 지 오래입니다. 세컨드라이프라 할 만큼, 금융, 쇼핑, 업무 모든 일상생활이 일어나는 장소로서 오히려 오프라인보다 시간을 더 많이 할애하는 경우도 많아졌습니다. 그만큼 월드와이드웹은 인류 최대의 발명품이자 최고의 킬러애플리케이션으로서 우리에게 경이로운 세상을 열어주고 있지만, 그만큼 어둠의 그림자도 점점 짙게 드리워지고 있습니다.
- 지난 3년간 침해사고로 전세계 2억 8000만명 개인정보 유출
- 'GS칼텍스 고객정보유출' 손해배상소송에 4만명 참여
- 옥션, 해킹으로 개인정보 유출사고 발생
- 정보보안은 이제 '기업생명줄' - 안철수 교수 기조연설
올해만 해도 내로라하는 대기업에서 해킹사고나 기업의 부주의로 인한 개인정보 유출 사건이 연달아 터졌습니다. 사실 요즘 사회면이나 IT섹션을 장식하는 기사들중에는 하루가 멀다하고 크라임웨어나 악성프로그램, 웹 해킹 사고 등에 대한 기사가 줄을 잇습니다. 얼마전 설문조사에서도 앞으로 다가올 미래사회에서 가장 우려되는 문제로 "개인정보 유출" 등을 꼽을 정도로 사람들이 느끼는 사용자 안전이나 개인정보 보호 필요성과 함께 어디서 내 정보가 유출될지 모른다는 두려움은 점점 커져만 가고 있죠. 이는 기업의 보안 의식 결여나 무방비 보안 대책 등에서부터, 급박한 개발 일정때문에 일단 기능부터 구현하고 보자는 안일한 개발 방식에서 기인한다고 볼 수 있습니다.
방화벽 등 그런 대로 안전지대에 속한 웹 서버에 비해 결국 오늘날 웹이라 불리는 웹 애플리케이션은 그야말로 보안 취약점이 그대로 노출되고 헛점 투성이로 벌거벗겨진 채로 군침을 흘리고 있는 해커들을 유혹하며 스스로 불러들이고 있는지도 모르겠습니다.
작년 4월 『웹 애플리케이션 해킹 대작전』출간에 즈음해 저희 에이콘 해킹 보안 시리즈 에디터인 강유님이 쓴 웹 2.0 시대를 지키는 웹 보안이라는 스페셜 이슈 글에서도 나오지만, 해킹과 보안 전쟁은 점점 뜨거워져만 가고 있습니다. 하지만 그 책이 나오고 1년 반이나 훌쩍 지난 지금, 우려만 불거지고 있을 뿐 뉴스를 장식하는 기사들을 보면 문제는 더욱 심각해져만 가고 있는 듯합니다.
세상을 해킹하자!
지난 여름에도 한 번 출간 안내를 했던 이 책 The Web Application Hacker's Handbook은 아마존에서도 ★★★★★의 평점을 받고 엄청나게 뜨거운 반응을 받고 있는 책입니다.(이럴수록 번역서를 정말 잘 내야 한다는 강박이 따라붙긴 하죠. 늘 최선을 다하고는 있습니다만..) 작년에 펴낸 『웹 애플리케이션 해킹 대작전』이 해킹 보안 초심자를 위한 초급가이드로서 말랑말랑한 내용을 선보였다면 이 책『웹 해킹 & 보안 완벽가이드』는 좀더 상세하고 구체적이며 심도 있으면서도 방대하고 전체적인 실전 해킹의 핵심을 다루는 절대 바이블입니다.
이 책 초반부에서는 해킹에 대한 전반적이고 기본적인 정보수집 기술을 알려주고 큰 그림을 그려줍니다. 이어 중반부에서는 실제 해킹에서 사용되는 세부 공격 기술을 여러 장에 걸쳐 알려주며, 공격을 편리하게 해주는 기법 등 자동화를 이용한 공격 도구 모음을 익힐 수 있습니다. 마지막 부분에서는 웹 애플리케이션 해커의 공격 방법론을 통해 이 책에서 소개한 모든 기술과 절차를 체계적이고 포괄적으로 설명합니다.
이 정도되면 이 책이 얼마나 무시무시한 책인지 느끼실 수 있으신가요? 물론, 보안과 해킹은 양날의 검이며 동전 양면과도 같다고 하지만, 원제에서 나타나듯이 이 책은 보안 책이라기보다는 세상에 못 뚫을 건 하나도 없다는 결연한 의지가 가득한 해커를 위한 완벽가이드입니다.
하지만 '모순'이라고 불리는 창과 방패는 늘 또 함께 짝을 이루고 서로를 반격하고 지탱해주면서 존재의 의미를 지니는 법. 보안에서 늘 나오는 "지피지기면 백전백승"이라는 말과 같이 해커의 모든 습성과 방법을 파악해야 보안 대책도 세울 수 있는 것이겠죠.
책을 읽으면 아시겠지만, 권한 제어 비즈니스 로직만 제대로 구현했다해도 관리자 권한으로 접근하는 해킹 공격을 막아낼 수 있었을 테고, 사용자 입력값을 필터하는 프로그래밍만 제대로 만들어도 코드삽입 공격은 쉽게 피할 수 있습니다.
이 책 저자 서문 마지막 부분에 나오는 경고문이 인상적입니다.
중요한 경고를 하나 해두겠다. 대부분 국가에서는 소유자의 허락없이 컴퓨터 시스템을 공격하는 일은 법에 저촉된다. 이 책에서 소개한 기술들을 사용해 컴퓨터 시스템 소유자 승인없이 해당 시스템에 대해 공격을 수행하는 것은 불법이다.
이 책의 필자는 고객사의 승인을 받은 웹 애플리케이션을 공격해 고객의 보안을 향상시켜주는 데 도움을 주는 전문 침투테스터들이다. 최근 많은 보안 전문가와 일반인들이 허락없이 실제 컴퓨터 시스템에 공격기법을 테스트하거나 공격함으로써 직업을 잃고 범죄기록을 갖게 됐다.
오직 정당한 목적으로 이 책에서 소개한 내용을 사용하길 바란다.
명심하세요! 이 글을 읽고 있는 님이 해커시라면, 이 책에 나온 해킹 노하우를 활용한 후 개인신상에 벌어지는 무서운 사태에 대해 저희 에이콘은 책임지지 않습니다. 게다가 님이 보안관리자거나 웹 애플리케이션 개발자시라면 이 책에 나온 뻔한 해킹 대책을 대비하지 못해 기업 상부로부터 어떤 문책을 당하시더라도 이 또한 책임져드리지 못합니다. -0-
부디.. 우리 모두 착하게 삽시다~! :)
『웹 해킹 & 보안 완벽가이드』는 지금 YES24, 교보문고, 강컴, 인터파크, 알라딘에서 "절찬리에" 예약판매중입니다. ^^
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
도서 오류 신고
정오표
[ p79 2행 ]
문제점에 대해 살명한다. → 문제점에 대해 설명한다.
[ p95 'PHP' 절 6행 ]
선반 재고 → 상용
[ p119 두 번째 문단 마지막 2행 ]
이런 테스트를 수행핫 수 있다. → 이런 테스트를 수행할 수 있다.
[ p190 아래에서 3행 ]
윈도우즈 통합 인증 → 윈도우 통합 인증
[ p352 아래에서 8행 ]
윈도우 통합적인 인증 → 윈도우 통합 인증
[ p678 코드 1행 ]
// 이 정도 크기면 충분히 클 것이라고 생각한다. → // I hope this is big enough(이 정도 크기면 충분히 클 것이라고 생각한다.)
2쇄 오류/오탈자
[ p71 아래에서 3행 ]
비인기적인 행위를 수행했는지 → 비인가적인 행위를 수행했는지
[ p96 마지막 행 ]
브라우저는 다름과 같은 → 브라우저는 다음과 같은
[ p102 7행 ]
뛰워 쓰기 → 띄어쓰기
[ p104 5번째 문단 1행 ]
매개변수애 → 매개변수에
[ p118 해킹 단계 박스 내 3행 ]
Adddocument.jsp → AddDocument.jsp
[ p308 팁 박스 내 3행 ]
VALUSE → VALUES