impacket-keylistattack の使い方徹底解説ガイド 🔑

セキュリティツール

はじめに: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” など)をリストにします。
  • ネットワークアクセス:

    実行環境からターゲットのドメインコントローラー(通常は 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 のようなツールを使用する際、およびそれによる攻撃から組織を守るためには、以下の点を考慮する必要があります。

倫理的な利用と法的側面

繰り返しになりますが、このツールの使用は許可された範囲内に限定する必要があります。ペネトレーションテスト契約や明確な許可なしに他者のシステムに対して使用することは、不正アクセス行為として法的に罰せられる可能性があります。

検知方法

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、そして適切な監視体制といった対策を講じることが不可欠です。

ツールの使い方を理解すると同時に、それがもたらすリスクと、それに対する防御策を学ぶことで、より安全なシステム運用を目指しましょう。🔒

コメント

タイトルとURLをコピーしました