Movu por sekurigi 2FA sur la blokĉeno

SMS-mesaĝoj estas la plej populara metodo de dufaktora aŭtentigo (2FA). Ĝi estas uzata de bankoj, elektronikaj kaj kriptaj monujoj, leterkestoj kaj ĉiaj servoj; la nombro da metodo-uzantoj alproksimiĝas al 100%.

Mi indignas pri ĉi tiu scenaro, ĉar ĉi tiu metodo estas nesekura. Reasigni nombron de unu SIM-karto al alia komenciĝis komence de la movebla epoko - jen kiel la nombro estas restarigita kiam SIM-karto estas perdita. "Specialistoj pri ciferecaj monŝteloj" rimarkis, ke la opcio "reskribi SIM-karton" povas esti uzata en fraŭdaj skemoj. Post ĉio, tiu, kiu regas la SIM-karton, povas kontroli la interretan bankadon de aliaj homoj, elektronikajn monujojn kaj eĉ kriptan moneron. Kaj vi povas ekposedi la numeron de alia persono subaĉetante telekomunikan dungiton, uzante trompon aŭ falsitajn dokumentojn.

Movu por sekurigi 2FA sur la blokĉeno

Miloj da epizodoj de SIM-interŝanĝo estis malkovritaj, kiel ĉi tiu fraŭda skemo estas nomata. La amplekso de la katastrofo sugestas, ke la mondo baldaŭ forlasos 2FA per SMS. Sed tio ne okazas — en esplorado ili diras, ke ne uzantoj elektas la metodon 2FA, sed posedantoj de servo.

Ni proponas uzi la sekuran 2FA-metodon kun livero de unufojaj kodoj per la blokĉeno, kaj ni diros al vi kiel la posedanto de la servo povas konekti ĝin.

La kalkulo eniras milionojn

En 2019, SIM-interŝanĝa fraŭdo pliiĝis je 63% laŭ Londona polico, kaj la "averaĝa fakturo" de atakanto estis 4,000 GBP. Mi trovis neniun statistikon en Rusio, sed mi supozas, ke ili estas eĉ pli malbonaj.

SIM-interŝanĝo estas uzata por ŝteli popularajn Twitter, Instagram, Facebook, VK-kontojn, bankajn kontojn, kaj lastatempe eĉ kriptajn monerojn - La ĵurnalo The Times raportas laŭ Bitcoin-entreprenisto Joby Weeks. Altprofilaj kazoj de ŝtelo de kripta monero per SIM-interŝanĝo aperis en la gazetaro ekde 2016; 2019 vidis veran pinton.

En majo, la Oficejo de la Usona Mandatulo por la Orienta Distrikto de Miĉigano alportis akuzojn naŭ junuloj inter la aĝoj de 19 kaj 26: ili supozeble estas parto de retpiratbando nomita "La Komunumo". La bando estas akuzita je sep interŝanĝaj atakoj, rezulte de kiuj la hackers ŝtelis kriptan moneron kun valoro de pli ol $ 2,4 milionoj. Kaj en aprilo, Kalifornia studento Joel Ortiz ricevis 10 jarojn en malliberejo pro SIM-interŝanĝo; lia produktado estis $ 7.5 milionoj en kriptaj moneroj.

Movu por sekurigi 2FA sur la blokĉeno
Foto de Joel Ortiz ĉe universitata gazetara konferenco. Du jarojn poste li estos arestita pro ciberfraŭdo.

Kiel funkcias SIM-interŝanĝo

"Interŝanĝi" signifas interŝanĝon. En ĉiuj tiaj kabaloj, krimuloj transprenas la telefonnumeron de la viktimo, kutime per reeldonado de SIM-karto, kaj uzas ĝin por restarigi la pasvorton. Tipa SIM-interŝanĝo en teorio aspektas jene:

  1. Spionservo. Fraŭduloj malkovras la personajn informojn de la viktimo: nomo kaj telefonnumero. Ili povas esti trovitaj en malfermaj fontoj (sociaj retoj, amikoj) aŭ ricevitaj de komplico - dungito de poŝtelefono.
  2. Blokado. La SIM-karto de la viktimo estas malaktivigita; Por fari tion, simple voku la teknikan subtenon de la provizanto, donu la numeron kaj diru, ke la telefono estis perdita.
  3. Kaptu, translokigu la numeron al via SIM-karto. Kutime tio ankaŭ estas farita per komplico en la telekomunika kompanio aŭ per falsado de dokumentoj.

En la reala vivo aferoj estas eĉ pli severaj. Atakantoj elektas viktimon kaj poste spuras la lokon de la telefono ĉiutage - unu peto ricevi informojn, ke la abonanto ŝanĝis al vagado, kostas 1-2 cendojn. Tuj kiam la posedanto de la SIM-karto iris eksterlanden, ili intertraktas kun la administranto ĉe la komunika vendejo por elsendi novan SIM-karton. Ĝi kostas ĉirkaŭ 50 USD (mi trovis informojn - en diversaj landoj kaj kun diversaj funkciigistoj de 20 USD ĝis 100 USD), kaj en la plej malbona kazo la administranto estos maldungita - ne estas respondeco pri tio.

Nun ĉiuj SMS ricevos atakantoj, kaj la posedanto de la telefono ne povos fari ion ajn pri tio - li estas eksterlande. Kaj tiam la fiuloj akiras aliron al ĉiuj kontoj de la viktimo kaj ŝanĝas pasvortojn se ili deziras.

Ŝancoj resendi ŝtelitajn posedaĵojn

Bankoj foje gastigas viktimojn duonvoje kaj retiras translokigojn de siaj kontoj. Tial, eblas redoni fidan monon eĉ se la krimulo ne estas trovita. Sed kun kriptaj monujoj ĉio estas pli komplika - kaj teknike, kaj leĝe. Ĝis nun, eĉ ne unu interŝanĝo/monujo pagis kompenson al viktimoj de interŝanĝado.

Se viktimoj volas defendi sian monon en tribunalo, ili kulpigas la funkciigiston: li kreis la kondiĉojn por la ŝtelo de mono el la konto. Ĝuste tion mi faris Mikaelo Turpin, kiu perdis 224 milionojn da dolaroj pro interŝanĝo.Li nun jurpersekutas la telekomunikan kompanion AT&T.

Movu por sekurigi 2FA sur la blokĉeno

Ĝis nun, neniu ŝtato havas laborskemojn por laŭleĝe protekti posedantojn de kripta monero. Estas neeble certigi vian kapitalon aŭ ricevi kompenson por ĝia perdo. Tial, malhelpi interŝanĝan atakon estas pli facila ol trakti ĝiajn sekvojn. La plej evidenta maniero estas uzi pli fidindan "duan faktoron" por 2FA.

SIM-interŝanĝo ne estas la sola problemo kun 2FA per SMS

Konfirmkodoj en SMS ankaŭ estas nesekuraj de teknika vidpunkto. Mesaĝoj povas esti kaptitaj pro neflakitaj vundeblecoj en Signaling System 7 (SS7). 2FA super SMS estas oficiale agnoskita kiel nesekura (la usona Nacia Instituto pri Normoj kaj Teknologio diras tion en sia Gvidilo pri Cifereca Aŭtentigo).

Samtempe, la ĉeesto de 2FA ofte donas al la uzanto senton de falsa sekureco, kaj li elektas pli simplan pasvorton. Tial tia aŭtentigo ne malfaciligas ĝin, sed faciligas al atakanto akiri aliron al la konto.

Kaj ofte SMS alvenas kun longa prokrasto aŭ tute ne alvenas.

Aliaj 2FA-metodoj

Kompreneble, la lumo ne konverĝis al saĝtelefonoj kaj SMS. Estas aliaj metodoj de 2FA. Ekzemple, unufojaj TAN-kodoj: primitiva metodo, sed ĝi funkcias - ĝi ankoraŭ estas uzata en iuj bankoj. Estas sistemoj uzantaj biometrikajn datumojn: fingrospuroj, retinaj skanadoj. Alia opcio, kiu ŝajnas racia kompromiso laŭ komforto, fidindeco kaj prezo, estas specialaj aplikoj por 2FA: RSA Token, Google Authenticator. Ekzistas ankaŭ fizikaj ŝlosiloj kaj aliaj metodoj.

En teorio, ĉio aspektas logika kaj fidinda. Sed praktike, modernaj 2FA-solvoj havas problemojn, kaj pro ili, la realo diferencas de atendoj.

Laŭ esplorado, la uzo de 2FA principe estas ĝeno, kaj la populareco de 2FA per SMS klariĝas per "malpli ĝeno kompare kun aliaj metodoj" - ricevi unufojajn kodojn estas komprenebla por la uzanto.

Uzantoj asocias multajn 2FA-metodojn kun la timo, ke aliro estos perdita. La fizika ŝlosilo aŭ listo de TAN-pasvortoj povas esti perdita aŭ ŝtelita. Mi persone havis malbonajn spertojn kun Google Authenticator. Mia unua inteligenta telefono kun ĉi tiu aplikaĵo paneis - danku miajn klopodojn restarigi aliron al miaj kontoj. Alia problemo estas ŝanĝi al nova aparato. Google Authenticator ne havas eksportopcion pro sekurecaj kialoj (se ŝlosiloj povas esti eksportitaj, kia sekureco ekzistas?). Unufoje mi portis la ŝlosilojn permane, kaj tiam mi decidis, ke estas pli facile lasi la malnovan inteligentan telefonon en skatolo sur breto.

La 2FA-metodo devus esti:

  • Sekura - nur vi kaj ne atakantoj devas akiri aliron al via konto
  • Fidinda - vi ricevas aliron al via konto kiam ajn vi bezonas ĝin
  • Oportuna kaj alirebla - uzi 2FA estas klara kaj prenas minimuman tempon
  • Malmultekosta

Ni kredas, ke blokĉeno estas la ĝusta solvo.

Uzu 2FA sur la blokĉeno

Por la uzanto, 2FA sur la blokĉeno aspektas same kiel ricevi unufojajn kodojn per SMS. La sola diferenco estas la liverkanalo. La metodo por akiri 2FA-kodon dependas de tio, kion ofertas la blokĉeno. En nia projekto (informoj estas en mia profilo) ĉi tio estas TTT-apliko, Tor, iOS, Android, Linukso, Vindozo, MacOS.

La servo generas unufojan kodon kaj sendas ĝin al la mesaĝisto sur la blokĉeno. Poste sekvu la klasikaĵojn: la uzanto enigas la ricevitan kodon en la serva interfaco kaj ensalutas.

Movu por sekurigi 2FA sur la blokĉeno

En la artikolo Kiel funkcias malcentralizita mesaĝisto sur la blokĉeno? Mi skribis, ke blokĉeno certigas la sekurecon kaj privatecon de transdono de mesaĝoj. Pri la temo de sendo de 2FA-kodoj, mi reliefigos:

  • Unu klako por krei konton - neniuj telefonoj aŭ retpoŝtoj.
  • Ĉiuj mesaĝoj kun 2FA-kodoj estas ĉifritaj End-al-End curve25519xsalsa20poly1305.
  • MITM-atako estas ekskludita - ĉiu mesaĝo kun la 2FA-kodo estas transakcio sur la blokĉeno kaj estas subskribita de Ed25519 EdDSA.
  • La mesaĝo kun la 2FA-kodo finiĝas en sia propra bloko. La sekvenco kaj tempomarko de blokoj ne povas esti korektitaj, kaj tial la ordo de mesaĝoj.
  • Ne ekzistas centra strukturo, kiu kontrolas la "aŭtentecon" de mesaĝo. Ĉi tio estas farita per distribuita sistemo de nodoj bazitaj sur konsento, kaj ĝi estas posedata de la uzantoj.
  • Ne povas esti malŝaltita - kontoj ne povas esti blokitaj kaj mesaĝoj ne povas esti forigitaj.
  • Aliru 2FA-kodojn de iu ajn aparato iam ajn.
  • Konfirmo de livero de mesaĝoj kun 2FA-kodo. La servo, kiu sendas la unufojan pasvorton, scias certe, ke ĝi estis liverita. Neniuj butonoj "Sendu denove".

Por kompari kun iuj aliaj 2FA-metodoj, mi faris tabelon:

Movu por sekurigi 2FA sur la blokĉeno

La uzanto ricevas konton en la blokĉena mesaĝisto por ricevi kodojn en sekundo - nur pasfrazo estas uzata por ensaluti. Tial la metodoj de aplikado povas esti malsamaj: vi povas uzi unu konton por ricevi kodojn por ĉiuj servoj, aŭ vi povas krei apartan konton por ĉiu servo.

Ankaŭ estas ĝeno - la konto devas havi almenaŭ unu transakcion. Por ke la uzanto ricevu ĉifritan mesaĝon kun kodo, vi devas scii lian publikan ŝlosilon, kaj ĝi aperas en la blokĉeno nur kun la unua transakcio. Jen kiel ni sukcesis eliri el ĝi: ni donis al ili la ŝancon ricevi senpagajn ĵetonojn en sia monujo. Tamen, pli bona solvo estas nomi la konton publika ŝlosilo. (Por komparo, ni havas kontnumeron U1467838112172792705 estas derivaĵo de la publika ŝlosilo cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Por la mesaĝisto tio estas pli oportuna kaj legebla, sed por la sistemo por sendi 2FA-kodojn ĝi estas limigo). Mi pensas, ke estonte iu faros tian decidon kaj movos "Konvenon kaj Alireblecon" al la verda zono.

La prezo de sendado de 2FA-kodo estas vere malalta - 0.001 ADM, nun ĝi estas 0.00001 USD. Denove, vi povas levi vian blokĉenon kaj fari la prezon nul.

Kiel konekti 2FA sur la blokĉeno al via servo

Mi esperas, ke mi povis interesi kelkajn legantojn aldoni blokĉenan rajtigon al iliaj servoj.

Mi diros al vi kiel fari tion uzante nian mesaĝiston kiel ekzemplon, kaj analoge vi povas uzi alian blokĉenon. En la demo-aplikaĵo 2FA ni uzas postgresql10 por stoki kontajn informojn.

Konektaj stadioj:

  1. Kreu konton sur la blokĉeno de kiu vi sendos 2FA-kodojn. Vi ricevos pasfrazon, kiu estas uzata kiel privata ŝlosilo por ĉifri mesaĝojn per kodoj kaj por subskribi transakciojn.
  2. Aldonu skripton al via servilo por generi 2FA-kodojn. Se vi jam uzas iun alian 2FA-metodon kun unufoja pasvorta livero, vi jam plenumis ĉi tiun paŝon.
  3. Aldonu skripton al via servilo por sendi kodojn al la uzanto en la blokĉena mesaĝisto.
  4. Kreu uzantinterfacon por sendi kaj enigi 2FA-kodon. Se vi jam uzas iun alian 2FA-metodon kun unufoja pasvorta livero, vi jam plenumis ĉi tiun paŝon.

1 Kreu konton

Krei konton en la blokĉeno signifas generi privatan ŝlosilon, publikan ŝlosilon kaj derivitan kontadreson.

Movu por sekurigi 2FA sur la blokĉeno

Unue, la BIP39 pasfrazo estas generita, kaj la SHA-256 hash estas kalkulita de ĝi. La haŝo estas uzata por generi la privatan ŝlosilon ks kaj la publikan ŝlosilon kp. De la publika ŝlosilo, uzante la saman SHA-256 kun inversio, ni akiras la adreson en la blokĉeno.

Se vi volas sendi 2FA-kodojn ĉiufoje de nova konto, la krea kodo de konto devos esti aldonita al la servilo:

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

En la demo-aplikaĵo, ni simpligis ĝin - ni kreis unu konton en la retejo, kaj sendas kodojn de ĝi. Plejofte, ĉi tio ankaŭ estas pli oportuna por la uzanto: li scias, ke la servo sendas 2FA-kodojn de specifa konto kaj povas nomi ĝin.

Movu por sekurigi 2FA sur la blokĉeno

2 Generante 2FA-kodojn

2FA-kodo devas esti generita por ĉiu ensaluto de uzanto. Ni uzas la bibliotekon parolmaniero, sed vi povas elekti iun alian.

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

Kontrolante la validecon de la 2FA-kodo enigita de la uzanto:

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

3 Sendante 2FA-kodon

Por sendi 2FA-kodon, vi povas uzi la blokĉenan nodon API, JS API-bibliotekon aŭ la konzolon. En ĉi tiu ekzemplo, ni uzas la konzolon - ĉi tio estas la Komandlinia Interfaco, ilo, kiu simpligas interagadon kun la blokĉeno. Por sendi mesaĝon kun 2FA-kodo, vi devas uzi la komandon send message konzolo.

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

Alternativa maniero sendi mesaĝojn estas uzi la metodon send en la biblioteko de JS API.

4 Uzantinterfaco

La uzanto devas ricevi la eblon enigi 2FA-kodon, ĉi tio povas esti farita en malsamaj manieroj depende de via aplika platformo. En nia ekzemplo ĉi tio estas Vue.

Movu por sekurigi 2FA sur la blokĉeno

La fontkodo por la blokĉena dufaktora aŭtentikiga demo-aplikaĵo videblas ĉe GitHub. Estas ligilo en la Readme al Live-demo por provi ĝin.

fonto: www.habr.com

Aldoni komenton