Ga over tot het beveiligen van 2FA op de blockchain

SMS-berichten zijn de meest populaire methode van tweefactorauthenticatie (2FA). Het wordt gebruikt door banken, elektronische en crypto-portefeuilles, mailboxen en allerlei soorten diensten; het aantal methodegebruikers nadert de 100%.

Ik ben verontwaardigd over dit scenario, omdat deze methode onveilig is. Het opnieuw toewijzen van een nummer van de ene simkaart aan de andere begon aan het begin van het mobiele tijdperk - zo wordt het nummer hersteld als een simkaart verloren gaat. “Specialisten voor digitale gelddiefstal” realiseerden zich dat de optie “simkaart herschrijven” kan worden gebruikt bij frauduleuze plannen. Degene die de simkaart beheert, kan immers het online bankieren, de elektronische portemonnee en zelfs de cryptocurrency van anderen controleren. En je kunt het nummer van iemand anders in bezit nemen door een telecommedewerker om te kopen, door middel van bedrog of vervalste documenten.

Ga over tot het beveiligen van 2FA op de blockchain

Duizenden afleveringen van SIM-swapping zijn ontdekt, zoals dit fraudeplan wordt genoemd. De omvang van de ramp doet vermoeden dat de wereld binnenkort 2FA via sms zal verlaten. Maar dit gebeurt niet - in studie ze zeggen dat het niet de gebruikers zijn die voor de 2FA-methode kiezen, maar de service-eigenaren.

Wij stellen voor om de veilige 2FA-methode te gebruiken met levering van eenmalige codes via de blockchain, en we zullen u vertellen hoe de service-eigenaar deze kan aansluiten.

De telling loopt in de miljoenen

In 2019 is de SIM-swapfraude volgens de Londense politie met 63% toegenomen, en de “gemiddelde rekening” van een aanvaller bedroeg 4,000 GBP. Ik heb geen statistieken gevonden in Rusland, maar ik neem aan dat ze nog erger zijn.

SIM-swapping wordt gebruikt om populaire Twitter-, Instagram-, Facebook-, VK-accounts, bankrekeningen en recentelijk zelfs cryptocurrencies te stelen - Dat meldt de krant Times volgens Bitcoin-ondernemer Joby Weeks. Sinds 2016 duiken spraakmakende gevallen van diefstal van cryptocurrency met behulp van SIM-swapping in de pers op; 2019 kende een echte piek.

In mei heeft het Amerikaanse Openbaar Ministerie voor het oostelijke district van Michigan aanklacht ingediend negen jonge mensen tussen de 19 en 26 jaar: zij zouden deel uitmaken van een hackersbende genaamd “The Community”. De bende wordt beschuldigd van zeven swap-aanvallen, waarbij de hackers cryptocurrency ter waarde van ruim 2,4 miljoen dollar hebben gestolen. En in april kreeg de Californische student Joel Ortiz 10 jaar gevangenisstraf wegens het ruilen van simkaarten; zijn productie bedroeg $ 7.5 miljoen aan cryptocurrencies.

Ga over tot het beveiligen van 2FA op de blockchain
Foto van Joel Ortiz op een persconferentie van de universiteit. Twee jaar later wordt hij gearresteerd wegens cyberfraude.

Hoe SIM-swap werkt

‘Ruilen’ betekent ruilen. Bij al dit soort plannen nemen criminelen het telefoonnummer van het slachtoffer over, meestal door het opnieuw uitgeven van een simkaart, en gebruiken deze om het wachtwoord opnieuw in te stellen. Een typische SIM-swap ziet er in theorie als volgt uit:

  1. Inlichtingen Dienst. Fraudeurs achterhalen de persoonlijke gegevens van het slachtoffer: naam en telefoonnummer. Ze zijn te vinden in open bronnen (sociale netwerken, vrienden) of ontvangen van een medeplichtige - een medewerker van een mobiele operator.
  2. Blokkeren. De simkaart van het slachtoffer is gedeactiveerd; Om dit te doen, hoeft u alleen maar de technische ondersteuning van de provider te bellen, het nummer op te geven en te zeggen dat de telefoon verloren is gegaan.
  3. Vastleggen, het nummer overbrengen naar uw simkaart. Meestal gebeurt dit ook via een medeplichtige bij het telecombedrijf of via vervalsing van documenten.

