はじめに
この実験では、強力なパスワードクラッキングツールである John the Ripper を使用して、パスワードで保護された Microsoft Office ドキュメント (DOCX, XLSX, PPTX) をクラッキングするプロセスを探求します。office2john.py を使用して Office ファイルからパスワードハッシュを抽出し、そのハッシュを John the Ripper に渡してクラッキングを行います。この実験では、実際のシナリオにおける手順を示し、Office ドキュメントにおける弱いパスワードのセキュリティ上の影響を理解するのに役立ちます。
パスワード保護された DOCX ファイルの作成
このステップでは、簡単な DOCX ファイルを作成し、パスワードで保護します。このファイルは、後続のステップでパスワードハッシュを抽出し、クラッキングするために使用されます。
まず、DOCX ファイルを作成するために libreoffice-writer をインストールしましょう。
sudo apt install -y libreoffice-writer
インストールが完了したら、LibreOffice Writer を開きます。
libreoffice --writer &
新しい LibreOffice Writer ウィンドウが開きます。
- いくつかのテキストを入力します。例:「This is a test document.」
File->Save As...に移動します。Save Asダイアログで、/home/labex/project/に移動します。- ファイル名を
secret.docxと入力します。 Save with passwordチェックボックスをオンにします。Saveをクリックします。Set Passwordダイアログで、Enter passwordおよびConfirm passwordフィールドの両方にpassword123をパスワードとして入力します。OKをクリックします。- LibreOffice Writer を閉じます。
ファイル secret.docx が ~/project ディレクトリに存在することを確認します。
ls -l ~/project/secret.docx
-rw-r--r-- 1 labex labex XXXX Month XX XX:XX /home/labex/project/secret.docx
office2john を使用して DOCX からハッシュを抽出する
このステップでは、John the Ripper スイートの一部である office2john.py スクリプトを使用して、作成した secret.docx ファイルからパスワードハッシュを抽出します。このハッシュが、John the Ripper がクラッキングを試みる対象となります。
まず、office2john.py スクリプトを見つけます。通常、/usr/share/john/ ディレクトリにあります。
find /usr/share/john/ -name office2john.py
/usr/share/john/office2john.py
次に、office2john.py を使用して secret.docx からハッシュを抽出し、hash.txt という名前のファイルに保存します。
python3 /usr/share/john/office2john.py ~/project/secret.docx > ~/project/hash.txt
hash.txt の内容を表示して、抽出されたハッシュを確認します。
cat ~/project/hash.txt
secret.docx:$office$*2007*100000*256*16*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX*XXXXXXXXXXXXXXX
出力には、secret.docx:$office$... で始まる長い文字列が表示されます。これがパスワードのハッシュです。
John the Ripper で DOCX ハッシュをクラックする
ハッシュを抽出したので、John the Ripper を使用してそれをクラックします。パスワードは一般的な単語である "password123" なので、このデモンストレーションでは簡単な単語リストを使用します。
John the Ripper には、/usr/share/john/password.lst にあるデフォルトの単語リストが付属しています。これを使用しましょう。
john --wordlist=/usr/share/john/password.lst ~/project/hash.txt
John the Ripper はハッシュの処理を開始します。パスワードが単語リストに含まれていれば、すぐにそれを見つけます。
Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (secret.docx)
1g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.
クラッキング後、--show オプションを使用してクラックされたパスワードを表示できます。
john --show ~/project/hash.txt
secret.docx:password123
1 password hash cracked, 0 left
この出力は、John the Ripper が secret.docx のパスワードを password123 として正常にクラックしたことを確認します。
XLSX および PPTX ファイルに対する繰り返し
このステップでは、office2john.py と John the Ripper が異なる Office ドキュメントタイプで同様に機能することを示すために、同じプロセスを XLSX (Excel) および PPTX (PowerPoint) ファイルに適用します。
まず、libreoffice-calc と libreoffice-impress をインストールします。
sudo apt install -y libreoffice-calc libreoffice-impress
パスワード保護された XLSX ファイルの作成:
- LibreOffice Calc を開きます。
libreoffice --calc & - いくつかのテキストを入力します。例:「Spreadsheet data.」
- 「ファイル」->「名前を付けて保存...」に移動します。
/home/labex/project/に移動します。- ファイル名として
secret.xlsxを入力します。 - 「パスワードを付けて保存」にチェックを入れます。
- 「保存」をクリックします。
- パスワードを
password123に設定し、確認します。 - 「OK」をクリックして LibreOffice Calc を閉じます。
XLSX からハッシュを抽出:
python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt
パスワード保護された PPTX ファイルの作成:
- LibreOffice Impress を開きます。
libreoffice --impress & - タイトルを追加します。例:「Presentation Title.」
- 「ファイル」->「名前を付けて保存...」に移動します。
/home/labex/project/に移動します。- ファイル名として
secret.pptxを入力します。 - 「パスワードを付けて保存」にチェックを入れます。
- 「保存」をクリックします。
- パスワードを
password123に設定し、確認します。 - 「OK」をクリックして LibreOffice Impress を閉じます。
PPTX からハッシュを抽出:
python3 /usr/share/john/office2john.py ~/project/secret.pptx >> ~/project/hash.txt
すべてのハッシュをクラック:
次に、DOCX、XLSX、および PPTX のハッシュが含まれるようになった更新された hash.txt ファイルで John the Ripper を実行します。
john --wordlist=/usr/share/john/password.lst ~/project/hash.txt
Using default input encoding: UTF-8
Loaded 3 password hashes (Office, 2007/2010/2013/2016 [MD5/SHA1/SHA256/SHA512 RC4/AES])
Will run till all hashes are cracked, by default
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (secret.xlsx)
password123 (secret.pptx)
password123 (secret.docx)
3g 0:00:00:00 DONE (20XX-XX-XX XX:XX) 100.0g/s 100.0p/s 100.0c/s 100.0C/s password123
Session completed.
すべてのクラックされたパスワードを確認します。
john --show ~/project/hash.txt
secret.xlsx:password123
secret.pptx:password123
secret.docx:password123
3 password hashes cracked, 0 left
Office ドキュメントの暗号化について理解する
このステップでは、Microsoft Office ドキュメントで使用される暗号化メカニズムと、John the Ripper のようなツールが効果的である理由について簡単に説明します。
最新の Microsoft Office ドキュメント (DOCX、XLSX、PPTX) は、XML ベースのフォーマット (Open XML) を使用しています。パスワードが設定されると、ドキュメントの内容は暗号化されます。暗号化プロセスでは、PBKDF2 (Password-Based Key Derivation Function 2) のようなキー導出関数 (KDF) を使用して、ユーザーのパスワードから暗号化キーが導出されます。
office2john.py は、Office ドキュメントの XML 構造から、ソルト (salt)、イテレーションカウント (iteration count)、および暗号化された検証者ハッシュ (encrypted verifier hash) などの必要なパラメータを抽出することで機能します。これらのパラメータは、ハッシュタイプ (例:Office 2007/2010/2013/2016) と共に、John the Ripper が理解する「ハッシュ」文字列を形成します。
John the Ripper は、その後、ブルートフォース攻撃または辞書攻撃を実行します。単語リスト内の各単語 (またはブルートフォース攻撃での各組み合わせ) に対して、抽出されたパラメータと同じ KDF を適用して候補キーを生成します。この候補キーが暗号化された検証者ハッシュと一致する場合、パスワードが見つかります。
暗号化の強度は、パスワードの複雑さと長さに大きく依存します。この実験で示したように、「password123」のような弱いパスワードや一般的なパスワードは、辞書攻撃によって簡単にクラックされます。強力なパスワード (長く、ランダムで、さまざまな文字が混在しているもの) は、クラッキングに必要な時間と計算リソースを大幅に増加させ、より安全になります。
この演習は、機密性の高いドキュメントを不正アクセスから保護するために、強力でユニークなパスワードを使用することの重要性を強調しています。
まとめ
この実験では、office2john.py を使用して、パスワードで保護された Microsoft Office ドキュメント (DOCX、XLSX、PPTX) からパスワードハッシュを抽出する方法を学びました。次に、John the Ripper を使用してこれらの抽出されたハッシュをクラックし、弱いパスワードで保護されたドキュメントの脆弱性を実証しました。この実践的な経験により、パスワードクラッキングのプロセスについての洞察が得られ、デジタル資産を保護するために強力で複雑なパスワードを使用することの重要性が再確認されました。


