John the Ripper を使用した Office ドキュメント (DOCX, XLSX, PPTX) のパスワード解析

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、強力なパスワードクラッキングツールである 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 ウィンドウが開きます。

  1. いくつかのテキストを入力します。例:「This is a test document.」
  2. File -> Save As... に移動します。
  3. Save As ダイアログで、/home/labex/project/ に移動します。
  4. ファイル名を secret.docx と入力します。
  5. Save with password チェックボックスをオンにします。
  6. Save をクリックします。
  7. Set Password ダイアログで、Enter password および Confirm password フィールドの両方に password123 をパスワードとして入力します。
  8. OK をクリックします。
  9. 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-calclibreoffice-impress をインストールします。

sudo apt install -y libreoffice-calc libreoffice-impress

パスワード保護された XLSX ファイルの作成:

  1. LibreOffice Calc を開きます。
    libreoffice --calc &
  2. いくつかのテキストを入力します。例:「Spreadsheet data.」
  3. 「ファイル」->「名前を付けて保存...」に移動します。
  4. /home/labex/project/ に移動します。
  5. ファイル名として secret.xlsx を入力します。
  6. 「パスワードを付けて保存」にチェックを入れます。
  7. 「保存」をクリックします。
  8. パスワードを password123 に設定し、確認します。
  9. 「OK」をクリックして LibreOffice Calc を閉じます。

XLSX からハッシュを抽出:

python3 /usr/share/john/office2john.py ~/project/secret.xlsx >> ~/project/hash.txt

パスワード保護された PPTX ファイルの作成:

  1. LibreOffice Impress を開きます。
    libreoffice --impress &
  2. タイトルを追加します。例:「Presentation Title.」
  3. 「ファイル」->「名前を付けて保存...」に移動します。
  4. /home/labex/project/ に移動します。
  5. ファイル名として secret.pptx を入力します。
  6. 「パスワードを付けて保存」にチェックを入れます。
  7. 「保存」をクリックします。
  8. パスワードを password123 に設定し、確認します。
  9. 「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 を使用してこれらの抽出されたハッシュをクラックし、弱いパスワードで保護されたドキュメントの脆弱性を実証しました。この実践的な経験により、パスワードクラッキングのプロセスについての洞察が得られ、デジタル資産を保護するために強力で複雑なパスワードを使用することの重要性が再確認されました。