Presuňte sa, aby ste zabezpečili 2FA na blockchaine

SMS správy sú najobľúbenejšou metódou dvojfaktorovej autentifikácie (2FA). Používajú ho banky, elektronické a kryptopeňaženky, poštové schránky a všetky druhy služieb; počet používateľov metódy sa blíži k 100 %.

Som rozhorčený týmto scenárom, pretože táto metóda nie je bezpečná. Na začiatku mobilnej éry začali preraďovať číslo z jednej SIM karty na druhú – takto sa číslo obnoví pri strate SIM karty. „Špecialisti na krádeže digitálnych peňazí“ si uvedomili, že možnosť „prepísať SIM kartu“ môže byť použitá v podvodných schémach. Koniec koncov, ten, kto ovláda SIM kartu, môže ovládať online bankovníctvo iných ľudí, elektronické peňaženky a dokonca aj kryptomenu. A môžete sa zmocniť čísla inej osoby podplatením zamestnanca telekomunikácie, použitím podvodu alebo sfalšovaných dokumentov.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Boli odhalené tisíce epizód výmeny SIM kariet, ako sa táto podvodná schéma nazýva. Rozsah katastrofy naznačuje, že svet čoskoro opustí 2FA prostredníctvom SMS. Ale to sa nestane - v študovať hovoria, že metódu 2FA si nevyberajú používatelia, ale majitelia služieb.

Navrhujeme použiť zabezpečenú metódu 2FA s doručovaním jednorazových kódov cez blockchain a povieme vám, ako to môže vlastník služby pripojiť.

Počet ide do miliónov

V roku 2019 sa podvody pri výmene SIM kariet podľa londýnskej polície zvýšili o 63 % a „priemerný účet“ útočníka bol 4,000 XNUMX GBP. V Rusku som nenašiel žiadne štatistiky, ale predpokladám, že sú ešte horšie.

Výmena SIM kariet sa používa na odcudzenie populárnych účtov na Twitteri, Instagrame, Facebooku, VK, bankových účtov a nedávno dokonca aj kryptomien – Informuje o tom denník Times podľa bitcoinového podnikateľa Joby Weeks. Od roku 2016 sa v tlači objavujú veľmi známe prípady krádeže kryptomien pomocou výmeny SIM kariet; Rok 2019 zaznamenal skutočný vrchol.

V máji Úrad prokurátora USA pre východný okres Michiganu vzniesli obvinenia deväť mladých ľudí vo veku od 19 do 26 rokov: predpokladá sa, že sú súčasťou hackerského gangu s názvom „The Community“. Gang je obvinený zo siedmich swapových útokov, v dôsledku ktorých hackeri ukradli kryptomenu v hodnote viac ako 2,4 milióna dolárov. A v apríli dostal kalifornský študent Joel Ortiz 10 rokov väzenia za výmenu SIM karty; jeho produkcia bola 7.5 milióna dolárov v kryptomenách.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine
Fotografia Joela Ortiza na tlačovej konferencii univerzity. O dva roky neskôr bude zadržaný za kybernetické podvody.

Ako funguje výmena SIM

„Výmena“ znamená výmenu. Vo všetkých takýchto schémach zločinci prevezmú telefónne číslo obete, zvyčajne prostredníctvom opätovného vydania SIM karty, a použijú ju na obnovenie hesla. Typická výmena SIM kariet teoreticky vyzerá takto:

  1. Spravodajská služba. Podvodníci zistia osobné údaje obete: meno a telefónne číslo. Možno ich nájsť v otvorených zdrojoch (sociálne siete, priatelia) alebo ich dostať od komplica – zamestnanca mobilného operátora.
  2. Blokovanie. SIM karta obete je deaktivovaná; Ak to chcete urobiť, stačí zavolať na technickú podporu poskytovateľa, poskytnúť číslo a povedať, že telefón sa stratil.
  3. Zachyťte, preneste číslo na kartu SIM. Zvyčajne sa to robí aj prostredníctvom komplica v telekomunikačnej spoločnosti alebo falšovaním dokumentov.

