Treceți pentru a securiza 2FA pe blockchain

Mesajele SMS sunt cea mai populară metodă de autentificare cu doi factori (2FA). Este folosit de bănci, portofele electronice și cripto, cutiile poștale și tot felul de servicii; numărul de utilizatori ai metodei se apropie de 100%.

Sunt indignat de acest scenariu, deoarece această metodă este nesigură. Reatribuirea unui număr de pe o cartelă SIM la alta a început la începutul erei mobile - așa este restabilit numărul atunci când o cartelă SIM este pierdută. „Specialiştii în furtul de bani digitali” au realizat că opţiunea „rescrie cartela SIM” poate fi folosită în scheme frauduloase. La urma urmei, cel care controlează cartela SIM poate controla serviciile bancare online ale altor persoane, portofelele electronice și chiar criptomoneda. Și puteți intra în posesia numărului altei persoane prin mituirea unui angajat din telecomunicații, folosind înșelăciune sau documente falsificate.

Treceți pentru a securiza 2FA pe blockchain

Au fost descoperite mii de episoade de schimb de SIM, așa cum se numește această schemă de fraudă. Amploarea dezastrului sugerează că lumea va abandona în curând 2FA prin SMS. Dar acest lucru nu se întâmplă - în studiu ei spun că nu utilizatorii aleg metoda 2FA, ci proprietarii de servicii.

Vă propunem utilizarea metodei securizate 2FA cu livrarea de coduri unice prin blockchain și vă vom spune cum îl poate conecta proprietarul serviciului.

Numărul ajunge la milioane

În 2019, frauda de schimb SIM a crescut cu 63%, potrivit poliției din Londra, iar „factura medie” a unui atacator a fost de 4,000 GBP. Nu am găsit nicio statistică în Rusia, dar presupun că sunt și mai rele.

Schimbarea SIM este folosită pentru a fura conturi populare de Twitter, Instagram, Facebook, VK, conturi bancare și, recent, chiar și criptomonede - Raportează ziarul The Times potrivit antreprenorului Bitcoin Joby Weeks. Din 2016, au apărut în presă cazuri importante de furt de criptomonede prin schimbarea SIM; 2019 a cunoscut un adevărat vârf.

În mai, biroul procurorului american pentru districtul de est al Michigan a adus acuzații nouă tineri cu vârste cuprinse între 19 și 26 de ani: se crede că fac parte dintr-o bandă de hackeri numită „Comunitatea”. Banda este acuzată de șapte atacuri swap, în urma cărora hackerii au furat criptomonede în valoare de peste 2,4 milioane de dolari. Și în aprilie, studentul din California, Joel Ortiz, a primit 10 ani de închisoare pentru schimb de SIM; producția sa a fost de 7.5 milioane de dolari în criptomonede.

Treceți pentru a securiza 2FA pe blockchain
Fotografie cu Joel Ortiz la o conferință de presă universitară. Doi ani mai târziu va fi reținut pentru fraudă cibernetică.

Cum funcționează schimbul SIM

„Schimbarea” înseamnă schimb. În toate astfel de scheme, infractorii preiau numărul de telefon al victimei, de obicei prin reemiterea unui card SIM, și îl folosesc pentru a reseta parola. Un schimb tipic de SIM în teorie arată astfel:

  1. Serviciul de informații. Escrocii află informațiile personale ale victimei: numele și numărul de telefon. Ele pot fi găsite în surse deschise (rețele sociale, prieteni) sau primite de la un complice - un angajat al unui operator de telefonie mobilă.
  2. Blocare. Cartela SIM a victimei este dezactivată; Pentru a face acest lucru, trebuie doar să sunați la asistența tehnică a furnizorului, să furnizați numărul și să spuneți că telefonul a fost pierdut.
  3. Captură, transferă numărul pe cartela SIM. De obicei acest lucru se face și prin intermediul unui complice în compania de telecomunicații sau prin fals de documente.

