Attack Surface Detector를 이용해 소스코드에서 Endpoint 찾기

제가 일할 때 종종 사용하는 ZAP/Burp Addon이 있는데, 최근 에러가 있어서 찾다보니 제가 한번도 블로그에서 언급한적이 없었더군요. 그래서 오늘은 그 도구인 Attack surface detector에 대해 이야기할까 합니다.

꼭 필요할 때는 이래요 🤯 / 그래도 몇년동안 덕분에 잘 쓰긴 했죠 ☺️

Attack surface detector

Attack surface detector는 Source code를 기반으로 테스트할 Surface를 찾아주는 도구입니다. 말이 복잡하지 쉽게 이야기하면 소스코드 분석해서 RequestMapper와 같이 라우팅 코드 찾고, 이를 ZAP이나 Burpsuite에서 바로 로드되도록 해주는 도구이죠.

각각 ZAP의 Marketplace, Burpsuite의 bApps에 모두 등록되어 있고, Github repo는 아래와 같습니다.

코드가 있다면, Spidering이나 Param mining을 떠나서 Endpoint URL을 가장 정확하고 많이 식별할 수 있는 방법이기 때문에 대상이 지원하는 언어나 프레임워크인 경우 무조건 사용하고 있습니다.

Support

아래 언어와 프레임워크에 대해 지원합니다. 보시면 아시겠지만 약간 레거시 시스템을 진단할 때 도움이 되죠.

  • C# / ASP.NET MVC
  • C# / Web Forms
  • Java / Spring MVC
  • Java / Struts
  • Java JSP
  • Python / Django
  • Ruby / Rails

How to use

사용은 단순합니다. ZAP/Burp 모두 동일하게 Source code(dir/zip/war) 나 JSON 파일을 지정하고 로드한 정보를 기반으로 호출할 Host와 Port 그리고 https 여부를 설정해주면 Attack surface detector가 코드를 분석하면서 ZAP과 Burp에 쌓아줍니다. 그리고 단순히 Endpoint 로드 뿐만 아니라 2개 버전의 소스코드를 비교하여 처리하는 것도 가능합니다. (Comparison source code 부분)

그럼 하나 테스트 삼아 tomcat의 sample war 파일을 읽어봅시다. Source code to analyze에 해당 파일의 경로를 입력한 후 Import Endpoint from Source를 눌러주시면 아래와 같이 war 파일에 있는 GET /hello.jsp POST /hello.jsp 2개를 모두 로드합니다.

Conclusion

잘 알려진 Addon은 아니지만 라우팅 코드 보면서 하나하나 추가하는 것($ grep "Mapper" * -R) 보단 훨씬 간편하고 효율적입니다. 특히 파라미터까지 가능하면 처리하기 때문에 수동이랑은 비교가 안되죠.

References

  • https://github.com/secdec/attack-surface-detector-zap
  • https://github.com/secdec/attack-surface-detector-burp
  • https://tomcat.apache.org/tomcat-7.0-doc/appdev/sample/