パスワードクラックの実態と防御策:オンライン・オフライン攻撃の違いとハッシュ・ソルト・MFAで守る情報資産

パスワードクラックとは — 概要と問題の重要性

パスワードクラック(password cracking)とは、認証に用いられるパスワードを不正に入手・解読する行為全般を指します。攻撃者は、オンラインサービスへの不正ログインを狙う「オンライン攻撃」や、漏洩したハッシュ値を用いてローカルで解析する「オフライン攻撃」など様々な手法でパスワードの復元を試みます。パスワードは多くのサービスで最初かつ最後の防御線なので、パスワードが破られると個人情報の流出、アカウントの乗っ取り、さらには組織内ネットワーク侵害へと発展するリスクがあります。

代表的な攻撃手法(高レベル説明)

  • ブルートフォース(総当たり):可能な文字列を順にすべて試す方法。長さと文字種により試行回数が指数的に増えるため、短く単純なパスワードほど破られやすい。
  • 辞書攻撃:一般的な単語・フレーズや流出データに基づくリスト(ワードリスト)を順に試す手法。人間が選びやすいパスワードを狙う。
  • ハイブリッド攻撃:辞書攻撃に文字の置換や付加(例: "password" → "P@ssw0rd!")などのルールを組み合わせ高速化する手法。
  • レインボーテーブル:ハッシュ値から元のパスワードを逆算するための事前計算テーブル。同じハッシュ関数・パラメータに対して高速だが、ソルトがあると無効化される。
  • クレデンシャルスタッフィング:流出した(あるサービスで使われた)ID/パスワードの組を他サービスへ適用して不正ログインを試みる手法。パスワード使い回しを突く典型。
  • キーリング/メモリ抽出:マルウェアやツール(例: メモリダンプ/資格情報抽出ツール)で平文やトークンを直接取り出す方法。

オンライン攻撃とオフライン攻撃の違い

オンライン攻撃はターゲットの認証インターフェースに直接試行を行うもので、レート制限やCAPTCHA、アカウントロックなどの防御により速度が制限されます。一方オフライン攻撃は、漏洩したハッシュやダンプデータを手元に置き、高速な並列計算(GPU等)で大量試行するため非常に効率的です。したがって、パスワードがハッシュ化されていても、適切なハッシュ方式やソルト、計算コスト設定がされていなければオフライン攻撃で容易に破られます。

パスワード保護のための技術(ハッシュ・ソルト・ストレッチング)

  • ハッシュ関数:パスワードを不可逆的に変換する。だが単純な高速ハッシュ(MD5、SHA1など)は総当たりに対して脆弱。
  • ソルト(salt):各パスワードに固有のランダム値を付加してハッシュ化し、同じパスワードでも異なるハッシュを生成することでレインボーテーブルやハッシュの再利用を防ぐ。
  • ストレッチング / 計算コスト:PBKDF2、bcrypt、scrypt、Argon2などのKDFはハッシュ計算に時間やメモリを要求し、オフライン攻撃のコストを上げる。特にArgon2はメモリ集約的設計でGPUによる高速化をある程度抑制できる。
  • ペッパー(pepper):システム側で管理する追加の秘密値。ソルトと異なり全ユーザで共通かつ別途安全に保管されるべき(例: HSM内)。

ハードウェアと解析技術の進化

GPUやFPGA、ASICといったハードウェアの進化により、特定のハッシュ関数に対する試行速度は飛躍的に向上しました。GPUは多数の並列スレッドで同一操作を高速に行えるためハッシュクラッキングで広く用いられます。これに対してメモリ消費型アルゴリズム(scrypt、Argon2)はGPUの利点を相対的に小さくする設計です。

よくある脆弱性と運用上のミス

  • パスワードを平文や可逆暗号で保存している(重大)
  • ソルトを未使用、あるいは固定で使っている
  • 高速ハッシュ(例:MD5、SHA-1)をそのまま利用している
  • パスワード使い回しの許容、あるいは推測されやすい初期パスワードのまま放置
  • 多要素認証(MFA)を導入していない
  • ログや監査が不十分で、不正ログインの早期検知ができない

防御策 — 技術的対策とユーザー対策

攻撃を防ぐには多層防御が必要です。以下は主要な推奨事項です。

  • 適切なハッシュアルゴリズムの採用:Argon2、bcrypt、scrypt、PBKDF2(十分な反復回数)などを用いる。アルゴリズムとパラメータは定期的に見直す。
  • 独自ソルトと可能ならペッパーの併用:ソルトは各ユーザごとにランダムに生成し、DBに保存。ペッパーは別管理(HSM等)。
  • 多要素認証(MFA):単一のパスワードが破られても不正アクセスを防ぐために必須に近い。
  • パスワード長の優先と複雑さよりも長さ:長いパスフレーズ(パスワードマネージャで管理)を推奨。NISTの指針では長さと禁止リストのチェックを重視する。
  • レート制限・アカウントロック・異常検知:オンライン試行を制限し、不審な試行は通知・ロックする。
  • パスワードの漏洩チェック:登録時や変更時に既知の漏洩パスワードリスト(Have I Been Pwnedなど)と照合する。
  • ログ監視とインシデント対応体制:ログを集中収集し、不正ログインの兆候を早期に検知して封鎖・調査する。
  • ユーザ教育とパスワードマネージャの推奨:使い回しを避け、パスワードマネージャを使ってユニークかつ長いパスワードを生成・保存する。

検出と対応

パスワードクラックの兆候としては、同一IPからの大量認証試行、異常な地理的ログイン、短時間での多数のパスワードリセット要求などが挙げられます。これらをSIEMやUEBAで検出し、直ちに当該アカウントの強制パスワード変更やMFA再設定、セッション切断などを行うべきです。また、流出疑いがある場合は早急にパスワードを再発行し、影響範囲を通知することが重要です。

法的・倫理的側面

パスワードクラック行為は、正当なセキュリティ評価(ペネトレーションテスト)を除き多くの国や地域で不正アクセス禁止法等に抵触します。研究目的であっても対象の許諾なしに実施することは違法となる場合があり、倫理的な配慮が不可欠です。一方で、脆弱性の開示と対応(責任ある開示)はセキュリティ改善に資する重要な行為です。

まとめ:現実的な対策と今後の見通し

パスワードクラックは攻撃手法と防御手法が常に進化する競争の場です。組織は単に現在のベストプラクティスを導入するだけでなく、定期的な評価と改善、そして多層防御の徹底(強力なハッシュ、ソルトとペッパー、MFA、監視、ユーザ教育)を行う必要があります。ユーザ側も長いパスフレーズとパスワードマネージャの利用、MFAの有効化といった対策を習慣化することが重要です。

参考文献