În viața reală lucrurile sunt și mai grave. Atacatorii selectează o victimă și apoi urmăresc locația telefonului zilnic - o solicitare de a primi informații că abonatul a trecut la roaming costă 1-2 cenți. De îndată ce proprietarul cartelei SIM a plecat în străinătate, ei negociază cu managerul de la magazinul de comunicații pentru a emite o nouă cartelă SIM. Costă aproximativ 50 USD (am găsit informații - în diferite țări și cu diferiți operatori de la 20 la 100 USD), iar în cel mai rău caz managerul va fi concediat - nu există nicio responsabilitate pentru asta.

Acum toate SMS-urile vor fi primite de atacatori, iar proprietarul telefonului nu va putea face nimic în acest sens - este în străinătate. Și apoi răufăcătorii obțin acces la toate conturile victimei și schimbă parolele dacă doresc.

Șansele de a returna bunurile furate

Băncile găzduiesc uneori victimele la jumătatea drumului și retrag transferurile din conturile lor. Prin urmare, este posibil să returnați bani fiat chiar dacă infractorul nu este găsit. Dar cu portofelele criptomonede totul este mai complicat - și tehnic, și din punct de vedere legislativ. Până acum, nici un singur schimb/portofel nu a plătit despăgubiri victimelor schimbului.

Dacă victimele vor să-și apere banii în instanță, dau vina pe operator: el a creat condițiile pentru furtul banilor din cont. Exact asta am făcut Mihai Turpin, care a pierdut 224 de milioane de dolari din cauza schimbului. Acum dă în judecată compania de telecomunicații AT&T.

Treceți pentru a securiza 2FA pe blockchain

Până acum, niciun stat nu are scheme de lucru pentru a proteja legal proprietarii de criptomonede. Este imposibil să vă asigurați capitalul sau să primiți despăgubiri pentru pierderea acestuia. Prin urmare, prevenirea unui atac de swap este mai ușor decât a face față consecințelor acestuia. Cea mai evidentă modalitate este de a folosi un „al doilea factor” mai fiabil pentru 2FA.

Schimbarea SIM nu este singura problemă cu 2FA prin SMS

Codurile de confirmare din SMS sunt, de asemenea, nesigure din punct de vedere tehnic. Mesajele pot fi interceptate din cauza vulnerabilităților nepattchizate în Signaling System 7 (SS7). 2FA prin SMS este recunoscut oficial ca nesigur (Institutul Național de Standarde și Tehnologie din SUA spune acest lucru în Ghid de autentificare digitală).

În același timp, prezența 2FA oferă adesea utilizatorului un sentiment de falsă securitate, iar acesta alege o parolă mai simplă. Prin urmare, o astfel de autentificare nu îngreunează, ci facilitează accesul unui atacator la cont.

Și adesea SMS-urile ajung cu o întârziere mare sau nu ajung deloc.

Alte metode 2FA

Desigur, lumina nu s-a îndreptat spre smartphone-uri și SMS-uri. Există și alte metode de 2FA. De exemplu, coduri TAN unice: o metodă primitivă, dar funcționează - este încă folosit în unele bănci. Există sisteme care utilizează date biometrice: amprente, scanări retiniene. O altă opțiune care pare un compromis rezonabil în ceea ce privește comoditatea, fiabilitatea și prețul sunt aplicațiile speciale pentru 2FA: RSA Token, Google Authenticator. Există, de asemenea, chei fizice și alte metode.

În teorie, totul pare logic și de încredere. Dar, în practică, soluțiile moderne 2FA au probleme și, din cauza acestora, realitatea diferă de așteptări.

În conformitate cu explorare, utilizarea 2FA este un inconvenient în principiu, iar popularitatea 2FA prin SMS se explică prin „mai puține neplăceri în comparație cu alte metode” - primirea codurilor unice este de înțeles pentru utilizator.

Utilizatorii asociază multe metode 2FA cu teama că accesul va fi pierdut. Cheia fizică sau lista de parole TAN poate fi pierdută sau furată. Eu personal am avut experiențe proaste cu Google Authenticator. Primul meu smartphone cu această aplicație s-a defectat - apreciați eforturile mele de a restabili accesul la conturile mele. O altă problemă este trecerea la un dispozitiv nou. Google Authenticator nu are o opțiune de export din motive de securitate (dacă cheile pot fi exportate, ce securitate există?). Odată am cărat cheile manual, apoi am decis că este mai ușor să las vechiul smartphone într-o cutie pe un raft.

Metoda 2FA ar trebui să fie:

  • Securizat - numai tu și nu atacatorii ar trebui să obții acces la contul tău
  • Fiabil - aveți acces la contul dvs. oricând aveți nevoie
  • Convenabil și accesibil - utilizarea 2FA este clară și necesită timp minim
  • Ieftin

Credem că blockchain este soluția potrivită.

Utilizați 2FA pe blockchain

Pentru utilizator, 2FA pe blockchain arată la fel cu primirea de coduri unice prin SMS. Singura diferență este canalul de livrare. Metoda de obținere a unui cod 2FA depinde de ceea ce oferă blockchain-ul. În proiectul nostru (informațiile sunt în profilul meu) aceasta este o aplicație web, Tor, iOS, Android, Linux, Windows, MacOS.

Serviciul generează un cod unic și îl trimite mesagerului pe blockchain. Apoi urmează clasicele: utilizatorul introduce codul primit în interfața de serviciu și se conectează.

Treceți pentru a securiza 2FA pe blockchain

Articolul Cum funcționează un mesager descentralizat pe blockchain? Am scris că blockchain asigură securitatea și confidențialitatea transmiterii mesajelor. În ceea ce privește trimiterea codurilor 2FA, voi evidenția:

  • Un singur clic pentru a crea un cont - fără telefoane sau e-mailuri.
  • Toate mesajele cu coduri 2FA sunt criptate curba End-to-End25519xsalsa20poly1305.
  • Atacul MITM este exclus - fiecare mesaj cu codul 2FA este o tranzacție pe blockchain și este semnat de Ed25519 EdDSA.
  • Mesajul cu codul 2FA ajunge în propriul bloc. Secvența și marcajul temporal al blocurilor nu pot fi corectate și, prin urmare, ordinea mesajelor.
  • Nu există nicio structură centrală care să verifice „autenticitatea” unui mesaj. Acest lucru se realizează printr-un sistem distribuit de noduri bazat pe consens și este deținut de utilizatori.
  • Nu poate fi dezactivat - conturile nu pot fi blocate și mesajele nu pot fi șterse.
  • Accesați codurile 2FA de pe orice dispozitiv în orice moment.
  • Confirmarea livrării mesajului cu codul 2FA. Serviciul care trimite parola unică știe sigur că aceasta a fost livrată. Nu există butoane „Trimite din nou”.

Pentru a compara cu alte metode 2FA, am făcut un tabel:

Treceți pentru a securiza 2FA pe blockchain

Utilizatorul primește un cont în messengerul blockchain pentru a primi coduri într-o secundă - este folosită doar o frază de acces pentru a se conecta. Prin urmare, metodele de aplicare pot fi diferite: puteți folosi un singur cont pentru a primi coduri pentru toate serviciile sau puteți crea un cont separat pentru fiecare serviciu.

Există și un inconvenient - contul trebuie să aibă cel puțin o tranzacție. Pentru ca utilizatorul să primească un mesaj criptat cu un cod, trebuie să-i cunoști cheia publică, iar aceasta apare în blockchain doar la prima tranzacție. Așa am reușit să ieșim din asta: le-am dat posibilitatea de a primi jetoane gratuite în portofel. Cu toate acestea, o soluție mai bună este de a numi contul o cheie publică. (Pentru comparație, avem numărul de cont U1467838112172792705 este un derivat al cheii publice cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pentru messenger acest lucru este mai convenabil și mai lizibil, dar pentru sistemul de trimitere a codurilor 2FA este o limitare). Cred că în viitor cineva va lua o astfel de decizie și va muta „Conveniența și accesibilitatea” în zona verde.

Prețul trimiterii unui cod 2FA este foarte mic - 0.001 ADM, acum este de 0.00001 USD. Din nou, puteți crește blockchain-ul și faceți prețul zero.

Cum să conectați 2FA pe blockchain la serviciul dvs

Sper că am reușit să intereseze câțiva cititori să adauge autorizarea blockchain la serviciile lor.

Vă voi spune cum să faceți acest lucru folosind messengerul nostru ca exemplu și, prin analogie, puteți utiliza un alt blockchain. În aplicația demo 2FA, folosim postgresql10 pentru a stoca informații despre cont.

Etape de conectare:

  1. Creează un cont pe blockchain din care vei trimite coduri 2FA. Veți primi o expresie de acces, care este folosită ca o cheie privată pentru a cripta mesajele cu coduri și pentru a semna tranzacții.
  2. Adăugați un script pe server pentru a genera coduri 2FA. Dacă utilizați deja orice altă metodă 2FA cu livrare unică a parolei, ați finalizat deja acest pas.
  3. Adăugați un script pe serverul dvs. pentru a trimite coduri utilizatorului în messengerul blockchain.
  4. Creați o interfață de utilizator pentru trimiterea și introducerea unui cod 2FA. Dacă utilizați deja orice altă metodă 2FA cu livrare unică a parolei, ați finalizat deja acest pas.

1 Creați un cont

Crearea unui cont în blockchain înseamnă generarea unei chei private, a unei chei publice și a unei adrese de cont derivate.

Treceți pentru a securiza 2FA pe blockchain

În primul rând, este generată fraza de acces BIP39, iar hash-ul SHA-256 este calculat din aceasta. Hash-ul este folosit pentru a genera cheia privată ks și cheia publică kp. Din cheia publică, folosind același SHA-256 cu inversare, obținem adresa în blockchain.

Dacă doriți să trimiteți coduri 2FA de fiecare dată dintr-un cont nou, codul de creare a contului va trebui adăugat la server:

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()
}

În aplicația demo, am simplificat-o - am creat un cont în aplicația web și am trimis coduri din acesta. În cele mai multe cazuri, acest lucru este și mai convenabil pentru utilizator: el știe că serviciul trimite coduri 2FA dintr-un anumit cont și îl poate denumi.

Treceți pentru a securiza 2FA pe blockchain

2 Generarea codurilor 2FA

Trebuie generat un cod 2FA pentru fiecare autentificare de utilizator. Folosim biblioteca vorbăreț, dar puteți alege oricare altul.

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

Verificarea valabilității codului 2FA introdus de utilizator:

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

3 Trimiterea codului 2FA

Pentru a trimite un cod 2FA, puteți utiliza API-ul nodului blockchain, biblioteca API JS sau consola. În acest exemplu, folosim consola - aceasta este Interfața de linie de comandă, un utilitar care simplifică interacțiunea cu blockchain-ul. Pentru a trimite un mesaj cu un cod 2FA, trebuie să utilizați comanda send message consolă.

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

O modalitate alternativă de a trimite mesaje este utilizarea metodei send în biblioteca JS API.

4 Interfață cu utilizatorul

Utilizatorului trebuie să i se ofere opțiunea de a introduce un cod 2FA, acest lucru se poate face în diferite moduri, în funcție de platforma aplicației dvs. În exemplul nostru, acesta este Vue.

Treceți pentru a securiza 2FA pe blockchain

Codul sursă pentru aplicația demo de autentificare cu doi factori blockchain poate fi vizualizat la GitHub. Există un link în Readme către o demonstrație live pentru a-l încerca.

Sursa: www.habr.com

Adauga un comentariu