
NebulousAD 自動資格情報監査ツール。
4月14日をもって、NuIDはこのコードが通信するNebulousAD APIのホスティングを終了します。小規模な開発チームとして、NebulousADポータルと認証Developer Portalの両方を効果的にアクティブにサポート、監視、開発することは現実的ではないと判断しました。
Active Directoryのパスワードを公開された侵害認証情報のセットに対してチェックするコードは、引き続きこのリポジトリに残ります。そして、NebADでの経験を通じて得たすべての優れたフィードバックを取り入れ、今後数か月以内に認証APIとシームレスなパスワードブラックリストサービスを提供する予定です。お楽しみに!
これまでのご参加とフィードバックに感謝し、今後も皆様からのご連絡をお待ちしております。NebAD、NuID、またはデジタルアイデンティティに関するご質問がございましたら、お気軽にお問い合わせください。
それでは、また! -NuIDチーム
NebulousADは、データ侵害で見つかった侵害されたパスワードのデータベースに対してActive Directoryユーザーパスワードを監査するツールです。このツールは、Windowsシステム管理者が侵害されたパスワードの使用を発見し、必要に応じて修正するのを支援するために作成されました。このアプローチはNIST 800-63Bで推奨されており、クレデンシャルスプレー攻撃やスタッフィング攻撃から保護するのに役立ちます。
Nebulousデータベースは現在、侵害されたパスワードの25億以上のユニークなハッシュを保持しています。
NebulousADはデフォルトでk-匿名性モデルを使用し、APIに対してチェックされるパスワードのプライバシーとセキュリティを保護します。SHA-2ハッシュの最初の5文字だけがAPIに送信されます。k-匿名性の詳細についてはこちらをご覧ください。
このツールは当初、BSides Las Vegas 2019でリリースされました。BSidesプレゼンテーションの動画はこちらです。
今後の機能:
プリコンパイル済みリリースをダウンロードするか(Pythonインタプリタは不要)、ソースからビルドしてください:
このツールは(当面は)Python2.7が必要です。
git clone https://github.com/NuID/nebulousAD.gitを実行
次に、python setup.py installでインストール
次に、キーを初期化します。キーは https://nebulous.nuid.io/#/register にアクセスして取得できます。 登録後、ボタンをクリックしてAPIキーを生成し、コピーします。
次のように初期化します: nebulousAD -init-key <api_key>
これでツールを実行できます。APIキーが見つからない場合は、ターミナルセッションを再起動する必要があるかもしれません。 APIキーは環境変数に保存されます。ログアウトしてから再度ログインしても機能します。
インタプリタなしで使用するためのnebulousAD.exeファイルはこちらからダウンロードできます。 または、自分でソースからツールをコンパイルすることもできます:
pip install pyinstallergit clone https://github.com/NuID/nebulousAD.gitcd .\nebulousAD\nebulousADpyinstaller --onefile nebulousAD.pyPyinstallerはコンパイルされたバイナリの場所を出力します:

すべてのハッシュをダンプし、APIに対してチェックするコマンド例:
nebulousAD.exe -v -snap --check
NuID Credential Auditing tool.
optional arguments:
-h, --help show this help message and exit
-ntds NTDS NTDS.DIT file to parse
-system SYSTEM SYSTEM registry hive to parse
-csv CSV Output results to CSV file at this PATH.
-json JSON Output results to JSON file at this PATH
-init-key INIT_KEY Install your Nu_I.D. API key to the current users
PATH.
-c, --check Check against Nu_I.D. API for compromised
credentials.
-dk, --disable-k-anon
Disable k-anon hash searches against the API (speeds
up the audit).
-snap Use ntdsutil.exe to snapshot the system registry
hive and ntds.dit file to <systemDrive>:\Program
Files\NuID\
-shred When performing delete operations on files, use a 7
pass overwrite with sdelete.exe. Download here:
https://docs.microsoft.com/en-
us/sysinternals/downloads/sdelete
-no-backup Do not backup the existing snapshots, just overwrite
them instead.
-clean-old-snaps CLEAN_OLD_SNAPS
Clean backups older than N days.
display options:
-user-status Display whether or not the user is disabled
-pwd-last-set Shows pwdLastSet attribute for each account found
within the NTDS.DIT database.
-history Dump NTLM hash history of the users.
-v Enable verbose mode.
k-匿名性ハッシュチェック機能を無効にします。これは検索時間を短縮するのに役立ちますが、完全なSHA-256(NTLM)ハッシュがAPIに送信されることになります。APIに送信されたハッシュはログに記録したり保存したりしません。
-snapパラメータは、特権があれば、ntdsutil.exeを使用してActive Directoryのスナップショットを自動的に作成し、ntds.ditファイルとSYSTEMレジストリハイブをダンプします。
これは様々な方法またはntdsutil.exeツールを使用して手動でダンプすることもできます。
手動でダンプする場合、-system path\to\SYSTEMおよび-ntds path\to\ntds.ditでファイルを指定できます。古いスナップショットを監査したい場合に便利です。
これには https://nebulous.nuid.io/#/register のAPIキーが必要です。キーを取得し、-init-keyでインストールしたら、ハッシュをNuID APIに対してチェックできます。
-historyを指定した場合、各アカウントのパスワード履歴もチェックし、ユーザーが以前使用したパスワードが侵害されていないか確認します。
アカウントがActive Directoryで有効か無効かを示す出力を追加します。
アカウントのパスワードが最後に設定された日付を示す出力を追加します。 これは、GPOで定義された自動リセットが行われないアカウント(サービスアカウントなど)のセキュリティポリシー違反を検出するのに役立ちます。
アカウントの保存されたパスワード履歴も監査またはダンプします。
スナップショットを消去する際に、DoD 7パス上書きを使用します。これにはパスにsdelete.exeが必要です。 こちらからダウンロードできます: https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
ダウンロードして、%SYSTEMDRIVE\Windows\System32\ディレクトリに配置するか、環境変数を設定してください。
このアプリケーションをタスクスケジューラで実行するように設定する際に、バックアップのクリーンアップに便利です。SYSTEMハイブと.ditファイルは大規模なドメインではかなり大きくなり、多くのディスク容量を消費する可能性があります。
タスクスケジューラを使用して毎日監査を行う場合、-clean-old-snaps 7のようにこのオプションを使用して、1週間分のスナップショットのみを保存できます。
古いスナップショットを検出した場合、デフォルトで%SYSTEMDRIVE%\Program Files\NuID\snapshot-backupsにバックアップします。
これはntdsutil.exeが空のディレクトリを必要とするためです。
このバックアップを無効にして現在のスナップショットを消去する場合は、この引数を使用します。
RESTful Web APIが提供されており、生成されたNuID APIトークンを使用して、独自のカスタムクライアントで利用できます。このセクションでは、Web APIの適切な機能、有効なリクエスト、エラータイプなどを概説します。
各レスポンスの基本構造は同一です。例外なく、レスポンスにはsuccess、data、errorの3つのフィールドが含まれている必要があります。レスポンスを受信したら、最初にsuccessの値を確認する必要があります。これにより、dataオブジェクトを処理するか、代わりにerrorオブジェクトを処理するかが決まります。以下の例は、成功時と失敗時のサーバーからの一般的なレスポンスを示しています。
{
success: True, // Indicates the request completed successfully
data: {
/* value depends on endpoint queried */
},
error: {} // Empty
}
{
success: False, // Indicates the request did not complete successfully
data: { }, // Empty
error: {
"ErrorName": "Helpful description of the error that occurred during the request"
}
}
各エラーはリクエスト中に何が問題だったかについての洞察を提供し、ユーザーが必要な変更を加えることを可能にします。
現時点では、1つのhash_typeのみがサポートされています。これらの値(大文字小文字を区別しない)はhash_typeの代わりに使用できます。hash_valueの16進文字列表現のサイズも示されています。hash_prefixはこのサイズを超えてはなりません:
| ハッシュ | 長さ |
|---|---|
| NTLMSHA2 | 64 |
すべてのAPIエンドポイントリクエストには以下のHTTPヘッダーが必要です。そうしないとエラーが返されます:
X-NUID-API-KEY: <Your NuID API Key>
各エンドポイントは以下のURLで始まります:
https://nebulous.nuid.io
/api/search/kanon/<hash_type>/<hash_prefix>メソッド: GET
説明: ハッシュの匿名化バージョンを使用してハッシュデータベースを照会します。完全なハッシュを提供することもできますが、代わりに少なくとも5文字のプレフィックス形式の部分ハッシュを使用することもできます。Nebulousデータベース内のこのプレフィックスに一致するすべてのハッシュが、正確なハッシュ自体を開示せずに返されます。
レスポンス:
以下のURLからのレスポンス: https://nebulous.nuid.io/api/search/kanon/5f4dcc
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
/api/search/kanon/<hash_type>メソッド: POST POSTデータ:
{
"prefix": "<Hash Prefix>"
}
説明: ハッシュの匿名化バージョンを使用してハッシュデータベースを照会します。完全なハッシュを提供することもできますが、代わりに少なくとも5文字のプレフィックス形式の部分ハッシュを使用することもできます。Nebulousデータベース内のこのプレフィックスに一致するすべてのハッシュが、正確なハッシュ自体を開示せずに返されます。
レスポンス:
以下のURLからのレスポンス: https://nebulous.nuid.io/api/search/kanon with the data {"prefix": "5f4dcc"}
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
impacketに、nthashが正しく抽出できないバグがあるようです。
当面は-history引数を使用しないでください。
https://github.com/SecureAuthCorp/impacket/issues/395 https://github.com/SecureAuthCorp/impacket/issues/660
[email protected]までご連絡ください。
| エラー名 | 説明 | ステータスコード |
|---|
ActionExpired | 呼び出そうとしているアクションは期限切れで、もう有効ではありません | 401 |
ActionInvalid | 呼び出そうとしているアクションは存在しません | 401 |
AuthFailure | 無効なユーザー/パスワードの組み合わせ | 401 |
AuthMissingToken | 認証トークンが提供されていません | 401 |
FieldMissing | JSONリクエストに1つ以上のフィールドがありません | 422 |
HashInvalidLength | 提供されたハッシュと指定されたハッシュタイプの期待される長さが一致しません | 422 |
HashInvalidValue | 16進数のハッシュ表現が必要です | 422 |
HashInvalidPrefix | プレフィックスは最低5文字の長さが必要です | 422 |
HashUnsupported | 提供されたハッシュタイプはサポートされていません | 422 |
InvalidJWT | 提供されたJWTが無効です | 401 |
InvalidRequest | 提供されたリクエストが不正な形式であるか、JSONペイロードがありません | 422 |
KeyBadUser | 提供されたAPIキーが期待されるユーザーと一致しません | 401 |
KeyDisabled | 提供されたAPIキーは無効化されています | 403 |
KeyInvalid | 提供されたAPIキーが無効です | 401 |
KeyMissing | APIキーが提供されていません | 401 |
NotFound | アクセスしようとしているエンドポイントが無効です | 404 |
PasswordIncorrect | 現在のパスワードが一致しません | 401 |
UserDisabled | アカウントは現在無効化されています | 401 |
UserKeyLimit | APIキーの最大数に達しました | 403 |
UserNotActivated | ユーザーアカウントがまだ有効化されていません | 403 |
UserNotFound | ユーザーアカウントが見つかりません | 401 |