今回は、ペネトレーションテストツール Cobalt Strike を用いて、Active Directory 環境におけるパスワードスプレー攻撃を効率的に実行する方法を解説します。この手法は、組織内の脆弱なパスワードを洗い出すとともに、監視・検知体制の評価にも役立ちます。
1. 事前準備:Cobalt Strike とスクリプトの導入
Cobalt Strike のセットアップが未実施の場合は、公式ドキュメントに従って初期設定を完了しておいてください。
本手法では、Outflank が公開している Spray-AD スクリプトを使用します。このスクリプトは、Active Directory ユーザーアカウントに対して弱いパスワードを検査するための Aggressor スクリプトです。
以下のコマンドでリポジトリをクローンし、Cobalt Strike の Script Manager からインポートします。
git clone https://github.com/outflanknl/Spray-AD
Cobalt Strike のメニューから Script Manager → Load でダウンロードした .cna ファイルを選択して読み込みます。
2. パスワードスプレー攻撃の実行
攻撃手順は以下の通りです。
- セッションの取得
まず、ドメインに参加しているエンドポイントに対してビーコンを確立します。 - ビーコンの間隔を調整
ビーコンとの通信間隔を短く設定(例:sleep 10)します。これにより、LDAP クエリの応答を待つ時間を短縮できます。 - パスワードスプレーの実行
ビーコン上で以下のコマンドを入力します。引数には検査したいパスワード(例:P@ssw0rd)を指定します。
beacon> Spray-AD P@ssw0rd
実行後、スクリプトは LDAP 経由でドメインコントローラーに接続し、全ユーザーアカウントに対して指定されたパスワードを試行します。数秒で結果が返り、一致したユーザーアカウントの一覧が表示されます。
この攻撃中のネットワークトラフィックは、Kerberos AS-REQ パケットが主体となり、通常の認証通信と区別がつきにくい点が特徴です。
3. 防御策:イベントログを活用した検知
パスワードスプレー攻撃を検知するには、Kerberos 認証の失敗イベントを監視する必要があります。Windows のイベントID 4771(Kerberos 事前認証失敗)が鍵となります。特に、失敗コード 0x18 はパスワードが誤っていることを示します。
以下の対策を実施します。
- Kerberos イベントログの有効化
ドメインコントローラーで Kerberos 認証のログを記録するようにグループポリシーまたはレジストリを設定します。詳細は Microsoft のサポート記事を参照してください。
https://docs.microsoft.com/ja-jp/troubleshoot/windows-server/identity/enable-kerberos-event-logging - アラートルールの設定
SIEM やログ監視システムにて、短時間(例:1分間)に 50 件を超えるイベントID 4771(失敗コード 0x18)を検出した場合に警告を発するルールを追加します。
これにより、組織内の脆弱なパスワードを早期に発見できるだけでなく、攻撃の試行をリアルタイムで検知できる体制が整います。