it-swarm.com.de

Verhindern Sie OTP-Missbrauch im Anmeldefluss der App

Dies mag nach einer offenen Frage klingen, aber ich möchte mein Risiko eingehen und verstehen, ob der Rest der Community dieses Problem auf irgendeine Weise behandelt.

Angenommen, es gibt eine App, mit der Benutzer sich mit ihrer Telefonnummer anmelden können.

App-Plattform

  1. Android
  2. iOS

App Flow

  1. benutzer öffnet die App
  2. ihm wird ein Benutzer mit der Anmelde-/Registrierungsschaltfläche angezeigt
  3. jetzt möchte er sich anmelden, da er ein neuer Benutzer ist. Also klickt er auf die Registrierungsschaltfläche und wird nach seiner Telefonnummer gefragt
  4. wenn er seine Telefonnummer übermittelt, erhält er ein OTP per SMS. Angenommen, die App ruft tatsächlich das /register API, die die SMS auslöst.

Risiko : Für jede ausgehende SMS fallen jetzt finanzielle Kosten an.

Proaktive/reaktive Minderungsmaßnahmen

  1. Die API ist ratenbegrenzt (basierend auf der Telefonnummer)
  2. Es gibt eine ordnungsgemäße Überwachung und Alarmierung. Wenn es also überhaupt Missbrauchsfälle gibt, können extreme Maßnahmen wie IP-Blockierung auftreten.

Probleme

  1. Wenn ein Gegner (möglicherweise ein Konkurrent) die API mit unterschiedlichen Telefonnummern trifft, kann die Ratenbegrenzungslogik leicht umgangen werden.
  2. IP-Blockierung ist möglicherweise nicht immer möglich. Angenommen, der Gegner befindet sich hinter einem NAT-Netzwerk. Alle echten Benutzer hinter dem Netzwerk werden ebenfalls daran gehindert, sich erfolgreich anzumelden.
  3. Wenn der Gegner die IPs ändert (möglicherweise mit Tor), wird auch der oben erwähnte Abschwächungsschritt 2 umgangen.
  4. Captcha ist keine Lösung, da es UX zerstört, insbesondere beim Umgang mit mobilen Apps.
  5. Ein Benutzername-Passwort anstelle von OTP für die Registrierungsüberprüfung ist keine Option, da die App eine verifizierte Telefonnummer benötigt, um zu funktionieren.
  6. Die Signatur pro Gerät kann auch als Faktor für die Ratenbegrenzung verwendet werden. Fakt ist jedoch, dass auch die Signatur vom Gerät über HTTP (s) erfolgt. Daher auch leicht austauschbar. Diese Option ist also ebenfalls ausgeschlossen.

Wie kann man sich in einer solchen Situation vor dem Risiko schützen oder vielleicht planen und darauf vorbereitet sein, wenn es überhaupt nicht sortiert werden kann?

11
qre0ct

E-Mail-Bestätigung zuerst

Wenn Ihre UX dies zulässt, können Sie vom Benutzer verlangen, dass er zuerst ein Konto basierend auf seiner E-Mail-Adresse erstellt. Sobald die Adresse überprüft wurde, können Sie das Hinzufügen einer Telefonnummer zulassen und diese dann auf Ihre übliche Weise überprüfen.

Ein legitimer Benutzer hat wahrscheinlich bereits eine E-Mail-Adresse und daher bleibt die Einrichtung einfach. Ein Angreifer müsste jedoch für jeden Versuch ein neues funktionales Postfach (oder einen neuen Alias) erstellen. Indem Sie die Telefonüberprüfung nach E-Mail-Domain einschränken, stellen Sie sicher, dass diese nicht einfach automatisiert werden kann. Kostenlose Mail-Dienste verhindern im Allgemeinen bereits die automatische Kontoerstellung, und Sie können solche, die dies nicht tun, auf die schwarze Liste setzen.

Verwenden Sie unsichtbare CAPTCHAs

Es gibt CAPTCHAs, für die keine Benutzerinteraktion erforderlich ist, die Sie auch während des Onboarding verwenden können, zum Beispiel: https://developers.google.com/recaptcha/docs/invisible

5
Jens Ehrich

