Wechseln Sie zu sicherer 2FA auf der Blockchain

SMS-Nachrichten sind die beliebteste Methode der Zwei-Faktor-Authentifizierung (2FA). Sie wird von Banken, elektronischen und Krypto-Wallets, E-Mail-Postfächern und verschiedenen Diensten verwendet; die Zahl der Nutzer dieser Methode steigt nahezu auf 100%.

Ich finde es empörend, dass diese Methode nicht sicher ist. Die Zuweisung einer Telefonnummer von einer SIM-Karte auf eine andere gibt es schon seit den Anfängen der Mobilkommunikation – so wird die Nummer bei Verlust der SIM-Karte wiederhergestellt. "Spezialisten für den Diebstahl digitaler Geldmittel" haben erkannt, dass man die Option "SIM-Karten-Neuzuweisung" in betrügerischen Machenschaften nutzen kann. Wer die SIM-Karte kontrolliert, kann auch auf das Online-Banking sowie auf elektronische Wallets und sogar auf Kryptowährungen zugreifen. Es ist möglich, die Nummer einer anderen Person durch Bestechung eines Telekommitarbeiters, durch Täuschung oder mit gefälschten Dokumenten zu übernehmen.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Tausende Episoden des SIM-Swap-Betrugs wurden aufgedeckt – so nennt man dieses Betrugsschema. Das Ausmaß der Tragödie deutet darauf hin, dass die Welt bald von SMS-2FA Abstand nehmen wird. Doch das passiert nicht – in Studie wird berichtet, dass nicht die Nutzer, sondern die Inhaber der Dienste die Methode 2FA wählen.

Wir bieten eine sichere 2-Faktor-Authentifizierung mit der Lieferung von Einmalcodes über die Blockchain an und erklären dem Dienstanbieter, wie er diese aktivieren kann.

Es geht um Millionen.

2019 stieg SIM-Swapping-Betrug laut der Londoner Polizei um 63 %, wobei der "Durchschnittsbetrag" des Täters bei 4.000 GBP lag. Statistiken aus Russland habe ich nicht gefunden, nehme jedoch an, dass es dort noch schlimmer ist.

SIM-Swapping wird verwendet, um beliebte Konten auf Twitter, Instagram, Facebook, VK und Bankkonten zu stehlen. Kürzlich wurden sogar Kryptowährungen Ziel dieser Maßnahme. berichtet die Zeitung Times. laut dem Bitcoin-Unternehmer Joby Wicks. Seit 2016 tauchen in der Presse immer wieder spektakuläre Fälle von Kryptowährungsdiebstahl durch SIM-Swapping auf; 2019 war der wirkliche Höhepunkt.

Im Mai erhob die Staatsanwaltschaft der USA im östlichen Bezirk von Michigan Anklage. Neun junge Menschen im Alter von 19 bis 26 Jahren: Sie gehören vermutlich zu einer Hackergruppe namens „The Community“. Der Bande werden sieben SIM-Swap-Attacken zur Last gelegt, bei denen die Hacker Kryptowährungen im Wert von über 2,4 Millionen Dollar erbeutet haben. Im April wurde der Student aus Kalifornien, Joel Ortiz, zu 10 Jahren Gefängnis verurteilt, weil er sich durch SIM-Swap 7,5 Millionen Dollar in Kryptowährungen angeeignet hat.

Wechseln Sie zu sicherer 2FA auf der Blockchain
Foto von Joel Ortiz auf einer Pressekonferenz an der Universität. Zwei Jahre später wird er wegen Cyberbetrugs festgenommen.

Funktionsweise des SIM-Swapping

