油断から生まれる脆弱性
多くのシステム管理者は、SSHポートの変更、ファイアウォールの構築、Fail2Banの厳重な設定に全力を注ぎがちです。しかし、現実には最も危険な脆弱性はソフトウェアではなく、ユーザーのパスワード設定の習慣に潜んでいることがよくあります。実際に10台以上のサーバーを監査した際、「P@ssword123」や「Congty@2024」といった文字列が非常に多く見受けられました。これらは一見複雑に見えますが、ハッカーが使用するワードリスト(辞書)の格好の標的となります。
たとえsudo権限のない一般ユーザーであっても、一つのアカウントが乗っ取られれば、攻撃者はそれを踏み台にして権限昇格(Privilege Escalation)を試みることができます。そのため、定期的にパスワードの強度を主体的にチェックすることは必須の任務です。これを最も効率的に行うために、John the RipperとHashcatという強力なツールの組み合わせを活用しましょう。
Linuxにおけるパスワード保存の仕組み
Linuxはパスワードをプレーンテキスト(平文)で保存することはありません。代わりに、システムはパスワードをハッシュ化し、rootのみがアクセス権を持つ /etc/shadow ファイルに保存します。標準的なハッシュ行は以下のような構造をしています:
username:$6$rounds=40960$saltstring$hashedpassword:19000:0:99999:7:::
最初の2つのドルの記号($)に囲まれた数字に注目して、アルゴリズムを特定する必要があります:
- $1$: MD5(古く、クラックされやすい)
- $2a$: Blowfish(OpenBSDでよく見られる)
- $5$: SHA-256
- $6$: SHA-512(現在のUbuntuやCentOSの標準)
私たちの目標は、これらのハッシュ値を抽出し、計算能力を駆使して元のパスワードを逆算(解読)することです。
ステップ1:監査データの準備
John the Ripper (JtR) は、/etc/passwd と /etc/shadow の情報を組み合わせた独自のファイル形式を必要とします。このデータを準備するために unshadow ツールを使用します。
# John the Ripperのインストール
sudo apt update && sudo apt install john -y
# passwdとshadowファイルを1つに統合する
sudo unshadow /etc/passwd /etc/shadow > myhashes.txt
sudo chmod 600 myhashes.txt
重要な注意点: myhashes.txt ファイルにはシステムの全パスワードハッシュが含まれています。セキュリティリスクを避けるため、監査が完了したら直ちにこのファイルを削除してください。
John the Ripperの使用:シンプルかつスマート
John the Ripperは、ハッシュタイプを自動認識する機能や、非常にスマートな「Single Crack」モードを備えているため、迅速な監査には最適な選択肢です。
1. Single Crackモード
このモードは、ユーザー名自体に基づいたバリエーションを試行します。驚くべきことに、多くのユーザーがいまだにログイン名と同じ、あるいは酷似したパスワードを設定しています。
john --single myhashes.txt
2. ワードリスト攻撃
これは最も成功率の高い方法です。実際に流出した1,430万件以上のパスワードを含む有名な rockyou.txt を使用できます。
john --wordlist=/usr/share/wordlists/rockyou.txt myhashes.txt
クラックに成功したパスワードの一覧を確認するには、以下のコマンドを実行します:
john --show myhashes.txt
Hashcat:GPUハードウェアのパワーを活用する
John the RipperがCPUに強いのに対し、HashcatはGPU(グラフィックカード)の活用において王者の地位にあります。RTX 3080のようなカードは、複雑なアルゴリズムを処理する際にCPUよりも数百倍速く、毎秒数十億個のハッシュを試行できます。
数千人のユーザーを抱える大規模なシステム監査プロジェクトでは、時間を節約するためにHashcatを優先的に使用します。まず、ハッシュタイプに対応する「Mode」を特定する必要があります:
- SHA-512 (Unix):
-m 1800 - MD5:
-m 500 - SHA-256 (Unix):
-m 7400
SHA-512ハッシュファイルでHashcatを実行する方法:
# Hashcatに必要なハッシュ部分のみを抽出
cut -d: -f2 myhashes.txt > justhashes.txt
# ワードリストを使用してクラックを開始 (-a 0 モード)
hashcat -m 1800 -a 0 justhashes.txt /path/to/rockyou.txt
サポートツールと安全なパスワードの作成方法
コマンドを入力せずに、ログと照合するために特定の文字列がSHA-256でハッシュ化されたときにどう見えるかを確認したいことがあります。そのような場合、私は ToolCraftのハッシュジェネレーター を使います。このツールは完全にブラウザ上(クライアントサイド)で動作するため、データがサーバーに送信されることはなく、安全性が確保されています。
脆弱なアカウントを発見した際は、ただ注意を促すだけでなく、パスワードジェネレーター を使ってランダムな文字列を作成するようユーザーを指導しましょう。大文字、数字、特殊文字を含む12文字以上のパスワードであれば、ワードリスト攻撃を無力化できます。
システム設定による脆弱なパスワードの防止
監査はあくまで評価のステップです。根本的に解決するには、最初から厳格なパスワードポリシーを適用する必要があります。Ubuntu/Debianでは、libpam-pwquality モジュールがそのための最適なツールです。
# モジュールのインストール
sudo apt install libpam-pwquality -y
# /etc/pam.d/common-password での設定
# pam_pwquality.so の行を以下のように編集:
password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
上記の設定により、パスワードは最低12文字以上、かつ「英小文字、英大文字、数字、特殊文字」の4グループすべてを含むことが強制されます。特に enforce_for_root パラメータは、管理者(root)であってもこのルールに従うことを保証します。
まとめ
セキュリティは固定された状態ではなく、継続的な見直しのプロセスです。「ハッカー」の立場に立って自システムを攻撃してみることで、自動化ツールが見落としがちな隙間を見つけることができます。実際の攻撃を受けるのを待つのではなく、今日から監査を始めましょう。
開発やセキュリティに役立つ軽量なツールが必要な場合は、ToolCraft を覗いてみてください。日々の管理業務を最適化するための200以上の無料ツールが揃っています。

