Shikata Ga Nai

Private? There is no such things.

多要素認証の脆弱性とは?

Hello there, ('ω')ノ

✅ 多要素認証(MFA)とは?

多要素認証(MFA: Multi-Factor Authentication)とは、本人確認の際に2つ以上の異なる認証要素を組み合わせて使うセキュリティ対策です。

認証要素の種類 説明
知識(知っているもの) パスワード、秘密の質問 ユーザが記憶している情報
所有(持っているもの) スマホ、トークン、メール受信端末 ユーザが物理的に持つもの
生体(本人そのもの) 指紋、顔、声 体の一部や動作の特徴

たとえば、「パスワード + スマホに届く認証コード」は最も一般的な2要素認証の組み合わせです。


✅ なぜ2要素認証は効果的なのか?

パスワード(知識)は漏洩することがありますが、「スマホに届くコード(所有)」まで同時に盗むのは難しいため、攻撃成功率が大幅に下がるとされています。

しかし…


⚠️ 2FAにも脆弱性がある!

多要素認証も、実装が甘いと簡単に破られることがあります。以下で、代表的な脆弱性を解説します。


🔓 脆弱性①:「同じ要素を2回確認」しているだけ

例:メールでの2段階認証

「パスワード + メールに送られた認証コード」という方式は、一見2FAに見えますが、実際はどちらも“知識要素”に依存しています。

なぜなら、メールにアクセスするためにも「メールアドレス+そのパスワード」が必要だからです。 → 同じ要素(知識)を2回確認しているだけで、本当の意味での多要素認証にはなっていません。


🔓 脆弱性②:SMSコードの盗聴・乗っ取り

SMS認証で起こり得る問題:

  • 通信が暗号化されていないため、コードが盗聴される可能性
  • SIMスワップ攻撃(電話番号の奪取)により、攻撃者がコードを受け取ってしまう

SIMスワップとは?

攻撃者が被害者になりすまして携帯会社に連絡し、自分のSIMカードに電話番号を移してしまう詐欺行為。 → この場合、すべてのSMSが攻撃者の手に渡る。


🔓 脆弱性③:2FAのバイパス(ステップ間の不備)

よくある実装ミス:

  1. ログインフォームでパスワードを入力
  2. 次の画面で2FAコードを入力

→ 実はこの時点で、ユーザは「ログイン済みの状態」になっていることがある!

このような場合、2FA入力画面をスキップして、内部ページに直接アクセスできてしまうケースが存在します。

診断時のチェックポイント:

  • パスワード入力後に「ログイン成功」のクッキーやセッションIDが発行されていないか
  • 2FA未完了でも、マイページや設定ページにアクセスできるかどうか
  • ブラウザでステップ1とステップ2のセッションの違いを比較する

✅ 安全な2FAの条件とは?

実装上のポイント 説明
各ステップの状態管理を厳格に ステップ1だけでセッションを確立しない
所有要素は「受信」ではなく「生成」型を推奨 Google Authenticatorのようなアプリの利用
同じ要素の重複確認を避ける パスワードとメールアカウントはどちらも“知識要素”
攻撃者が再利用できないコード設計 ワンタイム、有効期限付き、使い回し禁止など

🔧 多要素認証の診断ポイントまとめ

チェック項目 内容
ステップ1だけでログイン状態になっていないか? セッションやクッキーを確認
コードの送信手段は安全か? SMSよりアプリ方式が安全
同じ要素を2回使っていないか? メール認証がその例
トークンを複数回使えるか? ワンタイムか、再利用できるか確認

🔚 まとめ

多要素認証は非常に効果的な防御策ですが、「ちゃんと実装されている」ことが前提です。

  • SMSによる2FAは安全とは限らない
  • ステップの切り替わり部分に脆弱性が潜みやすい
  • “2つの異なる要素”が本当に使われているかを確認する必要がある

Best regards, (^^ゞ