In het echte leven zijn de zaken zelfs nog ernstiger. Aanvallers selecteren een slachtoffer en volgen vervolgens dagelijks de locatie van de telefoon - één verzoek om informatie te ontvangen dat de abonnee is overgestapt op roaming kost 1-2 cent. Zodra de eigenaar van de simkaart naar het buitenland is gegaan, onderhandelen ze met de manager van de communicatiewinkel over de uitgifte van een nieuwe simkaart. Het kost ongeveer $ 50 (ik heb informatie gevonden - in verschillende landen en bij verschillende operators van $ 20 tot $ 100), en in het ergste geval wordt de manager ontslagen - hier is geen verantwoordelijkheid voor.

Nu worden alle sms-berichten door aanvallers ontvangen en kan de eigenaar van de telefoon er niets aan doen - hij bevindt zich in het buitenland. En dan krijgen de schurken toegang tot alle accounts van het slachtoffer en veranderen ze desgewenst wachtwoorden.

Kans op teruggave van gestolen eigendommen

Banken komen slachtoffers soms halverwege tegemoet en halen overboekingen van hun rekeningen af. Daarom is het mogelijk om fiatgeld terug te geven, zelfs als de crimineel niet wordt gevonden. Maar met cryptocurrency-portefeuilles is alles ingewikkelder - en technisch gezienen wetgevend. Tot nu toe heeft geen enkele beurs/portemonnee compensatie betaald aan slachtoffers van het ruilen.

Als slachtoffers hun geld voor de rechter willen verdedigen, geven ze de schuld aan de exploitant: hij heeft de voorwaarden geschapen voor de diefstal van geld van de rekening. Dat is precies wat ik deed Michaël Turpin, die door het ruilen $224 miljoen verloor, klaagt nu het telecommunicatiebedrijf AT&T aan.

Ga over tot het beveiligen van 2FA op de blockchain

Tot nu toe heeft geen enkele staat werkende regelingen om eigenaren van cryptocurrency juridisch te beschermen. Het is onmogelijk om uw kapitaal te verzekeren of een vergoeding te krijgen voor het verlies ervan. Daarom is het voorkomen van een swap-aanval eenvoudiger dan het omgaan met de gevolgen ervan. De meest voor de hand liggende manier is om een ​​betrouwbaardere ‘tweede factor’ voor 2FA te gebruiken.

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

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

Tegelijkertijd geeft de aanwezigheid van 2FA de gebruiker vaak een gevoel van schijnveiligheid en kiest hij voor een eenvoudiger wachtwoord. Een dergelijke authenticatie maakt het dus niet moeilijk, maar maakt het voor een aanvaller gemakkelijker om toegang te krijgen tot het account.

En vaak arriveren sms-berichten met een lange vertraging of komen ze helemaal niet aan.

Andere 2FA-methoden

Natuurlijk kwam het licht niet samen op smartphones en sms. Er zijn andere methoden van 2FA. Bijvoorbeeld eenmalige TAN-codes: een primitieve methode, maar het werkt - het wordt nog steeds bij sommige banken gebruikt. Er zijn systemen die gebruik maken van biometrische gegevens: vingerafdrukken, netvliesscans. Een andere optie die qua gemak, betrouwbaarheid en prijs een redelijk compromis lijkt, zijn speciale toepassingen voor 2FA: RSA Token, Google Authenticator. Er zijn ook fysieke sleutels en andere methoden.

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

Volgens Explorationis het gebruik van 2FA in principe een ongemak, en de populariteit van 2FA via sms wordt verklaard door “minder ongemak vergeleken met andere methoden” – het ontvangen van eenmalige codes is begrijpelijk voor de gebruiker.

