Impacket ticketConverter.py
MIT/Heimdal の ccache と Windows の KRB-CRED(kirbi)を相互変換します。Base64 での入出力にも対応します。
| 項目 | 内容 |
|---|---|
| 実装 | examples/ticketConverter.py |
| カテゴリ | Kerberos / チケット処理 |
| 規模 | 113 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/ticketConverter.py -h で確認できます。
| 引数 | 説明 |
|---|---|
input_file | File in kirbi (KRB-CRED) or ccache format |
output_file | Output file |
-b / --base64 | Decode input ticket from base64 with unwrap support |
詳細な処理フロー
Section titled “詳細な処理フロー”magic/header から入力形式を判定し、base64 指定時は wrapper や空白を除いて decode します。kirbi は CCache.loadKirbiFile() 経由で ccache へ、ccache は CCache.toKRBCRED() 経由で kirbi へ変換し、指定先へ保存します。既知形式でない場合は書き込みません。
仕組みの詳細
Section titled “仕組みの詳細”ccache と kirbi は同じ Kerberos credential を異なる container model で表します。 ccache は複数 credential と principal/key/time 情報を保持でき、kirbi は KRB-CRED ASN.1 message として ticket list と encrypted part を持ちます。 変換は暗号を破る処理ではなく、保持されている ticket と session metadata を 別形式へ写し替える処理です。
入力判定は先頭 byte/header と ASN.1 構造に基づきます。--base64 では PEM 風
wrapper、空白、改行を除去して一時 binary としてから同じ判定へ渡します。
kirbi からは CCache.loadKirbiFile() が principal/time/key を credential
entry へ移し、逆方向は toKRBCRED() が KRB-CRED の ticket-info を構築します。
形式間で完全に対応しない metadata や複数 credential の扱いがあるため、 出力が parse できるだけでなく、principal、session key、ticket byte 列、 validity time が round-trip 後も一致することを検証します。不明形式や base64 decode failure では出力 file を先に切り詰めないようにします。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
parse_args() | 40 | モジュール関数 |
main() | 50 | モジュール関数 |
is_kirbi_file() | 83 | モジュール関数 |
is_ccache_file() | 89 | モジュール関数 |
convert_kirbi_to_ccache() | 95 | モジュール関数 |
convert_ccache_to_kirbi() | 100 | モジュール関数 |
base64_decode_with_unwrap() | 105 | モジュール関数 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | version |
impacket.krb5.ccache | CCache |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 主処理はローカルファイルの解析です。入力を信頼せず、offset、length、形式識別子を検証してからデータを参照してください。
- オプションによりローカルファイルを作成または更新します。既存ファイルの扱いと秘密情報を含む出力の権限を確認してください。
失敗経路と後始末
Section titled “失敗経路と後始末”- 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
実装を変更するとき
Section titled “実装を変更するとき”impacket.krb5.ccache.CCache と標準 base64 / struct / tempfile のみが中心です。形式判定、変換、CLI は独立関数なので、round-trip test を追加しやすい構成です。
- 構文:
python -m py_compile examples/ticketConverter.py - CLI:
python examples/ticketConverter.py -h - 関連テスト:
tests/misc/test_ccache.py

