Python과 Jython으로 Burp 확장 개발
Burp Suite에서 Python(Jython)을 사용해 확장 기능을 개발하는 절차, 환경 설정, 예제 코드와 배포 고려사항, 실무 적용 포인트를 정리한 참고자료
목차
개요
Burp Suite는 확장 API를 제공해 테스트 환경을 확장할 수 있다. Jython을 통해 Python 코드를 Burp에 연결하면 기존 파이썬 기술을 활용해 빠르게 플러그인을 만들 수 있다. 본문은 Burp Jython 확장 개발 흐름을 처음 접하는 사람도 이해하기 쉽게 정리한다.
사전 준비
필수 요소
- Burp Suite (Community 또는 Professional)
- Jython standalone JAR (권장 최신 2.7.x)
- Python 문법 기초
환경 설정
Burp의 Extender 탭에서 Options > Python Environment에 Jython JAR 경로를 지정한다. Jython이 정상 설정되면 .py 확장 파일을 로드해 확장을 실행할 수 있다.
기본 구조와 API 이해
Burp 확장은 IBurpExtender 인터페이스를 구현해야 한다. 스캐너나 프록시 훅을 연결하려면 추가 인터페이스를 구현하면 된다. Python(Jython)에서는 Java 인터페이스를 그대로 상속해 클래스를 작성한다.
간단한 Extender 예제
from burp import IBurpExtender, IScannerCheck, IScanIssue
class BurpExtender(IBurpExtender, IScannerCheck):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("SimplePythonExt")
callbacks.registerScannerCheck(self)
def doPassiveScan(self, baseRequestResponse):
# 간단한 패시브 스캔 예시
return None
def consolidateDuplicateIssues(self, existingIssue, newIssue):
return -1
위 코드는 확장의 골격이다. registerExtenderCallbacks에서 콜백과 헬퍼를 가져온 뒤, 필요한 훅을 등록한다. IScannerCheck를 구현하면 취약점 스캐너와 통합할 수 있다.
실제 취약점 보고 생성 예
Burp에 이슈를 보고하려면 IScanIssue 인터페이스를 구현한 객체를 반환해야 한다. 아래 예시는 간단한 이슈 객체를 생성하는 방법이다.
from burp import IScanIssue
class CustomIssue(IScanIssue):
def __init__(self, httpService, url, details):
self._httpService = httpService
self._url = url
self._details = details
def getUrl(self):
return self._url
def getIssueName(self):
return "Example Issue"
def getIssueType(self):
return 0
def getSeverity(self):
return "Medium"
def getConfidence(self):
return "Certain"
def getIssueBackground(self):
return None
def getRemediationBackground(self):
return None
def getIssueDetail(self):
return self._details
def getHttpMessages(self):
return None
def getHttpService(self):
return self._httpService
디버깅과 출력
개발 중에는 callbacks.printOutput을 사용해 로그를 남기면 편하다. stdout나 stderr 출력도 Extender 탭에서 확인 가능하다. 복잡한 로직은 예외 처리를 충실히 해 Burp가 확장 로드 중 크래시 되지 않도록 주의한다.
패키징과 배포 고려사항
- 외부 파이썬 패키지 사용 시 Jython 호환성 검토 필요
- 순수 파이썬 라이브러리라도 Jython에서 동작하지 않을 수 있음
- 의존성이 있는 경우 .py 파일과 함께 배포하거나 sys.path를 조정해 로드
상용 환경에서는 버전 관리와 설치 절차를 명확히 정리해 확장 배포 시 혼선을 줄인다. 또한 멀티스레드 환경에서의 동시성 문제를 고려하면 안정성이 향상된다.
성능과 안전
Burp 환경에서는 빈번한 네트워크 처리와 큰 트래픽을 다룰 수 있다. 파이썬 코드의 반복문과 바이너리 처리는 성능 병목이 될 수 있다. 필요한 경우 핵심 로직을 Java로 옮기고 Jython을 통해 호출하는 하이브리드 방식도 검토한다.
유용한 실무 팁
- 먼저 단순한 기능부터 구현해 확장 구조를 검증한다.
- 로그는 목적에 맞게 레벨을 두고 남긴다.
- 테스트 케이스를 만들어 예상치 못한 입력에 대한 동작을 확인한다.
- Burp 파이썬 플러그인 개발 시 API 문서를 병행해 참고한다.
마무리
Burp Jython 확장은 Python 생태계를 활용해 빠르게 기능을 추가할 수 있는 방법이다. 기본적인 설정과 확장 구조를 이해하면, 보다 복잡한 자동화와 분석 도구를 구현할 수 있다. 처음에는 Python Burp Extender의 기본 예제를 반복해 테스트하고, 점차 기능을 확장하는 방식이 안정적이다.