Gebruikers associëren veel 2FA-methoden met de angst dat de toegang verloren gaat. De fysieke sleutel of de lijst met TAN-wachtwoorden kan verloren gaan of worden gestolen. Persoonlijk heb ik slechte ervaringen met Google Authenticator. Mijn eerste smartphone met deze applicatie ging kapot. Ik waardeer mijn inspanningen om de toegang tot mijn accounts te herstellen. Een ander probleem is het overstappen naar een nieuw apparaat. Google Authenticator heeft vanwege veiligheidsredenen geen exportoptie (als sleutels kunnen worden geëxporteerd, welke beveiliging is er dan?). Een keer droeg ik de sleutels handmatig, en toen besloot ik dat het gemakkelijker was om de oude smartphone in een doos op een plank te laten.

De 2FA-methode zou moeten zijn:

  • Veilig - alleen u en niet aanvallers mogen toegang krijgen tot uw account
  • Betrouwbaar - u krijgt toegang tot uw account wanneer u het nodig heeft
  • Handig en toegankelijk: het gebruik van 2FA is overzichtelijk en kost weinig tijd
  • Goedkoop

Wij geloven dat blockchain de juiste oplossing is.

Gebruik 2FA op de blockchain

Voor de gebruiker ziet 2FA op de blockchain er hetzelfde uit als het ontvangen van eenmalige codes via sms. Het enige verschil is het leveringskanaal. De methode voor het verkrijgen van een 2FA-code is afhankelijk van wat de blockchain biedt. In ons project (informatie staat in mijn profiel) is dit een webapplicatie, Tor, iOS, Android, Linux, Windows, MacOS.

De dienst genereert een eenmalige code en stuurt deze naar de messenger op de blockchain. Volg dan de klassiekers: de gebruiker voert de ontvangen code in de service-interface in en logt in.

Ga over tot het beveiligen van 2FA op de blockchain

In het artikel Hoe werkt een gedecentraliseerde messenger op de blockchain? Ik schreef dat blockchain de veiligheid en privacy van de berichtoverdracht garandeert. Wat de kwestie van het verzenden van 2FA-codes betreft, zal ik het volgende benadrukken:

  • Eén klik om een ​​account aan te maken - geen telefoons of e-mails.
  • Alle berichten met 2FA-codes zijn gecodeerd End-to-End curve25519xsalsa20poly1305.
  • MITM-aanval is uitgesloten - elk bericht met de 2FA-code is een transactie op de blockchain en is ondertekend door Ed25519 EdDSA.
  • Het bericht met de 2FA-code komt in een eigen blok terecht. De volgorde en tijdstempel van blokken kunnen niet worden gecorrigeerd, en dus ook de volgorde van berichten.
  • Er is geen centrale structuur die de “authenticiteit” van een bericht controleert. Dit wordt gedaan door een gedistribueerd systeem van knooppunten, gebaseerd op consensus, en is eigendom van de gebruikers.
  • Kan niet worden uitgeschakeld - accounts kunnen niet worden geblokkeerd en berichten kunnen niet worden verwijderd.
  • Toegang tot 2FA-codes vanaf elk apparaat en op elk moment.
  • Bevestiging van berichtbezorging met 2FA-code. De dienst die het eenmalige wachtwoord verstuurt, weet zeker dat het is afgeleverd. Geen 'Opnieuw verzenden'-knoppen.

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

Ga over tot het beveiligen van 2FA op de blockchain

De gebruiker krijgt een account in de blockchain-messenger om binnen een seconde codes te ontvangen - er wordt alleen een wachtwoordzin gebruikt om in te loggen. Daarom kunnen de toepassingsmethoden verschillen: u kunt één account gebruiken om codes voor alle diensten te ontvangen, of u kunt voor elke dienst een afzonderlijk account aanmaken.

Er is ook een ongemak: de rekening moet minimaal één transactie hebben. Om ervoor te zorgen dat de gebruiker een gecodeerd bericht met een code ontvangt, moet je zijn publieke sleutel kennen, en deze verschijnt pas bij de eerste transactie in de blockchain. Zo zijn we eruit gekomen: we hebben ze de mogelijkheid gegeven om gratis tokens in hun portemonnee te ontvangen. Een betere oplossing is echter om het account een publieke sleutel te noemen. (Ter vergelijking hebben wij een rekeningnummer U1467838112172792705 is een afgeleide van de publieke sleutel cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Voor de messenger is dit handiger en leesbaarder, maar voor het systeem voor het versturen van 2FA codes is het een beperking). Ik denk dat iemand in de toekomst een dergelijke beslissing zal nemen en “Gemak en toegankelijkheid” naar de groene zone zal verplaatsen.

