Schakel over naar veilige 2FA op de blockchain

SMS-berichten zijn de populairste manier van twee-factor authenticatie (2FA). Banken, elektronische en crypto-portemonnees, e-mailboxen en diverse diensten gebruiken het. het aantal gebruikers van de methode nadert de 100%.

Ik vind deze gang van zaken verontrustend, aangezien deze methode onveilig is. Het overzetten van een nummer van de ene SIM-kaart naar de andere begon al in de vroege mobiele era - zo wordt een nummer hersteld bij verlies van de simkaart. "Specialisten in digitale diefstal" hebben gerealiseerd: de optie 'simkaart herschrijven' kan worden gebruikt in frauduleuze schema's. Want degene die de simkaart beheert, kan ook de online bankieren, elektronische portemonnees en zelfs cryptocurrency van iemand anders beheren. En het verwerven van iemands nummer kan door omkoping van een medewerker van de telecom, via oplichting of vervalste documenten.

Schakel over naar veilige 2FA op de blockchain

Duizenden gevallen van SIM-swapping zijn onthuld - zo werd deze fraude genoemd. De schaal van de ramp geeft aan dat de wereld binnenkort 2FA via SMS zal afschaffen. Maar dat is nog niet gebeurd - in studie vertellen ze dat de methode 2FA niet door gebruikers, maar door de eigenaren van de diensten wordt gekozen.

Wij bieden een veilige 2FA-methode aan waarbij eenmalige codes via de blockchain worden bezorgd, en we zullen uitleggen hoe de servicemanager deze kan inschakelen.

het gaat om miljoenen

In 2019 nam SIM-swapping fraude met 63% toe volgens de London police, en de 'gemiddelde rekening' voor de fraudeur was 4.000 GBP. Ik kon geen statistieken in Rusland vinden, maar vermoed dat ze nog slechter zijn.

SIM-swapping wordt gebruikt voor de diefstal van populaire accounts op Twitter, Instagram, Facebook, VK, bankrekeningen, en onlangs is het zelfs doorgedrongen tot cryptocurrency - meldt de Times volgens bitcoin-ondernemer Joby Wicks. Hoofdverhalen over de diefstal van cryptocurrency door middel van SIM-swapping verschijnen sinds 2016 in de pers; 2019 werd het echte hoogtepunt.

In mei heeft het openbaar ministerie van de Verenigde Staten in het oostelijke district van Michigan aanklachten ingediend tegen negen jonge mensen van 19 tot 26 jaar: zij zouden deel uitmaken van een hackersbende genaamd "The Community". De bende wordt aangeklaagd voor zeven swapping-aanvallen, waarbij de hackers cryptocurrency ter waarde van meer dan $2,4 miljoen hebben gestolen. En in april kreeg de student uit Californië, Joel Ortiz, 10 jaar gevangenisstraf voor SIM-swapping; zijn buit bedroeg $7,5 miljoen in cryptocurrency.

Schakel over naar veilige 2FA op de blockchain
Foto van Joel Ortiz op een persconferentie aan de universiteit. Twee jaar later zal hij worden gearresteerd voor cyberfraude.

De werking van SIM-swapping

"Swapping" betekent ruilen. Bij alle dergelijke schema's toe-eigenen criminelen zich het telefoonnummer van het slachtoffer, meestal door een nieuwe SIM-kaart uit te geven, en gebruiken het om wachtwoorden te resetten. Typische SIM-swapping ziet er in theorie als volgt uit:

  1. Informatie verzamelen. Fraudeurs achterhalen persoonlijke gegevens van het slachtoffer: naam en telefoon. Deze kunnen worden gevonden in openbare bronnen (sociale netwerken, vrienden) of verkregen van een medeplichtige — een medewerker van de telecomoperator.
  2. Blokkering. De SIM-kaart van het slachtoffer wordt gedeactiveerd; dit kan eenvoudig door de klantenservice van de provider te bellen, het nummer te vermelden en te zeggen dat de telefoon verloren is.
  3. Overname, nummer overzetten naar hun eigen SIM-kaart. Dit gebeurt meestal ook via een medeplichtige in het telecombedrijf of door middel van vervalste documenten.

