ネットワークからKerberos AS-REPハッシュを抽出する
はじめに:tgtsnarfとは? 🤔
tgtsnarf
は、有名なパスワードクラッキングツールであるJohn the Ripper (JtR) スイートに含まれるユーティリティの一つです。その主な目的は、ネットワークキャプチャファイル(通常は.pcap
形式)からKerberos認証プロトコルで使用されるAS-REP (Authentication Service Reply) メッセージに含まれるハッシュデータを抽出することです。
Kerberosは、ネットワーク上で安全にユーザー認証を行うためのプロトコルであり、Active Directory環境などで広く利用されています。AS-REPは、認証プロセスの初期段階でクライアント(ユーザー)とKDC(Key Distribution Center)の間で交換されるメッセージの一部です。特定の条件下では、このAS-REPにユーザーのパスワードハッシュが含まれることがあり、tgtsnarf
はこれを狙って抽出します。
抽出されたハッシュは、John the Ripper本体(john
コマンド)で解析・クラッキングできる形式になっています。これにより、ペネトレーションテストやセキュリティ監査の一環として、弱いパスワードが使用されていないかを確認する目的で利用されることがあります。
tgtsnarf
を含むJohn the Ripperスイートのツールは、必ず適切な権限と許可を得た上で、自身の管理するシステムや、明確な許可を得た対象に対してのみ使用してください。許可なく他者のシステムやネットワークに対して使用することは、不正アクセス禁止法などの法律に抵触する可能性があります。
動作原理:AS-REPとハッシュ抽出の仕組み ⚙️
tgtsnarf
がどのように機能するかを理解するには、Kerberos認証の最初のステップ、特にAS-REQとAS-REPの交換について知る必要があります。
- AS-REQ (Authentication Service Request): クライアントは、ユーザー名と追加情報(使用したい暗号化タイプなど)を含むAS-REQメッセージをKDCのAS (Authentication Service) に送信します。
- AS-REP (Authentication Service Reply): KDCはユーザー情報を確認します。もしユーザーアカウントで「事前認証を要求しない」(Do not require Kerberos preauthentication) 設定が有効になっている場合、KDCはユーザーのパスワードハッシュ(具体的には、ユーザーのパスワードから派生した長期キー)を使用して暗号化されたTGT (Ticket-Granting Ticket) の一部を含むAS-REPメッセージをクライアントに返します。
- ハッシュ抽出:
tgtsnarf
は、ネットワーク上を流れるこのAS-REPメッセージ(タイプ18: KRB_AS_REP)をキャプチャしたpcapファイルを分析します。そして、このメッセージの中から、ユーザーのパスワードハッシュで暗号化された部分(etype 23など、RC4-HMACの場合が多いですが他のタイプもあり得ます)を特定し、John the Ripperが解析可能な形式($krb5asrep$
で始まる形式)で抽出します。
ポイントは、「事前認証を要求しない」設定が有効になっているアカウントが存在する場合に、攻撃者はそのユーザーのパスワードを知らなくても、対応するAS-REPメッセージを取得できれば、その中に含まれるハッシュデータを入手できるという点です。このハッシュをオフラインでクラッキングすることで、元のパスワードを推測しようとします。
前提条件:John the Ripperの準備 🛠️
tgtsnarf
を使用するには、まずJohn the Ripperスイートがシステムにインストールされている必要があります。John the Ripperには、主に以下の2つのバージョンがあります。
- John the Ripper (core / free): 基本的な機能を提供するオープンソース版。
- John the Ripper Pro: より多くの機能、最適化、公式サポートが含まれる商用版。
- John the Ripper community-enhanced version (Jumbo): コミュニティによって多くの機能拡張(より多くのハッシュタイプへの対応、ツール追加など)が施されたバージョン。
tgtsnarf
のような追加ツールは、主にこのJumbo版に含まれています。
多くの場合、Linuxディストリビューションのリポジトリからインストールできるのはcore版かJumbo版です。Kali Linuxのようなペネトレーションテスト用ディストリビューションには、通常Jumbo版がプリインストールされています。
インストールされていない場合は、公式ウェブサイトやGitHubリポジトリからソースコードをダウンロードしてコンパイルするか、パッケージマネージャーを使用します(ディストリビューションによってパッケージ名が異なる場合があります)。
例 (Debian/Ubuntu系):
sudo apt update
sudo apt install john
例 (ソースからコンパイル – Jumbo版):
# 必要な依存関係をインストール (例: libssl-dev, yacc/bison, flex, etc.)
sudo apt install build-essential libssl-dev yacc flex git
# リポジトリをクローン
git clone https://github.com/openwall/john -b bleeding-jumbo john-jumbo
cd john-jumbo/src/
# コンパイル
./configure && make -s clean && make -sj4
コンパイル後、john
実行ファイルやtgtsnarf
などのツールは、通常run
ディレクトリ内に生成されます。
cd ../run
ls # john, tgtsnarf などが見つかるはず
tgtsnarf
が利用可能かどうかは、run
ディレクトリ内で確認するか、パスが通っていれば直接コマンドを実行してみることで確認できます。
./tgtsnarf -h # ヘルプが表示されればOK
使い方:ネットワークキャプチャとハッシュ抽出 🎣
tgtsnarf
の基本的な使い方は非常にシンプルです。ネットワークキャプチャファイルを入力として与え、抽出されたハッシュを標準出力またはファイルに出力します。
1. ネットワークトラフィックのキャプチャ
まず、Kerberos認証(特にAS-REP)が含まれる可能性のあるネットワークトラフィックをキャプチャする必要があります。これにはtcpdump
やWireshark
(またはそのコマンドライン版tshark
) といったツールが使用されます。
Kerberosの認証サービス (AS) は通常、TCPまたはUDPのポート88で動作します。以下はtcpdump
を使用してKerberosトラフィックをキャプチャし、capture.pcap
ファイルに保存する例です。
# 特定のインターフェース(例: eth0)でポート88の通信をキャプチャ
sudo tcpdump -i eth0 -w capture.pcap port 88
あるいは、より具体的にAS-REP (krb-as-rep) をフィルタリングすることも考えられますが、通常はポート88全体をキャプチャしておき、後でtgtsnarf
に処理させるのが一般的です。キャプチャは、AS-REPがネットワーク上を流れるタイミング(例えば、事前認証不要なアカウントでログイン試行があった時など)で行う必要があります。
2. tgtsnarfによるハッシュ抽出
キャプチャファイル(例:capture.pcap
)ができたら、tgtsnarf
を使ってAS-REPハッシュを抽出します。
基本的なコマンド形式:
tgtsnarf <pcapファイル>
John the Ripper (Jumbo) のrun
ディレクトリから実行する場合:
cd /path/to/john-jumbo/run
./tgtsnarf /path/to/capture.pcap
tgtsnarf
はpcapファイルをスキャンし、発見したAS-REPメッセージからハッシュをJohn the Ripper形式($krb5asrep$...
)で標準出力に表示します。
出力をファイルに保存する場合:
./tgtsnarf /path/to/capture.pcap > kerberos_hashes.txt
ファイルkerberos_hashes.txt
には、以下のような形式のハッシュが一行ずつ記録されます(複数見つかった場合)。
$krb5asrep$23$username@REALM$checksum$encrypted_part
ここで、
$krb5asrep$
: John the Ripperがハッシュタイプを識別するためのプレフィックス。23
: 暗号化タイプ (etype)。23はRC4-HMACを示します。他のタイプ(例:17, 18 – AES)も存在する可能性がありますが、RC4が歴史的に事前認証不要設定と関連付けられることが多いです。username@REALM
: ユーザー名とKerberosレルム名。checksum
: 暗号化された部分のチェックサムの一部(16バイトの16進数表現)。encrypted_part
: 実際にユーザーのパスワードハッシュで暗号化されたデータ部分(16進数表現)。
主なオプション
tgtsnarf
にはいくつかのオプションがありますが、通常はファイル名を指定するだけで十分な場合が多いです。ヘルプメッセージ (tgtsnarf -h
) で確認できます。
オプション | 説明 |
---|---|
-h , --help |
ヘルプメッセージを表示して終了します。 |
-v , --verbose |
詳細な情報を表示します(デバッグ等に有用)。 |
多くの場合、特別なオプションは必要ありません。入力となるpcapファイルを正しく指定することが最も重要です。
John the Ripperでのクラッキング 💥
tgtsnarf
でAS-REPハッシュを抽出したら、次はそのハッシュをJohn the Ripper本体(john
コマンド)に渡して、実際のパスワードクラッキングを試みます。
先ほどハッシュを保存したファイル(例:kerberos_hashes.txt
)をjohn
コマンドに指定します。
cd /path/to/john-jumbo/run
./john /path/to/kerberos_hashes.txt
John the Ripperは、まずハッシュタイプ(この場合はkrb5asrep
)を自動検出し、デフォルトのクラッキングモード(シングルクラックモード、ワードリストモード、インクリメンタルモードの組み合わせ)を開始します。
特定のワードリストを使用する場合:
./john --wordlist=/path/to/wordlist.txt /path/to/kerberos_hashes.txt
特定のルールを適用する場合:
./john --wordlist=/path/to/wordlist.txt --rules=YourRules /path/to/kerberos_hashes.txt
クラッキングが成功すると、John the Ripperは解読されたパスワードと対応するハッシュを表示します。結果は通常、john.pot
ファイルに保存されるため、後で確認することも可能です。
クラックされたパスワードを表示するには:
./john --show /path/to/kerberos_hashes.txt
AS-REPハッシュ(特にetype 23, RC4-HMAC)のクラッキング速度は、使用するハードウェア(特にCPU)に依存しますが、比較的古い形式であるため、最新のハッシュ形式(例えばbcryptなど)と比較すると高速な傾向があります。それでも、パスワードの複雑さによっては、クラッキングに非常に長い時間がかかるか、現実的な時間内には成功しない可能性もあります。
tgtsnarf
はハッシュを「抽出」するツールであり、john
がそのハッシュを「クラッキング」するツールです。両者は連携して使用されます。
対策と緩和策🛡️
tgtsnarf
のようなツールによるAS-REP Roasting攻撃(事前認証なしのAS-REPからハッシュを取得してクラックする攻撃)からシステムを保護するためには、以下の対策が重要です。
-
事前認証の強制:
Active Directory環境では、全てのアカウント(特にユーザーアカウント)に対してKerberos事前認証を要求するように設定します。「事前認証を要求しない」(Do not require Kerberos preauthentication) オプションは、特別な理由がない限り無効にすべきです。これは、AS-REP Roasting攻撃の最も直接的で効果的な対策です。
見つかったユーザーに対しては、Active Directory Users and Computers (ADUC) のGUIやPowerShellで設定を変更します。# PowerShellで事前認証が不要なユーザーを検索する例 Get-ADUser -Filter {DoesNotRequirePreAuth -eq $true}
# 特定ユーザーの事前認証を必須にする例 Set-ADUser -Identity <UserName> -DoesNotRequirePreAuth $false
- 強力なパスワードポリシーの適用: たとえAS-REPハッシュが漏洩したとしても、ユーザーが長く複雑なパスワードを使用していれば、オフラインでのクラッキングは非常に困難になります。十分な長さ、文字種(大文字、小文字、数字、記号)を含むパスワードポリシーを強制し、定期的なパスワード変更を義務付けることが推奨されます。辞書に載っている単語や単純なパターンを避けることも重要です。
- RC4暗号化タイプの無効化: RC4 (etype 23) は比較的古い暗号化タイプであり、脆弱性が指摘されています。可能であれば、KerberosでRC4の使用を無効化し、より強力なAES (etype 17, 18) の使用を強制することが望ましいです。これはグループポリシーなどで設定できます。ただし、古いシステムとの互換性に影響が出る可能性があるため、慎重なテストが必要です。
- ネットワーク監視: ネットワーク上で大量のAS-REPメッセージが特定の送信元・宛先に流れていないか、異常なKerberosトラフィックがないかを監視することも、攻撃の試みを検知するのに役立ちます。SIEM (Security Information and Event Management) システムなどで関連イベントを監視することが考えられます。
- 特権アカウントの保護: 管理者アカウントなどの特権アカウントに対しては、特に厳格なパスワードポリシーを適用し、事前認証を必ず有効にすることが極めて重要です。これらのアカウントが侵害された場合の影響は甚大です。
まとめ ✨
tgtsnarf
は、John the Ripperスイートの一部として提供される、ネットワークキャプチャファイルからKerberos AS-REPハッシュを抽出するためのツールです。主に「事前認証を要求しない」設定が有効になっているアカウントを対象とし、抽出したハッシュはjohn
コマンドでオフラインクラッキングを試みることができます。
ペネトレーションテストやセキュリティ監査において、組織内のKerberos設定の弱点や弱いパスワードの存在を特定するために利用されることがあります。一方で、攻撃者にとっても利用可能なツールであるため、防御側としては、事前認証の強制、強力なパスワードポリシーの適用、RC4の無効化、ネットワーク監視などの対策を講じることが重要です。
ツールの使い方自体はシンプルですが、その背景にあるKerberosプロトコルやAS-REP Roasting攻撃の仕組みを理解することで、より効果的に活用し、また適切に対策を立てることができます。セキュリティ専門家にとって、John the Ripperとその関連ツール群は、システムの堅牢性を評価するための強力な武器となり得ます 💪。ただし、その使用には常に倫理観と法的遵守が求められます。
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper community-enhanced version (Jumbo) on GitHub: https://github.com/openwall/john
- AS-REP Roastingに関する解説 (英語): https://stealthbits.com/blog/as-rep-roasting/ (Stealthbits Blog – AS-REP Roasting Explained)
コメント