Liikuge, et kindlustada 2FA plokiahelas

SMS-sõnumid on kõige populaarsem kahefaktorilise autentimise (2FA) meetod. Seda kasutavad pangad, elektroonilised ja krüptorahakotid, postkastid ja kõikvõimalikud teenused; meetodi kasutajate arv läheneb 100%.

Olen selle stsenaariumi peale nördinud, sest see meetod ei ole ohutu. Numbri ümbermääramine ühelt SIM-kaardilt teisele algas mobiiliajastu alguses – nii taastub number SIM-kaardi kaotamisel. “Digitaalse rahavarguse spetsialistid” mõistsid, et “SIM-kaardi ümberkirjutamise” võimalust saab kasutada petuskeemides. Lõppude lõpuks saab see, kes juhib SIM-kaarti, juhtida teiste inimeste Interneti-panka, elektroonilisi rahakotte ja isegi krüptovaluutat. Ja saate teise inimese numbri enda valdusesse võtta, andes altkäemaksu telekommunikatsioonitöötajale, kasutades pettust või võltsitud dokumente.

Liikuge, et kindlustada 2FA plokiahelas

Tuhanded SIM-kaardi vahetamise episoodid on paljastatud, nagu seda petuskeemi nimetatakse. Katastroofi ulatus viitab sellele, et maailm loobub peagi SMS-i teel 2FA-st. Kuid seda ei juhtu - sisse uurimistöö nad ütlevad, et mitte kasutajad ei vali 2FA-meetodit, vaid teenuseomanikud.

Soovitame kasutada turvalist 2FA meetodit koos ühekordsete koodide edastamisega plokiahela kaudu ja me ütleme teile, kuidas teenuse omanik saab selle ühendada.

Arvestus ulatub miljonitesse

2019. aastal kasvas SIM-kaardi vahetamise pettus Londoni politsei andmetel 63% ja ründaja "keskmine arve" oli 4,000 GBP. Ma ei ole Venemaal statistikat leidnud, kuid eeldan, et see on veelgi hullem.

SIM-i vahetamist kasutatakse populaarsete Twitteri, Instagrami, Facebooki, VK-kontode, pangakontode ja viimasel ajal isegi krüptovaluutade varastamiseks - Teatab ajaleht The Times Bitcoini ettevõtja Joby Weeks andmetel. Kõrgetasemelised juhtumid krüptoraha vargustest SIM-kaardi vahetamise abil on ajakirjanduses ilmunud alates 2016. aastast; 2019. aastal oli tõeline tippaeg.

Mais USA Michigani idapiirkonna advokaadibüroo esitas süüdistuse üheksa noort vanuses 19–26 aastat: arvatakse, et nad kuuluvad häkkerite jõuku nimega "Kogukond". Gängi süüdistatakse seitsmes swap-rünnakus, mille tulemusena varastasid häkkerid krüptovaluutat üle 2,4 miljoni dollari väärtuses. Ja aprillis sai California üliõpilane Joel Ortiz SIM-kaardi vahetamise eest 10 aastat vanglat; tema toodang oli krüptovaluutades 7.5 miljonit dollarit.

Liikuge, et kindlustada 2FA plokiahelas
Foto Joel Ortizist ülikooli pressikonverentsil. Kaks aastat hiljem peetakse ta küberpettuste eest kinni.

Kuidas SIM-i vahetus töötab

"Vahetamine" tähendab vahetust. Kõigi selliste skeemide puhul võtavad kurjategijad üle ohvri telefoninumbri, tavaliselt SIM-kaardi uuesti väljastamise kaudu, ja kasutavad seda parooli lähtestamiseks. Tüüpiline SIM-i vahetus näeb teoreetiliselt välja selline:

  1. Luureteenistus. Petturid saavad teada ohvri isikuandmed: nime ja telefoninumbri. Neid võib leida avatud allikatest (sotsiaalvõrgustikud, sõbrad) või saada kaasosaliselt - mobiilioperaatori töötajalt.
  2. Blokeerimine. Ohvri SIM-kaart on deaktiveeritud; Selleks helistage lihtsalt teenusepakkuja tehnilisele toele, sisestage number ja öelge, et telefon läks kaduma.
  3. Jäädvustage, kandke number oma SIM-kaardile. Tavaliselt tehakse seda ka telekomiettevõtte kaasosalise või dokumentide võltsimise kaudu.

Päriselus on asjad veelgi raskemad. Ründajad valivad ohvri välja ja jälgivad seejärel iga päev telefoni asukohta – üks päring saada teavet selle kohta, et abonent on rändlusele üle läinud, maksab 1-2 senti. Niipea, kui SIM-kaardi omanik on välismaale läinud, peavad nad sidepoes juhatajaga läbirääkimisi uue SIM-kaardi väljastamiseks. Maksab umbes 50 dollarit (leidsin infot – erinevates riikides ja erinevate operaatorite juures 20–100 dollarit) ja halvimal juhul vallandatakse juht – selle eest vastutust pole.

Nüüd saavad ründajad kõik SMS-id vastu ja telefoni omanik ei saa sellega midagi ette võtta - ta on välismaal. Ja siis pääsevad kurikaelad ligi kõigile ohvri kontodele ja vahetavad soovi korral paroole.

Varastatud vara tagastamise võimalus

Mõnikord majutavad pangad kannatanuid poolel teel ja võtavad nende kontodelt ülekandeid maha. Seetõttu on võimalik fiat-raha tagastada ka siis, kui kurjategijat ei leita. Kuid krüptoraha rahakottidega on kõik keerulisem – ja tehniliselt, ja seadusandlikult. Seni pole ükski vahetus/rahakott swapi ohvritele hüvitist maksnud.

Kui ohvrid soovivad oma raha kohtus kaitsta, süüdistavad nad operaatorit: tema lõi tingimused kontolt raha varguseks. Täpselt nii ma tegingi Michael Turpin, kes kaotas vahetuse tõttu 224 miljonit dollarit. Nüüd kaebab ta kohtusse telekommunikatsiooniettevõtte AT&T.

Liikuge, et kindlustada 2FA plokiahelas

Seni pole ühelgi riigil toimivaid skeeme krüptoraha omanike seaduslikuks kaitsmiseks. Oma kapitali ei ole võimalik kindlustada ega selle kahju eest hüvitist saada. Seetõttu on vahetusrünnaku ennetamine lihtsam kui selle tagajärgedega tegelemine. Kõige ilmsem viis on kasutada 2FA jaoks usaldusväärsemat "teist tegurit".

SIM-kaardi vahetus pole SMS-i kaudu 2FA-ga ainus probleem

Ka SMS-is olevad kinnituskoodid on tehnilisest seisukohast ohtlikud. Signaling System 7 (SS7) parandamata turvaaukude tõttu saab sõnumeid pealt kuulata. 2FA SMS-i kaudu on ametlikult tunnistatud ebaturvaliseks (USA riiklik standardite ja tehnoloogia instituut ütleb seda oma Digitaalse autentimise juhend).

Samal ajal tekitab 2FA olemasolu kasutajas sageli vale turvatunde ja ta valib lihtsama parooli. Seetõttu ei muuda selline autentimine seda keeruliseks, vaid muudab ründaja kontole juurdepääsu lihtsamaks.

Ja sageli saabuvad SMS-id suure hilinemisega või ei jõua üldse.

Muud 2FA meetodid

Loomulikult ei koondunud valgus nutitelefonidele ja SMS-idele. On ka teisi 2FA meetodeid. Näiteks ühekordsed TAN-koodid: primitiivne meetod, aga töötab – mõnes pangas kasutatakse siiani. On süsteeme, mis kasutavad biomeetrilisi andmeid: sõrmejäljed, võrkkesta skaneeringud. Teine võimalus, mis tundub mugavuse, töökindluse ja hinna osas mõistliku kompromissina, on 2FA erirakendused: RSA Token, Google Authenticator. Samuti on olemas füüsilised võtmed ja muud meetodid.

Teoreetiliselt tundub kõik loogiline ja usaldusväärne. Kuid praktikas on tänapäevastel 2FA lahendustel probleeme ja nende tõttu erineb tegelikkus ootustest.