In het echte leven is het nog ernstiger. Kwaadwillenden kiezen een slachtoffer en volgen dagelijks de locatie van de telefoon — één verzoek om informatie over de roamingstatus van de abonnee kost 1-2 cent. Zodra de eigenaar van de SIM-kaart naar het buitenland is gegaan, regelen zij met een manager in de telefoniewinkel de uitgifte van een nieuwe SIM-kaart. Dit kost ongeveer $50 (ik heb informatie gevonden — in verschillende landen en bij verschillende operators van $20 tot $100), waarbij de manager in het slechtste geval wordt ontslagen — er is hier geen aansprakelijkheid.

Nu zullen alle SMS'jes door de criminelen worden ontvangen, en kan de eigenaar van de telefoon hier niets tegen doen — hij is in het buitenland. Vervolgens krijgen de schurken toegang tot alle accounts van het slachtoffer en veranderen ze desgewenst de wachtwoorden.

Kansen om het gestolen goed terug te krijgen

Banken doen soms een stap in de richting van de slachtoffers en roepen overboekingen van hun rekeningen terug. Daarom lukt het soms om fiatgeld terug te krijgen, zelfs als de dader niet is gevonden. Maar het is moeilijker met cryptocurrency-portemonnees — zowel technisch, als wettelijk. Tot nu toe heeft geen enkele beurs/portemonnee schadevergoeding aan de slachtoffers van swapping uitbetaald.

Als slachtoffers hun geld in de rechtbank willen opeisen, beschuldigen ze de provider: deze heeft de omstandigheden geschapen voor de diefstal van geld van de rekening. Precis zoals Michael Terpin, die $224 miljoen verloor door swapping. Hij is momenteel in conflict met het telecombedrijf AT&T.

Schakel over naar veilige 2FA op de blockchain

Tot nu toe heeft geen enkele staat werkbare schema's om eigenaars van cryptocurrencies wettelijk te beschermen. Het is niet mogelijk om je kapitaal te verzekeren of een compensatie voor verlies te krijgen. Daarom is het eenvoudiger om een swap-aanval te voorkomen dan om de gevolgen ervan te bestrijden. De meest voor de hand liggende manier is om een betrouwbaardere 'tweede factor' te gebruiken voor 2FA.

SIM-swapping is niet het enige probleem met 2FA via sms

Bevestigingscodes via sms zijn technisch gezien onveilig. Berichten kunnen worden onderschept vanwege onoplosbare kwetsbaarheden in het Signaling System 7 (SS7). 2FA via sms wordt officieel erkend als onveilig (het Amerikaanse National Institute of Standards and Technology zegt dit in zijn Handleiding voor digitale authenticatie).

Bovendien wekt het hebben van 2FA vaak een gevoel van schijnveiligheid bij de gebruiker, waardoor hij een eenvoudiger wachtwoord kiest. Daarom maakt deze authenticatie het voor kwaadwillenden niet moeilijker, maar gemakkelijker om toegang te krijgen tot het account.

Bovendien komen sms-berichten vaak met grote vertraging of komen ze helemaal niet aan.

Andere manieren van 2FA

Natuurlijk is de wereld van 2FA niet beperkt tot smartphones en sms. Er zijn andere manieren van 2FA. Bijvoorbeeld eenmalige TAN-codes: een primitieve maar effectieve methode die nog steeds in sommige banken wordt gebruikt. Er zijn systemen die gebruikmaken van biometrische gegevens: vingerafdrukken, scans van het netvlies. Een andere optie, die een redelijke compromissen lijkt qua gebruiksgemak, betrouwbaarheid en prijs, zijn speciale apps voor 2FA: RSA Token, Google Authenticator. En er zijn ook fysieke sleutels en andere methoden.

In theorie lijkt alles logisch en betrouwbaar. Maar in de praktijk hebben moderne 2FA-oplossingen hun problemen, en daardoor wijkt de realiteit af van de verwachtingen.

Volgens onderzoek, het gebruik van 2FA is in principe een ongemak, en de populariteit van 2FA via sms wordt verklaard door het 'minder ongemak in vergelijking met andere methoden' — het verkrijgen van eenmalige codes is begrijpelijk voor de gebruiker.

