Gehen Sie zu sicherer 2FA auf der Blockchain über

SMS-Nachrichten sind die beliebteste Methode der Zwei-Faktor-Authentifizierung (2FA). Es wird von Banken, elektronischen und Krypto-Wallets, Postfächern und allen Arten von Diensten genutzt; die Anzahl der Methodenanwender nähert sich 100 %.

Ich bin über dieses Szenario empört, denn diese Methode ist unsicher. Die Neuzuweisung einer Nummer von einer SIM-Karte zu einer anderen begann zu Beginn des Mobilfunkzeitalters – auf diese Weise wird die Nummer wiederhergestellt, wenn eine SIM-Karte verloren geht. „Spezialisten für digitalen Gelddiebstahl“ erkannten, dass die Option „SIM-Karte umschreiben“ in betrügerischen Machenschaften genutzt werden kann. Denn wer die SIM-Karte kontrolliert, kann das Online-Banking, die elektronischen Geldbörsen und sogar die Kryptowährung anderer Leute kontrollieren. Und Sie können die Nummer einer anderen Person durch Bestechung eines Telekommunikationsmitarbeiters, durch Täuschung oder durch gefälschte Dokumente in Besitz nehmen.

Gehen Sie zu sicherer 2FA auf der Blockchain über

Tausende Fälle von SIM-Tausch, wie dieser Betrugsplan genannt wird, wurden aufgedeckt. Das Ausmaß der Katastrophe deutet darauf hin, dass die Welt bald auf 2FA per SMS verzichten wird. Aber das passiert nicht - in Forschung Sie sagen, dass es nicht die Benutzer sind, die sich für die 2FA-Methode entscheiden, sondern die Eigentümer der Dienste.

Wir schlagen die Verwendung der sicheren 2FA-Methode mit Übermittlung von Einmalcodes über die Blockchain vor und erklären Ihnen, wie der Dienstinhaber diese anbinden kann.

Die Zahl geht in die Millionen

Nach Angaben der Londoner Polizei stieg der SIM-Swap-Betrug im Jahr 2019 um 63 %, und die „durchschnittliche Rechnung“ eines Angreifers betrug 4,000 GBP. In Russland habe ich keine Statistiken gefunden, aber ich gehe davon aus, dass sie noch schlimmer sind.

SIM-Swapping wird genutzt, um beliebte Twitter-, Instagram-, Facebook-, VK-Konten, Bankkonten und neuerdings sogar Kryptowährungen zu stehlen – Das berichtet die Zeitung „Times“. laut Bitcoin-Unternehmer Joby Weeks. Seit 2016 tauchen in der Presse aufsehenerregende Fälle von Kryptowährungsdiebstahl durch SIM-Tausch auf; 2019 war ein echter Höhepunkt.

Im Mai meldete die US-Staatsanwaltschaft für den Eastern District of Michigan erhob Anklage neun junge Menschen im Alter zwischen 19 und 26 Jahren: Sie sollen Teil einer Hackerbande namens „The Community“ sein. Der Bande werden sieben Swap-Angriffe vorgeworfen, bei denen die Hacker Kryptowährungen im Wert von über 2,4 Millionen US-Dollar gestohlen haben. Und im April wurde der kalifornische Student Joel Ortiz wegen SIM-Tausch zu zehn Jahren Gefängnis verurteilt; seine Produktion belief sich auf 10 Millionen US-Dollar in Kryptowährungen.

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

So funktioniert der SIM-Tausch

„Swaping“ bedeutet Tausch. Bei all diesen Machenschaften übernehmen Kriminelle die Telefonnummer des Opfers, meist durch Neuausstellung einer SIM-Karte, und verwenden sie zum Zurücksetzen des Passworts. Ein typischer SIM-Tausch sieht theoretisch so aus:

  1. Nachrichtendienst. Betrüger finden die persönlichen Daten des Opfers heraus: Name und Telefonnummer. Sie können in offenen Quellen (soziale Netzwerke, Freunde) gefunden oder von einem Komplizen – einem Mitarbeiter eines Mobilfunkbetreibers – erhalten werden.
  2. Blockierung. Die SIM-Karte des Opfers ist deaktiviert; Rufen Sie dazu einfach den technischen Support des Anbieters an, geben Sie die Nummer an und sagen Sie, dass das Telefon verloren gegangen ist.
  3. Erfassen Sie die Nummer und übertragen Sie sie auf Ihre SIM-Karte. Meist geschieht dies auch durch einen Komplizen des Telekommunikationsunternehmens oder durch Urkundenfälschung.

Im wirklichen Leben sind die Dinge noch schwerwiegender. Angreifer wählen ein Opfer aus und verfolgen dann täglich den Standort des Telefons – eine Anfrage, um Informationen darüber zu erhalten, dass der Teilnehmer auf Roaming umgestellt hat, kostet 1-2 Cent. Sobald der Besitzer der SIM-Karte ins Ausland gegangen ist, verhandelt er mit dem Manager im Kommunikationsgeschäft über die Ausstellung einer neuen SIM-Karte. Es kostet etwa 50 $ (ich habe Informationen gefunden – in verschiedenen Ländern und bei verschiedenen Betreibern zwischen 20 und 100 $), und im schlimmsten Fall wird der Manager entlassen – dafür gibt es keine Verantwortung.

Jetzt werden alle SMS von Angreifern empfangen, und der Besitzer des Telefons kann nichts dagegen tun – er befindet sich im Ausland. Und dann verschaffen sich die Bösewichte Zugriff auf alle Konten des Opfers und ändern auf Wunsch die Passwörter.

Chancen auf Rückgabe gestohlenen Eigentums

Manchmal kommen Banken den Opfern auf halbem Weg entgegen und ziehen Überweisungen von ihren Konten ab. Daher ist es möglich, Fiat-Geld zurückzugeben, auch wenn der Täter nicht gefunden wird. Aber bei Kryptowährungs-Wallets ist alles komplizierter – und technischund gesetzgeberisch. Bisher hat keine einzige Börse/Wallet den Tauschopfern eine Entschädigung gezahlt.

Wenn Opfer ihr Geld vor Gericht verteidigen wollen, geben sie dem Betreiber die Schuld: Er habe die Voraussetzungen für den Diebstahl von Geld vom Konto geschaffen. Genau das habe ich getan Michael Turpin, der durch den Tausch 224 Millionen US-Dollar verloren hat, verklagt nun das Telekommunikationsunternehmen AT&T.

Gehen Sie zu sicherer 2FA auf der Blockchain über

Bisher verfügt kein Staat über funktionierende Systeme zum rechtlichen Schutz von Kryptowährungseigentümern. Es ist nicht möglich, Ihr Kapital zu versichern oder eine Entschädigung für den Verlust zu erhalten. Daher ist es einfacher, einen Swap-Angriff zu verhindern, als mit seinen Folgen umzugehen. Der naheliegendste Weg ist die Verwendung eines zuverlässigeren „zweiten Faktors“ für 2FA.

Der SIM-Tausch ist nicht das einzige Problem bei 2FA per SMS

Auch aus technischer Sicht sind Bestätigungscodes in SMS unsicher. Nachrichten können aufgrund ungepatchter Schwachstellen im Signaling System 7 (SS7) abgefangen werden. 2FA über SMS gilt offiziell als unsicher (das US-amerikanische National Institute of Standards and Technology sagt dies in seinem Leitfaden zur digitalen Authentifizierung).

Gleichzeitig vermittelt das Vorhandensein von 2FA dem Benutzer oft ein Gefühl falscher Sicherheit und er wählt ein einfacheres Passwort. Daher erschwert eine solche Authentifizierung den Zugriff auf das Konto für einen Angreifer nicht, sondern erleichtert ihn.

Und oft kommen SMS mit großer Verzögerung oder gar nicht an.

Andere 2FA-Methoden

Bei Smartphones und SMS ist das Licht natürlich nicht gebündelt. Es gibt andere Methoden von 2FA. Zum Beispiel Einmal-TAN-Codes: eine primitive Methode, die aber funktioniert – sie wird in einigen Banken immer noch verwendet. Es gibt Systeme, die biometrische Daten verwenden: Fingerabdrücke, Netzhautscans. Eine weitere Option, die hinsichtlich Komfort, Zuverlässigkeit und Preis ein vernünftiger Kompromiss zu sein scheint, sind spezielle Anwendungen für 2FA: RSA-Token, Google Authenticator. Es gibt auch physische Schlüssel und andere Methoden.

Theoretisch sieht alles logisch und zuverlässig aus. Doch in der Praxis gibt es bei modernen 2FA-Lösungen Probleme, die dazu führen, dass die Realität von den Erwartungen abweicht.

Согласно Exploration, die Verwendung von 2FA ist grundsätzlich eine Unannehmlichkeit, und die Beliebtheit von 2FA per SMS erklärt sich aus „weniger Unannehmlichkeiten im Vergleich zu anderen Methoden“ – der Empfang von Einmalcodes ist für den Benutzer verständlich.

