Prijeđite na siguran 2FA na blockchainu

SMS poruke su najpopularnija metoda dvofaktorske autentifikacije (2FA). Koriste ga banke, elektronički i kripto novčanici, poštanski sandučići i sve vrste usluga; broj korisnika metode se približava 100%.

Ogorčen sam na ovaj scenarij, jer ova metoda nije sigurna. Ponovno dodjeljivanje broja s jedne SIM kartice na drugu započelo je na početku ere mobilnih telefona - tako se broj vraća kada se SIM kartica izgubi. “Stručnjaci za krađu digitalnog novca” shvatili su da se opcija “rewrite SIM card” može koristiti u prijevarnim shemama. Uostalom, onaj tko kontrolira SIM karticu može kontrolirati tuđe online bankarstvo, elektroničke novčanike, pa čak i kriptovalutu. A možete doći u posjed broja druge osobe podmićivanjem zaposlenika telekoma, korištenjem prijevare ili krivotvorenih dokumenata.

Prijeđite na siguran 2FA na blockchainu

Otkrivene su tisuće epizoda zamjene SIM kartica, kako se zove ova shema prijevare. Razmjeri katastrofe sugeriraju da će svijet uskoro napustiti 2FA putem SMS-a. Ali to se ne događa - u studija kažu da 2FA metodu ne biraju korisnici, već vlasnici usluga.

Predlažemo korištenje sigurne 2FA metode s dostavom jednokratnih kodova putem blockchaina, a mi ćemo vam reći kako je vlasnik usluge može povezati.

Broj ide u milijune

U 2019. prijevara sa zamjenom SIM kartice porasla je za 63% prema londonskoj policiji, a “prosječni račun” napadača bio je 4,000 GBP. U Rusiji nisam našao nikakve statistike, ali pretpostavljam da su još gore.

Zamjena SIM kartice koristi se za krađu popularnih Twitter, Instagram, Facebook, VK računa, bankovnih računa, a nedavno čak i kriptovaluta - Izvještava list Times prema Bitcoin poduzetniku Jobyju Weeksu. Slučajevi visokog profila krađe kriptovalute korištenjem SIM swappinga pojavljuju se u tisku od 2016.; 2019. je doživio pravi vrhunac.

U svibnju je ured američkog državnog odvjetnika za istočni okrug Michigana podignute optužnice devetero mladih ljudi između 19 i 26 godina: vjeruje se da su dio hakerske bande pod nazivom “The Community”. Banda se tereti za sedam swap napada, uslijed kojih su hakeri ukrali kriptovalute u vrijednosti od preko 2,4 milijuna dolara. A u travnju je kalifornijski student Joel Ortiz dobio 10 godina zatvora zbog zamjene SIM kartica; njegova proizvodnja iznosila je 7.5 milijuna dolara u kriptovalutama.

Prijeđite na siguran 2FA na blockchainu
Fotografija Joela Ortiza na sveučilišnoj tiskovnoj konferenciji. Dvije godine kasnije bit će pritvoren zbog cyber prijevare.

Kako funkcionira zamjena SIM kartice

"Swaping" znači razmjena. U svim takvim shemama kriminalci preuzimaju telefonski broj žrtve, obično putem ponovnog izdavanja SIM kartice, i koriste ga za ponovno postavljanje lozinke. Tipična zamjena SIM kartice u teoriji izgleda ovako:

  1. Obavještajna služba. Prevaranti saznaju osobne podatke žrtve: ime i broj telefona. Mogu se naći u otvorenim izvorima (društvene mreže, prijatelji) ili ih dobiti od suučesnika - zaposlenika mobilnog operatera.
  2. Blokiranje. SIM kartica žrtve je deaktivirana; Da biste to učinili, samo nazovite tehničku podršku davatelja usluga, navedite broj i recite da je telefon izgubljen.
  3. Snimite, prenesite broj na SIM karticu. Obično se to također radi preko suučesnika u telekomu ili putem krivotvorenja dokumenata.

U stvarnom životu stvari su još teže. Napadači biraju žrtvu, a zatim svakodnevno prate lokaciju telefona - jedan zahtjev za primanje informacije da je pretplatnik prešao na roaming košta 1-2 centa. Čim vlasnik SIM kartice ode u inozemstvo, pregovara s voditeljem u komunikacijskoj trgovini o izdavanju nove SIM kartice. Košta oko 50 dolara (našao sam podatke - u različitim zemljama i kod različitih operatera od 20 do 100 dolara), au najgorem slučaju menadžer će dobiti otkaz - za to nema odgovornosti.

Sada će sve SMS-ove primati napadači, a vlasnik telefona neće moći ništa - on je u inozemstvu. A onda zlikovci dobivaju pristup svim žrtvinim računima i po želji mijenjaju lozinke.

Šanse za vraćanje ukradene imovine

Banke ponekad izađu u susret žrtvama na pola puta i povuku transfere s njihovih računa. Stoga je moguće vratiti fiat novac čak i ako kriminalac nije pronađen. Ali s novčanicima za kriptovalute sve je kompliciranije - i tehnički, i zakonodavno. Do sada niti jedna mjenjačnica/novčanik nije isplatila odštetu žrtvama swappinga.

Ako žrtve žele obraniti svoj novac na sudu, krive operatera: on je stvorio uvjete za krađu novca s računa. Upravo sam to i učinio Michael Turpin, koji je zbog zamjene izgubio 224 milijuna dolara, a sada tuži telekomunikacijsku tvrtku AT&T.

Prijeđite na siguran 2FA na blockchainu

Do sada nijedna država nema učinkovite sheme za zakonsku zaštitu vlasnika kriptovaluta. Nemoguće je osigurati svoj kapital ili dobiti naknadu za njegov gubitak. Stoga je lakše spriječiti swap napad nego se nositi s njegovim posljedicama. Najočitiji način je korištenje pouzdanijeg "drugog faktora" za 2FA.

SIM swap nije jedini problem s 2FA putem SMS-a

Potvrdni kodovi u SMS-u također nisu sigurni s tehničke točke gledišta. Poruke se mogu presresti zbog nezakrpanih ranjivosti u sustavu signalizacije 7 (SS7). 2FA preko SMS-a službeno je prepoznat kao nesiguran (Nacionalni institut za standarde i tehnologiju SAD-a kaže to u svom Vodič za digitalnu provjeru autentičnosti).

Istovremeno, prisutnost 2FA često daje korisniku osjećaj lažne sigurnosti, te on odabire jednostavniju lozinku. Stoga takva autentifikacija ne otežava, već olakšava napadaču pristup računu.

I često SMS-ovi stižu s velikim zakašnjenjem ili uopće ne stignu.

Druge 2FA metode

Naravno, svjetlo nije konvergiralo na pametnim telefonima i SMS-u. Postoje i druge metode 2FA. Na primjer, jednokratni TAN kodovi: primitivna metoda, ali radi - još uvijek se koristi u nekim bankama. Postoje sustavi koji koriste biometrijske podatke: otiske prstiju, skeniranje mrežnice. Još jedna opcija koja se čini kao razuman kompromis u smislu pogodnosti, pouzdanosti i cijene su posebne aplikacije za 2FA: RSA Token, Google Authenticator. Postoje i fizički ključevi i druge metode.

U teoriji sve izgleda logično i pouzdano. No, u praksi moderna 2FA rješenja imaju problema i zbog njih se stvarnost razlikuje od očekivanja.

Prema istraživanje, korištenje 2FA načelno predstavlja neugodnost, a popularnost 2FA putem SMS-a objašnjava se "manjim neugodnostima u usporedbi s drugim metodama" - primanje jednokratnih kodova razumljivo je korisniku.

Korisnici mnoge 2FA metode povezuju sa strahom da će pristup biti izgubljen. Fizički ključ ili popis TAN lozinki može se izgubiti ili ukrasti. Osobno sam imao loša iskustva s Google Authenticatorom. Moj prvi pametni telefon s ovom aplikacijom se pokvario - cijenite moj trud da vratim pristup svojim računima. Drugi problem je prelazak na novi uređaj. Google Authenticator nema opciju izvoza zbog sigurnosnih razloga (ako se ključevi mogu izvesti, koja je sigurnost tu?). Jednom sam ključeve nosio ručno, a onda sam zaključio da je lakše stari pametni telefon ostaviti u kutiji na polici.

2FA metoda bi trebala biti:

  • Sigurno - samo vi, a ne napadači, trebate dobiti pristup vašem računu
  • Pouzdan - dobivate pristup svom računu kad god vam zatreba
  • Praktično i dostupno - korištenje 2FA je jasno i traje minimalno
  • jeftino

Vjerujemo da je blockchain pravo rješenje.

Koristite 2FA na blockchainu

Za korisnika 2FA na blockchainu izgleda isto kao primanje jednokratnih kodova putem SMS-a. Jedina razlika je kanal isporuke. Metoda za dobivanje 2FA koda ovisi o tome što blockchain nudi. U našem projektu (informacije su u mom profilu) ovo je Web aplikacija, Tor, iOS, Android, Linux, Windows, MacOS.

Usluga generira jednokratni kod i šalje ga messengeru na blockchainu. Zatim slijedi klasika: korisnik unosi primljeni kod u sučelje usluge i prijavljuje se.

Prijeđite na siguran 2FA na blockchainu

Članak Kako decentralizirani messenger radi na blockchainu? Napisao sam da blockchain osigurava sigurnost i privatnost prijenosa poruka. Što se tiče slanja 2FA kodova, istaknut ću:

  • Jedan klik za kreiranje računa - bez telefona ili e-pošte.
  • Sve poruke s 2FA kodovima šifrirane su End-to-End curve25519xsalsa20poly1305.
  • MITM napad je isključen - svaka poruka s 2FA kodom je transakcija na blockchainu i potpisuje je Ed25519 EdDSA.
  • Poruka s 2FA kodom završava u vlastitom bloku. Redoslijed i vremenska oznaka blokova se ne mogu ispravljati, a time ni redoslijed poruka.
  • Ne postoji središnja struktura koja provjerava "autentičnost" poruke. To radi distribuirani sustav čvorova temeljen na konsenzusu, au vlasništvu je korisnika.
  • Ne može se onemogućiti - računi se ne mogu blokirati i poruke se ne mogu izbrisati.
  • Pristupite 2FA kodovima s bilo kojeg uređaja u bilo koje vrijeme.
  • Potvrda isporuke poruke s 2FA kodom. Usluga koja šalje jednokratnu lozinku sigurno zna da je isporučena. Nema gumba "Pošalji ponovno".

Za usporedbu s nekim drugim 2FA metodama napravio sam tablicu:

Prijeđite na siguran 2FA na blockchainu

Korisnik dobiva račun u blockchain messengeru za primanje kodova u sekundi - za prijavu se koristi samo šifra. Stoga, metode prijave mogu biti različite: možete koristiti jedan račun za primanje kodova za sve usluge ili možete stvoriti zaseban račun za svaku uslugu.

Tu je i neugodnost - račun mora imati barem jednu transakciju. Da bi korisnik dobio kriptiranu poruku s kodom, potrebno je znati njegov javni ključ, a on se u blockchainu pojavljuje tek s prvom transakcijom. Ovako smo se uspjeli izvući iz toga: dali smo im priliku da dobiju besplatne tokene u svoj novčanik. Međutim, bolje rješenje je nazvati račun javnim ključem. (Za usporedbu, imamo broj računa U1467838112172792705 je izvedenica javnog ključa cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Za messenger to je praktičnije i čitljivije, ali za sustav za slanje 2FA kodova to je ograničenje). Mislim da će netko u budućnosti donijeti takvu odluku i preseliti “Udobnost i pristupačnost” u zelenu zonu.

Cijena slanja 2FA koda je stvarno niska - 0.001 ADM, sada je 0.00001 USD. Opet, možete povećati svoj blockchain i učiniti cijenu nultom.

Kako povezati 2FA na blockchainu s vašom uslugom

Nadam se da sam uspio zainteresirati nekoliko čitatelja da dodaju blockchain autorizaciju svojim uslugama.

Reći ću vam kako to učiniti koristeći naš glasnik kao primjer, a po analogiji možete koristiti drugi blockchain. U demo aplikaciji 2FA koristimo postgresql10 za pohranu podataka o računu.

Faze spajanja:

  1. Napravite račun na blockchainu s kojeg ćete slati 2FA kodove. Dobit ćete šifru koja se koristi kao privatni ključ za šifriranje poruka kodovima i za potpisivanje transakcija.
  2. Dodajte skriptu na svoj poslužitelj za generiranje 2FA kodova. Ako već koristite bilo koju drugu 2FA metodu s isporukom jednokratne lozinke, već ste dovršili ovaj korak.
  3. Dodajte skriptu na svoj poslužitelj za slanje kodova korisniku u blockchain messengeru.
  4. Napravite korisničko sučelje za slanje i unos 2FA koda. Ako već koristite bilo koju drugu 2FA metodu s isporukom jednokratne lozinke, već ste dovršili ovaj korak.

1 Izrada računa

Stvaranje računa u blockchainu znači generiranje privatnog ključa, javnog ključa i izvedene adrese računa.

Prijeđite na siguran 2FA na blockchainu

Prvo se generira šifra BIP39 i iz nje se izračunava hash SHA-256. Hash se koristi za generiranje privatnog ključa ks i javnog ključa kp. Iz javnog ključa, koristeći isti SHA-256 s inverzijom, dobivamo adresu u blockchainu.

Ako želite slati 2FA kodove svaki put s novog računa, kôd za kreiranje računa morat ćete dodati na poslužitelj:

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

U demo aplikaciji smo to pojednostavili – kreirali smo jedan račun u web aplikaciji, te iz njega slali kodove. U većini slučajeva to je i prikladnije za korisnika: on zna da usluga šalje 2FA kodove s određenog računa i može ga imenovati.

Prijeđite na siguran 2FA na blockchainu

2 Generiranje 2FA kodova

Za svaku prijavu korisnika mora se generirati 2FA kod. Koristimo knjižnicu Speakeasy, ali možete odabrati bilo koji drugi.

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

Provjera valjanosti 2FA koda koji je unio korisnik:

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

3 Slanje 2FA koda

Za slanje 2FA koda možete koristiti API čvora blockchaina, biblioteku JS API-ja ili konzolu. U ovom primjeru koristimo konzolu - ovo je sučelje naredbenog retka, uslužni program koji pojednostavljuje interakciju s blockchainom. Za slanje poruke s 2FA kodom morate upotrijebiti naredbu send message konzole.

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

Alternativni način slanja poruka je korištenje metode send u JS API biblioteci.

4 Korisničko sučelje

Korisniku treba dati mogućnost unosa 2FA koda, što se može učiniti na različite načine, ovisno o vašoj platformi aplikacije. U našem primjeru ovo je Vue.

Prijeđite na siguran 2FA na blockchainu

Izvorni kod za demo aplikaciju za dvofaktorsku autentifikaciju blockchaina može se pogledati na GitHub. Postoji poveznica u Readme-u na demo verziju uživo za isprobavanje.

Izvor: www.habr.com

Dodajte komentar