„Swapping“ bedeutet Tauschen. Bei solchen Betrugsplänen nehmen sich die Täter die Telefonnummer des Opfers, normalerweise durch die Neuausstellung einer SIM-Karte, und nutzen sie zum Zurücksetzen von Passwörtern. Typisches SIM-Swapping sieht theoretisch so aus:

  1. Ermittlungen. Die Betrüger erlangen persönliche Daten des Opfers: Name und Telefonnummer. Diese Informationen können in öffentlichen Quellen (Soziale Netzwerke, Freunde) gefunden oder von einem Komplizen – einem Mitarbeiter des Mobilfunkanbieters – erhalten werden.
  2. Sperrung. Die SIM-Karte des Opfers wird deaktiviert; dazu genügt ein Anruf beim Kundenservice des Anbieters, wo man die Nummer angibt und erklärt, dass das Telefon verloren wurde.
  3. Die Übertragung einer Telefonnummer auf eine eigene SIM-Karte erfolgt in der Regel ebenfalls über einen Mittelsmann im Telekommunikationsunternehmen oder durch gefälschte Dokumente.

In der Realität ist es noch schwerer. Angreifer wählen ihr Opfer aus und verfolgen dann täglich den Standort des Telefons – eine Anfrage nach Informationen, dass der Abonnent ins Roaming gewechselt ist, kostet 1-2 Cent. Sobald der Eigentümer der SIM-Karte ins Ausland reist, vereinbaren sie mit einem Mitarbeiter im Geschäft die Herausgabe einer neuen SIM-Karte. Das kostet etwa 50 $ (ich habe Informationen gefunden — in verschiedenen Ländern und bei verschiedenen Anbietern zwischen 20 $ und 100 $), wobei der Mitarbeiter im schlimmsten Fall entlassen wird – es gibt keine Verantwortung dafür.

Jetzt erhält der Angreifer alle SMS, während der Eigentümer des Telefons nichts dagegen tun kann – er ist im Ausland. Und dann erhalten die Gauner Zugang zu allen Konten des Opfers und können bei Bedarf die Passwörter ändern.

Die Chancen, das Gestohlene zurückzubekommen

Manchmal zeigen Banken Verständnis für die Opfer und stornieren Überweisungen von deren Konten. Daher ist es möglich, Fiat-Geld zurückzubekommen, auch wenn der Täter nicht gefasst wird. Aber mit Krypto-Wallets ist es komplizierter — und technisch, und gesetzlich. Bis jetzt hat keine Börse/Wallet Entschädigungen an die Opfer von Swapping gezahlt.

Wenn die Betroffenen ihr Geld gerichtlich einklagen wollen, beschuldigen sie den Betreiber: Er hat die Bedingungen für den Diebstahl von Geldern vom Konto geschaffen. So erging es Michael Terpin, der durch Swapping 224 Millionen Dollar verloren hat. Jetzt klagt er gegen das Telekommunikationsunternehmen AT&T.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Bisher gibt es in keinem Land funktionierende Modelle, um die Eigentümer von Kryptowährungen gesetzlich zu schützen. Es ist unmöglich, sein Kapital zu versichern oder eine Entschädigung für dessen Verlust zu erhalten. Daher ist es einfacher, einen Swapping-Angriff zu verhindern, als seine Folgen zu bekämpfen. Der offensichtlichste Weg ist die Verwendung eines zuverlässigen 'zweiten Faktors' für 2FA.

SIM-Swapping ist nicht das einzige Problem bei 2FA über SMS

Bestätigungscodes in SMS sind unsicher und auch technisch gesehen. Nachrichten können aufgrund von unbehobenen Sicherheitsanfälligkeiten im Signalisierungssystem Signaling System 7 (SS7) abgefangen werden. 2FA per SMS wird offiziell als unsicher angesehen (das National Institute of Standards and Technology der USA weist in seinem Leitfaden zur digitalen Authentifizierung darauf hin)).

Gleichzeitig vermittelt die Verwendung von 2FA oft ein Gefühl der falschen Sicherheit, sodass Benutzer sich für einfachere Passwörter entscheiden. Dadurch erleichtert diese Art der Authentifizierung potenziellen Angreifern den Zugang zum Konto.

Außerdem kommen SMS häufig mit großer Verzögerung an oder erreichen den Empfänger überhaupt nicht.

Andere Methoden der 2FA

