Optimizing ZAP and Burp with JVM

누군가가 저에게 Application Security, Pentest 등에서 가장 활발하게 사용되는 도구를 선택하라고 하면 당연히 Burpsuite와 ZAP 같은 Proxy 도구를 선택할 것 같습니다. 최근 Caido가 많이 올라오는 추세이긴 하나, 장기간 리드 역할을 수행해 온 두 도구를 따라가기엔 아직 충분한 시간이 더 필요할 것으로 보입니다.

오늘은 ZAP과 BurpSuite 모두 공통적으로 최적화할 수 있는 JVM Options 대해 이야기하려고 합니다.

JVM Options

ZAP과 BurpSuite은 모두 Java 기반의 어플리케이션으로 JVM 위에서 동작하게 됩니다. 대부분은 그냥 기본 설정을 사용하지만, JVM은 구동 단계에서 Options를 명시하여 실제 어플리케이션에 적용될 성능을 명시해줄 수 있습니다.

JVM Options in ZAP

ZAP은 Options 하위 메뉴에서 JVM Options를 명시할 수 있도록 설정할 수 있습니다.

Options > JVM > JVM Options

해당 메뉴에서 설정된 JVM Optinos는 다음 부팅 시점부터 적용됩니다. 또는 ZAP 어플리케이션 하위 경로에 .ZAP_JVM.properties 파일에 옵션을 명시하여 적용시킬 수도 있습니다.

  • MacOS: ~/Library/Application Support/ZAP
  • Linux: ~/.ZAP

JVM Options in BurpSuite

BurpSuite은 구동 시점 이후에 별도로 옵션을 받아서 처리해주지 않습니다. 사용자가 Command line에서 구동하면서 Options를 전달해야 합니다.

java -jar burpsuite_pro.jar --illegal-access=permit -Xmx4096m

# MacOS
# /Applications/Burp Suite Professional.app/Contents/Resources/app/burpsuitre_pro.jar

매번 이렇게 실행하기는 번거롭기 때문에 단축어나 zsh,bash 등에 alias로 등록하고 사용하면 편리합니다. 기본으로 구동되는 옵션이 궁금하다면 /Applications/Burp Suite Professional.app/Contents/vmoptions.txt (MacOS 기준) 파일을 참고해주세요.

Optimizing with JVM

Memory

-Xms-Xmx는 각각 JVM의 초기 힙 크기와 최대 힙 크기 설정을 의미합니다. JVM 기반앱을 구동하는 환경 대비 너무 협소하게 할당하거나 과도하게 할당하는 경우가 있는데, 여러번 테스트하면서 사용하기는 기기에 최적화된 설정을 찾으신다면 좀 더 쾌적한 테스팅이 가능해집니다.

# Example
-Xmx4096m

Garbage Collector

UseG1GC

-XX:+UseG1GC는 Garbage First (G1) Garbage Collector를 사용하도록 설정하는 옵션입니다. 일반적으로 큰 메모리를 가진 멀티 프로세서 환경에서 짧은 puase time을 위해 사용하는 옵션이지만, 사용하는 기기에 따라 성능의 이점을 줄 수도 있어서 테스트해보는 것이 좋습니다.

UseParallelGC

-XX:+UseParallelGC 는 별렬 GC를 사용하도록 설정하는 옵션입니다. CPU 코어가 많은 시스템에선 성능 향상에 도움이 될 수 있습니다.

AggressiveOpts

-XX:+AggressiveOpts 를 통해 자주 사용되는 플래그를 활성화하여 성능을 향상할 수도 있습니다. 다만 환경에 따라 악영향을 줄 수도 있어서, 테스트 후 적용하는 것이 좋습니다.

Deduplication Strings

-XX:+UseStringDeduplication은 JVM 상에 중복 문자열을 감지하고 공유하여 메모리를 절약하는 기능을 활성화하는 옵션입니다. Proxy 도구 특성 상 많은 문자열을 처리하는 도구로 잘 활용하면 이점이 될 수 있습니다.

Conclusion

개인적으론 ZAP은 최대 Alerts 건수와 Req/Res Size, BurpSuite은 Extension 관리에서 최적화를 만들어 가고 JVM 옵션은 서버에서 동작하는 DAST 도구의 최적화를 위해서만 사용했었습니다. 분석용 도구의 최적화와는 살짝 차이가 느껴집니다. 고성능 기기라 굳이 최적화가 필요하지 않더라도 이것저것 테스트해 보면서 얻을 수 있는 것이 많기 때문에 한 번쯤은 최적화 해보시는 것을 추천합니다 :D