はじめに:impacket-keylistattackとは? 🤔
impacket-keylistattack
は、広く利用されているネットワークプロトコル操作ツールスイート Impacket に含まれるスクリプトの一つです。
主に Active Directory (AD) 環境における Kerberos 認証に対するパスワードスプレー攻撃やパスワード推測攻撃を実施するために設計されています。
具体的には、ユーザー名のリストとパスワードのリスト(キーリスト)を提供し、それらの組み合わせを使って Kerberos の TGT (Ticket Granting Ticket) の取得を試みます。認証に成功した場合、そのユーザー名とパスワードの組み合わせが有効であることを意味します。これにより、ペネトレーションテストなどのセキュリティ評価活動において、脆弱なパスワードを使用しているアカウントを発見するのに役立ちます。
準備するもの 🛠️
impacket-keylistattack
を使用する前に、以下の準備が必要です。
-
Impacket のインストール:
まず、Impacket が実行環境にインストールされている必要があります。通常、pip を使用してインストールできます。
pip install impacket
または、GitHub リポジトリから直接クローンしてセットアップすることも可能です。
git clone https://github.com/fortra/impacket.git cd impacket/ python setup.py install
-
ターゲット情報:
- ドメイン名: 攻撃対象の Active Directory ドメイン名 (例:
contoso.local
)。 - ドメインコントローラー (KDC) の IP アドレスまたはホスト名: Kerberos 認証サービスを提供しているサーバーのアドレス。
- ユーザー名リストファイル: 試行するユーザー名が1行に1つずつ記載されたテキストファイル (例:
users.txt
)。 - パスワードリストファイル: 試行するパスワードが1行に1つずつ記載されたテキストファイル (例:
passwords.txt
)。パスワードスプレー攻撃の場合は、少数の一般的なパスワード(例: “Password123”, “Spring2025” など)をリストにします。
- ドメイン名: 攻撃対象の Active Directory ドメイン名 (例:
-
ネットワークアクセス:
実行環境からターゲットのドメインコントローラー(通常は TCP/UDP ポート 88)へのネットワークアクセスが必要です。
impacket-keylistattack の基本的な使い方 ⌨️
impacket-keylistattack
の基本的なコマンド構文は以下の通りです。
keylistattack.py <ドメイン>/<ユーザーリストファイル>:<パスワードリストファイル>@<ドメインコントローラーIP/ホスト名> [オプション]
パラメータ解説
パラメータ | 説明 | 例 |
---|---|---|
<ドメイン> |
ターゲットの Active Directory ドメイン名。FQDN形式で指定します。 | contoso.local |
<ユーザーリストファイル> |
試行対象のユーザー名が改行区切りで記述されたファイルのパス。 | /path/to/users.txt |
<パスワードリストファイル> |
試行対象のパスワードが改行区切りで記述されたファイルのパス。 | /path/to/passwords.txt |
@<ドメインコントローラーIP/ホスト名> |
Kerberos 認証要求を送信する KDC (通常はドメインコントローラー) の IP アドレスまたはホスト名。 | @192.168.1.100 or @dc01.contoso.local |
実行例
例えば、ドメイン contoso.local
のドメインコントローラー 192.168.1.100
に対して、users.txt
に記載されたユーザー名と passwords.txt
に記載されたパスワードの組み合わせを試行する場合は、以下のように実行します。
# Linux/macOS の場合 (impacketがパスに含まれている前提)
keylistattack.py contoso.local/users.txt:passwords.txt@192.168.1.100
# Windows の場合 (Pythonスクリプトとして実行)
python keylistattack.py contoso.local/users.txt:passwords.txt@192.168.1.100
このコマンドは、users.txt
内の各ユーザーに対して passwords.txt
内の各パスワードを順番に試し、Kerberos TGT の取得を試みます。
出力の解釈 ✅ / ❌
impacket-keylistattack
は実行中に試行結果を標準出力に表示します。
- [+] Valid credentials found: のようなメッセージが表示された場合、その行に示されているユーザー名とパスワードの組み合わせが有効であり、認証に成功したことを意味します。これは、攻撃が成功したことを示します 🎉。
- [-] User … doesn’t have UF_DONT_REQUIRE_PREAUTH set のようなメッセージや、単純なエラーメッセージ (例: KDC_ERR_PREAUTH_FAILED) が表示される場合は、その組み合わせでの認証が失敗したことを意味します。
- 多数の試行を行うため、アカウントロックアウトの閾値に達しないように注意が必要です。パスワードスプレー攻撃では、少数のパスワードを多くのユーザーに対して試すことで、このリスクを低減します。
成功した認証情報が見つかれば、それを利用してさらなる内部偵察や権限昇格などを試みることが可能になります。
ユースケースとシナリオ 🎯
impacket-keylistattack
は、主に以下のようなシナリオで活用されます。
-
ペネトレーションテスト:
顧客の Active Directory 環境において、推測されやすいパスワードやデフォルトパスワードが使用されていないかを確認します。発見された脆弱な認証情報は、さらなる侵入経路の探索に利用される可能性があります。
-
パスワードスプレー攻撃:
アカウントロックアウトを回避しつつ、有効な認証情報を発見するための一般的な手法です。例えば、季節や年号を含むような推測しやすいパスワード (“Summer2024”, “Password123!”) を少数のリストにし、組織内の多数のアカウントに対して試行します。
impacket-keylistattack
は、ユーザーリストとパスワードリストを分けて指定できるため、この攻撃に適しています。 -
パスワードポリシーの検証:
組織のパスワードポリシー(最低文字数、複雑さの要件など)が、実際に推測困難なパスワードの利用を促進しているかを評価する目的で使用されることもあります。
-
セキュリティ意識向上トレーニング:
(デモ環境などで)実際に脆弱なパスワードがどのように悪用されるかを示すことで、従業員のセキュリティ意識を高めるための教材として利用できます。
考慮事項と対策 🛡️
impacket-keylistattack
のようなツールを使用する際、およびそれによる攻撃から組織を守るためには、以下の点を考慮する必要があります。
倫理的な利用と法的側面
繰り返しになりますが、このツールの使用は許可された範囲内に限定する必要があります。ペネトレーションテスト契約や明確な許可なしに他者のシステムに対して使用することは、不正アクセス行為として法的に罰せられる可能性があります。
検知方法
impacket-keylistattack
による攻撃は、ドメインコントローラー上で大量の Kerberos 認証イベントを発生させます。特に以下の Windows イベントログを監視することが有効です。
- イベントID 4768 (Audit Kerberos Authentication Service): TGT 要求の試行。成功 (Success) と失敗 (Failure) の両方を記録します。短時間に同一ソース IP から多数の異なるユーザーに対する認証失敗 (結果コード
0x18
– KDC_ERR_PREAUTH_FAILED) が記録された場合、パスワードスプレー攻撃の兆候である可能性があります。 - イベントID 4771 (Audit Kerberos Pre-Authentication): Kerberos 事前認証の失敗。これもパスワード推測やスプレー攻撃を示す重要な指標です。特に結果コード
0x18
に注目します。 - イベントID 4776 (Audit Credential Validation): NTLM 認証の試行(Kerberos 以外の認証)。状況によっては NTLM フォールバックが発生することもあるため、これも監視対象となりますが、
keylistattack
は主に Kerberos を狙います。 - イベントID 4625 (Audit Logon): ログオン失敗。ソース IP アドレスや、短時間に同一ソースから複数アカウントへのログオン失敗が頻発していないかを確認します。
SIEM (Security Information and Event Management) システムを導入し、これらのイベントログを収集・分析して、異常な認証パターン(例:単一 IP からの短時間での大量認証失敗、深夜や休日の異常な認証試行)を検知するルールを設定することが推奨されます。
緩和策・防御策
impacket-keylistattack
のような攻撃から組織を守るためには、多層的な防御戦略が必要です。
- 強力なパスワードポリシーの適用:
- 十分な長さ(例: 15文字以上)
- 複雑さの要件(大文字、小文字、数字、記号を含む)
- パスワード履歴(使い回し禁止)
- 推測可能な単語や情報の禁止(ユーザー名、会社名、一般的な単語など)
- NIST SP 800-63B などのガイドラインを参考に、禁止パスワードリスト(よく使われるパスワードや侵害されたパスワード)の利用を検討する。
- アカウントロックアウトポリシーの設定:
一定回数(例: 5回)認証に失敗したアカウントを一時的にロックする。ただし、ロックアウト閾値が低すぎると、攻撃者によって意図的にアカウントがロックされ、業務妨害 (DoS) に繋がる可能性もあるため、バランスの取れた設定が必要です。
- 多要素認証 (MFA) の導入:
パスワードだけでなく、追加の認証要素(SMSコード、認証アプリ、ハードウェアトークンなど)を要求することで、パスワードが漏洩・推測された場合でも不正アクセスを防ぐ最も効果的な対策の一つです。
- 定期的なパスワード監査とレビュー:
脆弱なパスワードが使用されていないか、定期的に監査を実施します。
- 異常検知システムの導入:
前述の SIEM や、専用の UEBA (User and Entity Behavior Analytics) ソリューションを利用して、通常とは異なる認証アクティビティを検知し、アラートを発報します。
- 不要なアカウントの無効化・削除:
使用されていないアカウント(退職者アカウント、テストアカウントなど)は、攻撃対象となりうるため、速やかに無効化または削除します。
まとめ ✨
impacket-keylistattack
は、Active Directory 環境における Kerberos 認証に対するパスワードベースの攻撃(特にパスワードスプレー)を実行するための強力なツールです。ペネトレーションテスターやセキュリティ研究者にとっては、システムの脆弱性を評価する上で有用な手段となり得ます。
しかし、その攻撃的な性質から、使用には細心の注意と倫理的な判断が求められます。防御側としては、この種の攻撃が存在することを認識し、強力なパスワードポリシー、アカウントロックアウト、MFA、そして適切な監視体制といった対策を講じることが不可欠です。
ツールの使い方を理解すると同時に、それがもたらすリスクと、それに対する防御策を学ぶことで、より安全なシステム運用を目指しましょう。🔒
コメント