pdf2john 徹底解説:PDFパスワード解析の第一歩

John the Ripper (JtR) は、パスワードの強度をテストしたり、忘れてしまったパスワードを回復したりするための強力なツールです。しかし、John the Ripper 本体は直接 PDF ファイルを扱えません。そこで登場するのが pdf2john です。このツールは、パスワードで保護された PDF ファイルから、John the Ripper が解析できる形式の「ハッシュ」と呼ばれる文字列を抽出する役割を担います。

このブログ記事では、pdf2john の基本的な使い方から、John the Ripper と連携して実際にパスワード解析を行う手順まで、詳しく解説していきます。セキュリティテストや、正当な理由(自分が所有するファイルでパスワードを忘れた場合など)でのパスワード回復に役立ててください。

注意:

パスワードクラッキングツールは、許可なく他人のファイルやシステムに使用することは法律で禁止されています。必ず、自身が所有するファイル、または明示的な許可を得たファイルに対してのみ使用してください。倫理的な利用を心がけましょう。

John the Ripper と pdf2john の入手方法

pdf2john は、通常、John the Ripper のパッケージに含まれています。John the Ripper を入手するには、いくつかの方法があります。

  • 公式ウェブサイト 最も推奨されるのは、John the Ripper の公式ウェブサイト (Openwall) からソースコードまたはバイナリをダウンロードする方法です。最新版や、より多くの機能を含む「Jumbo」バージョンが入手可能です。「Jumbo」バージョンはコミュニティによって拡張されており、多くの追加フォーマットや機能が含まれていますが、公式版に比べて安定性が低い可能性もあります。
  • パッケージマネージャー 多くの Linux ディストリビューション (Debian, Ubuntu, Kali Linux など) では、パッケージマネージャー (apt, yum など) を使って簡単にインストールできます。ただし、提供されるバージョンが最新でない場合があります。
    # Debian/Ubuntu/Kali Linux の場合
    sudo apt update
    sudo apt install john
  • セキュリティ特化 OS Kali Linux や Parrot OS などのペネトレーションテスト(侵入テスト)用に設計された OS には、John the Ripper (Jumbo バージョンを含むことが多い) が最初からインストールされていることが一般的です。

インストール後、John the Ripper の実行ファイルがあるディレクトリ(通常は run ディレクトリ)の中に pdf2john (Perl スクリプトの pdf2john.pl または Python スクリプトの pdf2john.py) が含まれていることを確認してください。どちらのスクリプトも同様の機能を提供しますが、環境によっては Perl または Python の実行環境が別途必要になる場合があります。最近では Python 版 (pdf2john.py) の開発も進んでいるようです。

pdf2john の基本的な使い方

pdf2john の使い方は非常にシンプルです。ターミナル(コマンドプロンプト)を開き、John the Ripper の run ディレクトリに移動してから、以下のコマンドを実行します。

Perl スクリプト (pdf2john.pl) の場合:

# 例: ../run/ ディレクトリに pdf2john.pl がある場合
perl ../run/pdf2john.pl /path/to/your/protected.pdf

Python スクリプト (pdf2john.py) の場合:

# 例: ../run/ ディレクトリに pdf2john.py がある場合
python ../run/pdf2john.py /path/to/your/protected.pdf

/path/to/your/protected.pdf の部分を、実際にハッシュを抽出したい PDF ファイルのパスに置き換えてください。

コマンドが成功すると、ターミナルに以下のような形式の文字列が出力されます。これが PDF ファイルのパスワードハッシュです。

protected.pdf:$pdf$4*4*128*-1060*1*16*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*32*yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy*32*zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

この出力は、通常 <ファイル名>:<ハッシュ文字列> という形式になっています。

このハッシュ文字列をファイルに保存しておくと、John the Ripper で解析する際に便利です。リダイレクト(>)を使ってファイルに保存しましょう。

Perl スクリプトの場合:

perl ../run/pdf2john.pl /path/to/your/protected.pdf > pdf_hash.txt