Leider gibt es keine solide Möglichkeit, die Telefonnummer ohne OTP zu erhalten. Sie können jedoch die Geräte-ID () des Telefons Android) abrufen. Dadurch erhalten Sie eine gültige IMEI-Nummer. Überprüfen Sie diese Nummer zunächst bei einem Server von Ihnen und prüfen Sie, ob etwas faul daran ist .

Sie können andere Daten auch anonym verwenden. Wenn Ihre Anwendung beispielsweise die Berechtigungen READ_CONTACTS oder READ_PROFILE verwendet, können Sie die Daten dort verwenden, um gefälschte Benutzer zu identifizieren. (z. B. hat das Telefon nur Starter-Apps, dieselbe IMEI, sendet aber weiterhin unterschiedliche SMS-Nummern.)

1
user176142
  1. Dann müssen Sie die Rate nach IP begrenzen (siehe 2).
  2. Dann müssen Sie ein sinnvolles Limit auswählen (z. B. wie groß ist die Wahrscheinlichkeit, dass Sie innerhalb einer Stunde 10 Registrierungen von derselben IP erhalten? Oder vielleicht 1000 pro Tag?). Nehmen Sie eine angemessene Anzahl pro Intervall, fügen Sie ein wenig mehr hinzu, um auf der sicheren Seite zu sein (aber halten Sie auch die Dinge innerhalb des Budgets)
  3. Sie können TOR/Proxy/VPN-IPs blockieren. Wenn Sie das nicht möchten, können Sie solche IPs mit unterschiedlichen (strengeren) Grenzwerten begrenzen (siehe auch 4).
  4. Es gibt nicht aufdringliche (oder weniger nervige) Captchas als die augenwässernden, verschwommenen, welligen Texte. Ebenfalls; Sie konnten Captchas nur auf TOR/Proxy/VPN-IPs anzeigen
  5. - -
  6. Sie können Kundendaten nicht vertrauen. Vertraue niemals Kundendaten.

Es sind Datenbanken mit bekannten (offenen) Proxy- und TOR-Exitknoten verfügbar. Einige sind zuverlässiger als andere, kosten aber auch etwas (obwohl kostenlose Datenbanken verfügbar sind).

Ebenfalls; Je nach Lautstärke gibt es zwangsläufig einige falsch positive/negative Ergebnisse. Stellen Sie sich damit ab, dass Sie dies nie zu 100% richtig machen werden. Bieten Sie legitimen Benutzern daher die Möglichkeit, Hilfe/Registrierung auf andere Weise zu erhalten, falls sie als illegitim oder ungerechtfertigt eingestuft werden. Bieten Sie auch eine einfache Möglichkeit für Sie/jeden, der die Website/den Dienst verwaltet, IPs (oder Telefonnummern) zu einer Blacklist (oder von dieser) hinzuzufügen (und zu entfernen), die NICHT markiert wird, aber nicht markiert werden sollte.

1
RobIII

Es gibt ein paar Dinge, die ich tun würde, um die Risikominderung zu erhöhen.

  1. Stellen Sie sich das Captcha nicht als immer an oder immer aus vor. Aktivieren Sie es basierend auf der Anzahl der Versuche pro IP-Adresse. Betrachten Sie es als eine Art Grauliste. Eine Beeinflussung der UX ist wahrscheinlich besser als eine vollständige Blockierung. Sie können dann weitere Blöcke in Betracht ziehen (z. B. vollständige IP-Blacklisting), die auf fehlgeschlagenen Captcha/höheren Raten basieren.

  2. Unabhängig davon, welche Abhilfemaßnahmen Sie getroffen haben, gibt es Problemumgehungen oder Angriffsmodi, die Sie von dedizierten Angreifern nicht berücksichtigt haben. Sie benötigen also etwas, um diese Möglichkeit zu schützen/zu warnen. Sie sollten in Betracht ziehen, ein Ratenlimit für ausgehende SMS) festzulegen, um nur eine bestimmte Menge an Kosten pro Zeiteinheit zuzulassen, oder potenziell Mitarbeiter zu warnen, auf einen solchen Angriff zu reagieren, wenn die Kosten einen bestimmten Schwellenwert erreichen .

    Dies würde Sie weiter vor Fehlern in der Software selbst schützen, die Schleifen, Duplikate usw. erzeugen und große Mengen fehlerhafter SMS -Nachrichten) senden könnten, anstatt nur böswillige, absichtliche Angriffe.

1
Steve Sether