Veel 2FA-methoden worden door gebruikers geassocieerd met de angst dat de toegang verloren gaat. Een fysieke sleutel of een lijst met TAN-wachtwoorden kan verloren gaan of gestolen worden. Persoonlijk heb ik slechte ervaringen met Google Authenticator. Mijn eerste smartphone met deze app is kapot gegaan — waardeer mijn moeite om toegang tot accounts te herstellen. Een ander probleem is de overstap naar een nieuw apparaat. Google Authenticator heeft geen exportfunctie uit beveiligingsoverwegingen (als sleutels geëxporteerd kunnen worden, waar is dan de beveiliging?). Een keer heb ik sleutels handmatig overgezet, maar toen besloot ik dat het makkelijker was om de oude smartphone in de doos op de plank te laten liggen.

De 2FA-methode moet zijn:

  • Veilig — alleen u moet toegang tot het account kunnen krijgen, niet kwaadwillenden.
  • Betrouwbaar — u krijgt altijd toegang tot het account wanneer dat nodig is.
  • Gebruiksvriendelijk en toegankelijk — het gebruik van 2FA is duidelijk en kost minimaal tijd.
  • Goedkoop.

Wij geloven dat blockchain een geschikte oplossing is.

Gebruik 2FA op de blockchain.

Voor de gebruiker lijkt 2FA op de blockchain hetzelfde als het ontvangen van een eenmalige code via SMS. Het enige verschil is het afleverkanaal. De manier waarop de 2FA-code wordt ontvangen, hangt af van wat de blockchain aanbiedt. In ons project (informatie staat in mijn profiel) is dit een webapplicatie, Tor, iOS, Android, Linux, Windows, MacOS.

De service genereert een eenmalige code en stuurt deze naar een messenger op de blockchain. Vervolgens — volgens de klassieke methode: de gebruiker voert de ontvangen code in de interface van de service in en logt in.

Schakel over naar veilige 2FA op de blockchain

In dit artikel Hoe een gedecentraliseerde messenger op de blockchain werkt Ik heb geschreven dat de blockchain de veiligheid en privacy van berichtoverdracht garandeert. Wat betreft het verzenden van 2FA-codes wil ik benadrukken:

  • Één klik om een account aan te maken — geen telefoons en e-mailadressen.
  • Alle berichten met 2FA-codes worden end-to-end versleuteld met curve25519xsalsa20poly1305.
  • MITM-aanvallen zijn uitgesloten — elk bericht met een 2FA-code is een transactie op de blockchain en wordt ondertekend met Ed25519 EdDSA.
  • Een bericht met een 2FA-code komt in zijn eigen blok. De volgorde en timestamp van de blokken kunnen niet worden gewijzigd, en dus ook de volgorde van de berichten niet.
  • Er is geen centrale structuur die de 'betrouwbaarheid' van een bericht controleert. Dit gebeurt via het gedistribueerde knooppuntensysteem op basis van consensus, en dat behoort toe aan de gebruikers.
  • Onmogelijk om uit te schakelen — accounts kunnen niet worden geblokkeerd en berichten kunnen niet worden verwijderd.
  • Toegang tot 2FA-codes vanaf elk apparaat op elk moment.
  • Bevestiging van de aflevering van het bericht met de 2FA-code. De service die het eenmalige wachtwoord verzendt, weet zeker dat het is afgeleverd. Geen knoppen 'Nogmaals verzenden'.

Ter vergelijking met enkele andere 2FA-methoden heb ik een tabel samengesteld:

Schakel over naar veilige 2FA op de blockchain

Een account in een blockchain-messenger voor het ontvangen van codes wordt in een seconde verkregen — voor de toegang wordt alleen een wachtwoordzin gebruikt. Daarom kunnen de toepassingen verschillend zijn: je kunt één account gebruiken om codes voor alle diensten te ontvangen, of je kunt voor elke dienst een afzonderlijk account aanmaken.

