

様々なプラットフォームにおいて、既知または非常に弱い暗号秘密鍵が使用されていることを識別するための純粋なPythonライブラリです。このプロジェクトは、さまざまな「既知の秘密鍵」(例えばチュートリアルのサンプルにあるASP.NETマシンキー)のリポジトリとして機能し、それらを識別するための言語非依存の抽象化レイヤーを提供することを目的としています。
「悪い秘密鍵」がいつ使用されたかを知るには、通常、その秘密鍵が使用された暗号成果物(たとえば、鍵付きハッシュアルゴリズムで署名されたクッキーなど)を調べる必要があります。各プラットフォームに固有の実装上の奇妙な点に入り込むと複雑になりますが、このライブラリはその手間を軽減することを目指しています。
詳細なブログ投稿はBlack Lantern Securityブログでご覧ください!
Blacklist3rに触発され、サポートするプラットフォームを拡大し、言語やオペレーティングシステムへの依存を排除したいという願いから生まれました。
パッシブモジュールは、すでに入手している暗号成果物(クッキー、トークン、署名付きURLなど)を分析します。既知の秘密鍵のデータベースと照合して復号や検証を試みることで、オフラインで動作します。
| 名前 | 説明 |
|---|---|
| ASPNET_Viewstate | ビューステート/ジェネレータを既知のマシンキーのリストと照合してチェックします。 |
| 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クッキーの署名パスワードが弱いかチェックします。flask-unsign のラッパーです。 |
| Peoplesoft_PSToken | PeoplesoftのPS_TOKENに対して、脆弱または弱い署名パスワードをチェックできます。 |
| Django_SignedCookies | Djangoのセッションクッキー(signed_cookieモード時)を、既知のDjango secret_keyと照合してチェックします。 |
| Rails_SecretKeyBase | Ruby on Railsの署名付きまたは暗号化されたセッションクッキー(複数のメジャーリリースから)を、既知の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ミドルウェアの署名付きクッキーおよびセッションクッキーに対して、既知の「セッションシークレット」をチェックします。 |
| Express_SignedCookies_CS | Express.jsのcookie-sessionミドルウェアの署名付きクッキーおよびセッションクッキーに対して、既知の秘密鍵をチェックします。 |
| Laravel_SignedCookies | 'laravel_session' クッキーに対して、既知のLaravel 'APP_KEY' をチェックします。 |
| ASPNET_Compressedviewstate | かつて人気だったカスタム圧縮ビューステートのコードスニペットをチェックします。RCEに対して脆弱です。 |
| Rack2_SignedCookies | Rack 2.xの署名付きクッキーに対して、既知の秘密鍵をチェックします。 |
| Yii2_SignedCookies | Yii2フレームワークの署名付きクッキーに対して、既知のクッキー検証キーをチェックします。 |
| Shiro_RememberMe | Apache Shiroの rememberMe クッキーに対して、既知のAES暗号化キーをチェックします。 |
| LTPA_Token | IBM WebSphereの LtpaToken および LtpaToken2 クッキーに対して、既知のLTPA暗号化キーをチェックします。 |
アクティブモジュールは、受動的な検出を一歩超えます。YARAベースの事前フィルタリングを使用してライブターゲットをフィンガープリントし(HTTPレスポンスヘッダー、クッキー、本文コンテンツに基づく)、その後、既知のキーで暗号成果物を偽造してターゲットに送信し、キーが受け入れられるかどうかを確認します。これは、解析するトークンがまだないが、ターゲットがデフォルトまたは既知の秘密鍵を使用している可能性がある場合に役立ちます。
アクティブモジュールはURLモード(--url)でデフォルトで有効になります。無効にするには --passive-only を使用してください。
| 名前 | 説明 |
|---|---|
| Shiro_RememberMe_Key | Apache Shiroの rememberMe クッキーを既知のAESキーで偽造し、ターゲットがそれを受け入れるかテストします(逆シリアル化RCE)。 |
| GlobalProtect_DefaultMasterKey | PAN-OS GlobalProtectポータルで、デフォルトのマスター暗号化キーが使用されているかテストします。 |
| LTPA_Token_Key | IBM WebSphereの LtpaToken2 クッキーを既知のLTPAキーで偽造し、ターゲットが認証を許可するかテストします(認証バイパス)。 |
pypi パッケージがありますので、pip install badsecrets を実行するだけでライブラリを使用できます。
Badsecrets を最も簡単に使う方法は、pip install した後に単に badsecrets を実行することです。```
pip install badsecrets
badsecrets eyJhbGciOiJIUzI1NiJ9.eyJJc3N1ZXIiOiJJc3N1ZXIiLCJVc2VybmFtZSI6IkJhZFNlY3JldHMiLCJleHAiOjE1OTMxMzM0ODMsImlhdCI6MTQ2NjkwMzA4M30.ovqRikAo_0kKJ0GVrAwQlezymxrLGjcEiW_s3UJMMCo
内部では, `cli.py` の例を使用しています. CLIはpipインストールなしでも手動でアクセスできます:
#### pipインストールなしの場合:```bash
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](https://github.com/blacklanternsecurity/bbot) モジュールを使用している場合は、他に何もする必要はありません。BBOT がパッケージを自動的にインストールします。
### cli.py
Badsecrets には、手動でシークレットを確認する際の利便性のために[サンプル CLI](https://github.com/blacklanternsecurity/badsecrets/blob/dev/badsecrets/examples/cli.py)が含まれています。上記のように、pip インストールが成功した後は、`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