
Eine Bibliothek zur Erkennung bekannter Geheimnisse in vielen Web-Frameworks

Eine reine Python-Bibliothek zur Identifizierung der Verwendung bekannter oder sehr schwacher kryptografischer Secrets auf einer Vielzahl von Plattformen. Das Projekt ist sowohl als Repository verschiedener "bekannter Secrets" konzipiert (zum Beispiel ASP.NET-Machine-Keys, die in Beispielen in Tutorials zu finden sind), als auch als sprachunabhängige Abstraktionsschicht zur Identifizierung ihrer Verwendung.
Zu wissen, wann ein "bad secret" verwendet wurde, ist normalerweise eine Frage der Untersuchung eines kryptografischen Produkts, in dem das Secret verwendet wurde: zum Beispiel ein Cookie, das mit einem keyed Hashing-Algorithmus signiert ist. Die Dinge können kompliziert werden, wenn man in die individuellen Implementierungseigenheiten jeder Plattform eintaucht, was diese Bibliothek zu mildern versucht.
Schauen Sie sich unseren vollständigen Blogbeitrag im Black Lantern Security Blog an!
Inspiriert von Blacklist3r, mit dem Wunsch, die unterstützten Plattformen zu erweitern und Sprach- sowie Betriebssystemabhängigkeiten zu entfernen.
Passive Module analysieren kryptografische Produkte (Cookies, Tokens, signierte URLs usw.), die Sie bereits haben. Sie arbeiten offline, indem sie versuchen, das Produkt gegen eine Datenbank bekannter Secrets zu entschlüsseln oder zu verifizieren.
| Name | Beschreibung |
|---|---|
| ASPNET_Viewstate | Prüft den viewstate/generator gegen eine Liste bekannter Machine-Keys. |
| ASPNET_Resource | Prüft verschlüsselte URLs von WebResource.axd und ScriptResource.axd gegen eine Liste bekannter Machine-Keys. Nützlich, wenn __VIEWSTATE nicht auf einer Seite vorhanden ist. |
| Telerik_HashKey | Prüft gepatchte (2017+) Versionen von Telerik UI auf einen bekannten Telerik.Upload.ConfigurationHashKey |
| Telerik_EncryptionKey | Prüft gepatchte (2017+) Versionen von Telerik UI auf einen bekannten Telerik.Web.UI.DialogParametersEncryptionKey |
| Flask_SignedCookies | Prüft auf schwaches Flask-Cookie-Signaturpasswort. Wrapper für flask-unsign |
| Peoplesoft_PSToken | Kann ein Peoplesoft PS_TOKEN auf ein schlechtes/schwaches Signaturpasswort prüfen |
| Django_SignedCookies | Prüft Django-Session-Cookies (im signed_cookie-Modus) auf bekannten Django secret_key |
| Rails_SecretKeyBase | Prüft signierte oder verschlüsselte Session-Cookies von Ruby on Rails (aus mehreren Hauptversionen) auf bekannten secret_key_base |
| Generic_JWT | Prüft JWTs auf bekannte HMAC-Secrets oder RSA-Private-Keys |
| Jsf_viewstate | Prüft sowohl Mojarra- als auch Myfaces-Implementierungen von Java Server Faces (JSF) auf die Verwendung bekannter oder schwacher Secret-Keys |
| Symfony_SignedURL | Prüft Symfony "_fragment"-URLs auf bekannten HMAC-Key. Arbeitet mit der vollständigen URL, einschließlich Hash |
| Express_SignedCookies_ES | Prüft die express.js express-session-Middleware auf signierte Cookies und Session-Cookies auf ein bekanntes 'session secret' |
| Express_SignedCookies_CS | Prüft die express.js cookie-session-Middleware auf signierte Cookies und Session-Cookies auf ein bekanntes Secret |
| Laravel_SignedCookies | Prüft 'laravel_session'-Cookies auf bekannten Laravel 'APP_KEY' |
| ASPNET_Compressedviewstate | Prüft auf einen einst populären benutzerdefinierten komprimierten Viewstate Code-Snippet, der für RCE anfällig ist |
| Rack2_SignedCookies | Prüft signierte Cookies von Rack 2.x auf bekannte Secret-Keys |
| Yii2_SignedCookies | Prüft signierte Cookies des Yii2-Frameworks auf bekannte Cookie-Validierungsschlüssel |
| Shiro_RememberMe | Prüft Apache Shiro rememberMe-Cookies auf bekannte AES-Verschlüsselungsschlüssel |
| LTPA_Token | Prüft IBM WebSphere LtpaToken- und LtpaToken2-Cookies auf bekannte LTPA-Verschlüsselungsschlüssel |
| NextAuth | Prüft NextAuth.js / Auth.js JWE-Session-Cookies auf ein bekanntes oder schwaches NEXTAUTH_SECRET / AUTH_SECRET |
Aktive Module gehen einen Schritt über die passive Erkennung hinaus. Sie verwenden YARA-basierte Vorfilterung, um ein Live-Ziel zu fingerprinten (basierend auf HTTP-Response-Headern, Cookies und Body-Inhalt), fälschen dann kryptografische Produkte mit bekannten Keys und senden sie an das Ziel, um zu bestätigen, ob der Key akzeptiert wird. Dies macht sie nützlich für Fälle, in denen Sie noch kein Token zur Analyse haben, aber vermuten, dass das Ziel Standard- oder wohlbekannte Secrets verwendet.
Aktive Module sind standardmäßig im URL-Modus (--url) aktiviert. Verwenden Sie --passive-only, um sie zu deaktivieren.
| Name | Beschreibung |
|---|---|
| Shiro_RememberMe_Key | Fälscht Apache Shiro rememberMe-Cookies mit bekannten AES-Keys und testet, ob das Ziel sie akzeptiert (Deserialisierungs-RCE) |
| GlobalProtect_DefaultMasterKey | Testet PAN-OS GlobalProtect-Portale auf die Verwendung des Standard-Master-Verschlüsselungsschlüssels |
| LTPA_Token_Key | Fälscht IBM WebSphere LtpaToken2-Cookies mit bekannten LTPA-Keys 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.
Der beste Weg, Badsecrets zu verwenden, ist einfach badsecrets auszuführen, nachdem Sie ein pip install durchgeführt haben:
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Unter der Haube wird das Beispiel cli.py verwendet. Die CLI kann auch manuell ohne eine pip-Installation aufgerufen werden:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
Um die Beispiele zu verwenden, führe nach dem pip install einfach git clone für das Repository aus und wechsle mit cd in das Verzeichnis badsecrets:
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-Modul verwenden, müssen Sie nichts weiter tun – BBOT installiert das Paket für Sie.
Bad Secrets enthält eine Beispiel-CLI zur bequemen manuellen Überprüfung von Secrets. Wie oben erwähnt, ist sie nach einer erfolgreichen pip-Installation auch durch einfaches Ausführen von badsecrets zugänglich.