Er is ook een ongemak — het account moet ten minste één transactie hebben. Om een versleuteld bericht met een code te ontvangen, moet je zijn publieke sleutel weten, en deze verschijnt pas in de blockchain na de eerste transactie. We hebben het zo opgelost: we bieden gratis tokens aan in de wallet. Een beter oplossing zou echter zijn om het account een publieke sleutel te geven. (Ter vergelijking, ons accountnummer U1467838112172792705 is een afgeleide van de publieke sleutel cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Voor de messenger is dit handiger en leesbaarder, maar voor het systeem voor het verzenden van 2FA-codes is dit een beperking). Ik denk dat iemand in de toekomst een oplossing zal ontwikkelen en "Gebruiksgemak en toegankelijkheid" in de groene zone zal vertalen.

De prijs voor het verzenden van een 2FA-code is echt laag — 0.001 ADM, momenteel is dat 0.00001 USD. Je kunt ook je eigen blockchain opzetten en de prijs op nul stellen.

Hoe 2FA op de blockchain aan uw dienst te koppelen

Ik hoop dat ik enkele lezers heb kunnen interesseren om blockchain-authenticatie aan hun diensten toe te voegen.

Ik zal uitleggen hoe dit te doen aan de hand van ons messenger-voorbeeld, en analogie kunt u ook een andere blockchain gebruiken. In de demo-applicatie voor 2FA gebruiken we postgresql10 voor het opslaan van accountinformatie.

Stappen voor verbinding:

  1. Maak een account in de blockchain aan waarmee je de 2FA-codes gaat verzenden. Je ontvangt een wachtwoordzin die fungeert als de privé-sleutel voor het versleutelen van berichten met codes en voor het ondertekenen van transacties.
  2. Voeg een script voor het genereren van 2FA-codes toe aan je server. Als je al een andere methode voor 2FA met eenmalige wachtwoorden gebruikt, is deze stap al voltooid.
  3. Voeg een script voor het verzenden van codes naar de gebruiker in de blockchain-messenger toe aan je server.
  4. Maak een gebruikersinterface voor het verzenden en invoeren van de 2FA-code. Als je al een andere methode voor 2FA met eenmalige wachtwoorden gebruikt, is deze stap al voltooid.

1 Account aanmaken

Een account aanmaken in de blockchain houdt in dat er een privésleutel, een publieke sleutel en daarop gebaseerde accountadres worden gegenereerd.

Schakel over naar veilige 2FA op de blockchain

Eerst wordt een BIP39-passphrase gegenereerd, waarvan de SHA-256-hash wordt berekend. Deze hash wordt gebruikt voor het genereren van de privésleutel ks en de publieke sleutel kp. Uit de publieke sleutel verkrijgen we met dezelfde SHA-256 en inversie het adres in de blockchain.

Als je elke keer 2FA-codes vanaf een nieuw account wilt verzenden, moet de code voor het aanmaken van een account op de server worden toegevoegd:

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 de demo-app hebben we het vereenvoudigd — we hebben één account in de webapp gemaakt en verzenden de codes daarvandaan. In de meeste gevallen is dit handiger voor de gebruiker: hij weet dat de service 2FA-codes vanaf een specifiek account verstuurt en kan het een naam geven.

Schakel over naar veilige 2FA op de blockchain

2 Genereren van 2FA-codes

De 2FA-code moet voor elke gebruikersinlog worden gegenereerd. We gebruiken de bibliotheek speakeasy, maar je kunt elke andere kiezen.

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

Validatie van de 2FA-code die door de gebruiker is ingevoerd:

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

3 Versturen van de 2FA-code

Om de 2FA-code te versturen kun je de blockchain node API, de JS API-bibliotheek of de console gebruiken. In dit voorbeeld gebruiken we de console — dit is de Command Line Interface, een tool die de interactie met de blockchain vereenvoudigt. Om een bericht met de 2FA-code te verzenden, moet je het commando gebruiken send message van de console.

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);

Een alternatieve manier om berichten te verzenden is het gebruik van de methode send in de JS API-bibliotheek.

4 Gebruikersinterface

De gebruiker moet de mogelijkheid krijgen om de 2FA-code in te voeren, wat op verschillende manieren kan worden gedaan, afhankelijk van het platform van uw applicatie. In ons voorbeeld is dit Vue.

Schakel over naar veilige 2FA op de blockchain

De broncode van de demo-applicatie voor tweefactorauthenticatie op de blockchain is te bekijken op GitHub. In de Readme is een link naar de Live demo, zodat u het kunt uitproberen.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster