Liigume üle kaitstud 2FA-le plokiahelal

SMS-sõnumid on kõige populaarsem kaheastmelise autentimise (2FA) viis. Seda kasutavad pangad, elektroonilised ja krüptovaluuta rahakotid, postkastid ja mitmesugused teenused; meetodi kasutajate arv läheneb 100%-le.

Mulle teeb selline olukord pahameelt, kuna see meetod ei ole turvaline. Numbrite ülekandmine ühelt SIM-kaardilt teisele on alates mobiilse ajastu algusest levinud praktika — just nii taastatakse number kaotatud SIM-kaardi korral. "Digitaalsete rahade võtmise spetsialistid" mõistsid: "SIM-kaardi ümberkirjutamise" võimalust saab kasutada petturlikes skeemides. See, kes kontrollib SIM-kaarti, võib hallata teiste online-pangandust, elektroonilisi rahakotisid ja isegi krüptovaluutat. Teise isiku numbri omandamine on võimalik telecomi töötaja altkäemaksu, petmise või vale dokumentide kaudu.

Liigume üle kaitstud 2FA-le plokiahelal

On paljastatud tuhandeid SIM-vahetuse juhtumeid — nii kutsutakse seda petuskeemi. Häda ulatus viitab sellele, et maailm loobub peagi SMS-põhisest 2FA-st. Kuid seda ei juhtu — uurimuses öeldakse, et 2FA meetodi valivad mitte kasutajad, vaid teenusepakkujad.

Pakume välja turvalise 2FA meetodi, kus ühekordsed koodid saadetakse plokiahela kaudu, ja seletame, kuidas teenuse omanik selle aktiveerida saab.

Käib arve miljonite peale

2019. aastal kasvas SIM-kaardi vahetamise petmine Londoni poliisi andmetel 63% võrra, samas kui kurjategija „keskmine tšekk” on 4,000 GBP. Venemaa statistikat ei leidnud, aga arvan, et sealne olukord on veel hullem.

SIM-kaardi vahetamine on kasutusel populaarsete kontode varastamiseks Twitteris, Instagramis, Facebookis, VK-s, pangakontodel, ja hiljuti on nad jõudnud ka krüptovaluutani — teatab ajaleht Times bitcoini ettevõtja Joby Wicks'i sõnul. Hästi tuntud juhtumeid krüptovaluutade vargusest SIM-kaardi vahetamise abil on ajakirjanduses kajastatud alates 2016. aastast; 2019. aastal saavutati tõeline tipp.

Mais esitasid USA prokuratuur Michiganist süüdistuse üheksa noort vanuses 19 kuni 26 aastat: nad kuuluvad kahtlustatavasti häkkerite grupi „The Community“ („Kogukond“) alla. Grupi süüdistatakse seitsmes SIM-swap rünnakus, mille käigus häkkerid varastasid krüptovaluutat kokku enam kui 2,4 miljoni dollari väärtuses. Aprillis sai Kaliforniast pärit üliõpilane Joel Ortiz SIM-swapimise eest 10 aastat vanglas, tema saagiks oli 7,5 miljonit dollarit krüptovaluutades.

Liigume üle kaitstud 2FA-le plokiahelal
Foto Joel Ortizest pressikonverentsil ülikoolis. Kaks aastat hiljem peetakse ta kinni küberpettuse eest.

SIM-swapimise toimimisprintsiip

„Swapimine“ tähendab vahetamist. Kõikides sarnastes skeemides omastavad kurjategijad ohvri telefoninumbri, tavaliselt SIM-kaardi ümbervahetamise kaudu, ja kasutavad seda parooli taastamiseks. Tüüpiline SIM-swapimine näeb teoreetiliselt välja nii:

  1. Uurimine. Petturid saavad teada ohvri isikuandmed: nimi ja telefon. Neid saab leida avalikest allikatest (sotsiaalmeedia, sõbrad) või saada kaasosaliselt — mobiilioperaatori töötajalt.
  2. Blokeerimine. Ohvri SIM-kaart deaktiveeritakse; selleks piisab, kui helistada teenindusse, teatada number ja öelda, et telefon on kadunud.
  3. Numbripüüd, toote numbril oma SIM-kaardile. Tavaliselt toimub see ka telekomiettevõttes esindaja kaudu või dokumendi valeesitamise abil.

Tegelikus elus on kõik veelgi karmim. Kurjategijad valivad ohvri, seejärel jälgivad nad pidevalt mobiiltelefoni asukohta — ühe roamingusse viimise teabe küsimine maksab 1-2 senti. Kui SIM-kaardi omanik välismaal viibib, lepivad nad edasimüüjaga kokku, et saaks uue SIM-kaardi. See maksab umbes 50 dollarit (olen leidnud teavet, et erinevates riikides ja erinevate operaatorite puhul varieerub hind 20 dollarist 100 dollarini), halvemal juhul vallandatakse edasimüüja — vastutust selle eest ei ole.

Nüüd saavad kurjategijad kõik SMS-d, kuid mobiiltelefoni omanik ei saa sellega midagi teha — ta on välismaal. Edasi saavad kurjategijad juurdepääsu kõikidele ohvri kontodele ja vajadusel muudavad paroolid.

Võimalused varastatud varade tagasisaamiseks

Banka mõnikord aitavad ohvreid ja tühistavad nende kontodelt tehtud ülekanded. Seetõttu suudetakse fiat-valuutat tagasi saada, isegi kui kurjategijat pole leitud. Kuid krüptorahakottidega on keerulisem — ja tehniliselt, ja seaduslikult. Seni ei ole ükski börs/rahakott maksnud hüvitisi swapingu ohvritele.

Kui ohvrid soovivad oma raha kohtus tagasi saada, süüdistavad nad operaatorit: just tema lõi tingimused raha varastamiseks kontolt. Just nii käitus Michael Terpin, kes kaotas swapingu tõttu 224 miljonit dollarit. Praegu kohtustab ta telekommunikatsiooniettevõtet AT&T.

Liigume üle kaitstud 2FA-le plokiahelal

Praegu ei oma ükski riik töökindlaid skeeme, et seaduslikult kaitsta krüptovaluutade omanikke. Oma kapitali kindlustamine või kahju hüvitamine ei ole võimalik. Seetõttu on swapingu rünnaku ennetamine kergem kui selle tagajärgedega tegelemine. Kõige ilmsem viis on kasutada usaldusväärsemat „teist tegurit“ 2FA jaoks.

SIM-swap on ainult üks probleem 2FA SMS-iga

Kinnitatud koodid SMS-is ei ole ohutud ka tehnilisest küljest. Sõnumeid saab pealt kuulata Signaling System 7 (SS7) süsteemi vältimatute haavatavuste tõttu. SMS-i 2FA on ametlikult tunnustatud ebaturvaliseks (USA Rahvuslik Standardite ja Tehnoloogia Instituut räägib sellest oma digitaalse autentimise juhendis).

Samas 2FA olemasolu tekitab sageli kasutajates vale turvatunde, mistõttu valivad nad lihtsama parooli. Seetõttu ei too selline autentimine tõeliselt takistusi, vaid hoopis hõlbustab pahatahtlikul kasutajal kontole juurdepääsu.

Lisaks tuleb tihti SÕNUMID suure viivitusega või need ei tule üldse.

Teised 2FA meetodid

Muidugi ei piirdu 2FA vaid nutitelefonide ja SMS-idega. On ka teisi 2FA meetodeid. Näiteks ühekordsed TAN-koodid: see on lihtne, kuid toimiv meetod, mida kasutatakse endiselt mõnedes pankades. Samuti on olemas süsteemid, mis kasutavad biomeetrilisi andmeid: sõrmejälgi, võrkkesta skaneeringut. Veel üks variant, mis tundub mõistlik kompromiss mugavuse, usaldusväärsuse ja hinna osas, on spetsiaalsed 2FA rakendused: RSA Token, Google Authenticator. Samuti on olemas füüsilised võtmed ja teised meetodid.

Teoreetiliselt näeb kõik välja loogiliselt ja usaldusväärselt. Kuid praktikas on kaasaegsetel 2FA lahendustel probleeme, ja nende tõttu erineb reaalsus ootustest.

Vastavalt uuringule, 2FA kasutamine on põhimõtteliselt tüütu, samas kui 2FA SMS-iga populaarsus on seletatav “väiksema tüütusega võrreldes teiste meetoditega” — ühekordsete koodide vastuvõtt on kasutajale arusaadav.

