はじめに
現在、LPIC-1の取得に向けて勉強中のインフラエンジニアです。
教科書で /etc/passwd や /etc/shadow の仕組みを学びましたが、「実際にパスワードって破れるものなのか?」が気になり、WSL2上のKali Linuxを使って自分のアカウントに対して辞書攻撃(クラッキング)を検証してみました。
実験環境
- OS: Kali GNU/Linux Rolling (WSL2環境)
- CPU: 16スレッド
- 使用ツール: John the Ripper (john)
- 使用辞書: rockyou.txt
やってみたこと
まず、/etc/shadow から自分のユーザー(kali)のハッシュ値を抽出してファイルに保存しました。
その後、Kaliに標準搭載されている定番の辞書ファイル rockyou.txt を使って、john コマンドで総当たり攻撃を仕掛けようとしました。
コマンド:
john --wordlist=/usr/share/wordlists/rockyou.txt ~/hash.txt
詰まったポイントとトラブルシューティング(WTFの連続)
教科書通りにいかず、何度も壁にぶつかったのでその軌跡を記録しておきます。
1. 伝説の辞書 rockyou.txt が見つからない
解凍コマンドを打ったところ、以下のエラーが発生。
「gzip: /usr/share/wordlists/rockyou.txt.gz: No such file or directory」
【対策】 最新の最小構成Kaliだったため、デフォルトで入っていませんでした。
sudo apt update && sudo apt install -y wordlists
を実行してパッケージを丸ごと導入して解決しました。
2. john コマンド自体が入っていない
辞書を解凍して実行しようとしたら、今度はコマンドがないと怒られました。
「Command 'john' not found, but can be installed with: sudo apt install john」
【対策】 素直に sudo apt install -y john を実行してツールを召喚しました。
3. 魔のエラー No password hashes loaded
これで動くと思いきや、ここからが本当の沼でした。
「Using default input encoding: UTF-8
No password hashes loaded (see FAQ)」
【試行錯誤:自作ダミーハッシュの失敗】
「ハッシュの形式がおかしいのか?」と思い、手動でSHA-512形式のダミーファイルを作って読ませてみましたが、文字数の不整合やチェックサムのエラーで何度も同じエラーで弾かれました(ここで心の中でWTF!と叫びました)。
【原因と本当の対策】
今の最新Linuxが採用している暗号化アルゴリズム「yescrypt ($y$)」は非常に強固なため、ツール(john)が自動認識できずにスルーしていたのが原因でした。
以下のように、明示的に「--format=crypt」オプションを味方につけてあげることで、ようやくハッシュを認識させることに成功しました!
実行コマンド:
john --format=crypt --wordlist=/usr/share/wordlists/rockyou.txt ~/hash.txt
実験結果と考察
無事にツールが起動し、16コア(スレッド)フル駆動で解析が始まりました!
ステータス(スペースキーを押して確認)のログは以下の通りです。
出力ログ:
0g 0:00:00:52 0.15% (ETA: 23:31:43) 499.9c/s
進捗は52秒時点でわずか 0.15%、終了予定(ETA)は夜遅くという結果に。
CPUを16スレッドもぶん回しているにもかかわらず、1秒間に約500回(499.9c/s)しか計算できていません。
考察:yescryptの凄さ
大昔の暗号(MD5など)であれば1秒間に数億回の総当たりが可能ですが、最新の yescrypt は「わざと1回の計算に多大な負荷をかける(ストレッチング)」設計になっています。
そのため、世界標準の辞書攻撃に対しても「時間をかけさせ、簡単には突破させない」という完璧な防御壁が機能していることをリアルに体感できました。自分のPCの防御力、合格です!
まとめ
教科書の文字を暗記するだけで終わらせず、実際にツールを動かしてエラーを乗り越えたことで、最新の暗号化技術の重要性やLinuxのセキュリティの裏側を深く理解することができました。
無事にCPUのフル駆動が見られて大満足です。今後も実機での検証を大切にしながら、LPICの勉強を進めていきます!