경쟁 상태와 스머글링
경쟁 상태 / 스머글링은 타이밍에 민감한 공격과 프로토콜 수준의 HTTP 공격을 위한 두 가지 전용 도구를 제공합니다.
경쟁 상태
경쟁 상태 탭은 같은 엔드포인트에 요청의 여러 복사본을 동시에 보내고, 병렬 실행 간 응답과 시간을 비교할 수 있게 합니다.
사용 시점
- TOCTOU(검사 시점 / 사용 시점): 동시 요청으로 검사와 상태 변경 작업을 분리할 수 있는지 테스트합니다.
- 계정 조작: 잔액 변경, 쿠폰 사용 또는 한도가 있는 작업을 동시에 보내 이중 지출이나 초과 사용이 가능한지 테스트합니다.
- 투표 제한 또는 요청 빈도 제한 우회: 사용자별 제한이 원자적으로 적용되는지 확인합니다.
경쟁 상태 테스트 실행
- 경쟁 상태 탭에서 대상 요청을 구성하거나 해당 탭으로 요청을 보냅니다.
- 동시 요청 수를 설정합니다. 병렬로 보낼 복사본의 수입니다.
- 요청 수가 표시된 전송 버튼을 클릭합니다. 모든 복사본을 최대한 동시에 보냅니다.
- 응답 표에서 각 복사본의 상태 코드, 본문, 경과 시간을 검토합니다.
- 응답 간 차이(서로 다른 상태 코드나 응답 본문, 2번째 이후 복사본의 예상치 못한 성공)는 경쟁 상태가 발생할 수 있는 시간 구간을 나타냅니다.
HTTP/2 단일 패킷 경쟁 상태 테스트
대상이 HTTP/2를 지원하면 H2 단일 패킷 모드를 활성화합니다. HTTP/2는 모든 병렬 요청을 하나의 연결에서 다중화하여 네트워크 지터를 없애고 서버에 요청이 동시에 도착할 가능성을 높입니다.
HTTP 요청 스머글링
HTTP 스머글링 탭은 서버가 모호한 Content-Length 및 Transfer-Encoding 헤더를 처리하는 방식을 테스트하여 프런트엔드와 백엔드의 동기화 불일치를 탐지합니다.
배경
리버스 프록시와 백엔드 서버가 한 요청의 끝과 다음 요청의 시작을 다르게 판단하면, 요청 A에 숨겨 넣은 접두 부분이 요청 B 앞에 붙을 수 있습니다. 영향은 캐시 오염부터 인증 우회와 임의 요청 주입까지 다양합니다.
동기화 불일치 유형
| 유형 | 설명 |
|---|---|
| CL.TE | 프런트엔드는 Content-Length, 백엔드는 Transfer-Encoding을 사용함 |
| TE.CL | 프런트엔드는 Transfer-Encoding, 백엔드는 Content-Length를 사용함 |
| TE.TE | 양쪽 모두 Transfer-Encoding을 사용하지만 난독화된 헤더에 다르게 반응함 |
스머글링 탐색 실행
- HTTP 스머글링 탭에서 대상 엔드포인트를 선택합니다.
- 테스트할 동기화 불일치 유형을 선택합니다.
- 스머글링 점검 실행을 클릭합니다. 도구가 특수하게 구성한 요청을 보내고 응답을 측정합니다.
- 요청 순서에서 두 번째 요청이 시간 초과되거나 예상치 못한 응답을 반환하면 동기화 불일치 가능성이 있습니다.
- 발견 사항을 만들기 전에 수동으로 확인합니다. 네트워크 상황 때문에 탐색 요청과 무관한 시간 초과가 발생하면 오탐이 생길 수 있습니다.