책소개
세상에서 가장 실용적인 API 해킹 가이드북 API 사용량이 폭발적으로 증가하며 공격자들의 새로운 표적이 되고 있다. 이 책은 REST/그래프QL 웹 API와 일반적인 API 취약점 등 웹 API 보안 기초부터 시작해, 가상 머신과 칼리 리눅스로 공격 및 대상 시스템을 구축하고, 버프 스위트와 포스트맨 등 여러 해킹 도구를 활용해 알려진 모든 유형의 API 공격을 실습해본다. API 보안의 중요성이 높아지는 가운데, API 해킹의 이론과 실제를 가장 포괄적으로 정리한 책.
저자소개
모스 애덤스(Moss Adams)의 사이버 보안 관리자로 침투 테스트 서비스를 책임지고 있다. IT 분야에서 10년 이상 일하며 항공 우주, 농업, 에너지, 핀테크, 정부 서비스, 의료 등 다양한 영역에서 사이버 보안 경험을 쌓았다. 캘리포니아 주립대학교 새크라멘토에서 영문학과 철학 학사 학위를 받았고 OSCP, CCISO, CEH, CISA, CISM, CRISC, CGEIT 자격증을 갖고 있다.
목차
지은이·감수자·옮긴이 소개 xiii옮긴이 머리말 xiv베타리더 후기 xv추천사 xvii추천 서문(댄 바라오나) xix감사의 글 xxii이 책에 대하여 xxivPART I 웹 API 보안이 작동하는 방식CHAPTER 0 보안 테스트 준비 30.1 권한 받기 40.2 API 테스트의 위협 모델링 40.3 테스트해야 할 API 기능 7__0.3.1 API 인증 테스트 7__0.3.2 웹 애플리케이션 방화벽 7__0.3.3 모바일 애플리케이션 테스트 8__0.3.4 API 문서 감사 8__0.3.5 속도 제한 테스트 90.4 제한과 제외 10__0.4.1 클라우드 API 보안 테스트 11__0.4.2 DoS 테스트 120.5 보고와 개선 테스트 120.6 버그 현상금 범위에 관한 노트 13요약 14CHAPTER 1 웹 애플리케이션이 작동하는 방법 171.1 웹 애플리케이션 기초 17__1.1.1 URL 18__1.1.2 HTTP 요청 19__1.1.3 HTTP 응답 20__1.1.4 HTTP 상태 코드 22__1.1.5 HTTP 메서드 23__1.1.6 HTTP의 상태 241.2 웹 서버 데이터베이스 26__1.2.1 SQL 26__1.2.2 NoSQL 281.3 API의 역할 29요약 29CHAPTER 2 웹 API의 구조 312.1 웹 API가 작동하는 방식 312.2 표준 웹 API 타입 34__2.2.1 RESTful API 35__2.2.2 그래프QL 392.3 REST API 명세 432.4 API 데이터 교환 형식 44__2.4.1 JSON 44__2.4.2 XML 47__2.4.3 YAML 482.5 API 인증 49__2.5.1 기본 인증 49__2.5.2 API 키 50__2.5.3 JSON 웹 토큰 52__2.5.4 HMAC 53__2.5.5 OAuth 2.0 54__2.5.6 인증 없음 562.6 API 실전: 트위터 API 살펴보기 56요약 59CHAPTER 3 일반적인 API 취약점 613.1 정보 누출 623.2 BOLA 633.3 사용자 인증 결함 653.4 데이터 과다 노출 663.5 리소스 부족과 속도 제한 673.6 BFLA 683.7 대량 할당 703.8 보안 설정 오류 713.9 주입 743.10 부적절한 자원 관리 763.11 비즈니스 로직 취약점 77요약 78PART II API 테스트 실험실 구축CHAPTER 4 API 해킹 시스템 814.1 칼리 리눅스 814.2 개발자 도구로 웹 애플리케이션 분석 824.3 버프 스위트로 요청 캡처와 수정 85__4.3.1 폭시프록시 설정 86__4.3.2 버프 스위트 인증서 추가 87__4.3.3 버프 스위트 모듈 88__4.3.4 트래픽 가로채기 90__4.3.5 침입자에서 요청 변경 924.4 포스트맨에서 API 요청 생성 96__4.4.1 요청 생성기 97__4.4.2 환경 100__4.4.3 컬렉션 102__4.4.4 컬렉션 실행기 106__4.4.5 코드 조각 106__4.4.6 테스트 패널 1074.5 버프 스위트와 포스트맨의 조합 1084.6 보충 도구 110__4.6.1 OWASP 어매스로 사전 조사 110__4.6.2 카이트러너로 API 엔드포인트 발견 111__4.6.3 닉토로 취약점 검색 113__4.6.4 OWASP ZAP으로 취약점 검색 114__4.6.5 W퍼즈와 퍼징 115__4.6.6 아르준으로 HTTP 매개변수 발견 117요약 118실험실 #1: REST API에서 사용자 계정 열거 118CHAPTER 5 취약한 API 대상 설정 1235.1 리눅스 호스트 생성 1245.2 도커와 도커 컴포즈 설치 1245.3 취약한 애플리케이션 설치 125__5.3.1 crAPI 125__5.3.2 픽시 126__5.3.3 OWASP 주스 숍 127__5.3.4 DVGA 1285.4 기타 취약한 애플리케이션 추가 1295.5 트라이핵미와 핵더박스에서의 API 해킹 130요약 131실험실 #2: 취약한 API 발견 132PART III API 공격CHAPTER 6 발견 1396.1 수동적 사전 조사 140__6.1.1 수동적 사전 조사 절차 140__6.1.2 구글 해킹 141__6.1.3 프로그래머블웹의 API 검색 디렉터리 143__6.1.4 쇼단 146__6.1.5 OWASP 어매스 147__6.1.6 깃허브에 노출된 정보 1506.2 능동적 사전 조사 153__6.2.1 능동적 사전 조사 절차 154__6.2.2 Nmap을 통한 기본 스캔 156__6.2.3 Robots.txt에서 숨겨진 경로 발견 157__6.2.4 크롬 개발자 도구로 민감한 정보 발견 157__6.2.5 버프 스위트로 API 검사 162__6.2.6 OWASP ZAP과 URI 크롤링 162__6.2.7 고버스터를 사용한 URI 무차별 대입 165__6.2.8 카이트러너로 API 콘텐츠 검색 166요약 168실험실 #3: 블랙 박스 테스트를 위한 능동적 사전 조사 169CHAPTER 7 엔드포인트 분석 1757.1 요청 정보 찾기 176__7.1.1 문서에서 정보 찾기 176__7.1.2 API 명세 임포트 180__7.1.3 API 리버스 엔지니어링 1827.2 포스트맨에 API 인증 요건 추가 1857.3 기능 분석 187__7.3.1 의도에 맞는 사용인지 테스트 188__7.3.2 권한이 필요한 작업 수행 189__7.3.3 API 응답 분석 1917.4 정보 누출 1917.5 보안 설정 결함 192__7.5.1 자세한 에러 메시지 192__7.5.2 빈약한 전송 암호화 193__7.5.3 문제가 있는 설정 1937.6 데이터 과다 노출 1947.7 비즈니스 로직 결함 195요약 196실험실 #4: crAPI 컬렉션 구축과 데이터 과다 노출 발견 196CHAPTER 8 인증 공격 2018.1 고전적 인증 공격 202__8.1.1 비밀번호 무차별 대입 공격 202__8.1.2 비밀번호 리셋과 다중 인증 무차별 대입 공격 203__8.1.3 비밀번호 스프레이 205__8.1.4 무차별 대입 공격에 base64 인증 포함 2088.2 토큰 위조 209__8.2.1 수동 분석 210__8.2.2 실시간 캡처 분석 212__8.2.3 예측 가능한 토큰 무차별 대입 2138.3 JWT 악용 216__8.3.1 JWT 분석 216__8.3.2 none 공격 219__8.3.3 알고리즘 스위치 공격 219__8.3.4 JWT 크랙 공격 221요약 221실험실 #5: crAPI JWT 서명 크랙 222CHAPTER 9 퍼징 2259.1 효과적인 퍼징 225__9.1.1 퍼징 페이로드 선택 227__9.1.2 이상 감지 2299.2 넓은 퍼징과 깊은 퍼징 231__9.2.1 포스트맨과 넓은 퍼징 232__9.2.2 버프 스위트와 깊은 퍼징 235__9.2.3 W퍼즈와 깊은 퍼징 2379.3 W퍼즈로 요청 메서드 테스트 2419.4 입력 유효성 검사를 우회하는 ‘더 깊은’ 퍼징 2429.5 퍼징과 디렉터리 순회 244요약 244실험실 #6: 부적절한 자원 관리 취약점 퍼징 245CHAPTER 10 권한 공격 24910.1 BOLA 찾기 249__10.1.1 ID 탐색 250__10.1.2 A-B 테스트 252__10.1.3 부채널 BOLA 25210.2 BFLA 찾기 253__10.2.1 A-B-A 테스트 254__10.2.2 포스트맨에서 BFLA 테스트 25410.3 권한 부여 해킹 팁 257__10.3.1 포스트맨의 컬렉션 변수 257__10.3.2 버프 스위트의 찾아 바꾸기 257요약 258실험실 #7: 다른 사용자의 자동차 위치 발견 258CHAPTER 11 대량 할당 26511.1 대량 할당 대상 발견 265__11.1.1 계정 등록 266__11.1.2 권한 없는 접근 26611.2 대량 할당 변수 발견 267__11.2.1 문서에서 변수 발견 267__11.2.2 알 수 없는 변수 퍼징 268__11.2.3 맹목적 대량 할당 공격 26911.3 아르준, 버프 스위트 침입자로 대량 할당 공격 자동화 27011.4 BFLA와 대량 할당 조합 271요약 272실험실 #8: 온라인 상점의 아이템 가격 변경 273CHAPTER 12 주입 27912.1 주입 취약점 발견 28012.2 사이트 간 스크립팅(XSS) 28112.3 API 간 스크립팅(XAS) 28212.4 SQL 주입 284__12.4.1 메타 문자 직접 전송 285__12.4.2 SQL맵 28612.5 NoSQL 주입 28812.6 운영 체제 명령어 주입 290요약 292실험실 #9: NoSQL 주입을 사용한 쿠폰 위조 293PART IV 실전 API 해킹CHAPTER 13 우회 기술과 속도 제한 테스트 29913.1 API 보안 컨트롤 우회 300__13.1.1 보안 컨트롤의 작동 방식 300__13.1.2 API 보안 컨트롤 탐지 301__13.1.3 버너 계정 사용 302__13.1.4 우회 기술 303__13.1.5 버프 스위트로 우회 자동화 305__13.1.6 W퍼즈로 우회 자동화 30713.2 속도 제한 테스트 309__13.2.1 느슨한 속도 제한에 대한 노트 310__13.2.2 경로 우회 312__13.2.3 출처 헤더 위조 313__13.2.4 버프 스위트에서 IP 주소 순환 314요약 318CHAPTER 14 그래프QL 공격 31914.1 그래프QL 요청과 IDE 32014.2 능동적 사전 조사 321__14.2.1 스캐닝 321__14.2.2 브라우저에서 DVGA 사용 323__14.2.3 개발자 도구 사용 32314.3 그래프QL API 리버스 엔지니어링 325__14.3.1 그래프QL 엔드포인트에 디렉터리 무차별 대입 325__14.3.2 쿠키 변조를 통한 그래피클 IDE 활성화 328__14.3.3 그래프QL 요청 리버스 엔지니어링 330__14.3.4 스키마 확인을 통한 그래프QL 컬렉션 리버스 엔지니어링 33214.4 그래프QL API 분석 333__14.4.1 그래피클 문서 탐색기를 통한 요청 작성 333__14.4.2 버프 스위트 애드온 InQL 33514.5 명령어 주입을 위한 퍼징 338요약 344CHAPTER 15 데이터 침해와 버그 현상금 34515.1 침해 346__15.1.1 펠로톤 346__15.1.2 USPS Informed Visibility API 348__15.1.3 T-모바일 API 침해 34915.2 현상금 351__15.2.1 API 키의 가격 352__15.2.2 비공개 API 권한 부여 문제 353__15.2.3 스타벅스: 전례 없는 침해 355__15.2.4 인스타그램 그래프QL BOLA 357요약 359마치며 360부록 A API 해킹 체크리스트 362부록 B 추가 자료 364찾아보기 368