Input/Custom Vectors를 사용하여 ZAP에서 정밀하게 취약점 스캔하기 🎯

Active Scan

먼저 Active Scan에 대한 이야기를 가볍게하고 시작하겠습니다. ZAP의 Active Scan은 수집된 URL을 기반으로 지정된 패턴, 로직으로 자동화된 보안 테스팅을 하는 기능입니다. 보편적으론 사이트 전체에 대한 스캔이 많이 언급되지만, ZAP의 강점 중 하나는 원하는 HTTP Request를 대상으로 단건의 스캐닝을 쉽게 할 수 있기 때문입니다.

Burpsuite에서도 단일 페이지에 대한 스캔을 할 수 있습니다. 다만 스캔 항목을 사용자가 직접 설정하기에는 조금 번거로운 부분이 있습니다.

그래서 이를 잘 이용하면 XSS, SQLi 등 많은 Request를 발생시키며 테스트해야할 부분들을 부분적인 자동화로 테스트하고, 수동을 병행하여 조금 더 꼼꼼하게 체크할 수 있게 됩니다.

Scan Single-Request

Sites, History 등에서 Node(Request)를 선택하고 우클릭 > Attack > Active Scan 으로 하나의 Request만 스캔할 수 있습니다.

Input Vectors

Inputs Vectors는 Active Scan 시 Scanner가 URL Query, Body, Header 등 테스트에 사용할 벡터를 지정하고 식별할 수 있도록 설정합니다. 그래서 단건의 스캔 시 Inputs Vectors 탭에서 보면 여러가지 옵션을 통해 불필요한 부분은 제외하고 필요한 부분만 스캔할 수 있습니다.

이러한 설정은 Options > Active Scan Input Vectors 에서 Global 하게 설정하여 공통으로 사용할 수 있습니다.

  Description
URL Query String & Data Driven Nodes URL Query 부분와 Context에서 DDN으로 명시된 부분을 스캔합니다.
Add URL Query Paramter? 일부 Param mining을 병행합니다.
POST Data PUT/DELETE 도 동일하게 동작합니다.
URL Path Path 부분에 임의로 주입하여 스캔합니다.
HTTP Headers Request에 존재하는 헤더에 대해 모두 테스트합니다.
All Requests 모든 Request에 사용된 헤더 리스트를 만들고 이를 기반으로 테스트합니다.
Cookie Data 쿠키 헤더 내 값들에 대해 테스트합니다.
Enable Script Input Vectors 스크립트에 정의된 부분을 테스트합니다. (e.g GraphQL, SAML 등)

Custom Vectors

Custom Vectors는 HTTP Request에서 사용자가 스캔할 영역을 직접 지정할 수 있습니다. 원하는 영역을 드래그한 후 우측에 Add 버튼을 눌러 추가할 수 있습니다.

Custom Vectors가 하나 이상 추가되면 Active Scan은 동작 시 Custom Vector에 대해서만 스캔을 진행하게 됩니다.

Conclusion

Custom vectors를 사용하면 원하는 영역만 스캔할 수 있기 때문에 불필요한 요청을 줄일 수 있고 비정규 포맷을 사용하는 서비스에 대해 스캔할 수 있습니다. 서비스에서 독특한 구조의 포맷을 사용한다면 정확하게 타겟팅하여 스캔하세요! 분명히 좋은 결과를 만들어줄 수 있습니다 :D

References

  • https://www.hahwul.com/cullinan/zap/#activescan
  • https://twitter.com/hahwul/status/1534914873410621440