
BurpSuite용 Response Overview 확장 - 응답 본문을 그룹화하여 특이한 응답 찾기
BurpSuite용 응답 개요 확장 기능
작성자: Tobias "floyd" Ospelt, @floyd_ch, http://www.floyd.ch
Pentagrid AG, https://www.pentagrid.ch
이 확장 기능은 모든 응답 본문을 유사도에 따라 그룹화하고, 그룹당 하나의 요청/응답으로 요약을 보여줍니다. 이 확장 기능을 사용하면 테스터가 모든 도구(스캐너, 프록시 등)에서 테스트한 웹사이트의 응답을 한눈에 파악할 수 있습니다. 이는 기존의 탐지 방법(응답 기반, 시간 기반, 상호작용 기반 등)과 비교하여 추가적인 "반자동 탐지 방법"을 제공합니다. 주로 성능을 위한 다양한 최적화가 적용되어 있습니다. "매개변수 제거" 기능은 비교 전에 응답에서 반사된 요청 매개변수를 제거합니다.
지금까지:
사용법은 매우 간단합니다:
이 확장 기능은 다음 조건의 HTTP 응답을 분석합니다:
위의 필터 조건이 충족되면, 들어오는 응답 본문(모든 Burp 도구에서!)이 이미 생성한 모든 그룹과 비교됩니다. 그룹은 메모리에 유지되는 첫 번째 멤버로 정의됩니다. 처리 중인 응답이 첫 번째 멤버와 95% 유사하면 해당 그룹에 속하며 "Group Size" 카운터만 증가합니다. 즉, 해당 응답은 저장되지 않습니다. 응답이 어떤 그룹과도 95% 유사하지 않으면 새로운 그룹을 형성하고 그 첫 번째 멤버가 됩니다.
이상 징후를 찾을 수 있는 이러한 응답 개요의 첫 번째 버전은 2010년에 w3af 프로젝트에 제안했으며(관련 논의는 여기에서도 확인 가능: https://github.com/andresriancho/w3af/issues/17345) Python으로 작성되었습니다. 왜인지 기억나지 않지만 w3af 메인라인에 포함되지 못했습니다. 그 당시 Python의 difflib에 대해 많이 배웠고 사용 사례에 맞게 성능을 최적화했습니다. 2019년에 modzero AG https://github.com/modzero/burp-ResponseClusterer에서 근무할 때 Burp용으로 유사한 확장 기능을 Python으로 작성했고 다시 Python의 difflib에 대해 많이 배웠습니다. 그러나 어느 시점에서 이 확장 기능이 Burp의 성능을 일부 잡아먹을 수 있다는 것을 깨달았지만 처음에는 무시했습니다. 2021년에 이 확장 기능은 최신 Jython 버전에서 더 이상 실행되지 않아 완전히 망가졌고, 코드를 다시 살펴보면서 매우 메모리 비효율적인 확장 기능을 작성했다는 것을 깨달았습니다. 그래서 여기까지 왔습니다. 이것은 2021년 Kotlin으로 작성된 새로운 기능이 포함된 새 확장 기능이며, 다시 Python의 difflib과 다양한 기능에서 많은 것을 배웠습니다. 항상 동일한 문자열과 비교하면 특정 계산이 필요 없다는 것을 깨달아 성능을 개선했습니다(Python 코드에서 이미 구현된 대로). Response Clusterer는 죽었고, Response Overview가 오래 살아라.
이론적으로 기본 설정은 Burp의 성능이 그다지 좋지 않을 수 있습니다. 그러나 이런 일이 발생할 가능성은 매우 낮습니다. 모든 응답이 최대 기본 응답 크기(약 1MB)인 테스트에서 서로 비교해야 했으며, 비교에는 미리 계산된 bByteCount 최적화(일반적인 경우)로 최대 30ms, 이 최적화 없이는 최대 80ms가 걸렸습니다(각 항목에 대해 한 번만 발생). 최대 그룹 수(1000)를 곱하면 절대 최악의 경우 최대 80초의 처리 시간이 걸릴 수 있습니다. 별도의 스레드가 있으므로 다음 비교에 최대 30초밖에 걸리지 않아 견딜 만합니다. 하지만 어떤 웹 애플리케이션이 약 1MB의 서로 다른 응답을 많이 가지고 있을까요? 너무 많지 않기를 바랍니다. 또한 응답 길이가 2% 이상 차이 나면 veryQuickRatio 최적화 덕분에 유사도 매칭에 전혀 시간이 걸리지 않는다는 것을 잊지 마세요.