はじめに
John the Ripper (JtR) は、非常に強力で広く利用されているパスワードクラッキングツールです。多くの種類のハッシュ形式に対応しており、システム管理者によるパスワード強度監査や、ペネトレーションテストにおけるパスワード復元の試行などに活用されています。John the Ripper自体はハッシュ化されたパスワードの解析に特化しており、暗号化されたファイルやネットワークトラフィックから直接ハッシュを抽出する機能は持っていません。
そこで、様々なデータソースからJohn the Ripperが解析可能な形式のハッシュを抽出するための補助ツール群、通称「*2john」ツールが開発されています。zip2john
(ZIPファイルから)、office2john
(Microsoft Officeファイルから)、pcap2john
(ネットワークキャプチャファイルから) など、多岐にわたるツールが存在します。
本記事では、その中でも特にKerberos認証システムに関連するkdcdump2john
というツールに焦点を当て、その目的、使い方、および活用シナリオについて詳しく解説します。
kdcdump2johnとは?
kdcdump2john
は、KerberosのKey Distribution Center (KDC) のデータベースダンプから、John the Ripperが解析できる形式のハッシュを抽出するためのPythonスクリプトです。具体的には、MIT Kerberos 5のkdb5_util
ツールにパッチを当てて作成されたkdb5_util.patched
が出力するダンプファイル、あるいは類似の形式のデータを処理することを目的としています。
Kerberos KDCデータベースには、レルム内のプリンシパル(ユーザーやサービス)の認証情報、特にパスワードから派生した暗号化キー(ハッシュ)が格納されています。これらのキーは、Kerberos認証プロトコルの根幹をなす要素です。kdcdump2john
は、このデータベースダンプに含まれる様々な暗号化タイプ(etype)のキー情報を、John the Ripperのkrb5-18
(aes256-cts-hmac-sha1-96) や krb5-23
(arcfour-hmac / RC4-HMAC) などのフォーマット文字列に変換します。
このツールは、John the Ripper (Jumbo-version) のrun
ディレクトリ、またはシステムによっては/usr/bin/
や/usr/sbin/
、/usr/lib/john/
、/usr/share/john/
などに他の*2johnツールと共に含まれています。
前提条件と取得方法
前提条件
- John the Ripper (Jumbo version):
kdcdump2john
はJohn the Ripperスイートの一部であり、生成されたハッシュを解析するためにJohn the Ripper本体が必要です。コミュニティによって拡張されたJumbo versionの使用が推奨されます。 - Python:
kdcdump2john
はPythonスクリプトであるため、実行環境にPythonが必要です。 - KDCデータベースダンプ: 解析対象となるKDCデータベースのダンプファイルが必要です。これは通常、パッチを適用した
kdb5_util
ツールなどを使用して取得されます。
取得方法
kdcdump2john
は通常、John the Ripper (Jumbo version) をソースコードからビルドするか、パッケージマネージャー(例: APT, YUM, Pacman, Homebrew)経由でjohn
またはjohn-jumbo
パッケージをインストールすることで入手できます。
ソースコードからビルドした場合、John the Ripperのディレクトリ内のrun
サブディレクトリに配置されます。
Linuxディストリビューションによっては、/usr/bin/kdcdump2john.py
や/usr/share/john/kdcdump2john.py
のようなパスにインストールされることもあります。
もし見つからない場合は、John the Ripperの公式GitHubリポジトリからソースコードを取得し、run
ディレクトリ内を探すことができます。
kdcdump2john の使い方
kdcdump2john
の基本的な使い方は非常にシンプルです。通常、KDCデータベースのダンプファイルを引数として指定します。
基本構文
./kdcdump2john.py [dump_file]
または
python /path/to/kdcdump2john.py [dump_file]
[dump_file]
: パッチ適用済みのkdb5_util
コマンドなどで生成されたKDCデータベースのダンプファイルへのパスを指定します。この引数を省略した場合、標準入力からデータを読み込もうとすることがあります(ただし、基本的な使用法はファイル指定です)。
入力データ形式
kdcdump2john
が期待する入力データは、通常、以下のような形式です。これは、パッチを適用したkdb5_util
のdump
コマンドの出力例に基づいています。
test/admin@OLYMPE.OL 18,fc77e6ffc07b469ba90ad4a979bcbb64709177c74af7f8eceaada0cdc84c1117
test/admin@OLYMPE.OL 23,1667b5ee168fc31fba85ffb8f925fb70
test/user1@EXAMPLE.COM 18,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test/user1@EXAMPLE.COM 23,bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
各行は、プリンシパル名、暗号化タイプ(etype)の番号、カンマ区切り、そしてそのetypeに対応するキー(ハッシュ)の16進数表現で構成されています。
18
: aes256-cts-hmac-sha1-9623
: arcfour-hmac (RC4-HMAC)16
: des-cbc-md5 (古い形式)17
: aes128-cts-hmac-sha1-96
出力形式
kdcdump2john
は、入力データをJohn the Ripperが認識できるハッシュ形式に変換して標準出力に出力します。上記の入力例に対する出力は以下のようになります。
test/admin@OLYMPE.OL:$krb18$OLYMPE.OLtestadmin$fc77e6ffc07b469ba90ad4a979bcbb64709177c74af7f8eceaada0cdc84c1117
test/admin@OLYMPE.OL:$krb23$1667b5ee168fc31fba85ffb8f925fb70
test/user1@EXAMPLE.COM:$krb18$EXAMPLE.COMtestuser1$aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
test/user1@EXAMPLE.COM:$krb23$bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
この形式は、ユーザー名:$フォーマット識別子$レルム名ユーザー名(短縮形)$ハッシュ
という構成になっています。
$krb18$
: John the Ripperに対して、これがetype 18 (aes256) のハッシュであることを示します。John the Ripperでは--format=krb5-18
で指定します。$krb23$
: John the Ripperに対して、これがetype 23 (rc4-hmac) のハッシュであることを示します。John the Ripperでは--format=krb5-23
で指定します。
出力された内容は、ファイルにリダイレクトして保存し、John the Ripperの入力として使用します。
実行例
KDCデータベースのダンプファイルが kdc_dump.txt
という名前で存在すると仮定します。
- kdcdump2johnの実行:
./kdcdump2john.py kdc_dump.txt > krb_hashes.txt
これにより、
kdc_dump.txt
の内容がJohn the Ripper形式に変換され、krb_hashes.txt
ファイルに保存されます。 - John the Ripperでの解析:
次に、John the Ripperを使って
krb_hashes.txt
に含まれるハッシュの解析を試みます。例えば、RC4-HMAC (etype 23) のハッシュを解析する場合:john --format=krb5-23 --wordlist=/path/to/wordlist.txt krb_hashes.txt
AES256 (etype 18) のハッシュを解析する場合:
john --format=krb5-18 --wordlist=/path/to/wordlist.txt krb_hashes.txt
John the Ripperは自動的にファイル内の適切なフォーマットのハッシュを認識しようとしますが、
--format
オプションで明示的に指定することで、特定のタイプのハッシュのみを対象にしたり、解析を高速化したりできます。
ユースケースと関連技術
kdcdump2john
は、主に以下のような状況で利用されます。
- セキュリティ監査: Active Directory環境などで、KDC(ドメインコントローラー)に設定されているユーザーパスワードの強度を評価するために使用されます。弱いパスワードが設定されているアカウントを特定し、改善を促すことができます。
- インシデント対応: システム侵害が発生した後、攻撃者がKDCデータベースを窃取した可能性がある場合に、その内容を調査し、漏洩した可能性のある認証情報を特定するために使用されることがあります。
- ペネトレーションテスト: 合法的なペネトレーションテストの一環として、テスト対象システムのKDCデータベースへのアクセス権を取得できた場合に、パスワードクラッキングを試みることで、さらなる権限昇格や横展開が可能かどうかを評価します。
- パスワードリカバリ: 極めて稀なケースですが、正当な理由でパスワードを忘れてしまい、他の復旧手段がない場合に、バックアップされたKDCダンプから自身のパスワードを復元するために試みられる可能性も考えられます(ただし、推奨される方法ではありません)。
関連するKerberos攻撃手法
kdcdump2john
はKDCデータベースそのものを対象としますが、Kerberos認証プロトコルの他の側面を悪用する攻撃手法も存在し、John the Ripperが利用されることがあります。
- Kerberoasting: ドメイン内の任意の認証済みユーザーが、特定のサービスプリンシパル名(SPN)を持つサービスアカウントのTicket Granting Service (TGS) チケットを要求できる点を悪用します。このTGSチケットの一部は、サービスアカウントのパスワードハッシュ(通常はRC4-HMAC)で暗号化されているため、これをオフラインでクラックすることでサービスアカウントのパスワードを窃取しようとします。取得したTGSチケットのハッシュは、John the Ripperの
krb5tgs
フォーマットなどで解析できます。 - AS-REP Roasting: Kerberos事前認証(Pre-authentication)が無効になっているユーザーアカウントを標的とします。事前認証が無効な場合、誰でもそのユーザーのAS-REQ(認証サービス要求)を送信でき、KDCはAS-REP(認証サービス応答)を返します。このAS-REPの一部はユーザーのパスワードハッシュ(RC4-HMACまたはAES)で暗号化されており、これをオフラインでクラックすることでユーザーのパスワードを窃取しようとします。取得したAS-REPハッシュは、John the Ripperの
krb5asrep
フォーマット(etype 23用)や、最近追加されたAES対応フォーマット(etype 17, 18用)で解析できます。
これらの攻撃で得られたハッシュデータをJohn the Ripperで解析する際にも、--format=krb5tgs
や--format=krb5asrep
といったオプションが使用されます。
注意点と倫理的考慮事項
kdcdump2john
およびJohn the Ripperは、強力なパスワード監査・解析ツールですが、その能力ゆえに悪用される危険性も伴います。以下の点に十分に注意してください。
- 法的・倫理的な利用: これらのツールは、自身が管理権限を持つシステム、または明確な許可を得たシステムに対してのみ使用してください。他者のシステムやデータに対して許可なく使用することは、不正アクセス禁止法などの法律に抵触する犯罪行為です。
- 機密データの取り扱い: KDCデータベースダンプや抽出されたハッシュファイルは、極めて機密性の高い情報を含みます。これらのファイルは厳重に管理し、不要になった場合は安全な方法で削除してください。
- ツールの目的の理解: これらのツールは、セキュリティ強化を目的としたパスワード強度の評価や、正当なインシデント対応のために提供されています。悪意のある目的で使用しないでください。
まとめ
kdcdump2john
は、Kerberos KDCデータベースのダンプファイルからパスワードハッシュを抽出し、John the Ripperで解析可能な形式に変換するための重要なユーティリティです。主にセキュリティ監査やペネトレーションテストの文脈で使用され、Active Directory環境などにおけるアカウントのパスワード強度評価に役立ちます。
このツールを使用するには、対象となるKDCデータベースのダンプファイルとJohn the Ripper (Jumbo version) が必要です。基本的な使い方は、ダンプファイルを引数としてスクリプトを実行し、出力をファイルに保存してJohn the Ripperで解析するという流れになります。
KerberoastingやAS-REP Roastingといった他のKerberos関連攻撃手法で得られたハッシュの解析にもJohn the Ripperは活用されます。これらのツールや技術を理解することは、Active Directory環境のセキュリティを評価し、強化する上で非常に重要です。
ただし、これらのツールは強力であるため、常に法的・倫理的な枠組みの中で、正当な目的のためにのみ使用することが求められます。適切な知識と倫理観を持って活用しましょう。
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (Tutorials & *2john tools): http://openwall.info/wiki/john/tutorials
- John the Ripper GitHub Repository (includes kdcdump2john.py): https://github.com/magnumripper/JohnTheRipper