

様々なプラットフォームにおいて、既知のあるいは非常に脆弱な暗号学的シークレットの使用を特定するための純粋な Python ライブラリです。本プロジェクトは、様々な「既知のシークレット」(例えば、チュートリアルの例で見られる ASP.NET マシンキーなど)のリポジトリとして機能すると同時に、その使用を特定するための言語非依存の抽象化レイヤーを提供することを目的としています。
「悪いシークレット」が使用されたかどうかを知ることは、通常、そのシークレットが使用された何らかの暗号学的な生成物を調べることで判断できます。例えば、鍵付きハッシュアルゴリズムで署名された Cookie などです。各プラットフォームが提供する個々の実装上の特異性を掘り下げていくと物事は複雑になりがちですが、本ライブラリはそれを軽減することを目指しています。
Black Lantern Security ブログの詳細なブログ記事もぜひご覧ください!
Blacklist3rに触発され、対応プラットフォームを拡大し、言語およびオペレーティングシステムへの依存を取り除きたいという願いから生まれました。
パッシブモジュールは、すでに手元にある暗号学的な生成物(Cookie、トークン、署名付き URL など)を分析します。既知のシークレットのデータベースに対してその生成物を復号または検証しようと試みることで、オフラインで動作します。
| 名前 | 説明 |
|---|---|
| ASPNET_Viewstate | viewstate/generator を既知のマシンキーのリストと照合してチェックします。 |
| ASPNET_Resource | WebResource.axd および ScriptResource.axd の暗号化された URL を既知のマシンキーのリストと照合してチェックします。ページに __VIEWSTATE が存在しない場合に有用です。 |
| Telerik_HashKey | パッチ適用済み(2017 年以降)の Telerik UI について、既知の Telerik.Upload.ConfigurationHashKey をチェックします |
| Telerik_EncryptionKey | パッチ適用済み(2017 年以降)の Telerik UI について、既知の Telerik.Web.UI.DialogParametersEncryptionKey をチェックします |
| Flask_SignedCookies | 脆弱な Flask の Cookie 署名パスワードをチェックします。flask-unsignのラッパーです |
| Peoplesoft_PSToken | peoplesoft の PS_TOKEN について、不良または脆弱な署名パスワードをチェックできます |
| Django_SignedCookies | django のセッション Cookie(signed_cookie モードの場合)について、既知の django secret_key をチェックします |
| Rails_SecretKeyBase | Ruby on Rails の署名付きまたは暗号化されたセッション Cookie(複数のメジャーリリースから)について、既知の secret_key_base をチェックします |
| Generic_JWT | JWT について、既知の HMAC シークレットまたは RSA 秘密鍵をチェックします |
| Jsf_viewstate | Java Server Faces(JSF)の Mojarra および Myfaces の両実装について、既知または脆弱なシークレットキーの使用をチェックします |
| Symfony_SignedURL | symfony の「_fragment」URL について、既知の HMAC キーをチェックします。ハッシュを含む完全な URL に対して動作します |
| Express_SignedCookies_ES | express.js の express-session ミドルウェアについて、署名付き Cookie およびセッション Cookie の既知の「session secret」をチェックします |
| Express_SignedCookies_CS | express.js の cookie-session ミドルウェアについて、署名付き Cookie およびセッション Cookie の既知の secret をチェックします |
| Laravel_SignedCookies | 「laravel_session」Cookie について、既知の laravel「APP_KEY」をチェックします |
| ASPNET_Compressedviewstate | かつて普及していたカスタムの圧縮 Viewstate コードスニペットで RCE に対して脆弱なものをチェックします |
| Rack2_SignedCookies | Rack 2.x の署名付き Cookie について、既知のシークレットキーをチェックします |
| Yii2_SignedCookies | Yii2 フレームワークの署名付き Cookie について、既知の Cookie 検証キーをチェックします |
| Shiro_RememberMe | Apache Shiro の rememberMe Cookie について、既知の AES 暗号化キーをチェックします |
| LTPA_Token | IBM WebSphere の LtpaToken および LtpaToken2 Cookie について、既知の LTPA 暗号化キーをチェックします |
| NextAuth | NextAuth.js / Auth.js の JWE セッション Cookie について、既知または脆弱な NEXTAUTH_SECRET / AUTH_SECRET をチェックします |
アクティブモジュールは、パッシブ検出を一歩超えたものです。YARA ベースのプリフィルタリングを使用してライブターゲットをフィンガープリントし(HTTP レスポンスヘッダー、Cookie、ボディコンテンツに基づく)、次に既知のキーで暗号学的な生成物を偽造してターゲットに送信し、そのキーが受け入れられるかどうかを確認します。これにより、分析するトークンをまだ持っていないが、ターゲットがデフォルトまたは広く知られたシークレットを使用している疑いがある場合に有用です。
アクティブモジュールは URL モード(--url)でデフォルトで有効になっています。無効にするには --passive-only を使用してください。
| 名前 | 説明 |
|---|---|
| Shiro_RememberMe_Key | 既知の AES キーで Apache Shiro の rememberMe Cookie を偽造し、ターゲットがそれらを受け入れるかどうかをテストします(デシリアライゼーション RCE) |
| GlobalProtect_DefaultMasterKey | PAN-OS GlobalProtect ポータルについて、デフォルトのマスター暗号化キーの使用をテストします |
| LTPA_Token_Key | 既知の LTPA キーで IBM WebSphere の LtpaToken2 Cookie を偽造し、ターゲットが認証を許可するかどうかをテストします(認証バイパス) |
pypi パッケージがあるので、ライブラリを利用するには pip install badsecrets を実行するだけです。
Badsecrets を使う最良の方法は、pip install を実行した後に単純に badsecrets を実行することです:
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
内部的には、cli.py の例を使用しています。CLI は pip インストールなしでも手動でアクセスできます:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
python ./badsecrets/examples/cli.py eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
例を使用するには、pip install を行った後、リポジトリを git clone して badsecrets ディレクトリに cd します:
git clone https://github.com/blacklanternsecurity/badsecrets.git
cd badsecrets
以下の例のセクションにあるコマンドは、このディレクトリにいることを前提としています。
Badsecrets BBOT モジュールを使用している場合、他に何もする必要はありません - BBOT がパッケージをインストールします。
Bad secrets には、シークレットを手動で確認する際の利便性のためにサンプル CLIが含まれています。上記のとおり、pip install が成功した後は badsecrets を実行するだけでアクセスできます。
usage: badsecrets [-h] [-nc] [-j] [-u URL] [-nh] [-c FILE_OR_MODULE:KEYS]
[-p PROXY] [-a USER_AGENT] [-H HEADER] [-d] [-t TIMEOUT]
[-P] [-l]
[product ...]
Check cryptographic products against badsecrets library
positional arguments:
product Cryptographic product to check for known secrets
options:
-h, --help show this help message and exit
-nc, --no-color Disable color message in the console
-j, --json Output results as JSON only (no banner, no color).
Outputs nothing on no detection
-u URL, --url URL Use URL Mode. Specified the URL of the page to access
and attempt to check for secrets
-nh, --no-hashcat Skip the check for compatable hashcat commands when
secret isn't found
-c FILE_OR_MODULE:KEYS, --custom-secrets FILE_OR_MODULE:KEYS
Custom secrets to check. Can be specified multiple
times. Without a module prefix, the file is loaded for
all modules. With a module prefix (MODULE:value), keys
are targeted to that module only. Value can be a file
path or comma-separated inline keys. Example: -c
my_keys.txt or -c Shiro_RememberMe_Key:key1,key2 or -c
GlobalProtect_DefaultMasterKey:keys.txt
-p PROXY, --proxy PROXY
In URL mode, Optionally specify an HTTP proxy
-a USER_AGENT, --user-agent USER_AGENT
In URL mode, Optionally set a custom user-agent
-H HEADER, --header HEADER
Custom header (e.g., -H 'Cookie: foo=bar'). Can be
specified multiple times
-d, --debug Enable debug output (request URL, response status,
headers, etc.)
-t TIMEOUT, --timeout TIMEOUT
Request timeout in seconds (default: 10)
-P, --passive-only Disable active probing in URL mode (only run passive
analysis)
-l, --list-modules List all available modules with descriptions and exit