特定のサービスを利用する際の認証の目的は、サービスにアクセスするユーザーの本人確認を行い、なりすましを防止することです。認証は、質問に対する答えをユーザーに求めることによって実行されます。質問の内容は次のとおりです。
2FAを回避する方法を説明する前に、2FAの動作の大まかな流れを見てみましょう。
ここでは、Webアプリケーションの管理者ジェームズがMyWorkAppというアプリケーションを管理し、従業員のアリスがMyWorkAppを使用すると想定したシナリオを考察します。
図1:通常のアプリケーションフロー
大まかな流れを見てきたところで、ソーシャルエンジニアリングなどの方法でアリスのパスワードを入手した攻撃者ボブの登場です。ボブはアリスの携帯電話で生成された2FAコードを持っていないので、本来ならアリスのアカウントを乗っ取ることはできないはずですが、
MyWorkAppには構成ミスがあり、複数のデバイスで2FAを構成できるようになっています。つまりアリスは、同じコード生成ツールを実行する2台以上の携帯電話またはデバイスで2FAを設定できます。ボブはこの情報を使用して、次の方法でアプリケーションに対するエクスプロイト攻撃を仕掛けます。
攻撃者がユーザーのOTPにアクセスする
ボブがアリスのOTP(ワンタイムパスワード)生成ツールを制御できた理由
2FAは同じユーザーと結合されているため、同じQRコードが表示される可能性があります。
2FA設定のセキュアな実装では、トークンを生成するためのQRコードなどの重要情報の応答を開始する前に、ユーザーの本人確認を行う必要があります。2FAを初めて設定するユーザーは、生成されたトークンの代わりに使用できるバックアップ・コードを受け取ることをお勧めします。バックアップコードは、ユーザーがトークンの生成に使用されたデバイスにアクセスできなくなった場合のバックアップとして機能します。アプリケーションが有効なバックアップコードを検出すると、以前に設定したデバイスを無効にして新しいデバイスを登録するように求めるメッセージが表示されることがあります。また、認識されないログインが発生したときに、ユーザーに通知が送信されます。システムまたはユーザープロファイルの状態を変更するユーザー操作はサーバー側で制御し、妥当性を検査する必要があります。
このようなリスクと脅威について詳しく理解したい方は、アプリケーションセキュリティの脅威およびリスク評価 を参照ください。