John the Ripperと連携してパスワード保護されたLibreOffice/OpenOfficeファイルを解析する方法
はじめに: libreoffice2johnとは?🤔
libreoffice2johnは、パスワードで保護されたLibreOfficeやApache OpenOfficeのファイル(ODF: Open Document Format)からパスワードハッシュを抽出するためのユーティリティスクリプトです。このスクリプト自体がパスワードを解析(クラック)するわけではありません。抽出されたハッシュは、有名なパスワード解析ツールであるJohn the Ripper (JtR)に入力するために使われます。
つまり、libreoffice2johnはJtRが理解できる形式にODFファイルの情報を変換する「橋渡し役」と言えます。パスワードを忘れてしまったファイルを開きたい場合や、セキュリティ監査の一環として弱いパスワードが使われていないか検証する際に役立ちます。
⚠️ 注意と倫理的配慮
パスワード解析ツールは、自身が所有するファイルや、明確な許可を得たファイルに対してのみ使用してください。他者のファイルを許可なく解析する行為は、プライバシーの侵害や不正アクセス禁止法などの法律に抵触する可能性があります。ツールの使用は、常に倫理的な範囲と法規制を遵守して行ってください。
libreoffice2johnの入手方法
libreoffice2johnは、通常、John the Ripper (JtR) の「Jumbo」バージョン(コミュニティによって拡張されたバージョン)に含まれています。JtR本体と一緒に配布されることが多いです。
-
John the Ripper (Jumbo) のインストール:
最も簡単な方法は、お使いのLinuxディストリビューションのパッケージマネージャを使用することです。例えば、Debian/Ubuntu系では以下のようにインストールできます。
sudo apt update sudo apt install john
macOSの場合は、Homebrewを使うと便利です。
brew install john
あるいは、OpenwallのJohn the Ripper公式サイトからソースコードをダウンロードし、自分でコンパイルすることも可能です。Jumboバージョンは、GitHubのopenwall/johnリポジトリから入手できます。
-
スクリプトの場所の確認:
JtRをインストールすると、
libreoffice2john.py
(Pythonスクリプト) は通常、/usr/share/john/
や/opt/john/run/
、あるいはソースからコンパイルした場合は `run` ディレクトリ内に配置されます。見つからない場合は、
find
コマンドやlocate
コマンドで探してみてください。sudo find / -name libreoffice2john.py # または locate libreoffice2john.py
以前は `odf2john.py` という名前でしたが、現在は `libreoffice2john.py` に変更されています。
-
依存関係:
libreoffice2john.py
はPythonスクリプトなので、Python 3 の実行環境が必要です。多くのシステムではデフォルトでインストールされていますが、もしなければインストールしてください。
libreoffice2johnの使い方: ハッシュの抽出 ✨
使い方は非常にシンプルです。コマンドラインでlibreoffice2john.py
を実行し、引数としてパスワード保護されたLibreOffice/OpenOfficeファイルを指定します。
python /path/to/libreoffice2john.py [保護されたファイル名]
例えば、/usr/share/john/
にスクリプトがあり、解析したいファイルがカレントディレクトリにある 文書.odt
だとすると、以下のようになります。
python /usr/share/john/libreoffice2john.py 文書.odt
成功すると、標準出力に以下のような形式の文字列(ハッシュ)が出力されます。
文書.odt:$odf*0*1*100000*256*9d2eccb8[...]e7a*16*f5a[...]98*40*d8[...]1c*content.xml
この出力は ファイル名:ハッシュ情報
という形式になっています。このハッシュ情報をファイルに保存して、John the Ripperで解析します。リダイレクトを使うと便利です。
python /usr/share/john/libreoffice2john.py 文書.odt > odf.hash
これで、odf.hash
というファイルにJtRが解析できる形式のハッシュが保存されました。
ヒント: もし複数のファイルを一度に処理したい場合は、シェルスクリプトやfind
コマンドと組み合わせることも可能です。
対応しているファイル形式
libreoffice2john
は、ODF (Open Document Format) をベースとした以下のファイル形式に対応しています。
.odt
(Writer ドキュメント).ods
(Calc 表計算).odp
(Impress プレゼンテーション).odg
(Draw 図形描画)
これらはLibreOfficeやApache OpenOfficeの標準ファイル形式です。
なお、LibreOffice自体はMicrosoft Office形式(.docx, .xlsx, .pptxなど)も扱えますが、これらのファイルのパスワードハッシュ抽出にはoffice2john.py
という別のツールを使用します。
LibreOffice 7以降の注意点
過去(2020年頃)、LibreOffice 7.xで保存されたファイルに対してlibreoffice2john.py
がエラーを出すという問題が報告されていました。これは、ファイル内部の構造に関する変更が原因でした。
もし古いバージョンのlibreoffice2john.py
を使用していてエラーが出る場合は、John the Ripper (Jumbo) を最新版にアップデートすることで解決する可能性が高いです。開発コミュニティによって、LibreOffice 7以降の形式に対応する修正が行われています。
John the Ripperでのパスワード解析 🚀
libreoffice2john.py
でハッシュを抽出したら、いよいよJohn the Ripperの出番です。JtRは様々なモードでパスワード解析を試みます。
基本的な使い方
最も基本的な使い方は、先ほど作成したハッシュファイル (odf.hash
) をJtRに渡すだけです。
john odf.hash
これを実行すると、JtRはデフォルトのモード(シングルクラックモード、ワードリストモード、インクリメンタルモードを順に試す)で解析を開始します。
ワードリストモード (辞書攻撃)
パスワードに使われそうな単語を集めたリスト(辞書ファイル)を使って解析するモードです。特定の言語の単語、よく使われるパスワードのリストなどを使用します。JtRにはデフォルトでpassword.lst
という基本的なワードリストが含まれています。
john --wordlist=/path/to/your/wordlist.txt odf.hash
より強力なワードリスト(例えば、有名なrockyou.txt
など)を指定すると、解析成功率が上がります。
さらに--rules
オプションを使うと、ワードリストの単語に特定のルール(大文字小文字変換、数字や記号の追加など)を適用して試行するため、より複雑なパスワードにも対応できます。
john --wordlist=/path/to/wordlist.txt --rules=All odf.hash
インクリメンタルモード (総当たり攻撃)
特定の文字セット(数字のみ、英小文字のみ、英数字記号すべてなど)を使って、可能なすべての組み合わせを試すモードです。非常に時間がかかる可能性がありますが、単純なパスワードであれば見つけられます。
john --incremental=Digits odf.hash # 数字のみ
john --incremental=Alnum odf.hash # 英数字のみ
john --incremental=All odf.hash # すべての表示可能文字
--mask
オプションを使えば、パスワードのパターン(例: 大文字1文字+小文字5文字+数字2桁)を指定して、より効率的な総当たり攻撃を行うことも可能です。
# 例: 大文字1文字 + 小文字5文字 + 数字2桁 のパスワードを試す
john --mask='?u?l?l?l?l?l?d?d' odf.hash
解析の状況確認と結果表示
- 状況確認: 解析中に任意のキー(Enterなど)を押すと、現在の状況(試行速度、経過時間、次に試すパスワード候補など)が表示されます。
- 結果表示: 解析が成功すると、パスワードが見つかった時点でJtRは停止し、結果を表示します。後から見つかったパスワードを確認するには、
--show
オプションを使います。
john --show odf.hash
成功した場合、以下のように表示されます(例)。
文書.odt:password123
1 password hash cracked, 0 left
この例では、文書.odt
のパスワードがpassword123
であることがわかりました。
パフォーマンスの向上 (CPU/GPU)
JtRはマルチコアCPUを活用できます。--fork=N
オプションで、使用するCPUコア数を指定できます。
john --fork=4 odf.hash # 4コア使用
また、OpenCLに対応したGPUを持っている場合、GPUを使って解析を大幅に高速化できます。対応しているフォーマット(ODFの場合は ODF-opencl
)を指定します。
john --format=ODF-opencl odf.hash
利用可能なOpenCLデバイスを確認し、特定のデバイスを指定することも可能です。
john --list=opencl-devices # 利用可能なデバイス一覧
john --format=ODF-opencl --dev=1 odf.hash # 2番目のデバイスを使用 (0から数える)
GPUを使うことで、CPUのみの場合と比較して数十倍から数百倍の速度向上が期待できることもあります。💪
セキュリティ強度について🛡️
LibreOffice/OpenOfficeのパスワード保護は、一般的にAES-256などの強力な暗号化アルゴリズムを使用しています(バージョンや設定によります)。これは、暗号アルゴリズム自体を破ることが非常に困難であることを意味します。
しかし、パスワード解析ツールが狙うのは暗号アルゴリズムの脆弱性ではなく、設定されたパスワードそのものの強度です。
- 短いパスワード: 数桁の数字や簡単な単語などは、総当たり攻撃や辞書攻撃で比較的短時間で破られる可能性があります。
- 推測可能なパスワード: 名前、誕生日、一般的な単語なども危険です。
- 使い回されたパスワード: 他のサービスで漏洩したパスワードと同じものを設定している場合、容易に突破される可能性があります。
したがって、LibreOffice/OpenOfficeファイルに重要な情報を保存する場合は、長く、複雑で、推測されにくいユニークなパスワードを設定することが非常に重要です。可能であれば、パスワードマネージャーで生成したランダムなパスワードを使用するのが理想的です。
libreoffice2john
とJohn the Ripperを使った解析は、設定されたパスワードが弱い場合に有効な手法であり、逆に言えば、強力なパスワードが設定されていれば、解析には膨大な時間(現実的に不可能なレベル)がかかることになります。
まとめ
libreoffice2john.py
は、パスワード保護されたODFファイルからJohn the Ripperが解析可能なハッシュを抽出するための便利なツールです。JtRと組み合わせることで、忘れてしまったパスワードの回復や、セキュリティ監査に役立てることができます。
- John the Ripper (Jumbo) をインストールし、
libreoffice2john.py
の場所を確認する。 python /path/to/libreoffice2john.py [ファイル名] > output.hash
でハッシュを抽出・保存する。john output.hash
コマンドや、ワードリスト、インクリメンタルモードなどのオプションを指定してJohn the Ripperで解析する。- 強力なパスワードを設定することの重要性を再認識する。
繰り返しになりますが、このツールは正当な目的のためにのみ使用してください。適切に使えば非常に有用ですが、悪用は法的な問題を引き起こす可能性があります。🚫
これであなたも、LibreOfficeファイルのパスワード解析の基本をマスターしましたね!😊
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (Supported Formats): https://openwall.info/wiki/john/sample-hashes (ここには各種フォーマットのサンプルハッシュがあります)
- John the Ripper jumbo version (GitHub): https://github.com/openwall/john
コメント