web-dev-qa-db-ja.com

Webサイトは2faリプレイ攻撃からどのように保護しますか?

攻撃者がユーザーとサーバー間のトラフィックを読み取ることができるシナリオを想像しています。攻撃者はユーザーのパスワードとユーザーが使用した2faコードを取得します。その後、攻撃者は2faコードの有効期限が切れる前にその情報でログインします。

これはどのように保護されていますか?

3
Daffy

再利用をブラックリストに登録できます。以前のログインの時間(またはコード)を節約し、ユーザーに新しいOTPが生成されるまで待機させるだけです。通常、TOTPトークンは30秒ごとに更新されます。

カウンターベースのOTPを使用できます。両方のデバイスがカウンターをインクリメントするため、再利用は発生しません。

3
vidarlo

2FAに対するこのMitM攻撃は関係ありません(ほとんど)。攻撃者がクライアントとサーバー間のプレーンテキスト通信を傍受する能力を持っている場合、攻撃者はセッションCookieが送信されたときにそれを盗むことができます。これによって違いが生じるのは、パスワードを変更したり2FAを無効にするときに2FAコードが必要な場合です。この場合、攻撃者はコードを再生してアカウントを乗っ取ることができます。ただし、リプレイが禁止されている場合でも、セッションCookieとパスワードを使用すると、攻撃者は追加の2FAコードを必要としないあらゆる操作に完全にアクセスできます。

他の手段(sms/emailのインターセプトなど)によってインターセプトされた2FAコードの再利用を防ぐために、サーバーはコードの1回のみの使用を許可する必要があります。これを行うには、コードを保存して送信し、使用したコードを削除します。

TOTPの場合、最後に成功した認証ウィンドウを保存し、そのウィンドウ(または前のウィンドウ)のコードが再度使用されるのを防ぐことで、リプレイ防止を行うことができます。 [〜#〜] rfc [〜#〜] は、特定の実装を指定せずに、一度だけ使用する必要があります。

最初のOTPに対して検証が正常に発行された後、検証者はOTPの2回目の試行を受け入れてはならず、OTPの1回限りの使用が保証されます。

HOTPとU2Fは、チャレンジ/レスポンス方式を使用しているため、設計によりリプレイを防止し、カウンターとU2Fを使用してHOTPを防止します。

1
AndrolGenhald

まず第一に、あらゆる場所でネットワークトラフィックを暗号化するためにTLSを使用する必要がある場合でも、ネットワークの盗聴から保護します!

パスワードの使用に対する非技術的で一般的な攻撃は shoulder-surfing です。したがって、OTPの再利用は問題ではないと主張する他の人には同意しません。

最後に成功した認証のカウンター(HOTPの場合)またはタイムステップ(TOTPの場合)を記録して、リプレイアタックを防ぎ、OTP値を1回にする必要があります。

HOTPの場合、これは必須です。しかし、すべてのTOTPバリデーターの実装がこれを実行するわけではありません。次のタイムステップ(通常は30秒以上)を待つために、小さなユーザーに不便が生じるためです。

これを実装する場合は、セキュリティの考慮事項とセキュリティ要件のセクションを RFC 4226 または RFC 6238 で注意深く読むことを強くお勧めします。特に、非同期/ドリフト状態の安全な処理の側面は重要です。これを検討する価値は間違いありません。

私自身の実装では、有効なOTP値を常に確実に消費するようにエラー処理をリファクタリングしました。これは、処理の他の部分が間違っていても(たとえば、間違ったパスワードなど)、カウンタまたはタイムステップを更新することを意味します。

0