Vastavalt uurimistöö, on 2FA kasutamine põhimõtteliselt ebamugav ja 2FA populaarsus SMS-i teel on seletatav "väiksema ebamugavusega võrreldes teiste meetoditega" - ühekordsete koodide saamine on kasutajale arusaadav.

Kasutajad seostavad paljusid 2FA meetodeid hirmuga, et juurdepääs kaob. Füüsiline võti või TAN-paroolide loend võib kaduda või varastada. Mul isiklikult on Google Authenticatoriga halbu kogemusi. Minu esimene selle rakendusega nutitelefon läks katki – hindan minu pingutusi kontodele juurdepääsu taastamisel. Teine probleem on uuele seadmele üleminek. Google Authenticatoril pole turvakaalutlustel ekspordivõimalust (kui võtmeid saab eksportida, siis mis turvalisus see on?). Kunagi kandsin võtmeid käsitsi ja siis otsustasin, et lihtsam on vana nutitelefon karpi riiulile jätta.

2FA meetod peaks olema:

  • Turvaline – teie kontole peaksite saama juurdepääsu ainult teie, mitte ründajad
  • Usaldusväärne – pääsete oma kontole juurde, kui seda vajate
  • Mugav ja ligipääsetav – 2FA kasutamine on selge ja võtab minimaalselt aega
  • Odav

Usume, et plokiahel on õige lahendus.

Kasutage plokiahelas 2FA-d

Kasutaja jaoks näeb plokiahelas 2FA välja sama, mis SMS-i teel ühekordsete koodide saamine. Ainus erinevus on kohaletoimetamise kanal. 2FA-koodi saamise meetod sõltub sellest, mida plokiahel pakub. Meie projektis (teave on minu profiilis) on see veebirakendus, Tor, iOS, Android, Linux, Windows, MacOS.

Teenus genereerib ühekordse koodi ja saadab selle plokiahelas olevale sõnumitoojale. Seejärel järgi klassikat: kasutaja sisestab saadud koodi teenindusliidesesse ja logib sisse.

Liikuge, et kindlustada 2FA plokiahelas

Artikkel Kuidas detsentraliseeritud messenger plokiahelas töötab? Kirjutasin, et plokiahel tagab sõnumite edastamise turvalisuse ja privaatsuse. 2FA-koodide saatmise küsimuses tõstan esile:

  • Konto loomiseks üks klõps – ei telefone ega e-kirju.
  • Kõik 2FA-koodiga sõnumid on krüpteeritud: End-to-End curve25519xsalsa20poly1305.
  • MITM-i rünnak on välistatud – iga 2FA-koodiga sõnum on plokiahelas tehing ja selle allkirjastab Ed25519 EdDSA.
  • 2FA-koodiga teade jõuab oma plokki. Plokkide järjestust ja ajatemplit ei saa parandada ning seega ka teadete järjekorda.
  • Puudub keskne struktuur, mis kontrolliks sõnumi "autentsust". Seda teeb konsensuse alusel hajutatud sõlmede süsteem ja see kuulub kasutajatele.
  • Ei saa keelata – kontosid ei saa blokeerida ega sõnumeid kustutada.
  • Juurdepääs 2FA-koodidele mis tahes seadmest igal ajal.
  • Sõnumi kohaletoimetamise kinnitus 2FA koodiga. Teenus, mis saadab ühekordse parooli, teab kindlalt, et see on kohale toimetatud. Puuduvad nupud "Saada uuesti".

Mõne teise 2FA meetodiga võrdlemiseks koostasin tabeli:

Liikuge, et kindlustada 2FA plokiahelas

Kasutaja saab konto plokiahela messengeris, et saada koodid sekundiga – sisselogimiseks kasutatakse ainult parooli. Seetõttu võivad rakendusmeetodid olla erinevad: saate kasutada ühte kontot kõigi teenuste koodide saamiseks või saate luua iga teenuse jaoks eraldi konto.

Samuti on ebamugavus - kontol peab olema vähemalt üks tehing. Selleks, et kasutaja saaks koodiga krüpteeritud sõnumi, peate teadma tema avalikku võtit ja see ilmub plokiahelasse alles esimese tehinguga. Nii õnnestus meil sellest välja tulla: andsime neile võimaluse saada rahakotti tasuta märgid. Parem lahendus on aga nimetada konto avalikuks võtmeks. (Võrdluseks on meil kontonumber U1467838112172792705 on avaliku võtme tuletis cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Messengeri jaoks on see mugavam ja loetavam, kuid 2FA-koodide saatmise süsteemi jaoks on see piirang). Arvan, et tulevikus teeb keegi sellise otsuse ja kolib “Mugavuse ja ligipääsetavuse” rohelisse tsooni.

2FA koodi saatmise hind on tõesti madal - 0.001 ADM, nüüd on see 0.00001 USD. Jällegi saate oma plokiahelat tõsta ja hind nullida.

Kuidas ühendada plokiahelas 2FA oma teenusega

Loodan, et suutsin mõnele lugejale huvi pakkuda oma teenustele plokiahela autoriseerimise lisamiseks.

Ma ütlen teile, kuidas seda teha, kasutades näitena meie messengerit, ja analoogia põhjal saate kasutada mõnda muud plokiahelat. 2FA demorakenduses kasutame kontoteabe salvestamiseks postgresql10.

Ühendusetapid:

  1. Looge plokiahelas konto, kust saadate 2FA-koodi. Saate parooli, mida kasutatakse privaatvõtmena sõnumite koodidega krüpteerimiseks ja tehingute allkirjastamiseks.
  2. 2FA-koodide genereerimiseks lisage oma serverisse skript. Kui kasutate juba mõnda muud 2FA-meetodit ühekordse parooliedastusega, olete selle sammu juba lõpetanud.
  3. Lisage oma serverisse skript, et saata kasutajale koodid plokiahela messengeris.
  4. Looge kasutajaliides 2FA-koodi saatmiseks ja sisestamiseks. Kui kasutate juba mõnda muud 2FA-meetodit ühekordse parooliedastusega, olete selle sammu juba lõpetanud.

1 Konto loomine

Konto loomine plokiahelas tähendab privaatvõtme, avaliku võtme ja tuletatud konto aadressi genereerimist.

Liikuge, et kindlustada 2FA plokiahelas

Esiteks genereeritakse BIP39 parool ja selle põhjal arvutatakse SHA-256 räsi. Räsi kasutatakse privaatvõtme ks ja avaliku võtme kp genereerimiseks. Avalikust võtmest, kasutades sama SHA-256 inversiooniga, saame aadressi plokiahelas.

Kui soovite uuelt kontolt iga kord 2FA-koodi saata, tuleb konto loomise kood serverisse lisada:

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

Demorakenduses tegime selle lihtsamaks – lõime veebirakenduses ühe konto ja saadame sealt koodid. Enamasti on see ka kasutajale mugavam: ta teab, et teenus saadab konkreetselt kontolt 2FA-koodi ja oskab seda nimetada.

Liikuge, et kindlustada 2FA plokiahelas

2 2FA koodi genereerimine

Iga kasutaja sisselogimise jaoks tuleb genereerida 2FA kood. Kasutame raamatukogu kõva, kuid saate valida mõne muu.

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

Kasutaja sisestatud 2FA-koodi kehtivuse kontrollimine:

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

3 2FA koodi saatmine

2FA-koodi esitamiseks võite kasutada plokiahela sõlme API-d, JS API teeki või konsooli. Selles näites kasutame konsooli - see on käsurea liides, utiliit, mis lihtsustab plokiahelaga suhtlemist. 2FA-koodiga sõnumi saatmiseks peate kasutama käsku send message konsoolid.

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

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

4 Kasutajaliides

Kasutajale tuleb anda võimalus sisestada 2FA kood, seda saab teha erineval viisil, olenevalt teie rakendusplatvormist. Meie näites on see Vue.

Liikuge, et kindlustada 2FA plokiahelas

Plokiahela kahefaktorilise autentimise demorakenduse lähtekoodi saab vaadata aadressil GitHub. Selle proovimiseks on Readme-s link reaalajas demole.

Allikas: www.habr.com

Lisa kommentaar