Custom Payloads로 ZAP 스캐닝 강화 🚀

오늘은 제가 최근에 ZAP에서 약간 관심있게 보고있던 기능 하나를 소개해드릴까 합니다. 바로 Custom Payloads인데요. Fuzzer나 ZAP의 Scripting engine을 사용하지 않고 조금 더 쉽게 지정된 페이로드 기반으로 테스트를 할 수 있어서 알아두시면 보안 테스팅이나 자동화 구현에서 잘 사용하실 수 있을거란 생각이 듭니다.

그럼 시작해보죠 :D

Custom Payloads

Custom Payloads는 ZAP의 Active Scan, Passive Scan에서 사용자가 지정한 Payloads를 기반으로 사용할 수 있도록 제공해주는 기능이자 Addon입니다. 현재까진 2개의 카테고리를 사용할 수 있으며, 스캔에 붙어서 돌기 때문에 카테고리가 늘어날 수록 기능의 이점이 점점 커질거란 생각이 듭니다.

  • Hidden-File
  • User-Agent

ZAP 공식 홈에선 이렇게 이야기하고 있습니다.

This addon adds an Options panel from which users are able to add, update, remove payloads of their creation/choosing for use by active or passive scan rules which support custom payloads (accessible via the Tools menu Options menu item). The option panel interface also facilitates addition of multiple payloads from a file.

사용자가 페이로드에 대해 CRUD하고, 이를 Active/Passive 스캔에서 사용한다는 말이죠. 그럼 직접 보면서 어떤 기능인지 살펴봅시다.

Hidden-File

Options > Custom Payloads 로 진입하셔서 Add를 눌러 추가해줍시다. Hidden-File Payload는 / 뒤로 붙기 떄문에 경로상에서 맨앞에 /는 제외하셔도 됩니다.

추가된 Payload는 Active Scan에서 사용됩니다. 별도로 Policy를 지정하지 않으셨다면 기본적으로 포함되는 Scan Rule이고, 저는 2가지 스캔룰을 지정하여 사용합니다.

  • 전체 스캔용 Policy (그냥 딱 Hidden-File 스캔용)
  • 개별 URL 단위 스캔용 Policy (점검 중 나온 페이지나 파일을 전체에 공통적으로 체크가 필요할 때 사용)

Active Scan > Information Gathering > Hidden File Finder

이제 Active Scan 시 Hidden File Finder Rule에서 우리가 등록한 Payload를 기반으로도 추가 스캔을 진행합니다.

맨 아래 보면 추가했던 hahwul.json이 있죠

그리고 만약 룰에 따라 Hidden-File을 발견했다고 판단되면 Alerts에 띄어줍니다.

제가 제 사이트에 존재하는 페이지로 하나 추가해서 돌려봤어요

기본적으론 Status Code가 200 OK면 Alerts를 띄어줍니다. 만약 사용자가 Custom error 페이지 패턴을 지정하게 되면 같은 200 이라도 에러 페이지면 표기하지 않게 됩니다.

User-Agent

Hidden-File과 동일하게 Options > Custom Payloads 로 진입하셔서 Add를 눌러 추가해줍시다. Save Cancel

User-Agent Payload는 User Agent Fuzzer Rule에서 사용됩니다. Active Scan > Information Gathering > User Agent Fuzzer

해당 Rule이 동작하면, UA 별로 페이지의 반응을 체크합니다.

만약 실제로 UA에 따라 결과가 달라진다면 이 또한 Alerts에 표기해줍니다.

Payload from the file

위에 등록 시 이미 보셨겠지만, Add Multiple Payloads 을 통해 파일에서도 읽어올 수 있습니다. 파일을 읽으면 여러개의 Custom Payload가 등록됩니다.

Options > Custom Payloads > Add Multiple Payloads

Using in Cli

자 ZAP의 큰 장점 중 하나는 바로 자동화죠? 분석에서는 GUI 의존도가 크지만, 자동화 Flow에선 Cli 나 REST API, Automation Framework의 비중이 매우 큽니다. 하나 아쉬운건 Custom Payloads가 신규 기능들에 빠르게 지원이 들어가는 Addon은 아니다 보니 Automation Framework 지원이 아직되지 않았습니다. 그래도 모든 ZAP의 기능은 Cli로 컨트롤 할 수 있기 때문에 이를 이용해서 가지고 계신 자동화나 CI/CD DAST에 녹일 수 있습니다.

먼저 config 확인을 위해 config.xml을 확인해봅니다.

<custompayloads>
        <nextPayloadId>11</nextPayloadId>
        <confirmRemoveToken>true</confirmRemoveToken>
        <categories>
            <category name="Hidden-File">
                <payloads>
                    <payload>
                        <id>8</id>
                        <enabled>true</enabled>
                        <payload>about/</payload>
                    </payload>
                </payloads>
            </category>
...
        </categories>
    </custompayloads>

custompayloads 하위에 []category 단위로 묶이고 아래 []payload 단위로 사용되네요. 그럼 cli flag로 변환하면 이런 형태가 됩니다.

custompayloads.categories\(0\).payloads\(0\).payload = "YOUR PAYLOAD"
custompayloads.categories\(0\).payloads\(0\).enabled = true

매번 모든 flag를 추가하긴 어려우니 따로 config 파일 하나 만들어서 위 구문을 추가하시고, 아래 flag를 포함해 ZAP을 구동하면 자동으로 세팅됩니다 👏🏼

./zap.sh -configfile myzap.config

VS Fuzzer

사실 ZAP의 Fuzzer와 어느정도 유사한면이 있습니다. ZAP의 Fuzzer는 동일하게 Wordlists를 읽을 수 있고, Scripting도 많이 지원하고 있어서, 다양한 형태의 테스팅을 자동화할 수 있습니다.

혹시나 Fuzzer에 대해 궁금하시면 ‘ZAP의 fuzz-script를 이용해 Fuzzing 스킬 올리기’ 글을 읽어주세요!

다만 큰 차이가 있다면 Fuzzer는 진짜 Fuzzing을 위해 최적화된 도구이고, Custom Payloads는 Scanning 작업에 붙어서 조금 더 많은 벡터를 테스트하기 위한 도구입니다. 그래서 현재 지원하는 Hidden-File, UA Fuzz는 Custom Payloads를 통해 테스트하는 것이 훨씬 수월하고 편리합니다. 나중에 Custom Payloads의 Category가 늘어갈수록 이 기능의 강점이 많이 살아나겠죠.

그리고 궁극적으로 DAST, 즉 CI/CD Pipeline 스캔에서 유연하게 붙일 수 있어서 DevSecOps의 일부에 ZAP을 사용하신다면 쉽게 적용할 수 있고 Custom Payloads를 통해 혹시 1개라도 이슈를 이를 통해 잡는다면, 잠깐 시간 투자한 것에 비해 효과는 굉장헀다란 생각이 들겁니다.

Conclusion

Custom Payloads를 알기 전까진 제 커스텀한 Hidden-File 스캔을 Scripting으로 대체하고 있었습니다. 지금 생각해보면.. 왜그랬나 싶네요. (GUI로 슥슥 하면 될껄 괜히 일을 만들어가지고… 😅)

J5jiSSrEkV3Kd8iOwb

References