Burp Suite · 2026-01-27

Python과 Jython으로 Burp 확장 개발

Burp Suite에서 Python(Jython)을 사용해 확장 기능을 개발하는 절차, 환경 설정, 예제 코드와 배포 고려사항, 실무 적용 포인트를 정리한 참고자료

작성일 : 2026-01-27 ㆍ 작성자 : 관리자
post
목차

개요

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의 기본 예제를 반복해 테스트하고, 점차 기능을 확장하는 방식이 안정적이다.

Burp Jython 확장 Python Burp Extender Burp 파이썬 플러그인 개발 Burp Suite 확장 Jython 설정 Burp Extender 예제 파이썬 플러그인 보안테스트 자동화