본문으로 건너뛰기

60. 웹 보안 테스팅 필수 도구

도구 선택은 능력의 목록보다 관찰의 설계에 가깝다. 프록시는 요청을 이해하게 하고, CLI는 반복을 재현하게 하며, 로그와 코드 리뷰는 자동화 결과를 판정하게 한다. 대상은 소유했거나 명시적으로 허가받은 시스템으로 제한하고, 스캔 범위·속도·데이터 보존 기간을 먼저 정한다.

한 요청을 끝까지 추적하기

Burp Suite나 OWASP ZAP은 브라우저의 요청을 보고 수정된 요청을 다시 보내는 데 적합하다. Proxy/History로 기준선을 만들고 Repeater에서 한 변수만 바꾸며, 응답 변화와 서버 로그를 함께 기록한다. 자동 스캐너의 결과는 취약점 판정이 아니라 재현 후보다. CA 인증서는 실습 브라우저에만 설치하고, 운영 계정의 비밀값은 기록에서 제거한다.

curl은 가장 작은 재현을 만드는 도구다.

curl --fail-with-body --silent --show-error \\
-H 'Accept: application/json' \\
'https://lab.example.test/api/items?id=1'

JSON 응답은 jq로 필요한 필드만 확인한다. jq 필터가 성공했다는 사실과 권한 검사가 올바르다는 사실을 혼동하지 않는다.

발견은 범위를 먼저 제한한다

허가된 호스트의 서비스 구성은 nmap -sV --top-ports 100 lab.example.test처럼 작은 범위에서 시작한다. 웹 경로 탐색이 필요하면 ffufgobuster에 명시적인 속도와 상태 코드 필터를 지정하고, robots.txt나 애플리케이션 라우트처럼 이미 관찰된 단서부터 확인한다. Nikto 같은 점검 도구는 오래된 기본 파일을 알려줄 수 있지만, 노이즈와 오탐을 감수해야 한다.

SQLMap, XSStrike, Commix처럼 적극적인 자동화 도구는 취약한 랩에서만 사용한다. 데이터 덤프나 명령 실행 옵션은 기본값으로 켜지 않으며, 재현에 필요한 최소 요청으로 멈춘다. 자동화가 만든 결과에는 입력, 버전, 시각, 응답 근거를 남겨 다른 사람이 재검증할 수 있게 한다.

스크립트와 판정

Python requests.Session은 인증 흐름을 재현할 때 유용하지만, 비밀번호를 소스에 넣지 말고 환경 변수나 테스트 전용 자격 증명을 사용한다. 복잡한 프로토콜은 전용 도구를 사용하되, 반복 가능한 작은 테스트로 감싼다. 도구가 많아질수록 중요한 것은 수집한 증거의 품질이다. 영향·재현 조건·완화책이 설명되지 않는 발견은 보고서가 아니다.