Premaknite se na varno 2FA na verigi blokov

SMS sporočila so najbolj priljubljena metoda dvostopenjske avtentikacije (2FA). Uporabljajo ga banke, elektronske in kripto denarnice, poštni predali in vse vrste storitev; število uporabnikov metode se približuje 100 %.

Ogorčen sem nad tem scenarijem, ker ta metoda ni varna. Prerazporejanje številke z ene kartice SIM na drugo se je začelo na začetku mobilne dobe – tako se številka obnovi ob izgubi kartice SIM. »Strokovnjaki za krajo digitalnega denarja« so ugotovili, da je možnost »ponovnega zapisa kartice SIM« mogoče uporabiti v goljufivih shemah. Navsezadnje lahko tisti, ki nadzoruje kartico SIM, nadzoruje spletno bančništvo, elektronske denarnice in celo kriptovalute drugih ljudi. Številko druge osebe se lahko polastite s podkupovanjem uslužbenca telekomunikacij, s prevaro ali ponarejenimi dokumenti.

Premaknite se na varno 2FA na verigi blokov

Odkritih je bilo na tisoče primerov zamenjave kartice SIM, kot se imenuje ta goljufija. Obseg katastrofe kaže, da bo svet kmalu opustil 2FA prek SMS-ov. A to se ne zgodi – v raziskave pravijo, da se za metodo 2FA ne odločijo uporabniki, ampak lastniki storitev.

Predlagamo uporabo varne metode 2FA z dostavo enkratnih kod prek verige blokov in povedali vam bomo, kako jo lastnik storitve lahko poveže.

Štetje gre v milijone

Leta 2019 so se goljufije z zamenjavo SIM po podatkih londonske policije povečale za 63 %, »povprečni račun« napadalca pa je znašal 4,000 GBP. V Rusiji nisem našel statistike, a predvidevam, da je še slabša.

Zamenjava SIM se uporablja za krajo priljubljenih računov Twitter, Instagram, Facebook, VK, bančnih računov in nedavno celo kriptovalut - Časnik Times poroča glede na Bitcoin podjetnika Jobyja Weeksa. Od leta 2016 se v tisku pojavljajo odmevni primeri kraje kriptovalut z uporabo zamenjave kartice SIM; Leto 2019 je doživelo pravi vrhunec.

Maja je ameriško pravobranilstvo za vzhodno okrožje Michigana vložil obtožbe devet mladih, starih od 19 do 26 let: domnevno so del hekerske tolpe, imenovane »Skupnost«. Združba je obtožena sedmih napadov zamenjave, s katerimi so hekerji ukradli kriptovaluto v vrednosti več kot 2,4 milijona dolarjev. In aprila je kalifornijski študent Joel Ortiz prejel 10 let zapora zaradi zamenjave kartice SIM; njegova proizvodnja je znašala 7.5 milijona dolarjev v kriptovalutah.

Premaknite se na varno 2FA na verigi blokov
Fotografija Joela Ortiza na tiskovni konferenci univerze. Dve leti pozneje ga bodo pridržali zaradi kibernetske goljufije.

Kako deluje zamenjava kartice SIM

"Swaping" pomeni zamenjavo. V vseh takšnih shemah kriminalci prevzamejo telefonsko številko žrtve, običajno s ponovno izdajo kartice SIM, in jo uporabijo za ponastavitev gesla. Tipična zamenjava kartice SIM v teoriji izgleda takole:

  1. Obveščevalna služba. Goljufi izvejo osebne podatke žrtve: ime in telefonsko številko. Najdete jih lahko v odprtih virih (socialna omrežja, prijatelji) ali jih prejmete od sostorilca - zaposlenega pri mobilnem operaterju.
  2. Blokiranje. Žrtvina SIM kartica je deaktivirana; Če želite to narediti, pokličite tehnično podporo ponudnika, navedite številko in povejte, da je bil telefon izgubljen.
  3. Zajemite, prenesite številko na kartico SIM. Običajno se to naredi tudi prek sostorilca v telekomunikacijskem podjetju ali s ponarejanjem listin.