V skutočnom živote sú veci ešte vážnejšie. Útočníci si vyberú obeť a následne denne sledujú polohu telefónu – jedna žiadosť o získanie informácie o tom, že účastník prešiel na roaming, stojí 1-2 centy. Hneď ako majiteľ SIM karty odíde do zahraničia, dohodne sa s vedúcim v komunikačnom obchode o vydaní novej SIM karty. Stojí to asi 50 USD (informácie som našiel - v rôznych krajinách a u rôznych operátorov od 20 do 100 USD) a v najhoršom prípade manažéra vyhodia - za toto nenesie zodpovednosť.

Teraz budú všetky SMS dostávať útočníci a majiteľ telefónu s tým nebude môcť nič robiť - je v zahraničí. A potom darebáci získajú prístup ku všetkým účtom obete a v prípade potreby zmenia heslá.

Šanca na vrátenie ukradnutého majetku

Banky niekedy obetiam vyjdú v ústrety a stiahnu prevody zo svojich účtov. Preto je možné vrátiť fiat peniaze, aj keď sa zločinec nenájde. Ale s kryptomenovými peňaženkami je všetko komplikovanejšie - a technickya legislatívne. Doteraz ani jedna burza/peňaženka nevyplatila odškodné obetiam swapovania.

Ak chcú poškodení brániť svoje peniaze na súde, vinia operátora: vytvoril podmienky na krádež peňazí z účtu. Presne to som urobil Michael Turpin, ktorý kvôli swapovaniu prišiel o 224 miliónov dolárov.Teraz žaluje telekomunikačnú spoločnosť AT&T.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Zatiaľ žiadny štát nemá fungujúce schémy na zákonnú ochranu vlastníkov kryptomien. Nie je možné poistiť svoj kapitál alebo získať náhradu za jeho stratu. Zabrániť swapovému útoku je preto jednoduchšie ako riešiť jeho následky. Najzrejmejším spôsobom je použitie spoľahlivejšieho „druhého faktora“ pre 2FA.

Výmena SIM nie je jediným problémom 2FA cez SMS

Potvrdzovacie kódy v SMS sú nebezpečné aj z technického hľadiska. Správy môžu byť zachytené v dôsledku neopravených zraniteľností v signalizačnom systéme 7 (SS7). 2FA cez SMS je oficiálne uznaná ako nezabezpečená (uvádza to americký Národný inštitút pre štandardy a technológie Sprievodca digitálnou autentifikáciou).

Prítomnosť 2FA zároveň často dáva používateľovi pocit falošného bezpečia a volí jednoduchšie heslo. Takáto autentifikácia teda nesťažuje, ale uľahčuje útočníkovi získať prístup k účtu.

A často SMS prichádzajú s veľkým oneskorením alebo neprídu vôbec.

Ďalšie metódy 2FA

Svetlo sa samozrejme nezbiehalo na smartfóny a SMS. Existujú aj iné metódy 2FA. Napríklad jednorazové TAN kódy: primitívna metóda, ale funguje - v niektorých bankách sa stále používa. Existujú systémy využívajúce biometrické údaje: odtlačky prstov, skeny sietnice. Ďalšou možnosťou, ktorá sa javí ako rozumný kompromis z hľadiska pohodlia, spoľahlivosti a ceny, sú špeciálne aplikácie pre 2FA: RSA Token, Google Authenticator. Existujú aj fyzické kľúče a iné metódy.

Teoreticky všetko vyzerá logicky a spoľahlivo. No v praxi majú moderné 2FA riešenia problémy a kvôli nim sa realita líši od očakávaní.

Podľa prieskum, používanie 2FA je v zásade nevýhodou a popularita 2FA prostredníctvom SMS sa vysvetľuje „menšou nepríjemnosťou v porovnaní s inými metódami“ - príjem jednorazových kódov je pre používateľa pochopiteľný.