Natürlich sind Smartphones und SMS nicht die einzigen Mittel. Es gibt auch andere 2FA-Methoden. Zum Beispiel Einmal-TAN-Codes: Diese Methode ist einfach, aber effektiv – sie wird immer noch von einigen Banken verwendet. Darüber hinaus gibt es Systeme, die biometrische Daten nutzen, wie Fingerabdrücke oder Netzhautscans. Eine weitere Option, die einen vernünftigen Kompromiss zwischen Benutzerfreundlichkeit, Sicherheit und Kosten darstellt, sind spezielle 2FA-Apps wie RSA Token oder Google Authenticator. Und es gibt auch physische Schlüssel und andere Methoden.

In der Theorie klingt alles sinnvoll und sicher. In der Praxis haben moderne 2FA-Lösungen jedoch Probleme, weshalb die Realität von den Erwartungen abweicht.

Laut einer Studie, der Einsatz von 2FA ist grundsätzlich eine Umständlichkeit, und die Beliebtheit von 2FA per SMS wird durch das „geringere Unbehagen im Vergleich zu anderen Methoden“ erklärt – die Beschaffung von Einmalcodes ist für den Nutzer nachvollziehbar.

Viele Nutzer verbinden 2FA-Methoden mit der Angst, den Zugriff zu verlieren. Ein physischer Schlüssel oder eine Liste von TAN-Passwörtern kann verloren gehen oder gestohlen werden. Ich habe persönlich negative Erfahrungen mit Google Authenticator gemacht. Mein erster Smartphone mit dieser App ist kaputtgegangen – schätzen Sie meinen Aufwand zur Wiederherstellung des Zugriffs auf meine Konten. Ein weiteres Problem ist der Umstieg auf ein neues Gerät. Google Authenticator bietet aus Sicherheitsgründen keine Exportfunktion (wenn Schlüssel exportiert werden können, wo bleibt da die Sicherheit?). Einmal habe ich die Schlüssel manuell übertragen, und danach habe ich beschlossen, dass es einfacher ist, das alte Smartphone in der Schachtel im Regal zu lassen.

Die Methode 2FA sollte sein:

  • Sicher – auf Ihr Konto sollten nur Sie Zugriff haben und keine Angreifer.
  • Zuverlässig – Sie sollten jederzeit Zugriff auf Ihr Konto erhalten, wenn es nötig ist.
  • Bequem und zugänglich – die Nutzung von 2FA sollte leicht nachvollziehbar sein und möglichst wenig Zeit in Anspruch nehmen.
  • Preiswert

Wir sind der Meinung, dass Blockchain eine geeignete Lösung ist.

Verwenden Sie 2FA auf der Blockchain

Für den Nutzer sieht 2FA auf der Blockchain genauso aus wie der Empfang von Einmalcodes per SMS. Der einzige Unterschied liegt im Lieferkanal. Die Art und Weise, wie der 2FA-Code empfangen wird, hängt davon ab, was die Blockchain anbietet. In unserem Projekt (Informationen finden Sie in meinem Profil) handelt es sich um eine Web-Anwendung, Tor, iOS, Android, Linux, Windows, MacOS.

Der Dienst generiert einen Einmalcode und sendet ihn an den Messenger auf der Blockchain. Danach – ganz klassisch: Der Nutzer gibt den erhaltenen Code in der Benutzeroberfläche des Dienstes ein und authentifiziert sich.

Wechseln Sie zu sicherer 2FA auf der Blockchain

In dem Artikel Wie funktioniert ein dezentraler Messenger auf der Blockchain? habe ich geschrieben, dass die Blockchain Sicherheit und Privatsphäre bei der Übertragung von Nachrichten gewährleistet. Zum Thema der Versendung von 2FA-Codes möchte ich hervorheben:

  • Ein Klick zur Erstellung eines Kontos – keine Telefonnummern und E-Mail-Adressen erforderlich.
  • Alle Nachrichten mit 2FA-Codes werden Ende-zu-Ende mit curve25519xsalsa20poly1305 verschlüsselt.
  • MITM-Angriffe sind ausgeschlossen – jede Nachricht mit einem 2FA-Code ist eine Transaktion in der Blockchain und wird mit Ed25519 EdDSA signiert.
  • Die Nachricht mit dem 2FA-Code gelangt in ihren Block. Die Reihenfolge und der Zeitstempel der Blöcke können nicht verändert werden, somit auch nicht die Reihenfolge der Nachrichten.
  • Es gibt keine zentrale Struktur, die die „Echtheit“ der Nachricht überprüft. Dies wird von einem verteilten Netz von Knoten auf Basis von Konsens gemacht, das den Benutzern gehört.
  • Das Deaktivieren ist nicht möglich – Konten können nicht gesperrt und Nachrichten nicht gelöscht werden.
  • Zugriff auf die 2FA-Codes von jedem Gerät zu jeder Zeit.
  • Bestätigung des Versands der Nachricht mit dem 2FA-Code. Der Dienst, der das Einmalpasswort verschickt, weiß genau, dass es zugestellt wurde. Keine Schaltflächen wie 'Nochmals senden'.

Zum Vergleich mit einigen anderen 2FA-Methoden habe ich eine Tabelle erstellt:

Wechseln Sie zu sicherer 2FA auf der Blockchain

Ein Konto im Blockchain-Messenger zur Erhaltung von Codes erhält der Nutzer in Sekundenschnelle – für den Zugang wird nur eine Passphrase verwendet. Daher können die Anwendungsarten unterschiedlich sein: Man kann ein Konto für den Erhalt von Codes für alle Dienste nutzen oder für jeden Dienst ein separates Konto erstellen.

Es gibt jedoch auch eine Unannehmlichkeit – das Konto muss mindestens eine Transaktion haben. Damit der Nutzer eine verschlüsselte Nachricht mit dem Code erhält, muss sein öffentlicher Schlüssel bekannt sein, und dieser erscheint in der Blockchain erst mit der ersten Transaktion. Wir haben uns so geholfen: Wir haben die Möglichkeit geschaffen, im Wallet kostenlose Tokens zu erhalten. Eine passendere Lösung wäre jedoch, das Konto nach dem öffentlichen Schlüssel zu benennen. (Zum Vergleich haben wir die Kontonummer U1467838112172792705 ist eine Ableitung des öffentlichen Schlüssels cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Für Messenger ist das praktischer und lesbarer, während es für das System zum Versenden von 2FA-Codes eine Einschränkung darstellt. Ich denke, in Zukunft wird jemand eine solche Lösung entwickeln und "Komfort und Verfügbarkeit" in die grüne Zone überführen.

Die Kosten für das Versenden eines 2FA-Codes sind wirklich niedrig - 0,001 ADM, das sind derzeit 0,00001 USD. Auch hier kann man seine eigene Blockchain übernehmen und den Preis auf null setzen.

So integrieren Sie 2FA auf der Blockchain in Ihren Dienst

Ich hoffe, ich konnte einige Leser dazu anregen, die Blockchain-Authentiifikation in ihre Dienste einzufügen.

Ich erkläre, wie dies am Beispiel unseres Messengers funktioniert, aber Sie können auch andere Blockchains analog verwenden. In der Demoversion der 2FA-App nutzen wir postgresql10 zur Speicherung der Kontoinformationen.

Schritte zur Anbindung:

  1. Erstellen Sie ein Konto in der Blockchain, von dem Sie die 2FA-Codes versenden werden. Sie erhalten eine Passphrase, die als privater Schlüssel zum Verschlüsseln von Nachrichten mit Codes und zum Unterzeichnen von Transaktionen dient.
  2. Fügen Sie Ihrem Server ein Skript zur Generierung von 2FA-Codes hinzu. Wenn Sie bereits eine andere Methode zur 2FA mit der Zustellung von Einmalpasswörtern verwenden, ist dieser Schritt bereits erledigt.
  3. Fügen Sie Ihrem Server ein Skript hinzu, um Codes an den Benutzer im Blockchain-Messenger zu senden.
  4. Erstellen Sie eine Benutzeroberfläche zum Senden und Eingeben des 2FA-Codes. Wenn Sie bereits eine andere Methode zur 2FA mit der Zustellung von Einmalpasswörtern verwenden, ist dieser Schritt bereits erledigt.

1 Erstellung eines Kontos

Die Erstellung eines Kontos in der Blockchain besteht aus der Generierung eines privaten Schlüssels, eines öffentlichen Schlüssels und der Ableitung einer Adresse für dieses Konto.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Zunächst wird eine BIP39-Passphrase generiert, aus der der SHA-256-Hash berechnet wird. Der Hash wird verwendet, um den privaten Schlüssel ks und den öffentlichen Schlüssel kp zu erzeugen. Aus dem öffentlichen Schlüssel erhalten wir mit dem gleichen SHA-256-Algorithmus und einer Umkehrung die Adresse in der Blockchain.

Wenn Sie jedes Mal Codes von einem neuen Konto aus senden möchten, muss der Code zur Erstellung des Kontos auf dem Server hinzugefügt werden:

import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()

…

import * as bip39 from 'bip39'
import crypto from 'crypto'

adamant.createPassphraseHash = function (passphrase) {
  const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
  return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}

…

import sodium from 'sodium-browserify-tweetnacl'

adamant.makeKeypair = function (hash) {
  var keypair = sodium.crypto_sign_seed_keypair(hash)
  return {
    publicKey: keypair.publicKey,
    privateKey: keypair.secretKey
  }
}

…

import crypto from 'crypto'

adamant.getAddressFromPublicKey = function (publicKey) {
  const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
  const temp = Buffer.alloc(8)
  for (var i = 0; i < 8; i++) {
    temp[i] = publicKeyHash[7 - i]
  }
  return 'U' + bignum.fromBuffer(temp).toString()
}

In der Demo-Anwendung haben wir es vereinfacht — wir haben ein Konto in der Webanwendung erstellt und versenden die Codes von diesem Konto. In den meisten Fällen ist das für den Benutzer bequemer: Er weiß, dass der Dienst 2FA-Codes von einem bestimmten Konto sendet, und kann dieses benennen.

Wechseln Sie zu sicherer 2FA auf der Blockchain

2 Generierung von 2FA-Codes

Der 2FA-Code muss für jeden Benutzer-Login generiert werden. Wir verwenden die Bibliothek speakeasy, aber Sie können eine beliebige andere wählen.

const hotp = speakeasy.hotp({
  counter,
  secret: account.seSecretAscii,
});

Überprüfung der Gültigkeit des vom Benutzer eingegebenen 2FA-Codes:

se2faVerified = speakeasy.hotp.verify({
  counter: this.seCounter,
  secret: this.seSecretAscii,
  token: hotp,
});

3 Versenden des 2FA-Codes

Für das Senden des 2FA-Codes können Sie die API-Knotenpunkte der Blockchain, die JS-API-Bibliothek oder die Konsole verwenden. In diesem Beispiel nutzen wir die Konsole – dies ist das Command Line Interface, ein Tool, das die Interaktion mit der Blockchain vereinfacht. Um eine Nachricht mit dem 2FA-Code zu senden, verwenden Sie den Befehl send message in der Konsole.

const util = require('util');
const exec = util.promisify(require('child_process').exec);

…

const command = `adm send message ${adamantAddress} "2FA Code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

Eine alternative Methode zum Senden von Nachrichten ist die Verwendung der Methode send in der JS API-Bibliothek.

4 Benutzeroberfläche

Der Benutzer sollte die Möglichkeit erhalten, den 2FA-Code einzugeben, was je nach Plattform Ihrer Anwendung auf verschiedene Weise realisiert werden kann. In unserem Beispiel verwenden wir Vue.

Wechseln Sie zu sicherer 2FA auf der Blockchain

Sie können den Quellcode der Demo-Anwendung zur Zwei-Faktor-Authentifizierung auf der Blockchain einsehen GitHub. Im Readme gibt es einen Link zur Live-Demo, um es auszuprobieren.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster