web-dev-qa-db-ja.com

アプリのサインアップフローでOTPの悪用を防ぐ

これは自由回答の質問のように聞こえるかもしれませんが、私のチャンスを利用して、コミュニティの他のメンバーがこの問題を処理する方法があるかどうかを理解したいと思います。

ユーザーが自分の電話番号を使用してサインアップできるアプリがあるとします。

アプリプラットフォーム

  1. Android
  2. iOS

アプリフロー

  1. ユーザーがアプリを開く
  2. ログイン/登録ボタンのユーザーが表示されます
  3. 彼は新しいユーザーなので、今すぐサインアップしたいと考えています。それで彼は登録ボタンをクリックし、彼は彼の電話番号を尋ねられます
  4. 電話番号を送信すると、SMSを介してOTPを受信します。アプリが実際にSMSをトリガーする/register AP​​Iを呼び出すとします。

リスク:これで、すべてのアウトバウンドSMSに関連する財務コストが発生します。

予防的/対処的緩和策

  1. APIはレート制限されています(電話番号に基づく)
  2. 適切な監視と警告が行われている。そのため、悪用例がまったくある場合、IPブロッキングなどの極端な対策が発生する可能性があります。

問題

  1. 攻撃者(潜在的に競合他社)が異なる電話番号でAPIにアクセスした場合、レート制限ロジックは簡単にバイパスされます。
  2. IPブロッキングは常に実行できるとは限りません。たとえば、攻撃者がNAT処理されたネットワークの背後にいる場合、ネットワークの背後にあるすべての正規ユーザーも、サインアップの成功を妨げられます。
  3. 攻撃者がIPを変更した場合(Torを使用している可能性があります)、上記の軽減手順2もバイパスされます。
  4. Captchaは、特にモバイルアプリを扱う場合にUXを破壊するため、ソリューションではありません。
  5. アプリが機能するには確認済みの電話番号が必要であるため、登録の確認にOTPではなくユーザー名のパスワードを使用することはできません。
  6. デバイスごとのシグネチャは、レート制限の要因として使用することもできますが、実際には、HTTP(s)を介してデバイスからも送信されます。したがって、簡単に変更することもできます。したがって、このオプションも除外されます。

そのような状況で、リスクからどのように保護するか、またはそれを計画し、準備することができますか?

11
qre0ct

最初にメール確認

UXで許可されている場合は、まずユーザーにメールアドレスに基づいてアカウントを作成するように要求できます。アドレスが確認されたら、電話番号の追加を許可してから、通常の方法で確認できます。

正当なユーザーはすでにメールアドレスを持っている可能性が高いため、設定は簡単です。ただし、攻撃者は試行ごとに新しい機能的なメールボックス(またはエイリアス)を作成する必要があります。レート/マックスでメールドメインによる電話の確認を制限することで、簡単に自動化できないことを確認できます。無料のメールサービスは、通常、アカウントの自動作成をすでに阻止しています。阻止しないものはブラックリストに登録できます。

非表示のCAPTCHAを使用する

たとえば、オンボーディング中に同様に使用できるユーザー操作を必要としないCAPTCHAがあります。 https://developers.google.com/recaptcha/docs/invisible

5
Jens Ehrich

残念ながら、OTPなしで電話番号を取得する確実な方法はありません。ただし、Android電話のdeviceID()を取得できます。これにより、有効なIMEI番号が得られます。最初に、この番号をサーバーのサーバーで確認し、何か怪しいものがないか確認してください。

他のデータを匿名で使用することもできます。たとえば、アプリケーションでREAD_CONTACTSまたはREAD_PROFILE権限を使用している場合、そこのデータを使用して、偽のユーザーを特定できます。 (たとえば、電話にはスターターアプリしかなく、IMEIは同じですが、異なるSMS番号を送信し続けます。)

1
user176142
  1. 次に、IPでレート制限する必要があります(2を参照)
  2. 次に、意味のある制限を選択する必要があります(たとえば、1時間以内に同じIPから10の登録を取得する可能性はどのくらいですか?または1日あたり1000か?)。間隔ごとに妥当な数を取り、安全のために少し追加します(ただし、予算内に収めます)。
  3. TOR /プロキシ/ VPN IPをブロックできます。それを望まない場合は、そのようなIPを異なる(より厳密な)制限でレート制限できます(4も参照)。
  4. non-intrusive (またはそれほど煩わしくない)captchaは、目を潤すぼやけた波状のテキストよりも多くあります。また; CAPTCHAはTOR /プロキシ/ VPN IPにのみ表示できます
  5. -
  6. クライアントのデータを信頼することはできません。クライアントのデータを信頼しないでください。

既知の(オープン)プロキシおよびTOR出口ノードのデータベースが利用可能です。他よりも信頼できるものもありますが、コストもかかります(無料のデータベースが利用可能ですが)。

また;ボリュームによっては、いくつかの偽陽性/陰性があります。これが100%正確になることは決してないという事実を理解してください。したがって、正当なユーザーが違法または不正なレート制限として識別された場合に、正規のユーザーが別の方法でヘルプ/登録を取得する方法を提供します。また、Webサイト/サービスを管理している誰もが簡単に、IP(または電話番号)をブラックリストに追加(および削除)して、フラグを立てないがフラグを立てる必要がある簡単な方法を提供します。

1
RobIII

リスク軽減を高めるために私が行うことは2つあります。

  1. Captchaを常にオンまたは常にオフであると考えないでください。 IPアドレスごとの試行率に基づいてオンにします。グレイリストのようなものと考えてください。 UXに影響を与えることは、完全にブロックすることよりも優れている可能性があります。次に、失敗したキャプチャ/より高いレートに基づいて、さらにブロック(IPのブラックリストの合計など)を検討できます。

  2. どのような緩和策を講じても、専用の攻撃者が考慮しなかった回避策や攻撃モードが発生するため、この可能性を防ぐ/警告するための対策が必要です。発信にレート制限を設定することを検討する必要がありますSMS単位時間あたりの一定量のコストのみを許可するか、コストが特定のしきい値に達したときにスタッフにそのような攻撃に対応するように警告する可能性があります。

    これは、ループや複製などを生成し、悪意のある意図的な攻撃だけでなく、誤った大量のSMSメッセージを送信する可能性がある、ソフトウェア自体のバグからさらに保護します。

1
Steve Sether