Prijelazite na sigurnu 2FA na blockchainu

SMS poruke su najpopularnija metoda dvofaktorske autentifikacije (2FA). Koriste ih banke, elektronski i kripto-novčanici, poštanski sandučići i razne usluge; broj korisnika metode se približava 100%.

Ovakav razvoj događaja izaziva moje negodovanje, jer ova metoda nije sigurna. Preusmjeravanje broja s jedne SIM kartice na drugu započelo je još u ranim danima mobilne telefonije — tako se obnavlja broj u slučaju gubitka SIM kartice. “Stručnjaci za krađu digitalnog novca” shvatili su: opciju „prepisivanja SIM kartice“ moguće je koristiti u prevarantskim shemama. Naime, onaj tko kontrolira SIM karticu može upravljati tuđim online bankarstvom, elektronskim novčanicima, pa čak i kriptovalutom. A zavladati nečijim brojem moguće je preko podmićivanja zaposlenika telekomunikacijske kompanije, uz pomoć obmane ili falsifikovanih dokumenata.

Prijelazite na sigurnu 2FA na blockchainu

Otkriveno je hiljade slučajeva SIM swappinga — tako se naziva ova prevarantska shema. Razmjeri ove katastrofe sugerišu da bi svet uskoro mogao odustati od 2FA putem SMS-a. Ali to se ne dešava — u istraživanju pričaju da ovu metodu 2FA ne biraju korisnici, već vlasnici usluga.

Predlažemo korišćenje sigurne metode 2FA sa dostavom jednokratnih kodova putem blockchain-a i objasnićemo kako vlasnik servisa može da je aktivira.

Reč je o milionima

U 2019. godini prevara SIM swappingom porasla je za 63% prema podacima londonske policije, a “srednji iznos” koji prevarant uzima iznosi 4.000 GBP. Statistiku za Rusiju nisam pronašao, ali pretpostavljam da je još gora.

SIM swapping se koristi za krađu popularnih naloga na Twitteru, Instagramu, Facebooku, VK, bankovnim računima, a nedavno su se proširili i na kriptovalute — javlja novine Times prema rečima bitkoin preduzetnika Jobija Wiksa. Veličanstveni slučajevi krađe kriptovaluta pomoću SIM swappinga pojavljuju se u medijima još od 2016. godine; pravi vrhunac dogodio se 2019. godine.

U maju je tužilaštvo Sjedinjenih Američkih Država u istočnom okrugu Mičigena podiglo optužnice protiv devetero mladih ljudi u dobi od 19 do 26 godina: pretpostavlja se da su članovi hakerske bande pod nazivom “Zajednica”. Bandi se pripisuje sedam napada zamene SIM kartica, usled kojih su hakeri prisvojili kriptovalutu u vrednosti višoj od 2,4 miliona dolara. A u aprilu je student iz Kalifornije Joel Ortiz dobio 10 godina zatvora zbog SIM swappinga; njegov plen iznosio je 7,5 miliona dolara u kriptovalutama.

Prijelazite na sigurnu 2FA na blockchainu
Fotografija Joela Ortiza na press konferenciji na sveučilištu. Nakon dvije godine bit će uhićen zbog kibernetičkog kriminala.

Način rada SIM swappinga

„Swapping“ znači zamjena. U svim sličnim shemama, zločinci prisvajaju telefonski broj žrtve, obično putem ponovnog izdavanja SIM kartice, i koriste ga za resetiranje lozinke. Tipični SIM swapping u teoriji izgleda ovako:

  1. Obavještajna faza. Prevaranti otkrivaju osobne podatke žrtve: ime i telefon. Ti podaci mogu se pronaći u javnim izvorima (društvene mreže, prijatelji) ili dobiti od suučesnika — zaposlenika mobilnog operatera.
  2. Blokada. SIM kartica žrtve se deaktivira; za to je dovoljno nazvati podršku pružatelja usluga, reći broj i da je telefon izgubljen.
  3. Zauzimanje, prebacivanje broja na svoju SIM karticu. Obično se to također radi preko suučesnika u telekom kompaniji ili pomoću krivotvorenih dokumenata.

U stvarnom životu sve je još strože. Prevaranti biraju žrtvu, a zatim svaki dan prate lokaciju telefona — jedan zahtjev za informacije o tome da je korisnik u roamingu košta 1-2 centa. Čim vlasnik SIM kartice ode u inozemstvo, dogovaraju se s menadžerom u trgovini mobilne telefonije o izdavanju nove SIM kartice. To košta oko 50 dolara (pronašao sam informacije — u različitim zemljama i kod različitih operatora od 20 do 100 dolara), pri čemu će menadžer u najgorem slučaju biti otpušten — za to nema odgovornosti.

Sada će sve SMS poruke primati zločinci, a vlasnik telefona neće moći ništa učiniti — on je u inozemstvu. Zatim zločinci dobivaju pristup svim računima žrtve i po želji mijenjaju lozinke.

Šanse za povrat ukradenog