Python スクリプトの場合:

python ../run/pdf2john.py /path/to/your/protected.pdf > pdf_hash.txt

これで、pdf_hash.txt というファイルにハッシュが保存されました。ファイル名は任意に変更可能です。

ヒント:

John the Ripper や Hashcat などのツールによっては、ハッシュ文字列の前のファイル名部分 (protected.pdf:) が不要な場合があります。ツールを使用する際にエラーが出る場合は、ファイルを開いてファイル名部分を削除し、$pdf$... から始まるハッシュ文字列だけにしてみてください。

John the Ripper との連携

pdf2john で抽出したハッシュは、いよいよ John the Ripper を使って解析します。John the Ripper にはいくつかの攻撃モードがありますが、代表的なものを紹介します。

John the Ripper の実行ファイル (john) があるディレクトリ(通常は run ディレクトリ)で以下のコマンドを実行します。

1. デフォルトモード(Simple モード + Wordlist モード + Incremental モード)

最も基本的な使い方です。John the Ripper がデフォルトで設定されている順序で複数の攻撃モードを試します。

./john pdf_hash.txt

2. Wordlist モード(辞書攻撃)

パスワードに使われそうな単語を集めたリスト(辞書ファイル)を使って攻撃します。効率的な攻撃方法の一つです。--wordlist オプションで辞書ファイルを指定します。John the Ripper にはデフォルトで password.lst という辞書ファイルが付属していることが多いです。より強力な辞書ファイル (例: RockYou リストなど) を別途用意すると、解析成功率が上がります。

./john --wordlist=/path/to/your/dictionary.txt pdf_hash.txt

さらに --rules オプションを付けることで、辞書の単語に数字を付け加えたり、大文字小文字を変化させたりするルール(マングルルール)を適用し、より多くのパスワード候補を試すことができます。

./john --wordlist=/path/to/your/dictionary.txt --rules pdf_hash.txt

3. Incremental モード(総当たり攻撃)

指定された文字セット(例: すべての英数字記号)の組み合わせを順番に試していく方法です。単純なパスワードなら見つかりますが、長くて複雑なパスワードの場合は非常に時間がかかります(現実的でない場合も多い)。--incremental オプションで有効になります。

./john --incremental pdf_hash.txt

特定の文字種(例: 数字のみ)を指定することも可能です。

./john --incremental=Digits pdf_hash.txt

解析結果の確認

John the Ripper がパスワードの解析に成功すると、その結果は john.pot というファイル(ポットファイルと呼ばれます)に自動的に保存されます。解析中にターミナルにも表示されますが、後で確認するには --show オプションを使います。

./john --show pdf_hash.txt

以下のように、ファイル名と解析されたパスワードが表示されます。

protected.pdf:SecretPassword123
1 password hash cracked, 0 left

解析には時間がかかることがあります。特に、パスワードが長く複雑な場合や、使用しているコンピュータの性能が低い場合は、数時間、数日、あるいはそれ以上かかることもあります。解析中はいつでも Ctrl+C を押して中断できます。中断したセッションは john.rec ファイルに保存され、後で --restore オプションを使って再開できます。

./john --restore

PDF のバージョンと暗号化について

PDF ファイルには様々なバージョンがあり、それぞれ異なる暗号化方式が使用されている可能性があります。pdf2john と John the Ripper (特に Jumbo バージョン) は、多くの一般的な PDF バージョンと暗号化方式に対応しています。

主な PDF の暗号化方式と対応状況(一般論):

PDF バージョン (目安)セキュリティハンドラ Revision (R)暗号化アルゴリズム鍵長 (ビット)John the Ripper での解析難易度
PDF 1.3 以前R2RC440非常に低い (比較的容易)
PDF 1.4R3RC4128低い
PDF 1.5R4RC4 / AES128中程度
PDF 1.6R5AES128中程度
PDF 1.7 (Acrobat 9 以降)R6AES256高い (非常に時間がかかる)