V resničnem življenju so stvari še hujše. Napadalci izberejo žrtev in nato dnevno spremljajo lokacijo telefona - ena zahteva za prejem informacije, da je naročnik prešel na gostovanje, stane 1-2 centa. Takoj, ko lastnik SIM kartice odide v tujino, se z vodjo komunikacijske trgovine dogovori za izdajo nove SIM kartice. Stane približno 50 $ (našel sem podatke - v različnih državah in pri različnih operaterjih od 20 do 100 $), v najslabšem primeru pa bo upravitelj odpuščen - za to ni odgovornosti.

Zdaj bodo vsi SMS prejeli napadalci, lastnik telefona pa ne bo mogel storiti ničesar glede tega - je v tujini. Nato zlikovci pridobijo dostop do vseh računov žrtve in po želji spremenijo gesla.

Možnost vračila ukradenega premoženja

Banke žrtvam včasih ustrežejo na pol in dvignejo nakazila z njihovih računov. Zato je mogoče vrniti fiat denar, tudi če zločinca ne najdejo. Toda z denarnicami za kriptovalute je vse bolj zapleteno - in tehnično, in zakonodajno. Doslej še nobena menjalnica/denarnica ni plačala odškodnine žrtvam zamenjave.

Če želijo oškodovanci braniti svoj denar na sodišču, krivijo operaterja: ustvaril je pogoje za krajo denarja z računa. Točno to sem naredil Michael Turpin, ki je zaradi zamenjave izgubil 224 milijonov dolarjev, zdaj toži telekomunikacijsko podjetje AT&T.

Premaknite se na varno 2FA na verigi blokov

Doslej nobena država nima delujočih shem za pravno zaščito lastnikov kriptovalut. Nemogoče je zavarovati svoj kapital ali prejeti odškodnino za njegovo izgubo. Zato je preprečiti napad zamenjave lažje kot se ukvarjati z njegovimi posledicami. Najbolj očiten način je uporaba bolj zanesljivega "drugega faktorja" za 2FA.

Zamenjava kartice SIM ni edina težava 2FA prek SMS-a

Potrditvene kode v SMS so nevarne tudi s tehničnega vidika. Sporočila je mogoče prestreči zaradi nepopravljenih ranljivosti v sistemu signalizacije 7 (SS7). 2FA prek SMS-a je uradno priznan kot nevaren (ameriški nacionalni inštitut za standarde in tehnologijo pravi, da Vodnik za digitalno avtentikacijo).

Hkrati pa prisotnost 2FA pogosto daje uporabniku občutek lažne varnosti in izbere enostavnejše geslo. Zato takšna avtentikacija napadalcu ne oteži, ampak olajša dostop do računa.

In pogosto SMS prispejo z veliko zamudo ali pa sploh ne prispejo.

Druge metode 2FA

Seveda se svetloba ni zbližala s pametnimi telefoni in SMS-i. Obstajajo tudi druge metode 2FA. Na primer, enkratne kode TAN: primitivna metoda, vendar deluje - še vedno se uporablja v nekaterih bankah. Obstajajo sistemi, ki uporabljajo biometrične podatke: prstne odtise, skeniranje mrežnice. Druga možnost, ki se zdi razumen kompromis v smislu udobja, zanesljivosti in cene, so posebne aplikacije za 2FA: RSA Token, Google Authenticator. Obstajajo tudi fizični ključi in druge metode.

V teoriji je vse videti logično in zanesljivo. Toda v praksi imajo sodobne rešitve 2FA težave in zaradi njih se realnost razlikuje od pričakovanj.

Glede na raziskave, uporaba 2FA je načeloma nevšečnost, priljubljenost 2FA prek SMS-a pa je razložena z "manj nevšečnosti v primerjavi z drugimi metodami" - prejemanje enkratnih kod je za uporabnika razumljivo.