Banke ponekad izlaze u susret žrtvama i povlače transfere sa njihovih računa. Stoga se fiat novac može vratiti, čak i ako zločinac nije pronađen. No, s kripto novčanicima situacija je složenija — i tehnički, i pravno. Do sada nijedna burza/novčanik nije isplatila odštetu žrtvama swappinga.

Ako oštećenici žele zaštititi svoj novac na sudu, optužuju pružatelja usluga: on je stvorio uvjete za krađu novca s računa. Tako je postupio Michael Terpin, koji je izgubio zbog swappinga 224 milijuna dolara. Sada tuži telekomunikacijsku tvrtku AT&T.

Prijelazite na sigurnu 2FA na blockchainu

Trenutno nijedna država nema operativne sheme za zakonitu zaštitu vlasnika kriptovaluta. Nemoguće je osigurati svoj kapital ili dobiti odštetu za njegov gubitak. Stoga je spriječiti swap-ataku jednostavnije nego se boriti s njenim posljedicama. Najočigledniji način je koristite pouzdaniji „drugi faktor“ za 2FA.

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

Kodovi potvrde u SMS-u nisu sigurni s tehničkog gledišta. Poruke se mogu presresti zbog neizbježnih ranjivosti u Signaling System 7 (SS7). 2FA putem SMS-a službeno je proglašena nesigurnom (o tome govori Nacionalni institut za standarde i tehnologiju SAD-a u svom Vodiču za digitalnu autentifikaciju).

Ipak, posjedovanje 2FA često korisniku daje lažan osjećaj sigurnosti, pa bira jednostavnije lozinke. Stoga takva autentifikacija ne otežava, već olakšava pristup zlostavljaču računu.

A često SMS-ovi kasne ili uopće ne stignu.

Drugi načini 2FA

Naravno, na pametnim telefonima i SMS-ima svijet se ne svodi samo na to. Postoje i drugi načini 2FA. Na primjer, jednokratni TAN-kodovi: jednostavna, ali učinkovita metoda — još uvijek se koristi u nekim bankama. Postoje sustavi koji koriste biometrijske podatke: otiske prstiju, skeniranje mrežnice. Druga opcija koja se čini razumljivim kompromisom u pogledu udobnosti, pouzdanosti i cijene su specijalne aplikacije za 2FA: RSA Token, Google Authenticator. Tu su i fizičke ključeve i druge metode.

Teoretski, sve izgleda logično i pouzdano. No, u praksi savremena 2FA rješenja imaju problema, zbog kojih se stvarnost razlikuje od očekivanja.

Prema istraživanju, korištenje 2FA je u načelu neugodnost, a popularnost 2FA putem SMS-a objašnjava se 'manjom neugodnošću u usporedbi s drugim metodama' — primanje jednokratnih kodova je jasno korisnicima.

Mnogi korisnici povezują metode 2FA s strahom od gubitka pristupa. Fizički ključ ili popis TAN lozinki mogu se izgubiti ili ukrasti. Osobno imam negativno iskustvo s Google Authenticatorom. Moj prvi pametni telefon s ovom aplikacijom se pokvario — zamislite moj trud oko vraćanja pristupa računima. Drugi problem je prijelaz na novi uređaj. Google Authenticator nema mogućnost izvoza iz sigurnosnih razloga (ako se ključevi mogu izvesti, gdje je tu sigurnost?). Jednom sam prenosio ključeve ručno, a kasnije sam odlučio da je lakše ostaviti stari pametni telefon u kutiji na polici.

Metoda 2FA mora biti:

  • Sigurna — pristup računu trebate imati samo vi, a ne zlonamjernici
  • Pouzdana — uvijek trebate imati pristup računu kad god zatreba
  • Jednostavna i dostupna — korištenje 2FA treba biti jasno i brzo
  • Jeftina

Smatramo da je blockchain odgovarajuće rješenje.

Koristite 2FA na blockchainu

Za korisnika, 2FA na blockchainu izgleda isto kao i primanje jednokratnih kodova putem SMS-a. Razlika je samo u načinu isporuke. Način dobivanja 2FA koda ovisi o tome što ponudi blockchain. U našem projektu (informacije su u mom profilu) to je web-aplikacija, Tor, iOS, Android, Linux, Windows, MacOS.

Servis generira jednokratni kod i šalje ga u messenger na blockchainu. Zatim, po klasičnom postupku: korisnik unosi primljeni kod u sučelje servisa i prijavljuje se.

Prijelazite na sigurnu 2FA na blockchainu

U članku Kako djeluje decentralizirana aplikacija za razmjenu poruka na blockchainu Napisao sam da blockchain osigurava sigurnost i privatnost prijenosa poruka. Što se tiče slanja 2FA kodova, istaknuo bih:

  • Jedan klik za izradu računa — bez telefona i e-mail adresa.
  • Sve poruke s 2FA kodovima šifriraju se End-to-End curve25519xsalsa20poly1305.
  • MITM napad je isključen — svaka poruka s 2FA kodom je transakcija u blockchainu i potpisuje se Ed25519 EdDSA.
  • Poruka s 2FA kodom ide u svoj blok. Sekvenca i timestamp blokova se ne može mijenjati, a stoga ni redoslijed poruka.
  • Nema središnje strukture koja provodi provjere „točnosti“ poruke. To radi distribuirani sustav čvorova na temelju konsenzusa, a taj sustav pripada korisnicima.
  • Nemogućnost isključivanja — računi se ne mogu blokirati, a poruke brisati.
  • Pristup 2FA kodovima s bilo kojeg uređaja u bilo kojem trenutku.
  • Potvrda dostave poruke s 2FA kodom. Servis koji šalje jednokratnu lozinku točno zna da je ona dostavljena. Nema tipki 'Pošalji ponovo'.

Za usporedbu s nekim drugim metodama 2FA, sastavio sam tablicu:

Prijelazite na sigurnu 2FA na blockchainu

Korisnik dobiva račun u blockchain-messengeru za primanje kodova u sekundi — za prijavu se koristi samo lozinka. Stoga, načini primjene mogu biti različiti: jedan račun može se koristiti za primanje kodova za sve usluge, ili se može stvoriti poseban račun za svaku uslugu.

Postoji i neugodnost — račun mora imati barem jednu transakciju. Da bi korisnik primio šifriranu poruku s kodom, potrebno je znati njegov javni ključ, a taj se pojavljuje u blockchainu tek s prvom transakcijom. Našli smo rješenje: omogućili smo dobivanje besplatnih tokena u novčaniku. Ipak, ispravnije bi bilo imenovati račun javnim ključem. (Za usporedbu, naš broj računa U1467838112172792705 je derivat javnog ključa cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Za messenger je to prikladnije i čitljivije, ali za sustav slanja 2FA kodova — ograničenje). Mislim da će u budućnosti netko napraviti takvo rješenje i prevesti “Prikladnost i dostupnost” u zelenu zonu.

Cijena slanja 2FA koda zapravo je niska — 0.001 ADM, što sada iznosi 0.00001 USD. Ponovno, možete podići vlastiti blockchain i učiniti cijenu nula.

Kako povezati 2FA na blockchainu s vašom uslugom

Nadam se da sam uspio zainteresirati nekoliko čitatelja da dodaju blockchain-autentifikaciju na svoje usluge.

Objasnit ću kako to učiniti na primjeru našeg messengera, a po analogiji možete koristiti i drugi blockchain. U demo aplikaciji 2FA koristimo postgresql10 za pohranu informacija o računima.

Faze povezivanja:

  1. Stvorite račun u blockchainu s kojeg ćete slati 2FA kodove. Dobit ćete lozinku koja se koristi kao privatni ključ za šifriranje poruka s kodovima i za potpisivanje transakcija.
  2. Dodajte na vaš server skriptu za generiranje 2FA kodova. Ako već koristite neku drugu metodu 2FA za dostavu jednokratnih lozinki, ovaj korak ste već završili.
  3. Dodajte na vaš server skriptu za slanje kodova korisniku u blockchain-messenger.
  4. Stvorite korisničko sučelje za slanje i unos 2FA koda. Ako već koristite neku drugu metodu 2FA za dostavu jednokratnih lozinki, ovaj korak ste već završili.

1 Kreiranje računa

Kreiranje računa u blockchainu podrazumijeva generiranje privatnog ključa, javnog ključa i adrese računa derivirane iz njih.

Prijelazite na sigurnu 2FA na blockchainu

Prvo se generira BIP39 fraza, iz koje se izračunava SHA-256 hash. Hash se koristi za generiranje privatnog ključa ks i javnog ključa kp. Iz javnog ključa se istim SHA-256 s inverzijom dobiva adresa u blockchainu.

Ako želite slati 2FA kodove svaki put s novog računa, kod za kreiranje računa treba dodati na 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()
}

U našem demo aplikaciji to smo pojednostavili — kreirali smo jedan račun u web aplikaciji i šaljemo kodove s njega. U većini slučajeva to je korisnije i korisniku: zna da servis šalje 2FA kodove s konkretnog računa i može ga imenovati.

Prijelazite na sigurnu 2FA na blockchainu

2 Generiranje 2FA kodova

2FA kod se mora generirati za svaki korisnički prijenos. Koristimo biblioteku speakeasy, ali možete odabrati bilo koju drugu.

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

Provjera valjanosti 2FA koda unesenog od strane korisnika:

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

3 Slanje 2FA koda

Za slanje 2FA koda možete koristiti blockchain čvor API, JS API biblioteku ili konzolu. U ovom primjeru koristimo konzolu — to je Command Line Interface, alat koji pojednostavljuje interakciju s blockchainom. Da biste poslali poruku s 2FA kodom, trebate koristiti 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 — korištenje metode send u JS API biblioteci.

4 Korisničko sučelje

Korisniku treba omogućiti unos 2FA koda, što se može učiniti na različite načine, ovisno o platformi vaše aplikacije. U našem primjeru to je Vue.

Prijelazite na sigurnu 2FA na blockchainu

Izvorni kod demonstracijske aplikacije za dvostruku autentifikaciju na blockchainu može se pogledati na GitHub. U Readme-u postoji link na Live demo za isprobavanje.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster