SMS sporočila so najbolj priljubljena metoda dvostopenjske avtentikacije (2FA). Uporabljajo ga banke, elektronske in kripto denarnice, poštni predali in vse vrste storitev;
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.
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
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 -
Maja je ameriško pravobranilstvo za vzhodno okrožje Michigana
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:
- 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.
- 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.
- 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
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
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
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.
V članku
- 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:
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:
- 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.
- 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.
- V strežnik dodajte skript za pošiljanje kod uporabniku v messengerju blockchain.
- 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.
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.
2 Ustvarjanje kod 2FA
Za vsako prijavo uporabnika je treba ustvariti kodo 2FA. Uporabljamo knjižnico
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.
Izvorno kodo za predstavitveno aplikacijo za dvofaktorsko avtentikacijo blockchain si lahko ogledate na
Vir: www.habr.com