Paljusid 2FA meetodeid seostatakse hirmuga, et juurdepääs kaob. Füüsilist võtme või TAN-paroolide nimekirja võib kaotada või need võivad varastada. Isiklikult on mul olnud negatiivne kogemus Google Authenticatoriga. Minu esimene nutitelefon, kus see rakendus oli, katkestas — hinnake mu vaeva, et taastada juurdepääs kontodele. Teine probleem on üleminek uuele seadmele. Google Authenticator ei võimalda eksportimist turvakaalutlustel (kui võtmeid saab eksportida, siis milline turvalisus see on?). Üks kord ma edastasin võtmed käsitsi, aga seejärel otsustasin, et on lihtsam hoida vana nutitelefoni karbiga riiulil.

2FA meetod peab olema:

  • Turvaline — juurdepääs kontole peab olema ainult teie, mitte kurjategijad
  • Usaldusväärne — juurdepääs kontole on alati võimalik, kui seda on vaja
  • Mugav ja kergesti kätte saadav — 2FA kasutamine peab olema arusaadav ja võtma minimaalselt aega
  • Odav

Me usume, et blockchain on sobiv lahendus.

Kasuta 2FA-d blockchainis

Kasutaja jaoks näeb 2FA blockchainis välja sama, nagu ühekordsete koodide saamine SMS-i kaudu. Erinevus on vaid edastuskanalis. 2FA-koodi saamise meetod sõltub sellest, mida blockchain pakub. Meie projektis (info minu profiilis) on see veebirakendus, Tor, iOS, Android, Linux, Windows, MacOS.

Teenused genereerivad ühekordse koodi ja saadavad selle blockchaini messengeri. Edasi - nagu kombeks: kasutaja enterib saadud koodi teenuse liidesesse ja autentib ennast.

Liigume üle kaitstud 2FA-le plokiahelal

Artiklis Kuidas töötab detsentraliseeritud sõnumivahetus plokiahelal Ma kirjutasin, et blockchain tagab sõnumite edastamise turvalisuse ja privaatsuse. 2FA koodide saatmise osas toon välja:

  • Üks klikk konto loomiseks - ei mingeid telefoninumbreid ega e-kirju.
  • Kõik 2FA koodidega sõnumid on šifreeritud End-to-End curve25519xsalsa20poly1305.
  • MITM-rünnakud on välistatud - iga 2FA koodi sõnum on blockchainis tehing ja allkirjastatud Ed25519 EdDSA.
  • 2FA koodiga sõnum satub oma blokki. Blokktehingute järjestust ja ajatemplit ei saa muuta, seega ei muutu sõnumite järjekord.
  • Pole tsentraliseeritud struktuuri, mis kontrolliks sõnumi „usaldusväärsust“. Seda teevad konsensusele põhinevad jaotatud sõlmed, mis kuuluvad kasutajatele.
  • Võimetus keelata - kontosid ei saa blokeerida ja sõnumeid kustutada.
  • Ju erişim 2FA kodlarına istənilən cihazdan, istənilən vaxt.
  • 2FA kodu ilə mesajın çatdırılmasının təsdiqi. Bir dəfəlik parol göndərən xidmət, onun çatdırıldığını dəqiq biləcək. “Təkrar göndər” düyməsi yoxdur.

Digər 2FA metodları ilə müqayisə üçün cədvəl hazırladım:

Liigume üle kaitstud 2FA-le plokiahelal

İstifadəçi kodları almaq üçün blokçeyn mesencerindəki hesabı bir saniyə içində alır — giriş yalnız passfrase ilə həyata keçirilir. Buna görə də istifadə imkanları müxtəlif ola bilər: bütün xidmətlər üçün bir hesabdan kodlar almaq mümkündür, ya da hər xidmət üçün ayrı hesab yaratmaq olar.

Bununla birlikdə, bir narahatlıq var — hesabda ən az bir tranzaksiya olmalıdır. İstifadəçi kodu ilə şifrələnmiş mesaj ala bilmək üçün onun açıq açarını bilməlidir, bu isə blokçeyndə yalnız ilk tranzaksiya ilə ortaya çıxır. Biz bu vəziyyətdən çıxış yolu tapdıq: cüzdanda pulsuz tokenlər əldə etməyə imkan yaratdıq. Lakin daha düzgün həll yoludur — hesabı açıq açar ilə adlandırmaq. (Müqayisə üçün, bizim hesab nömrəmiz U1467838112172792705 açıq açardan törəmədir cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Messengeri jaoks on see mugavam ja loetavam, kuid 2FA-koodide saatmise süsteemi jaoks on see piirang). Arvan, et tulevikus teeb keegi sellise lahenduse ja tõlgib "Mugavus ja kergesti kättesaadavus" rohelisse tsooni.

2FA-koodi saatmise hind on tõeliselt madal — 0.001 ADM, praegu on see 0.00001 USD. Ühtlasi on võimalik luua oma plokiahel ja teha hind nulliks.

Kuidas ühendada 2FA plokiahel teie teenusega

Loodan, et suudsin huvitada mitmeid lugejaid, et lisada plokiahela autentimine oma teenustele.

Käsitlen seda meie messengeri näitel, ja samasugust lähenemist saate kasutada ka teiste plokiahelate puhul. 2FA demorakenduses kasutame postgresql10 kontoinformatsiooni säilitamiseks.

Ühendamise etapid:

  1. Looge plokiahelakonto, millest saadate 2FA-koode. Saate pääsukoodi, mida kasutatakse sõnumite krüpteerimiseks koodide ja tehingute allkirjastamiseks.
  2. Lisage oma serverisse skript 2FA-koodide genereerimiseks. Kui kasutatakse juba mõnda muud 2FA meetodit ühekordsete paroolide kohaletoimetamiseks, on see etapp teil juba tehtud.
  3. Lisage oma serverisse skript, et saata koode kasutajale plokiahelateade.
  4. Looge kasutajaliides koodi 2FA saatmiseks ja sisestamiseks. Kui kasutate juba mõnda muud meetodit 2FA-d, kus saadetakse ühekordseid salasõnu, on see etapp teil juba lõpule viidud.

1 Konto loomine

Konto loomine plokiahelas tähendab privaatvõtme, avaliku võtme ja selle põhjal loodud konto aadressi genereerimist.

Liigume üle kaitstud 2FA-le plokiahelal

Esmalt genereeritakse BIP39 fraas, millest arvutatakse SHA-256 räsihash. Hashi kasutatakse privaatvõtme ks ja avaliku võtme kp genereerimiseks. Avalikust võtmest saame sama SHA-256 abil, pööratuna, plokiahela aadressi.

Kui soovite iga kord uue konto kaudu saata 2FA koode, tuleb konto loomiseks vajalik kood lisada serverisse:

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

Meie demorakenduses oleme protsessi lihtsustanud — loonud veebirakenduses ühe konto ja saadame koodid sellelt. Enamasti on see mugavam ka kasutajatele: nad teavad, et teenus saadab 2FA koode konkreetselt sellelt kontolt ja saavad selle nimeta.

Liigume üle kaitstud 2FA-le plokiahelal

2 2FA koodide genereerimine

2FA koodi tuleb genereerida iga kasutaja sisselogimise korral. Me kasutame raamatukogu speakeasy, kuid võite valida ka mistahes muu.

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

Kontrolli kasutaja sisestatud 2FA koodi kehtivust:

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

3 2FA koodi saatmine

2FA-koodi saatmiseks võite kasutada blockchain-node'i API-d, JS API raamatukogu või konsooli. Sellel näitel kasutame konsooli — see on käsurealiides, tööriist, mis lihtsustab suhtlemist blockchainiga. 2FA-koodiga sõnumi saatmiseks tuleb kasutada käsku saada sõnum konsoolis.

const util = require('util');
const exec = util.promisify(require('child_process').exec);

…

const command = `adm send message ${adamantAddress} "2FA kood: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

Alternatiivne viis sõnumite saatmiseks on kasutada meetodit send JS API raamatukogus.

4 Kasutajaliides

Kasutajale tuleb anda võimalus sisestada 2FA kood, seda saab teha erinevatel viisidel sõltuvalt teie rakenduse platvormist. Meie näites on see Vue.

Liigume üle kaitstud 2FA-le plokiahelal

Blockchainil põhineva kahefaktorilise autentimise demonstratsioonrakenduse lähtekoodi saab vaadata GitHub. Readme-s on link Live demo'le, et proovida.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster