ZAP Active Scan 시 Progress와 Response chart 활용하기

오늘은 ZAP의 ActiveScan에서 볼 수 있는 Progress와 Response chart에 대한 이야기를 잠깐 하려고 합니다. 뭔가 크게 도움되는건 아니지만 습관적으로 제가 창에 띄어두고 있는게 바로 Scan에 대한 Progress인데요. 왜 띄우고, 어떻게 사용하는지 이야기해보죠.

Context-based Scan

Progress & Response charts를 이야기하기 전에 Context-based scan에 대해 먼저 이야기하려고 해요. 제가 작년 봄에 “ZAP context based scanning” 란 이름으로 글을 쓴 적이 있었습니다.

기본적으로 Scan은 하나의 대상 URL을 기반으로 스캔하거나 여러 URL을 스캔하는 경우 여러번 추가하는 식으로 스캔을 진행하는데요. Context-based scan이란 ZAP의 Context, 즉 점검할 Project를 기준으로 스캐닝할 수 있는 방법이자 기능입니다.

보통 하나의 Context에는 작게는 1개, 많게는 정말 많은 Scope URL 패턴이 들어갑니다. ZAP에선 Spidering이나 ActiveScan 등에서 이러한 Context를 대상으로 스캔할 수 있어 다수의 URL을 한번에 스캔할 수 있습니다. 특히 API들이 여러 도메인이 분리되어 있는 MSA(Micro Service Architecture) 구조에선 정말 유용합니다.

위 이미지의 경우 4개의 도메인이 Default Context에 포함되어 있어 Default Context를 스캔하는 경우 4개의 URL을 동시에 스캔하게 됩니다.

Progress & Response chart

자 본론으로 와서 ActiveScan 시 아래 이미지의 버튼을 통해 Progress & Response chart 창을 띄울 수 있습니다.

Progress tab

Progress tab에선 현재 어떤 스캔 항목을 진행중이고 몇개의 Request를 보냈는지, 그리고 얼마나 시간이 걸렸는지 알 수 있습니다. 처음에 Context-based scan을 이야기드린건 Context-based scan 시 하나의 Progress 창에서 여러개의 Scope 도메인을 스캔 상태를 한번에 보면서 관리할 수 있기 떄문이에요.

불필요한 항목이나 서비스에 지장을 주기 시작한 항목은 정지시켜서 상태를 완화할 수 있습니다. 개인적으론 이렇게 Context 단위가 아니라 단일 페이지 단위로 스캔 시 이미 발견된 항목은 유사 스캔룰을 제외시켜 속도를 올리고 불필요한 요청을 제거합니다.

  • 만약 SQL Injection 항목이 탐지되었고 정탐이라면..
    • Advanced SQL Injection
    • MySQL Injection
    • MsSQL Injection
    • 등 유사 항목은 중지

Response chart tab

Response chart는 현재 스캔 항목과 진행 시간, Response time과 status code를 기반으로 그래프를 실시간으로 그려줍니다. 문가 실제로 도움이 되는건 아니지만 특정 항목들에서 특정 Status가 튀는걸 확이하는 용도로 종종 사용하긴 합니다.

예를들면 401, 500, 501 등

Customize chart

저는 그냥 차트를 보기만 했는데, 최근에 알게된 내용으론 일부 색상 등은 수정이 가능했습니다. 우클릭 후 각 항목에 맞는 데이터를 수정하여 그래프를 변경할 수 있습니다.

다만 기본값이 제일 예쁩니다. 그리고 생각보단 디테일한 설정을 바꾸지 못하고, 한번 만든 설정이 저장되는게 아니라 많이 아쉽긴 하네요.

Full-time chart

차트의 유지시간은 기본 10분입니다. 스캔 시간이 길어지면 기존 항목들의 Status를 볼 수가 없어지는데요. 이 때 설정에서 차트 유지 시간을 길게 늘려버리면 차트가 긴 시간 누적되기 때문에 스캔이 완료된 후 한번에 체크하기 좋습니다.

Options > Active Scan > Max Progress Chart in Mins 에서 시간을 늘려주시면 됩니다. 분 단위 입니다. (60 => 60분)

그러고 스캔 시 차트를 보면 길게 누적되는 것을 보실 수 있습니다.

Conclusion

개인적으론 이 Chart가 API 등으로도 제공되면 참 좋겠다는 생각을 했습니다. 아쉽지만 그건 지원하지 않았네요.

ZAP이던 Burpsuite던 스캔은 유의미한 취약점 탐지 뿐만 아니라 여러가지 패턴으로 서비스의 의도하지 않은 동작을 발생시키는 것도 큰 역할을 한다고 생각합니다. 다만 우리가 그러한 이상 징후를 놓치기는 굉장히 쉽죠. 그래서 이러한 방법들로 서비스가 어떤 반응을 일으키고 어떻게 동작하는지 이해한다면 조금 더 재미있는 취약점을 찾을 수 있을거라 생각합니다.

참고로 ZAP의 Status 정보를 지속적으로 DB에 누적하면서 보는 방법이 있긴합니다. 이것도 제가 글로 쓴 적이 있는데요, 혹시나 관심 있으시다면 🚀 Building a ZAP Monitoring Environment (Grafana + InfluxDB + Statsd)