Red Team Assessment, Ihre Firma aus der Perspektive eines Gegners
Baseline Security Assessment, Attack Simulation Assessment, Red Team Assessment, Purple Team Assessment. Unser Red Team ist Ihr richtiger Partner.

So entwickeln Sie Extensions für Burp Suite
Bambdas wurden bereits im Artikel Burp Bambdas & BCheck vorgestellt. Dabei handelt es sich, um Java Codestücke, welche das Filtern an mehreren Orten in Burp ermöglichen. Seit dem Publizieren des letzten Artikels können Bambdas auch im Logger Capture Filter eingesetzt werden, um damit den Traffic genauer zu spezifizieren, welcher später analysiert werden soll. Zudem kann die Site Map ebenfalls mit Hilfe von Bambdas feiner gefiltert werden. Bambdas haben eingeschränkten Zugriff auf die MontoyaApi erhalten, um fortschrittlichere Match and Replace Regeln erstellen zu können. Ebenfalls gibt es nun eine eigene Output-Konsole für ein verbessertes Debuggen von Bambdas.
Eine weitere Möglichkeit Burp Suite einfach und mit wenig Code zu erweitern, stellen BChecks dar. Bei BChecks handelt es sich um Scanchecks, die vom Benutzer selbst geschrieben beziehungsweise hinzugefügt werden können. Eine Einführung sowie ein Beispiel sind im Artikel Burp Bambdas & BCheck zu finden.
Mit sogenannten Burp Extensions lässt sich Burp Suite gezielt an eigene Bedürfnisse anpassen. Ob man eine spezielle Sicherheitsprüfung automatisieren, Daten aufbereiten oder die Benutzeroberfläche erweitern möchte – eine Extension kann einem viel Zeit und manuelle Arbeit ersparen. Extensions sind gegenüber von BChecks und Bambdas deutlich aufwendiger zu erstellen, jedoch auch umso mächtiger. Burp Extensions können in verschiedenen Programmiersprachen erstellt werden.
PortSwigger bietet Entwicklern mehrere Schnittstellen, um Burp Suite zu erweitern. Grundsätzlich gibt es zwei APIs: Die alte Extender API und die neue MontoyaApi. Burp Extensions können in verschiedenen Programmiersprachen geschrieben werden:
In Kombination mit Jython und JRuby wird die legacy Extender API verwendet, welche nicht mehr aktiv unterhalten wird, daher wird empfohlen Kotlin oder Java in Kombination mit der MontoyaApi für Neuentwicklungen zu verwenden. Mit ganz alten Versionen von Burp Suite (z.B. 1.5.02) war es noch möglich eine Kombination zwischen Java und JavaScript mittels Rhino für Extensions zu verwenden.
Burp Suite beinhaltet einen BApp Store, über welchen publizierte Extensions, welche von PortSwigger in den Store aufgenommen wurden, installiert werden können. Je nach Testsetup hilft es jedoch auch die Extensions via BApp Store im Browser oder direkt via GitHub herunterzuladen und zu installieren.
Diese API war lange Zeit der Standard und ist immer noch weit verbreitet. Hier registriert sich die Extension über das IBurpExtender-Interface und kann dann verschiedene Listener implementieren:
Ein grosser Vorteil ist die grosse Community und die vielen Beispielen im Internet, gerade auf GitHub. Jedoch ist die API veraltet, wird nicht mehr weiterentwickelt und ist teilweise unübersichtlich.
Seit 2022 gibt es die neue MontoyaApi, die moderner, klarer strukturiert und einfacher zu verwenden ist. Sie setzt auf ein sauberes Objektmodell und ersetzt langfristig die alte Extender API. Die MontoyaApi bringt ein klares Objektmodell mit konsistenter Namenskonvention mit sich, statt verstreuter Interfaces. Die oben verlinkte Javadoc-Dokumentation ist verständlich, umfangreich und enthält diverse Beispiele. Sie gilt als zukunftssicher, da die Extender API nicht mehr weiterentwickelt und die neuen Funktionen in der MontoyaApi integriert werden.
Eine Extension mit der MontoyaApi implementiert das Interface burp.api.montoya.BurpExtension und überschreibt die initialize-Methode mit den gewünschten Werten und Funktionsweisen der Extension.
class MyFirstExtension : BurpExtension {
private lateinit var montoyaApi: MontoyaApi
override fun initialize(api: MontoyaApi?) {
montoyaApi = requireNotNull(api) { "api : MontoyaApi is not allowed to be null" }
montoyaApi.logging().logToOutput("Started loading the extension...")
montoyaApi.extension().setName("MyFirstExtension")
//register active or passive ScanChecks
montoyaApi.scanner().registerPassiveScanCheck(MyOwnPassiveScanCheck(montoyaApi), ScanCheckType.PER_REQUEST)
//register a ContextMenuItemsProvider
montoyaApi.userInterface().registerContextMenuItemsProvider(MyOwnContextMenu(montoyaApi))
montoyaApi.logging().logToOutput("...Finished loading the extension")
}
}Die Logausgaben eignen sich in diesem Teil, um auf einfache Weise das erfolgreiche Laden der Extension festzustellen.
Über das MontoyaApi-Objekt erhält man Zugriff auf:
Das gewünschte Interface erweitert man mittels einer eigenen Klasse und registriert diese in der MyFirstExtension-Klasse und kann so Burp Suite mit der gewünschten Funktionalität erweitern. Für die Entwicklung von Extensions mittels Kotlin eignet sich das GitHub Repository KotlinBurpExtensionBase sehr gut als Einstieg. Darin ist auch beschrieben, wie das Erstellen eines Jars mit Hilfe von Gradle und shadowJar vonstattengeht und wie man einen Debugger an seine Extension anschliesst.
Im Rahmen dieses Artikels wurde mit der Entwicklung der Extension HeaderMate begonnen. Diese soll unsere interne Burp Suite Extension zur Auswertung von Server-Response-Headern ersetzen, welche in Python entwickelt wurde und die alte Extender API verwendet. Bei der Neuentwicklung haben wir versucht die Extension weniger ressourcenintensiv zu gestalten. Dazu werden nur Requests von zuvor konfigurierten Hostnamen überprüft und die Extension bietet die Möglichkeit die Issue Erstellung innerhalb von Burp Suite ein- beziehungsweise auszuschalten. Im Hintergrund werden die ausgewerteten Server-Response-Header in den persistenten Speicher des Burp Suite Projekts geschrieben. Achtung bei temporären Projekten gibt es den persistenten Speicher nur so lange Burp Suite offen ist.
Am Ende können die protokollierten Server-Response-Header als CSV-Datei über das Kontextmenü zum Beispiel in der Proxy History exportiert werden. Der Export eignet sich gut, um mit einem internen Skript ausgewertet und in das erforderliche Format für das Reporting-Tool konvertiert zu werden. Der Export der ausgewerteten Server-Response-Headern ist im CSV-Format und als Separator wird der ASCII Unit Separator 0×1F verwendet. Dies weil er maschinenfreundlich sowie eindeutig und weder in HTTP-Header-Werten noch in URLs erlaubt ist.
Für die HeaderMate Extension gibt es noch eine Konfigurationsdatei, in welcher hinterlegt ist, welche Header überprüft werden, was deren Optimalwert ist sowie was die Werte für unterschiedliche Schweregrade sind. Es gibt eine default Konfigurationsdatei, welche auch mit der Extension mitgeliefert wird. Es kann auch eine eigene Konfigurationsdatei hineingeladen werden, mit anderen Headern. Sofern es sich bei neuen Server-Response-Headern nicht um Spezialfälle wie zum Beispiel bei Content-Security-Policy handelt, wäre die Idee, dass es ohne eine Anpassung des Codes der Extension funktioniert. Neue Spezialfälle erfordern jedoch gewisse Anpassungen an der Extension selbst. Bei der Entwicklung wurde auf Kotlin statt auf Java gesetzt, da Kotlin eine modernere Syntax bietet, Null-Safety und viele Komfortfunktionen.
Der Inhalt der default Konfigurationsdatei entspricht den Empfehlungen von OWASP und den Artikeln Inglorious Headers, Response Header Hardening und HTTP Strict Transport Security – Fünf häufige Fehler und wie man sie behebt.
Die Hauptfunktionalität der HeaderMate Extension geschieht in der Klasse HeaderScanCheck genauer gesagt in der Methode passiveAudit.
Zuerst wird geprüft, ob es eine Änderung an der Konfiguration gab. Anschliessend folgen die ersten Abbruchkriterien, ist eine Response vorhanden und sollten Responses von diesem Host geprüft werden. Danach wird die aktive Header-Konfiguration Zeile um Zeile beziehungsweise Header um Header durchlaufen, dabei werden folgende Schritte durchgespielt:
In den letzten Versionen von Burp Suite gab es in der MontoyaApi noch eine Umstellung bei den ScanChecks wobei das Interface burp.api.montoya.scanner.ScanCheck als deprecated deklariert wurde und nun PassiveScanCheck beziehungsweise ActiveScanCheck je nach Einsatzgebiet verwendet werden sollte. Bei der Umstellung beim HeaderMate führte dies zu kuriosen Seiteneffekten, welche noch nicht behoben werden konnten. Die Umstellung auf das PassiveScanCheck Interface erfolgt daher in einer zukünftigen Version. In der ersten veröffentlichten Version wird nur auf die optimale Konfiguration und wenige Spezialfälle wie der CacheControl Header geprüft und aufgrund dessen der Schweregrad gesetzt, dies wird in den nächsten Releases ebenfalls weiter ausgebaut.
Das Entwickeln von Burp Extensions ist eine mächtige Möglichkeit, eigene Sicherheitsprüfungen zu automatisieren und Burp Suite individuell zu erweitern. Ob in Java, Python oder Kotlin – die Flexibilität von Burp Suite macht es möglich, eigene Ideen direkt in produktive Werkzeuge zu verwandeln. Mit der MontoyaApi hat PortSwigger einen modernen Weg geschaffen, der die Entwicklung einfacher, sauberer und zukunftssicher macht. Mittels Kotlin und der vorgestellten Extension Basis lässt sich das Setup in kurzer Zeit für eine neue Extension einrichten. Die Vielzahl der vorhandenen Burp Extensions im BApp Store und auf GitHub zeigt den Bedarf und die Möglichkeiten Burp Suite zu erweitern und zu personalisieren.
Unsere Spezialisten kontaktieren Sie gern!

Baseline Security Assessment, Attack Simulation Assessment, Red Team Assessment, Purple Team Assessment. Unser Red Team ist Ihr richtiger Partner.

Ralph Meier

Ralph Meier

Ralph Meier

Ralph Meier
Unsere Spezialisten kontaktieren Sie gern!