
Eine Bibliothek zur Erkennung bekannter Geheimnisse in vielen Web-Frameworks

Eine reine Python-Bibliothek zur Identifizierung der Verwendung bekannter oder sehr schwacher kryptografischer Geheimnisse auf einer Vielzahl von Plattformen. Das Projekt ist als Repository für verschiedene "bekannte Geheimnisse" (z. B. ASP.NET-Maschinenkeys aus Beispielen in Tutorials) und als sprachunabhängige Abstraktionsschicht für deren Identifizierung konzipiert.
Herauszufinden, ob ein "schlechtes Geheimnis" verwendet wurde, erfordert meist die Untersuchung eines kryptografischen Produkts, in dem das Geheimnis verwendet wurde: z. B. ein Cookie, das mit einem keyed Hashing-Algorithmus signiert ist. Die Situation kann kompliziert werden, wenn man sich mit den individuellen Implementierungsbesonderheiten jeder Plattform befasst; dieses Ziel soll die Bibliothek entschärfen.
Schauen Sie sich unseren vollständigen Blogbeitrag auf dem Black Lantern Security Blog an!
Inspiriert von Blacklist3r, mit dem Wunsch, die unterstützten Plattformen zu erweitern und Sprach- sowie Betriebssystemabhängigkeiten zu beseitigen.
Passive Module analysieren kryptografische Produkte (Cookies, Tokens, signierte URLs usw.), die Sie bereits besitzen. Sie arbeiten offline, indem sie versuchen, das Produkt anhand einer Datenbank bekannter Geheimnisse zu entschlüsseln oder zu verifizieren.
| Name | Beschreibung |
|---|---|
| ASPNET_Viewstate | Überprüft den Viewstate/Generator anhand einer Liste bekannter Maschinenkeys. |
| ASPNET_Resource | Überprüft verschlüsselte URLs von WebResource.axd und ScriptResource.axd anhand einer Liste bekannter Maschinenkeys. Nützlich, wenn __VIEWSTATE nicht auf einer Seite vorhanden ist. |
| Telerik_HashKey | Überprüft gepatchte (2017+) Versionen von Telerik UI auf einen bekannten Telerik.Upload.ConfigurationHashKey |
| Telerik_EncryptionKey | Überprüft gepatchte (2017+) Versionen von Telerik UI auf einen bekannten Telerik.Web.UI.DialogParametersEncryptionKey |
| Flask_SignedCookies | Überprüft schwache Flask-Cookie-Signierungspasswörter. Wrapper für flask-unsign |
| Peoplesoft_PSToken | Kann einen Peoplesoft-PS_TOKEN auf ein schlechtes/schwaches Signierungspasswort überprüfen |
| Django_SignedCookies | Überprüft Djangos Session-Cookies (im signed_cookie-Modus) auf bekannte django secret_key |
| Rails_SecretKeyBase | Überprüft signierte oder verschlüsselte Session-Cookies von Ruby on Rails (aus mehreren Hauptversionen) auf bekannte secret_key_base |
| Generic_JWT | Überprüft JWTs auf bekannte HMAC-Geheimnisse oder RSA-Private-Keys |
| Jsf_viewstate | Überprüft sowohl Mojarra- als auch Myfaces-Implementierungen von Java Server Faces (JSF) auf die Verwendung bekannter oder schwacher geheimer Schlüssel |
| Symfony_SignedURL | Überprüft Symfony "_fragment"-URLs auf bekannte HMAC-Schlüssel. Arbeitet mit der vollständigen URL inklusive Hash |
| Express_SignedCookies_ES | Überprüft Express.js express-session-Middleware auf signierte Cookies und Session-Cookies für bekanntes 'session secret' |
| Express_SignedCookies_CS | Überprüft Express.js cookie-session-Middleware auf signierte Cookies und Session-Cookies für bekanntes secret |
| Laravel_SignedCookies | Überprüft 'laravel_session'-Cookies auf bekannten Laravel 'APP_KEY' |
| ASPNET_Compressedviewstate | Überprüft ein ehemals populäres benutzerdefiniertes komprimiertes Viewstate Code-Snippet, anfällig für RCE |
| Rack2_SignedCookies | Überprüft signierte Cookies von Rack 2.x auf bekannte geheime Schlüssel |
| Yii2_SignedCookies | Überprüft signierte Cookies des Yii2-Frameworks auf bekannte Cookie-Validierungsschlüssel |
| Shiro_RememberMe | Überprüft Apache Shiro rememberMe-Cookies auf bekannte AES-Verschlüsselungsschlüssel |
| LTPA_Token | Überprüft IBM WebSphere LtpaToken- und LtpaToken2-Cookies auf bekannte LTPA-Verschlüsselungsschlüssel |
Aktive Module gehen einen Schritt über die passive Erkennung hinaus. Sie verwenden eine YARA-basierte Vorfilterung, um ein Live-Ziel zu identifizieren (basierend auf HTTP-Response-Headern, Cookies und Body-Inhalten), fälschen dann kryptografische Produkte mit bekannten Schlüsseln und senden diese an das Ziel, um zu bestätigen, ob der Schlüssel akzeptiert wird. Dies ist nützlich für Fälle, in denen Sie noch kein Token zur Analyse haben, aber vermuten, dass das Ziel Standard- oder bekannte Geheimnisse verwendet.
Aktive Module sind im URL-Modus (--url) standardmäßig aktiviert. Verwenden Sie --passive-only, um sie zu deaktivieren.
| Name | Beschreibung |
|---|---|
| Shiro_RememberMe_Key | Fälscht Apache Shiro rememberMe-Cookies mit bekannten AES-Schlüsseln und testet, ob das Ziel sie akzeptiert (Deserialisierungs-RCE) |
| GlobalProtect_DefaultMasterKey | Testet PAN-OS GlobalProtect-Portale auf die Verwendung des standardmäßigen Master-Verschlüsselungsschlüssels |
| LTPA_Token_Key | Fälscht IBM WebSphere LtpaToken2-Cookies mit bekannten LTPA-Schlüsseln und testet, ob das Ziel die Authentifizierung gewährt (Auth-Bypass) |
Wir haben ein pypi-Paket, sodass Sie einfach pip install badsecrets ausführen können, um die Bibliothek zu nutzen.
Die beste Möglichkeit, Badsecrets zu verwenden, ist die einfache Ausführung von badsecrets nach der Installation mit pip:```
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Unter der Haube wird das `cli.py`-Beispiel verwendet. Die CLI kann auch manuell ohne eine pip-Installation aufgerufen werden:
#### Ohne pip-Installation:```bash
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Um die Beispiele zu nutzen, führen Sie nach der pip-Installation einfach git clone des Repos und cd in das Verzeichnis badsecrets aus:```
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
Die Befehle im folgenden Beispielabschnitt gehen davon aus, dass Sie sich in diesem Verzeichnis befinden.
Wenn Sie das Badsecrets [BBOT](https://github.com/blacklanternsecurity/bbot) Modul verwenden, müssen Sie nichts weiter tun - BBOT wird das Paket für Sie installieren.
### cli.py
Bad secrets enthält ein [Beispiel-CLI](https://github.com/blacklanternsecurity/badsecrets/blob/dev/badsecrets/examples/cli.py) zur bequemen manuellen Überprüfung von Secrets. Wie oben erwähnt, ist es auch durch einfaches Ausführen von `badsecrets` nach einer erfolgreichen pip-Installation zugänglich.