De prijs voor het verzenden van een 2FA-code is erg laag: 0.001 ADM, nu is dit 0.00001 USD. Nogmaals, u kunt uw blockchain verhogen en de prijs nul maken.

Hoe u 2FA op de blockchain aan uw service koppelt

Ik hoop dat ik een paar lezers heb kunnen interesseren om blockchain-autorisatie aan hun diensten toe te voegen.

Ik zal je vertellen hoe je dit moet doen met onze messenger als voorbeeld, en naar analogie kun je een andere blockchain gebruiken. In de 2FA demo-app gebruiken we postgresql10 om accountinformatie op te slaan.

Aansluitstappen:

  1. Maak een account aan op de blockchain van waaruit u 2FA-codes verzendt. U ontvangt een wachtwoordzin, die wordt gebruikt als privésleutel om berichten met codes te versleutelen en transacties te ondertekenen.
  2. Voeg een script toe aan uw server om 2FA-codes te genereren. Als u al een andere 2FA-methode met eenmalige wachtwoordlevering gebruikt, heeft u deze stap al voltooid.
  3. Voeg een script toe aan uw server om codes naar de gebruiker in de blockchain-messenger te sturen.
  4. Creëer een gebruikersinterface voor het verzenden en invoeren van een 2FA-code. Als u al een andere 2FA-methode met eenmalige wachtwoordlevering gebruikt, heeft u deze stap al voltooid.

1 Account aanmaken

Het aanmaken van een account in de blockchain betekent het genereren van een privésleutel, een publieke sleutel en een afgeleid accountadres.

Ga over tot het beveiligen van 2FA op de blockchain

Eerst wordt de BIP39-wachtwoordzin gegenereerd en op basis daarvan wordt de SHA-256-hash berekend. De hash wordt gebruikt om de privésleutel ks en de publieke sleutel kp te genereren. Uit de publieke sleutel, met behulp van dezelfde SHA-256 met inversie, verkrijgen we het adres in de blockchain.

Als u elke keer vanuit een nieuw account 2FA-codes wilt verzenden, moet de accountaanmaakcode aan 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-applicatie hebben we het vereenvoudigd: we hebben één account aangemaakt in de webapplicatie en vanuit daar codes verzonden. In de meeste gevallen is dit ook handiger voor de gebruiker: hij weet dat de dienst 2FA-codes verzendt vanaf een specifiek account en kan deze een naam geven.

Ga over tot het beveiligen van 2FA op de blockchain

2 2FA-codes genereren

Voor elke gebruikerslogin moet een 2FA-code worden gegenereerd. Wij maken gebruik van de bibliotheek speakeasy, maar u kunt een andere kiezen.

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

Controle van de geldigheid van de door de gebruiker ingevoerde 2FA-code:

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

3 Verzenden van 2FA-code

Om een ​​2FA-code in te dienen, kunt u de blockchain-node-API, de JS API-bibliotheek of de console gebruiken. In dit voorbeeld gebruiken we de console - dit is de opdrachtregelinterface, een hulpprogramma dat de interactie met de blockchain vereenvoudigt. Om een ​​bericht met een 2FA-code te verzenden, moet u het commando gebruiken send message consoles.

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 door de methode te gebruiken send in de JS API-bibliotheek.

4 Gebruikersinterface

De gebruiker moet de mogelijkheid krijgen om een ​​2FA-code in te voeren, dit kan op verschillende manieren, afhankelijk van uw applicatieplatform. In ons voorbeeld is dit Vue.

Ga over tot het beveiligen van 2FA op de blockchain

De broncode voor de demo-applicatie voor blockchain-tweefactorauthenticatie kan worden bekeken op GitHub. Er staat een link in het Leesmij-bestand naar een Live demo om het uit te proberen.

Bron: www.habr.com

Voeg een reactie