Uporabniki mnoge metode 2FA povezujejo s strahom, da bo dostop izgubljen. Fizični ključ ali seznam gesel TAN se lahko izgubi ali ukrade. Osebno imam slabe izkušnje z Google Authenticatorjem. Moj prvi pametni telefon s to aplikacijo se je pokvaril - cenite moja prizadevanja za obnovitev dostopa do svojih računov. Druga težava je prehod na novo napravo. Google Authenticator zaradi varnostnih razlogov nima možnosti izvoza (če je ključe mogoče izvoziti, kakšna varnost je tu?). Nekoč sem ključe nosil ročno, nato pa sem se odločil, da je lažje pustiti stari pametni telefon v škatli na polici.

Metoda 2FA bi morala biti:

  • Varno - samo vi in ​​ne napadalci bi morali imeti dostop do vašega računa
  • Zanesljivo - do svojega računa imate dostop, kadar koli ga potrebujete
  • Priročno in dostopno - uporaba 2FA je jasna in traja minimalno časa
  • Poceni

Verjamemo, da je blockchain prava rešitev.

Uporabite 2FA na blockchainu

Za uporabnika je 2FA na blockchainu videti enako kot prejemanje enkratnih kod prek SMS-a. Edina razlika je kanal dostave. Metoda za pridobitev kode 2FA je odvisna od tega, kaj ponuja blockchain. V našem projektu (informacije so v mojem profilu) je to spletna aplikacija, Tor, iOS, Android, Linux, Windows, MacOS.

Storitev ustvari enkratno kodo in jo pošlje messengerju v verigi blokov. Nato sledite klasiki: uporabnik vnese prejeto kodo v vmesnik storitve in se prijavi.

Premaknite se na varno 2FA na verigi blokov

V članku Kako decentralizirani messenger deluje na blockchainu? Zapisal sem, da blockchain zagotavlja varnost in zasebnost prenosa sporočil. Pri vprašanju pošiljanja kod 2FA bom poudaril:

  • En klik za ustvarjanje računa - brez telefonov ali e-pošte.
  • Vsa sporočila s kodami 2FA so šifrirana Curve25519xsalsa20poly1305 od konca do konca.
  • Napad MITM je izključen – vsako sporočilo s kodo 2FA je transakcija v verigi blokov in je podpisano z Ed25519 EdDSA.
  • Sporočilo s kodo 2FA se konča v svojem bloku. Zaporedja in časovnega žiga blokov ni mogoče popraviti, s tem pa tudi vrstnega reda sporočil.
  • Ni centralne strukture, ki bi preverjala "pristnost" sporočila. To izvaja porazdeljen sistem vozlišč, ki temelji na soglasju, in je v lasti uporabnikov.
  • Ni ga mogoče onemogočiti – računov ni mogoče blokirati in sporočil ni mogoče izbrisati.
  • Dostopajte do kod 2FA iz katere koli naprave kadar koli.
  • Potrditev dostave sporočila s kodo 2FA. Storitev, ki pošlje enkratno geslo, zagotovo ve, da je bilo dostavljeno. Brez gumbov »Pošlji znova«.

Za primerjavo z nekaterimi drugimi metodami 2FA sem naredil tabelo:

Premaknite se na varno 2FA na verigi blokov

Uporabnik prejme račun v messengerju blockchain za prejemanje kod v sekundi – za prijavo se uporablja le geslo. Zato so lahko načini uporabe različni: lahko uporabite en račun za prejemanje kod za vse storitve ali pa ustvarite ločen račun za vsako storitev.

Obstaja tudi neprijetnost - račun mora imeti vsaj eno transakcijo. Da uporabnik prejme šifrirano sporočilo s kodo, morate poznati njegov javni ključ, v blockchainu pa se pojavi šele ob prvi transakciji. Tako se nam je uspelo rešiti iz tega: dali smo jim možnost, da prejmejo brezplačne žetone v svojo denarnico. Vendar je boljša rešitev, da račun poimenujete javni ključ. (Za primerjavo imamo številko računa U1467838112172792705 je izpeljanka javnega ključa cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Za messenger je to bolj priročno in berljivo, za sistem za pošiljanje kod 2FA pa je to omejitev). Mislim, da se bo v prihodnosti kdo tako odločil in "Udobje in dostopnost" preselil v zeleno cono.

Cena pošiljanja kode 2FA je res nizka - 0.001 ADM, zdaj je 0.00001 USD. Spet lahko dvignete svojo verigo blokov in naredite ceno nič.

Kako povezati 2FA na blockchainu s svojo storitvijo

Upam, da mi je uspelo zainteresirati nekaj bralcev, da svojim storitvam dodajo avtorizacijo blockchain.

Povedal vam bom, kako to storiti z uporabo našega messengerja kot primera, po analogiji pa lahko uporabite drugo verigo blokov. V predstavitveni aplikaciji 2FA uporabljamo postgresql10 za shranjevanje podatkov o računu.

Faze povezave:

  1. Ustvarite račun na blockchainu, iz katerega boste pošiljali kode 2FA. Prejeli boste geslo, ki se uporablja kot zasebni ključ za šifriranje sporočil s kodami in za podpisovanje transakcij.
  2. Dodajte skript v svoj strežnik za ustvarjanje kod 2FA. Če že uporabljate katero koli drugo metodo 2FA z dostavo enkratnega gesla, ste ta korak že zaključili.
  3. V strežnik dodajte skript za pošiljanje kod uporabniku v messengerju blockchain.
  4. Ustvarite uporabniški vmesnik za pošiljanje in vnos kode 2FA. Če že uporabljate katero koli drugo metodo 2FA z dostavo enkratnega gesla, ste ta korak že zaključili.

1 Ustvarjanje računa

Ustvarjanje računa v verigi blokov pomeni generiranje zasebnega ključa, javnega ključa in izpeljanega naslova računa.

Premaknite se na varno 2FA na verigi blokov

Najprej se ustvari geslo BIP39 in iz njega se izračuna zgoščevanje SHA-256. Zgoščena vrednost se uporablja za ustvarjanje zasebnega ključa ks in javnega ključa kp. Iz javnega ključa z uporabo istega SHA-256 z inverzijo pridobimo naslov v blockchainu.

Če želite kode 2FA poslati vsakič iz novega računa, bo treba kodo za ustvarjanje računa dodati v strežnik:

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

V demo aplikaciji smo to poenostavili – ustvarili smo en račun v spletni aplikaciji in iz njega pošiljali kode. V večini primerov je to tudi bolj priročno za uporabnika: ve, da storitev pošilja kode 2FA iz določenega računa in ga lahko poimenuje.

Premaknite se na varno 2FA na verigi blokov

2 Ustvarjanje kod 2FA

Za vsako prijavo uporabnika je treba ustvariti kodo 2FA. Uporabljamo knjižnico speakeasy, lahko pa izberete katero koli drugo.

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

Preverjanje veljavnosti kode 2FA, ki jo vnese uporabnik:

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

3 Pošiljanje kode 2FA

Za oddajo kode 2FA lahko uporabite API vozlišča blockchain, knjižnico JS API ali konzolo. V tem primeru uporabljamo konzolo - to je vmesnik ukazne vrstice, pripomoček, ki poenostavi interakcijo z verigo blokov. Če želite poslati sporočilo s kodo 2FA, morate uporabiti ukaz 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 pošiljanja sporočil je uporaba metode send v knjižnici JS API.

4 Uporabniški vmesnik

Uporabniku je treba dati možnost vnosa kode 2FA, kar je mogoče storiti na različne načine, odvisno od platforme vaše aplikacije. V našem primeru je to Vue.

Premaknite se na varno 2FA na verigi blokov

Izvorno kodo za predstavitveno aplikacijo za dvofaktorsko avtentikacijo blockchain si lahko ogledate na GitHub. V Readme je povezava do predstavitve v živo, da jo preizkusite.

Vir: www.habr.com

Dodaj komentar