Dynamische Analyse von Android Apps
Ralph Meier
So verwenden Sie Bambdas und BChecks
Die Bezeichnung Bambdas setzt sich aus einer Kombination von Burp und Lambda zusammen. Bambdas ermöglichen Anwender von Burp Suite ihr Tool beziehungsweise deren Funktionalität auf einfache Weise direkt auf der grafischen Benutzeroberfläche mittels Java Codestücken zu erweitern. PortSwigger möchte damit eine Möglichkeit bieten, Burp in sämtlichen Punkten von Benutzern erweitern zu können. Bisher war dies nur durch die Entwicklung von Burp Extensions möglich, welche mehr an Entwicklungs-Know-how wie zum Beispiel den Umgang mit Build Tools wie Maven oder Gradle voraussetzten.
Bambdas wurden mit der Veröffentlichung von Burp Suite Release 2023.10.3 eingeführt. Als erstes wurden Bambdas im Proxy Tab eingeführt und ermöglichen so das Filtern von HTTP Traffic. Somit brachte PortSwigger zuerst eine Erweiterung des HTTP History Filters. Ein Bambda wird an dieser Stelle auf ein HTTP History Item (requestResponse Item) angewendet und kann somit sämtliche Eigenschaften der durchgeführten Requests und dazugehörige Responses abfragen, filtern und hervorheben. Im bisherigen Filter der HTTP History konnten reguläre Ausdrücke eingesetzt werden, jedoch sind Bambdas deutlich mächtiger und umfangreicher. Nun ist es auch möglich, ein regulär konfigurierter Filter in ein Bambda zu konvertieren und dies mit Java Code zu erweitern. Im Bambda Mode lassen sich bereits fertige Bambdas hineinkopieren, aus Dateien importieren oder direkt im Editor entwickeln sowie zu einem späteren Zeitpunkt speichern. Zum Zeitpunkt dieses Labs wurden Bambdas im WebSockets Histroy Filter und in der Filterfunktion im Logger Tab in einer Early Adopter Version von Burp Suite bereits veröffentlicht. Der stable Release wird wohl in den kommenden Wochen folgen.
Mit Bambdas im Proxy HTTP Traffic Filter lassen sich spezifische Endpunkte, Requests mit Inputfelder, spezielle Header oder andere Anomalien aus allen History Items filtern und hervorheben. Damit lassen sich Sonderfälle einfach eingrenzen und anschliessend einzeln untersuchen. Da Bambdas aus Java Code sind, besteht die Möglichkeit von Exceptions bei der Ausführung. Im Falle von Exceptions wird dies in Burp angezeigt und beim Öffnen des Filters werden detailliertere Informationen inklusive StackTrace dargestellt.
Mit Bambdas können zum Beispiel Requests welche /resources/
oder /image/
im Request Path beziehungsweise der URL enthalten ausgeblendet werden. Gleichzeitig können interessante History Items wie jene die /api
im Request Path haben grün und solche die die /graphql
beinhalten gelb eingefärbt werden. Im folgenden Beispiel werden noch zusätzlich History Items, welche im Request Path .js
enthalten sind, in der Farbe Magenta eingefärbt.
String requestPath = requestResponse.request().pathWithoutQuery(); if(requestPath.isBlank()){ return false; } if(requestPath.contains("/resources/") || requestPath.contains("/image/")){ return false; } if(requestPath.contains("api")){ requestResponse.annotations().setHighlightColor(HighlightColor.GREEN); } if(requestPath.contains("graphql")){ requestResponse.annotations().setHighlightColor(HighlightColor.YELLOW); } if(requestPath.contains(".js")){ requestResponse.annotations().setHighlightColor(HighlightColor.MAGENTA); } return true;
Bambdas können ebenfalls zum Filtern von eingesetzten Server-Response-Headern verwendet werden, wie zum Beispiel Server oder X-Powered-By. Anschliessend kann manuell geprüft werden, ob es sich bei dem Ergebnis um eine Offenlegung von Informationen handelt.
// in case of no response if (!requestResponse.hasResponse()) { return false; } var response = requestResponse.response(); // Header Server or X-Powered-By is present if (response.hasHeader("Server") || response.hasHeader("X-Powered-By")){ String headerServer = response.headerValue("Server"); if(headerServer==null || headerServer.isBlank()){ return false; } } else { return false; } return true;
Im Vorstellungsartikel von PortSwigger zu Bambdas sind noch weitere Beispiele zu finden. PortSwigger führt zudem ein eigenes Github Repository für Bambdas, welches von Anwender gerne erweitert werden darf.
In Zukunft möchte PortSwigger die Erweiterbarkeit von Burp mittels Bambdas an zusätzlichen Orten wie in die zentrale Suchfunktion integrieren. Ein Vorfiltern bei Intruder-Attacken ermöglichen, sowie Bambdas in den Capture Filter beim Logger und bei HTTP Listeners einbauen. Ziel soll es sein, mehrere einfache Bambdas kombinieren zu können, um so komplexe Aufgaben in einem Tool durchzuführen.
Der in Burp Suite integrierte Scanner bringt bereits von Haus aus eine grosse Anzahl an Scanchecks für ein breites Spektrum von bekannten Schwachstellen wie SQL-Injections, Cross-Site-Scripting, XML-Injections und viele weitere. Mit BChecks soll der integrierte Scanner auf eine einfache Art direkt in Burp Suite selbst mit eigenen Checks erweitert werden können. Produktspezifische Schwachstellen sind in den mitgelieferten Scanchecks oft nicht enthalten, können daher mittels BChecks selbst hinzugefügt werden.
Mit dem Release 2023.6.2 von Burp Suite wurden BChecks hinzugefügt. Diese befinden sich innerhalb des Extensions Tabs und können dort importiert, erstellt und verändert werden. Im letzten stable Release vor der Publikation dieses Artikels (2023.11.1.3) kam noch Syntax highlighting im BChecks Editor hinzu. Auch für BChecks pflegt PortSwigger ein Github Repository. Mit dem Early Adopter Release 2023.12.1 kam eine Formatier Funktion für BChecks hinzu, diese ist mittels Rechtsklick im Editor durchführbar.
Mittels BChecks können Prüfpunkte für produktspezifische Schwachstellen erstellt werden, welche noch nicht in Burp Suite enthalten sind, einige Beispiel können im Artikel von PortSwigger gefunden werden. BChecks können auch eingesetzt werden, um nicht optimal gesetzte Server-Response-Header festzustellen, im folgenden Beispiel geht es um die Konfiguration des HTTP Strict-Transport-Security Header:
metadata: language: v2-beta name: "HSTS Header Check" description: "Checks used HTTP Strict-Transport-Security Header" tags: "passive" author: "rame" given response then if "Strict-Transport-Security" in {latest.response.headers} then if ({latest.response.headers} matches "Strict-Transport-Security:\s*max-age\s*=\s*([3-9]{1}[0-9]{7,})") then if not({latest.response.headers} matches "preload") and not({latest.response.headers} matches "includeSubDomains") then report issue: severity: low confidence: firm detail: "Unsecure HSTS Header in use: no includeSubDomains and no preload set." remediation: "Include \"includeSubDomains; preload\" in HTTTP Strict-Transport-Security Header." else if not({latest.response.headers} matches "preload") then report issue: severity: low confidence: firm detail: "Unsecure HSTS Header in use: no preload set" remediation: "Include \"preload\" in HTTTP Strict-Transport-Security Header." else if not({latest.response.headers} matches "includeSubDomains") then report issue: severity: low confidence: firm detail: "Unsecure HSTS Header in use: no includeSubDomains set" remediation: "Include \"includeSubDomains\" in HTTTP Strict-Transport-Security Header." end if else then if not({latest.response.headers} matches "preload") and not({latest.response.headers} matches "includeSubDomains") then report issue: severity: medium confidence: firm detail: "Unsecure HSTS Header in use: max-age too short, no includeSubDomains and no preload set." remediation: "Set HTTTP Strict-Transport-Security to max-age=63072000; includeSubDomains; preload." else if not({latest.response.headers} matches "preload") then report issue: severity: medium confidence: firm detail: "Unsecure HSTS Header in use: max-age too short and no preload set." remediation: "Include \"preload\" and increase max-age in HTTTP Strict-Transport-Security Header." else if not({latest.response.headers} matches "includeSubDomains") then report issue: severity: medium confidence: firm detail: "Unsecure HSTS Header in use: max-age too short and no includeSubDomains set." remediation: "Include \"includeSubDomains\" and increase max-age in HTTTP Strict-Transport-Security Header." end if end if else then report issue: severity: medium confidence: firm detail: "No HTTP Strict Transport Header in use" remediation: "Set HTTTP Srict Transport Security to max-age=63072000; includeSubDomains; preload" end if
Bei der Entwicklung von BChecks kann die BCheck Definition Reference von PortSwigger enorm helfen, da sie einen guten Gesamtüberblick über die Möglichkeiten und Informationen über die notwendigen Teile eines BChecks enthält. Weitere Beispiele können im BChecks Repository von PortSwigger gefunden werden.
Im Release 2023.10.2.2 von Burp Suite wurde die Möglichkeit BChecks zu testen ausgeliefert. Das Testen von erstellten oder importieren BChecks findet im BChecks Editor statt. Dafür werden History Items aus der HTTP Proxy History via Send to BCheck editor
, was neu im Rechtsklick Kontextmenü in der HTTP Proxy History zu finden ist, als Test Case beim BChecks Editor hinzugefügt. Anschliessend kann im BCheck Editor der ausgewählte BCheck auf die selektierten Test Cases mittels Run Test
angewendet werden. Das Ergebnis kann danach in den Tabs Audit items, Event Log, Logger und die aus dem BCheck erstellen Schwachstellen im Issue activity Tab angeschaut werden. Diese Testing Methode wurde eingeführt, um herauszufinden wieso false Positives aus einem BCheck entstehen und ihn dahingehend zu verbessern und einfach erneut anwenden zu können.
Über die zukünftige Entwicklung und Erweiterung von BChecks ist aktuell nichts bekannt.
Mit BChecks lassen sich schnell eigene Checks für produktspezifische Schwachstellen entwickeln und einsetzten. Die Einführung von Bambdas in Burp hilft Benutzern das Filtern von History Items exakter zu steuern und ihre persönlichen Vorlieben in der Hervorhebung einfach und automatisch durch den erstellten Bambdas umzusetzen. Die Einführung von Bambdas an weiteren Orten ist sehr vielversprechend und fördert kleine Automatisierungen und benutzerspezifische Anpassungen, ohne die Entwicklung von dedizierten Extensions vorzunehmen. Neben Bambdas und BChecks unterstützt Burp Suite auch Makros, damit hat sich Andrea im Artikel Burp Makros – Wie sie korrekt verwendet werden auseinandergesetzt.
Unsere Spezialisten kontaktieren Sie gern!
Ralph Meier
Ralph Meier
Ralph Meier
Ralph Meier
Unsere Spezialisten kontaktieren Sie gern!