はじめに
辞書攻撃とは、パスワードで保護されたシステムに侵入するために、リスト(辞書)内のすべての単語をパスワードとして体系的に入力する方法です。しかし、この基本的なアプローチは、ユーザーが単純な辞書単語をパスワードとして使用することは稀であるため、しばしば失敗します。ユーザーは、複雑さの要件を満たすために、数字、記号を追加したり、大文字小文字を変更したりすることがよくあります。
ここで「マングリングルール」が非常に強力になります。マングリングルールとは、テストされる前に辞書の単語を変換するための指示のセットです。例えば、ルールは数字を追加したり、最初の文字を大文字にしたり、文字を記号に置き換えたり(例:「a」を「@」に)することができます。
この実験(Lab)では、人気のパスワードクラッキングツールである John the Ripper (JtR) を使用して、これを実際に確認します。まず標準的な辞書攻撃を試みて、失敗するのを確認します。次に、マングリングルールのセットを適用して攻撃を強化し、より複雑なパスワードを正常にクラックします。
マングリングルールの力を理解する
このステップでは、まず標準的な辞書攻撃を実行し、その限界を確認します。ユーザーのハッシュ化されたパスワードを含む shadow.txt というファイルと、パスワードの基となる可能性のある単語を含む wordlist.txt ファイルを用意しました。
このハッシュファイルに対して、単語リストを使用して John the Ripper を実行してみましょう。このコマンドは、wordlist.txt からのすべての単語をパスワードとして試すように john に指示します。
john --wordlist=wordlist.txt shadow.txt
以下のような出力が表示され、攻撃が実行されていることがわかります。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:00 DONE (2023-10-27 10:30) 0g/s 1845Kp/s 1845Kc/s 1845KC/s secdec..secret
Session completed
最後のメッセージ「Session completed」に注目してください。John the Ripper は単語「secret」とその一般的なバリエーションを試しましたが、パスワードをクラックできませんでした。これは、実際のパスワードが単純な辞書単語よりも複雑であるためです。これは、より高度なテクニックの必要性を示しています。
/rules/ ディレクトリ内の組み込みルールファイルの場所を特定する
このステップでは、John the Ripper が強力なマングリングルールをどこに保存しているかを探ります。このシステムを含むほとんどの Linux システムでは、ルールは個別の /rules/ ディレクトリにはなく、メインの設定ファイルである john.conf 内で定義されています。
この設定ファイルを見つけるために、/etc/john/ ディレクトリの内容を一覧表示してみましょう。
ls -l /etc/john/
出力に john.conf ファイルが表示されるはずです。
total 148
-rw-r--r-- 1 root root 148233 Jan 20 2022 john.conf
この john.conf ファイルには、KoreLogic、best64、all など、多数の定義済みルールセットが含まれています。これらのルールセットは、辞書攻撃に適用できる個々のマングリング命令のコレクションです。次のステップでは、これらのルールセットの 1 つをより詳しく調べます。
best64.rule のような一般的なルールファイルを選択する
このステップでは、特定のルールセットを調べます。便宜上、john.conf から人気があり効果的なルールセットである best64 を抽出し、現在のプロジェクトディレクトリ (~/project) に best64.rule として保存しました。
このファイルの最初の 10 行を調べて、ルールがどのようなものか見てみましょう。head コマンドを使用します。
head -n 10 best64.rule
以下のような出力が表示されます。
#
## best64.rule, a selection of the best 64 rules from the over 14,000
## rules in all.rule.
#
## Rule syntax:
## http://www.openwall.com/john/doc/RULES.shtml
#
## The following rules are commented out because they are slow.
#
:
l
u
# で始まる行はコメントです。:、l、u のような単一文字の行は実際のルールです。
:は no-op ルールで、「単語をそのまま試す」という意味です。lは単語を小文字に変換します。uは単語を大文字に変換します。
ファイルのさらに下の方には、c (最初の文字を大文字にする) や $1 (数字の '1' を追加する) のような、より複雑なルールが見つかるでしょう。これらの単純な変換は、パスワード候補の数を劇的に増加させます。
-r フラグを使用して辞書攻撃にルールファイルを適用する
いよいよマングリングルールの威力を解き放つ時です。このステップでは、辞書攻撃を再度実行しますが、今回は best64.rule ファイルを使用するように John the Ripper に指示します。
これは、コマンドに -r フラグ(--rules の短縮形)を追加することで実行できます。これにより、john は指定されたファイル内のすべてのルールを wordlist.txt 内のすべての単語に適用するようになります。
ターミナルで次のコマンドを実行してください。
john --wordlist=wordlist.txt -r=./best64.rule shadow.txt
今回は、攻撃は非常に迅速に成功するはずです。出力は異なります。
Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Secret123 (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 10.00g/s 61538p/s 61538c/s 61538C/s Secret12..Secret123
Use the "--show" option to display all of the cracked passwords reliably
Session completed
成功しました!Secret123 (testuser) という行は、パスワードがクラックされたことを示しています。John the Ripper は、「secret」という単語に best64.rule のルールを適用することで、正しいパスワードを見つけました。
ルール適用あり・なしの攻撃結果を比較する
最終ステップでは、クラックされたパスワードを正式に表示し、ルールがもたらした違いを考察します。
前のステップの出力でパスワードが表示されましたが、指定されたハッシュファイルに対してクラックされたすべてのパスワードを表示する標準的な方法は、--show フラグを使用することです。
次のコマンドを実行してください。
john --show shadow.txt
このコマンドは、shadow.txt ファイルに対して John が正常にクラックしたすべてのパスワードを表示します。
testuser:Secret123:17119:0:99999:7:::
1 password hash cracked, 0 left
出力には testuser:Secret123 が明確に表示されています。これにより、クラックされたパスワードが確認されます。
結果を比較すると、結論は明らかです。
- ルールなし(ステップ 1): パスワードが「secret」ではなかったため、攻撃は失敗しました。
- ルールあり(ステップ 4): 攻撃は成功しました。John は「secret」という単語を取り、大文字化ルールを適用して「Secret」にし、次に数字追加ルールを適用して「Secret123」にし、これが一致しました。
これにより、マングリングルールは単なる便利な機能ではなく、現実世界のパスワードの習慣に対して辞書攻撃を効果的にするための不可欠な要素であることが示されています。
まとめ
この実験では、単純な辞書攻撃とルールで強化された攻撃との実用的な違いを体験しました。
以下の方法を学びました。
- John the Ripper を使用した基本的な辞書攻撃の実行とその限界の確認。
- マングリングルールの概念の理解と、それらがどこに保存されているかの特定。
- ルールファイルの構造の調査。
-rフラグを使用した辞書攻撃へのルールセットの適用による、その効果の劇的な向上。- クラックされたパスワードの表示と、ルールベースの攻撃の成功の確認。
単純な辞書単語を数千の潜在的なバリエーションに変換することにより、マングリングルールは、パスワード監査担当者またはセキュリティ専門家のツールキットにおける基本的なツールとなります。