pdf2john が出力するハッシュ文字列 ($pdf$...) には、バージョンや暗号化方式に関する情報が含まれています。例えば、$pdf$4*4*128... のようなハッシュは、PDF 1.5 (R4) の 128bit 暗号化を示唆している可能性があります。

古いバージョンの PDF (特に 40bit RC4) は、現在のコンピュータ性能では非常に短時間で解析できてしまうことが多いです。一方で、AES-256 で暗号化された PDF は、パスワードが十分に強力であれば、解析は極めて困難になります。

また、PDF には「ユーザーパスワード(ファイルを開くためのパスワード)」と「オーナーパスワード(印刷や編集などの権限を制限するためのパスワード)」の2種類があります。pdf2john は主にユーザーパスワードのハッシュを抽出しますが、オーナーパスワードの情報も含まれることがあります。John the Ripper はこれらの違いを認識して解析を試みます。

トラブルシューティングと注意点

pdf2john や John the Ripper を使用する際に、問題が発生することがあります。

  • ハッシュが抽出できないpdf2john を実行しても、ハッシュ文字列が出力されず、ファイル名だけが表示される場合があります (filename.pdf: のように)。考えられる原因は以下の通りです。
    • PDF ファイルがパスワードで保護されていない。
    • PDF ファイルが破損している。
    • 使用している pdf2john が対応していない暗号化方式である (非常に稀)。
    • Perl や Python の実行環境が正しく設定されていない (pdf2john.plpdf2john.py を直接実行しようとしている場合)。
    対策: ファイルが本当に保護されているか確認する。別の PDF ファイルで試す。Perl/Python のインストールとパスを確認する。John the Ripper の Jumbo バージョンを使用してみる。
  • John the Ripper がハッシュを認識しない 抽出したハッシュを John the Ripper に渡しても、「No password hashes loaded」のようなエラーが出ることがあります。
    • ハッシュファイルにファイル名が含まれている (filename.pdf: の部分)。
    • ハッシュファイルが空、または形式が間違っている。
    • John the Ripper がそのハッシュ形式に対応していない (Jumbo バージョンでない場合など)。
    対策: ハッシュファイルからファイル名部分を削除する。ハッシュが正しく抽出されているか確認する。John the Ripper の Jumbo バージョンを使用する。--format=pdf オプションを明示的に指定してみる。
  • 解析に時間がかかりすぎる これはエラーではありませんが、よくある状況です。
    • パスワードが非常に長い、または複雑である。
    • 使用されている暗号化方式が強力である (AES-256 など)。
    • コンピュータの処理能力が低い (特に CPU)。
    • 使用している辞書ファイルが適切でない、または小さい。
    対策: より強力なコンピュータ (GPU を利用できる Hashcat なども検討) を使用する。より大規模で質の高い辞書ファイルを使用する。攻撃モードを最適化する (例: パスワードの文字種が分かっているなら Incremental モードの文字セットを限定する)。解析に時間がかかることを受け入れる。

重要:

パスワード解析は計算資源を大量に消費する可能性があります。特にノートパソコンなどで実行する場合は、発熱やバッテリー消費に注意してください。

まとめとおわりに

pdf2john は、パスワードで保護された PDF ファイルから解析可能なハッシュを抽出するための、シンプルかつ不可欠なツールです。John the Ripper と組み合わせることで、パスワード強度の監査や、忘れてしまったパスワードの回復(正当な理由がある場合のみ!)を行うことができます。

この記事では、pdf2john の基本的な使い方、John the Ripper との連携方法、PDF の暗号化に関する知識、そして一般的なトラブルシューティングについて解説しました。

繰り返しになりますが、これらのツールは強力であるため、その使用には大きな責任が伴います。常に法律と倫理を守り、許可された範囲でのみ使用してください。

パスワードセキュリティの重要性を理解し、自身のデータを保護するためにも、これらのツールの仕組みを知っておくことは有益です。強力なパスワードを設定し、適切な暗号化方式を利用することの重要性を再認識するきっかけとなれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です