本稿では、パスワード保護された**PDF(Portable Document Format)**文書を総当たり攻撃で復号する方法を確認します。
パスワード保護されたPDF文書中に復号パスワードは保存せれていません。パスワードに関連付けられたハッシュが保存されています。そこで、PDF文書からハッシュを抽出し、そのハッシュに対して**総当たり攻撃(ブルートフォース攻撃)**を仕掛け、解読します。
John the Ripper ジャンボバージョンの入手
まず、John the Ripper
のジャンボバージョンを入手します。John The Ripper
とは、OpenWallが管理しているオフラインパスワードクラッカーツールです。
ジャンボバージョンとは、コミュニティにより強化が図られたバージョンです。公式バージョンには含まれていない多くのコードやドキュメント、データを含んでいます。
ジャンボバージョンの品質要件は低いです。未成熟なコードのためバグが内在しており、予期せぬ不具合が発生することもあります。
root@kali:~# wget https://github.com/magnumripper/JohnTheRipper/archive/bleeding-jumbo.zip
root@kali:~# unzip JohnTheRipper-bleeding-jumbo.zip
PDF文書からハッシュを抽出する
JohnTheRipper-bleeding-jumbo.zip
を展開し、パスワード保護されたPDFファイル(pdf_protected.pdf
)からハッシュを抽出するためにpdf2john.pl
を実行します。
root@kali:~# perl JohnTheRipper-bleeding-jumbo/run/pdf2john.pl pdf_protected.pdf > pdf.hash
出力されたpdf.hash
は次のような記述です(出力結果の一部は{BLOCKED}
文字列でマスク加工してあります)。
root@kali:~# cat pdf.hash
pdf_protected.pdf:$pdf$4*4*128*-1060*1*16*5c8f37d2a4{BLOCKED}32ba4dac0c
ハッシュの先頭にはファイルの絶対パスとセミコロンが付いています。これらは総当たり攻撃する際には不要です。削除しておきます。
root@kali:~# cat pdf.hash
$pdf$4*4*128*-1060*1*16*5c8f37d2a4{BLOCKED}32ba4dac0c
John the Ripper によるハッシュの総当たり攻撃
Kali Linuxには、予めJohn the Ripper
がインストールされています。これを使います。先ほどパスワード保護されたPDF文書から抽出し不要な情報を取り除いたハッシュ情報を含むファイル(pdf.hash
)を引数として渡します。
ここでは、--wordlist
引数にて、ハッシュ解析時に使用する辞書ファイルとしてrockyou.txt
を指定しています。
2009年にソーシャルネットワークアプリを提供するRockYou のデータベースが侵害されました。この事件をベースに作られた
rockyou.txt
には、32,603,388アカウントで使用される14,341,564個の一意のパスワードが含まれています。Kali Linux
には、この辞書ファイル(/usr/share/wordlists/rockyou.txt.gz
)が収録されています。
# john --wordlist=rockyou.txt pdf.hash
Using default input encoding: UTF-8
Loaded 1 password hash (PDF [MD5 SHA2 RC4/AES 32/32])
Press 'q' or Ctrl-C to abort, almost any other key for status
ju{BLOCKED}69 (?)
1g 0:00:02:06 DONE (2019-12-05 00:43) 0.007935g/s 54129p/s 54129c/s 54129C/s ju{BLOCKED}69
Use the "--show" option to display all of the cracked passwords reliably
Session completed
結果、パスワードは「ju{BLOCKED}69
」であることが特定できました(出力結果の一部は{BLOCKED}
文字列でマスク加工してあります)。
参考情報
- https://www.sevenlayers.com/index.php/202-pentesting-101-passwords-and-wordlists
- https://ourcodeworld.com/articles/read/939/how-to-crack-a-pdf-password-with-brute-force-using-john-the-ripper-in-kali-linux
- https://blog.didierstevens.com/2017/12/26/cracking-encrypted-pdfs-part-1/
- https://netlockit.wordpress.com/2017/11/03/cracking-password-protected-pdf-files-with-john-the-ripper/