Viele 2FA-Methoden verbinden Nutzer mit der Angst, dass der Zugriff verloren geht. Der physische Schlüssel oder die Liste der TAN-Passwörter kann verloren gehen oder gestohlen werden. Ich persönlich habe schlechte Erfahrungen mit Google Authenticator gemacht. Mein erstes Smartphone mit dieser Anwendung ist kaputt gegangen. Vielen Dank für meine Bemühungen, den Zugriff auf meine Konten wiederherzustellen. Ein weiteres Problem ist der Wechsel auf ein neues Gerät. Google Authenticator verfügt aus Sicherheitsgründen nicht über eine Exportoption (wenn Schlüssel exportiert werden können, welche Sicherheit gibt es dann?). Einmal habe ich die Schlüssel manuell getragen, und dann habe ich beschlossen, dass es einfacher ist, das alte Smartphone in einer Box im Regal zu lassen.

Die 2FA-Methode sollte sein:

  • Sicher – nur Sie und keine Angreifer sollten Zugriff auf Ihr Konto erhalten
  • Zuverlässig – Sie erhalten jederzeit Zugriff auf Ihr Konto
  • Bequem und zugänglich – die Verwendung von 2FA ist klar und nimmt nur minimale Zeit in Anspruch
  • Billig

Wir glauben, dass Blockchain die richtige Lösung ist.

Verwenden Sie 2FA auf der Blockchain

Für den Benutzer sieht 2FA auf der Blockchain genauso aus wie der Empfang von Einmalcodes per SMS. Der einzige Unterschied besteht im Lieferkanal. Die Methode zum Erhalten eines 2FA-Codes hängt davon ab, was die Blockchain bietet. In unserem Projekt (Informationen finden Sie in meinem Profil) ist dies eine Webanwendung, Tor, iOS, Android, Linux, Windows, MacOS.

Der Dienst generiert einen Einmalcode und sendet ihn an den Messenger auf der Blockchain. Dann folgen Sie den Klassikern: Der Benutzer gibt den erhaltenen Code in die Serviceschnittstelle ein und meldet sich an.

Gehen Sie zu sicherer 2FA auf der Blockchain über

Artikel Wie funktioniert ein dezentraler Messenger auf der Blockchain? Ich habe geschrieben, dass Blockchain die Sicherheit und Privatsphäre der Nachrichtenübertragung gewährleistet. Was das Versenden von 2FA-Codes betrifft, möchte ich Folgendes hervorheben:

  • Ein Klick genügt, um ein Konto zu erstellen – ohne Telefon oder E-Mail.
  • Alle Nachrichten mit 2FA-Codes werden End-to-End-curve25519xsalsa20poly1305 verschlüsselt.
  • MITM-Angriff ist ausgeschlossen – jede Nachricht mit dem 2FA-Code ist eine Transaktion auf der Blockchain und wird von Ed25519 EdDSA signiert.
  • Die Nachricht mit dem 2FA-Code landet in einem eigenen Block. Die Reihenfolge und der Zeitstempel der Blöcke können nicht korrigiert werden, und damit auch die Reihenfolge der Nachrichten.
  • Es gibt keine zentrale Struktur, die die „Authentizität“ einer Nachricht prüft. Dies erfolgt durch ein verteiltes System von Knoten, die auf Konsens basieren und im Besitz der Benutzer sind.
  • Kann nicht deaktiviert werden – Konten können nicht gesperrt und Nachrichten nicht gelöscht werden.
  • Greifen Sie jederzeit von jedem Gerät aus auf 2FA-Codes zu.
  • Bestätigung der Nachrichtenzustellung mit 2FA-Code. Der Dienst, der das Einmalpasswort versendet, weiß mit Sicherheit, dass es zugestellt wurde. Keine „Erneut senden“-Schaltflächen.

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

Gehen Sie zu sicherer 2FA auf der Blockchain über

Der Benutzer erhält ein Konto im Blockchain-Messenger, um in Sekundenschnelle Codes zu erhalten – für die Anmeldung wird lediglich eine Passphrase verwendet. Daher können die Antragsmethoden unterschiedlich sein: Sie können ein Konto verwenden, um Codes für alle Dienste zu erhalten, oder Sie können für jeden Dienst ein separates Konto erstellen.