Používatelia spájajú mnohé metódy 2FA so strachom, že stratia prístup. Fyzický kľúč alebo zoznam hesiel TAN sa môže stratiť alebo ukradnúť. Osobne mám zlé skúsenosti s aplikáciou Google Authenticator. Môj prvý smartfón s touto aplikáciou sa pokazil - oceňte moje úsilie pri obnovení prístupu k mojim účtom. Ďalším problémom je prechod na nové zariadenie. Google Authenticator nemá možnosť exportu z bezpečnostných dôvodov (ak je možné exportovať kľúče, aké je zabezpečenie?). Raz som kľúče nosil ručne a potom som sa rozhodol, že je jednoduchšie nechať starý smartfón v krabici na poličke.

Metóda 2FA by mala byť:

  • Bezpečné – prístup k vášmu účtu by ste mali získať iba vy a nie útočníci
  • Spoľahlivý – získate prístup k svojmu účtu, kedykoľvek ho budete potrebovať
  • Pohodlné a dostupné - používanie 2FA je jasné a zaberie minimum času
  • Lacné

Veríme, že blockchain je tým správnym riešením.

Použite 2FA na blockchaine

Pre používateľa vyzerá 2FA na blockchaine rovnako ako prijímanie jednorazových kódov cez SMS. Jediný rozdiel je doručovací kanál. Spôsob získania kódu 2FA závisí od toho, čo blockchain ponúka. V našom projekte (informácie sú v mojom profile) ide o webovú aplikáciu, Tor, iOS, Android, Linux, Windows, MacOS.

Služba vygeneruje jednorazový kód a odošle ho messengerovi na blockchaine. Potom postupujte klasicky: používateľ zadá prijatý kód v rozhraní služby a prihlási sa.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Tento článok Ako funguje decentralizovaný messenger na blockchaine? Napísal som, že blockchain zaisťuje bezpečnosť a súkromie prenosu správ. V otázke zasielania 2FA kódov vyzdvihnem:

  • Jedným kliknutím vytvoríte účet – žiadne telefóny ani e-maily.
  • Všetky správy s 2FA kódmi sú šifrované End-to-End krivka25519xsalsa20poly1305.
  • Útok MITM je vylúčený – každá správa s kódom 2FA je transakciou na blockchaine a je podpísaná Ed25519 EdDSA.
  • Správa s kódom 2FA končí vo vlastnom bloku. Postupnosť a časovú pečiatku blokov nemožno opraviť, a teda ani poradie správ.
  • Neexistuje žiadna centrálna štruktúra, ktorá by kontrolovala „pravosť“ správy. Robí to distribuovaný systém uzlov založený na konsenze a je vo vlastníctve používateľov.
  • Nedá sa deaktivovať – účty sa nedajú zablokovať a správy sa nedajú vymazať.
  • Prístup ku kódom 2FA z akéhokoľvek zariadenia kedykoľvek.
  • Potvrdenie doručenia správy kódom 2FA. Služba, ktorá posiela jednorazové heslo, s istotou vie, že bolo doručené. Žiadne tlačidlá „Odoslať znova“.

Na porovnanie s niektorými inými metódami 2FA som vytvoril tabuľku:

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Používateľ dostane účet v blockchain messenger, aby dostal kódy za sekundu - na prihlásenie sa používa iba prístupová fráza. Spôsoby aplikácie sa preto môžu líšiť: môžete použiť jeden účet na prijímanie kódov pre všetky služby alebo si môžete vytvoriť samostatný účet pre každú službu.

Je tu aj nepríjemnosť – na účte musí byť aspoň jedna transakcia. Na to, aby používateľ dostal zašifrovanú správu s kódom, potrebujete poznať jeho verejný kľúč a ten sa v blockchaine objaví až pri prvej transakcii. Takto sa nám z toho podarilo dostať: dali sme im možnosť získať bezplatné žetóny do peňaženky. Lepším riešením je však pomenovať účet verejným kľúčom. (Pre porovnanie máme číslo účtu U1467838112172792705 je derivát verejného kľúča cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pre messenger je to pohodlnejšie a čitateľnejšie, ale pre systém na posielanie 2FA kódov je to obmedzenie). Myslím si, že v budúcnosti sa niekto takto rozhodne a presunie “Pohodlnosť a dostupnosť” do zelenej zóny.

Cena za odoslanie 2FA kódu je naozaj nízka - 0.001 ADM, teraz je to 0.00001 USD. Opäť môžete zvýšiť svoj blockchain a dosiahnuť nulovú cenu.

Ako pripojiť 2FA na blockchaine k vašej službe

Dúfam, že sa mi podarilo zaujať niekoľkých čitateľov, aby do svojich služieb pridali autorizáciu blockchainu.

Poviem vám, ako to urobiť pomocou nášho messenger ako príklad, a analogicky môžete použiť iný blockchain. V demo aplikácii 2FA používame postgresql10 na ukladanie informácií o účte.

Fázy pripojenia:

  1. Vytvorte si účet na blockchaine, z ktorého budete posielať 2FA kódy. Dostanete prístupovú frázu, ktorá sa používa ako súkromný kľúč na šifrovanie správ pomocou kódov a na podpisovanie transakcií.
  2. Pridajte skript na svoj server na generovanie kódov 2FA. Ak už používate akúkoľvek inú metódu 2FA s jednorazovým doručením hesla, tento krok ste už dokončili.
  3. Pridajte skript na svoj server na odosielanie kódov používateľovi v blockchain messenger.
  4. Vytvorte používateľské rozhranie na odosielanie a zadávanie kódu 2FA. Ak už používate akúkoľvek inú metódu 2FA s jednorazovým doručením hesla, tento krok ste už dokončili.

1 Vytvorenie účtu

Vytvorenie účtu v blockchaine znamená vygenerovanie súkromného kľúča, verejného kľúča a odvodenej adresy účtu.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Najprv sa vygeneruje prístupová fráza BIP39 a z nej sa vypočíta hash SHA-256. Hash sa používa na generovanie súkromného kľúča ks a verejného kľúča kp. Z verejného kľúča pomocou rovnakého SHA-256 s inverziou získame adresu v blockchaine.

Ak chcete posielať kódy 2FA zakaždým z nového účtu, kód na vytvorenie účtu bude potrebné pridať 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()
}

V demo aplikácii sme to zjednodušili - vytvorili sme jeden účet vo webovej aplikácii a posielali sme z neho kódy. Vo väčšine prípadov je to pre používateľa aj pohodlnejšie: vie, že služba posiela 2FA kódy z konkrétneho účtu a vie ho pomenovať.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

2 Generovanie 2FA kódov

Pre každé prihlásenie užívateľa je potrebné vygenerovať 2FA kód. Využívame knižnicu Speakeasy, ale môžete si vybrať akýkoľvek iný.

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

Kontrola platnosti 2FA kódu zadaného používateľom:

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

3 Odosielanie kódu 2FA

Na odoslanie kódu 2FA môžete použiť blockchain node API, knižnicu JS API alebo konzolu. V tomto príklade používame konzolu – toto je rozhranie príkazového riadka, nástroj, ktorý zjednodušuje interakciu s blockchainom. Ak chcete odoslať správu s kódom 2FA, musíte použiť príkaz send message konzoly.

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

Alternatívnym spôsobom odosielania správ je použitie metódy send v knižnici JS API.

4 Používateľské rozhranie

Používateľovi musí byť poskytnutá možnosť zadať kód 2FA, čo možno vykonať rôznymi spôsobmi v závislosti od vašej aplikačnej platformy. V našom príklade je to Vue.

Presuňte sa, aby ste zabezpečili 2FA na blockchaine

Zdrojový kód pre blockchainovú dvojfaktorovú autentifikačnú demo aplikáciu si môžete pozrieť na GitHub. V súbore Readme je odkaz na živé demo, kde si ho môžete vyskúšať.

Zdroj: hab.com

Pridať komentár