Es gibt auch eine Unannehmlichkeit: Auf dem Konto muss mindestens eine Transaktion vorhanden sein. Damit der Benutzer eine verschlüsselte Nachricht mit einem Code erhält, muss er seinen öffentlichen Schlüssel kennen und dieser erscheint erst bei der ersten Transaktion in der Blockchain. So haben wir es geschafft, da rauszukommen: Wir haben ihnen die Möglichkeit gegeben, kostenlose Token in ihrem Wallet zu erhalten. Eine bessere Lösung besteht jedoch darin, dem Konto einen öffentlichen Schlüssel zu geben. (Zum Vergleich haben wir eine Kontonummer U1467838112172792705 ist eine Ableitung des öffentlichen Schlüssels cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Für den Messenger ist das bequemer und lesbarer, für das System zum Versenden von 2FA-Codes stellt es jedoch eine Einschränkung dar. Ich denke, dass in Zukunft jemand eine solche Entscheidung treffen und „Bequemlichkeit und Zugänglichkeit“ in den grünen Bereich verschieben wird.

Der Preis für das Versenden eines 2FA-Codes ist wirklich niedrig – 0.001 ADM, jetzt beträgt er 0.00001 USD. Auch hier können Sie Ihre Blockchain erhöhen und den Preis auf Null setzen.

So verbinden Sie 2FA auf der Blockchain mit Ihrem Dienst

Ich hoffe, dass es mir gelungen ist, ein paar Leser dafür zu interessieren, ihre Dienste um Blockchain-Autorisierung zu erweitern.

Wie das geht, erkläre ich dir am Beispiel unseres Messengers, analog dazu kannst du auch eine andere Blockchain nutzen. In der 2FA-Demo-App verwenden wir postgresql10 zum Speichern von Kontoinformationen.

Verbindungsschritte:

  1. Erstellen Sie ein Konto auf der Blockchain, von dem aus Sie 2FA-Codes senden. Sie erhalten eine Passphrase, die als privater Schlüssel zum Verschlüsseln von Nachrichten mit Codes und zum Signieren von Transaktionen verwendet wird.
  2. Fügen Sie Ihrem Server ein Skript hinzu, um 2FA-Codes zu generieren. Wenn Sie bereits eine andere 2FA-Methode mit Einmalpasswortübermittlung nutzen, haben Sie diesen Schritt bereits abgeschlossen.
  3. Fügen Sie Ihrem Server ein Skript hinzu, um Codes im Blockchain-Messenger an den Benutzer zu senden.
  4. Erstellen Sie eine Benutzeroberfläche zum Senden und Eingeben eines 2FA-Codes. Wenn Sie bereits eine andere 2FA-Methode mit Einmalpasswortübermittlung nutzen, haben Sie diesen Schritt bereits abgeschlossen.

1 Kontoerstellung

Das Erstellen eines Kontos in der Blockchain bedeutet das Generieren eines privaten Schlüssels, eines öffentlichen Schlüssels und einer abgeleiteten Kontoadresse.

Gehen Sie zu sicherer 2FA auf der Blockchain über

Zunächst wird die BIP39-Passphrase generiert und daraus der SHA-256-Hash berechnet. Der Hash wird zur Generierung des privaten Schlüssels ks und des öffentlichen Schlüssels kp verwendet. Aus dem öffentlichen Schlüssel erhalten wir unter Verwendung desselben SHA-256 mit Inversion die Adresse in der Blockchain.

Wenn Sie jedes Mal 2FA-Codes von einem neuen Konto senden möchten, muss der Kontoerstellungscode zum 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 Demoanwendung haben wir es vereinfacht: Wir haben ein Konto in der Webanwendung erstellt und von dort aus Codes gesendet. In den meisten Fällen ist dies auch für den Nutzer bequemer: Er weiß, dass der Dienst 2FA-Codes von einem bestimmten Konto sendet und kann dieses benennen.

Gehen Sie zu sicherer 2FA auf der Blockchain über

2 Generieren von 2FA-Codes

Für jede Benutzeranmeldung muss ein 2FA-Code generiert werden. Wir nutzen die Bibliothek sprechen einfach, aber Sie können auch eine andere auswä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 Senden des 2FA-Codes

Um einen 2FA-Code einzureichen, können Sie die Blockchain-Knoten-API, die JS-API-Bibliothek oder die Konsole verwenden. In diesem Beispiel verwenden wir die Konsole – das ist die Befehlszeilenschnittstelle, ein Dienstprogramm, das die Interaktion mit der Blockchain vereinfacht. Um eine Nachricht mit einem 2FA-Code zu senden, müssen Sie den Befehl verwenden send message Konsolen.

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 Möglichkeit zum Senden von Nachrichten ist die Verwendung der Methode send in der JS-API-Bibliothek.

4 Benutzeroberfläche

Dem Benutzer muss die Möglichkeit gegeben werden, einen 2FA-Code einzugeben. Dies kann je nach Anwendungsplattform auf unterschiedliche Weise erfolgen. In unserem Beispiel ist das Vue.

Gehen Sie zu sicherer 2FA auf der Blockchain über

Der Quellcode für die Demoanwendung zur Blockchain-Zwei-Faktor-Authentifizierung kann unter eingesehen werden GitHub. In der Readme-Datei gibt es einen Link zu einer Live-Demo zum Ausprobieren.

Source: habr.com

Kommentar hinzufügen