Siirry turvataksesi 2FA:n lohkoketjussa

Tekstiviestit ovat suosituin kaksivaiheisen todennuksen (2FA) menetelmä. Sitä käyttävät pankit, sähköiset ja kryptolompakot, postilaatikot ja kaikenlaiset palvelut; menetelmän käyttäjien määrä lähestyy 100 %.

Olen närkästynyt tästä skenaariosta, koska tämä menetelmä ei ole turvallinen. Numeron siirtäminen SIM-kortilta toiselle alkoi mobiiliajan alussa - näin numero palautetaan SIM-kortin katoamisen jälkeen. "Digitaalisten rahavarkauksien asiantuntijat" ymmärsivät, että "SIM-kortin uudelleenkirjoitus" -vaihtoehtoa voidaan käyttää petollisissa järjestelmissä. Loppujen lopuksi se, joka hallitsee SIM-korttia, voi hallita muiden ihmisten verkkopankkia, sähköisiä lompakoita ja jopa kryptovaluuttoja. Ja voit ottaa haltuunsa toisen henkilön numeron lahjomalla tietoliikennetyöntekijää, käyttämällä petosta tai väärennettyjä asiakirjoja.

Siirry turvataksesi 2FA:n lohkoketjussa

Tuhansia SIM-kortin vaihtojaksoja on paljastettu, kuten tätä petosjärjestelmää kutsutaan. Katastrofin laajuus viittaa siihen, että maailma hylkää pian 2FA:n tekstiviestillä. Mutta näin ei tapahdu - sisään tutkimus he sanovat, että käyttäjät eivät valitse 2FA-menetelmää, vaan palvelun omistajat.

Suosittelemme käyttämään suojattua 2FA-menetelmää, jossa kertakoodit toimitetaan lohkoketjun kautta, ja kerromme, kuinka palvelun omistaja voi yhdistää sen.

Luku nousee miljooniin

Vuonna 2019 SIM-korttien vaihtopetokset lisääntyivät Lontoon poliisin mukaan 63 prosenttia, ja hyökkääjän "keskimääräinen lasku" oli 4,000 XNUMX puntaa. En ole löytänyt Venäjältä tilastoja, mutta oletan, että ne ovat vielä huonompia.

SIM-vaihdolla varastetaan suosittuja Twitter-, Instagram-, Facebook-, VK-tilejä, pankkitilejä ja viime aikoina jopa kryptovaluuttoja - Asiasta kertoo The Times -lehti Bitcoin-yrittäjä Joby Weeksin mukaan. Korkean profiilin tapauksia kryptovaluuttavarkauksista SIM-vaihdon avulla on noussut lehdistössä vuodesta 2016 lähtien; Vuosi 2019 näki todellisen huippunsa.

Toukokuussa Yhdysvaltain Michiganin itäisen piirin syyttäjänvirasto nosti syytteen yhdeksän 19–26-vuotiasta nuorta: heidän uskotaan kuuluvan "The Community" -nimiseen hakkerijengiin. Joukkoa syytetään seitsemästä swap-hyökkäyksestä, joiden seurauksena hakkerit varastivat kryptovaluuttoja yli 2,4 miljoonan dollarin arvosta. Ja huhtikuussa Kalifornian opiskelija Joel Ortiz sai 10 vuoden vankeusrangaistuksen SIM-kortin vaihdosta; hänen tuotantonsa oli 7.5 miljoonaa dollaria kryptovaluutoissa.

Siirry turvataksesi 2FA:n lohkoketjussa
Kuva Joel Ortizista yliopiston lehdistötilaisuudessa. Kaksi vuotta myöhemmin hänet pidätetään verkkopetoksesta.

Kuinka SIM-kortin vaihto toimii

"Vaihtaminen" tarkoittaa vaihtoa. Kaikissa tällaisissa järjestelyissä rikolliset ottavat haltuunsa uhrin puhelinnumeron, yleensä myöntämällä SIM-kortin uudelleen, ja käyttävät sitä salasanan nollaukseen. Tyypillinen SIM-kortin vaihto näyttää teoriassa tältä:

  1. Tiedustelupalvelu. Huijarit saavat selville uhrin henkilötiedot: nimen ja puhelinnumeron. Ne löytyvät avoimista lähteistä (sosiaaliset verkot, ystävät) tai ne voidaan saada rikoskumppanilta - matkapuhelinoperaattorin työntekijältä.
  2. Estäminen. Uhrin SIM-kortti on deaktivoitu; Voit tehdä tämän soittamalla palveluntarjoajan tekniseen tukeen, antamalla numeron ja sanomalla, että puhelin on kadonnut.
  3. Tallenna, siirrä numero SIM-kortille. Yleensä tämä tapahtuu myös teleyrityksen rikoskumppanin tai asiakirjojen väärentämisen kautta.

Tosielämässä asiat ovat vielä vakavampia. Hyökkääjät valitsevat uhrin ja seuraavat puhelimen sijaintia päivittäin - yksi pyyntö saada tietoa tilaajan siirtymisestä verkkovierailuihin maksaa 1-2 senttiä. Heti kun SIM-kortin omistaja on lähtenyt ulkomaille, neuvotellaan viestintäliikkeen johtajan kanssa uuden SIM-kortin myöntämisestä. Se maksaa noin 50 dollaria (löysin tietoa - eri maissa ja eri operaattoreiden kanssa 20 - 100 dollaria), ja pahimmassa tapauksessa johtaja erotetaan - tästä ei ole vastuuta.

Nyt hyökkääjät vastaanottavat kaikki tekstiviestit, eikä puhelimen omistaja voi tehdä asialle mitään - hän on ulkomailla. Ja sitten roistot pääsevät kaikkiin uhrin tileihin ja vaihtavat salasanat halutessaan.

Mahdollisuudet varastetun omaisuuden palauttamiseen

Joskus pankit majoittavat uhrit puoliväliin ja nostavat tilisiirtoja heidän tileillään. Fiat-rahat on siis mahdollista palauttaa, vaikka rikollista ei löydettäisikään. Mutta kryptovaluuttalompakoiden kanssa kaikki on monimutkaisempaa - ja teknisesti, ja lainsäädännöllisesti. Toistaiseksi yksikään vaihto/lompakko ei ole maksanut korvauksia vaihdon uhreille.

Jos uhrit haluavat puolustaa rahojaan tuomioistuimessa, he syyttävät operaattoria: hän loi edellytykset rahan varastamiselle tililtä. Juuri niin minä tein Michael Turpin, joka menetti 224 miljoonaa dollaria vaihdon vuoksi. Hän haastaa nyt televiestintäyhtiön AT&T:n oikeuteen.

Siirry turvataksesi 2FA:n lohkoketjussa

Toistaiseksi millään osavaltiolla ei ole toimivia järjestelmiä kryptovaluutan omistajien lailliseen suojaamiseen. Pääomaasi on mahdotonta vakuuttaa tai saada korvausta sen menetyksestä. Siksi swap-hyökkäyksen estäminen on helpompaa kuin sen seurausten käsitteleminen. Ilmeisin tapa on käyttää luotettavampaa "toista tekijää" 2FA:lle.

SIM-kortin vaihto ei ole ainoa ongelma 2FA:ssa tekstiviestillä

Myös tekstiviestien vahvistuskoodit ovat teknisesti vaarallisia. Viestit voidaan siepata Signaling System 7:n (SS7) korjaamattomien haavoittuvuuksien vuoksi. 2FA SMS yli on virallisesti tunnustettu turvattomaksi (US National Institute of Standards and Technology sanoo tämän Digitaalinen todennusopas).

Samaan aikaan 2FA:n läsnäolo antaa käyttäjälle usein väärän turvallisuuden tunteen, ja hän valitsee yksinkertaisemman salasanan. Siksi tällainen todennus ei vaikeuta sitä, mutta helpottaa hyökkääjän pääsyä tilille.

Ja usein tekstiviestit saapuvat pitkällä viiveellä tai eivät tule ollenkaan.

Muut 2FA-menetelmät

Valo ei tietenkään lähentynyt älypuhelimiin ja tekstiviesteihin. On olemassa muita 2FA-menetelmiä. Esimerkiksi kertaluonteiset TAN-koodit: primitiivinen menetelmä, mutta se toimii - sitä käytetään edelleen joissakin pankeissa. On olemassa järjestelmiä, jotka käyttävät biometrisiä tietoja: sormenjälkiä, verkkokalvoskannauksia. Toinen vaihtoehto, joka vaikuttaa kohtuulliselta kompromissilta mukavuuden, luotettavuuden ja hinnan kannalta, ovat 2FA:n erikoissovellukset: RSA Token, Google Authenticator. On myös fyysisiä avaimia ja muita menetelmiä.

Teoriassa kaikki näyttää loogiselta ja luotettavalta. Mutta käytännössä nykyaikaisissa 2FA-ratkaisuissa on ongelmia, ja niiden takia todellisuus poikkeaa odotuksista.

Mukaan tutkiminen, 2FA:n käyttö on periaatteessa haittaa, ja 2FA:n suosio tekstiviestillä selittyy "vähemmän haitalla verrattuna muihin menetelmiin" - kertakoodien vastaanottaminen on käyttäjälle ymmärrettävää.

Käyttäjät yhdistävät monet 2FA-menetelmät pääsyn menettämisen pelkoon. Fyysinen avain tai TAN-salasanojen luettelo voidaan kadota tai varastaa. Minulla on henkilökohtaisesti huonoja kokemuksia Google Authenticatorista. Ensimmäinen tämän sovelluksen sisältävä älypuhelimeni hajosi - arvostan ponnistelujani tililleni pääsyn palauttamiseksi. Toinen ongelma on vaihtaminen uuteen laitteeseen. Google Authenticatorissa ei ole vientivaihtoehtoa turvallisuussyistä (jos avaimet voidaan viedä, mikä suojaus on olemassa?). Kerran kantoin avaimet käsin, ja sitten päätin, että on helpompi jättää vanha älypuhelin laatikkoon hyllylle.

2FA-menetelmän tulisi olla:

  • Suojattu – vain sinä, ei hyökkääjät, pääset käyttämään tiliäsi
  • Luotettava – pääset käyttämään tiliäsi aina kun tarvitset sitä
  • Kätevä ja helposti saatavilla – 2FA:n käyttö on selkeää ja vie vähän aikaa
  • Halpa

Uskomme, että lohkoketju on oikea ratkaisu.

Käytä 2FA:ta lohkoketjussa

Käyttäjälle lohkoketjun 2FA näyttää samalta kuin kertaluonteisten koodien vastaanottaminen tekstiviestillä. Ainoa ero on toimituskanava. 2FA-koodin hankkimismenetelmä riippuu siitä, mitä lohkoketju tarjoaa. Projektissamme (tiedot ovat profiilissani) tämä on verkkosovellus, Tor, iOS, Android, Linux, Windows, MacOS.

Palvelu luo kertaluontoisen koodin ja lähettää sen lohkoketjussa olevalle messengerille. Noudata sitten klassikoita: käyttäjä syöttää vastaanotetun koodin palvelurajapintaan ja kirjautuu sisään.

Siirry turvataksesi 2FA:n lohkoketjussa

Artikkelissa Kuinka hajautettu sanansaattaja toimii lohkoketjussa? Kirjoitin, että lohkoketju varmistaa viestien lähetyksen turvallisuuden ja yksityisyyden. 2FA-koodien lähettämisestä korostan:

  • Luo tili yhdellä napsautuksella – ei puhelimia tai sähköposteja.
  • Kaikki viestit, joissa on 2FA-koodi, ovat salattuja End-to-End curve25519xsalsa20poly1305.
  • MITM-hyökkäys on poissuljettu - jokainen viesti, jossa on 2FA-koodi, on tapahtuma lohkoketjussa, ja sen on allekirjoittanut Ed25519 EdDSA.
  • Viesti 2FA-koodilla päätyy omaan lohkoonsa. Lohkojen järjestystä ja aikaleimaa ei voida korjata, eikä siten myöskään viestien järjestystä.
  • Ei ole olemassa keskusrakennetta, joka tarkistaisi viestin "aitouden". Tämän tekee hajautettu solmujärjestelmä, joka perustuu konsensukseen, ja se on käyttäjien omistama.
  • Ei voida poistaa käytöstä - tilejä ei voi estää eikä viestejä voi poistaa.
  • Käytä 2FA-koodeja miltä tahansa laitteelta milloin tahansa.
  • Viestin toimituksen vahvistus 2FA-koodilla. Kertaluonteisen salasanan lähettävä palvelu tietää varmasti, että se on toimitettu. Ei "Lähetä uudelleen" -painikkeita.

Tein taulukon verratakseni muihin 2FA-menetelmiin:

Siirry turvataksesi 2FA:n lohkoketjussa

Käyttäjä saa tilin blockchain messengerissä vastaanottaakseen koodit sekunnissa - sisäänkirjautumiseen käytetään vain tunnuslausetta. Tästä syystä hakutavat voivat olla erilaisia: voit käyttää yhtä tiliä vastaanottamaan koodit kaikille palveluille tai voit luoda erillisen tilin jokaiselle palvelulle.

On myös haittaa - tilillä on oltava vähintään yksi tapahtuma. Jotta käyttäjä saisi salatun viestin koodilla, sinun on tiedettävä hänen julkinen avaimensa, ja se näkyy lohkoketjussa vain ensimmäisen tapahtuman yhteydessä. Näin pääsimme eroon: annoimme heille mahdollisuuden saada ilmaisia ​​rahakkeita lompakkoonsa. Parempi ratkaisu on kuitenkin nimetä tili julkiseksi avaimeksi. (Vertailun vuoksi meillä on tilinumero U1467838112172792705 on julkisen avaimen johdannainen cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Messengerille tämä on kätevämpää ja luettavampaa, mutta 2FA-koodien lähetysjärjestelmälle se on rajoitus). Uskon, että tulevaisuudessa joku tekee tällaisen päätöksen ja siirtää ”mukavuuden ja saavutettavuuden” vihreälle vyöhykkeelle.

2FA-koodin lähettämisen hinta on todella alhainen - 0.001 ADM, nyt se on 0.00001 USD. Jälleen voit nostaa lohkoketjuasi ja tehdä hinnasta nolla.

Kuinka yhdistää 2FA lohkoketjussa palveluusi

Toivon, että pystyin kiinnostamaan muutamia lukijoita lisäämään lohkoketjun valtuutuksen palveluihinsa.

Kerron sinulle, kuinka tämä tehdään esimerkkinä Messengerillämme, ja analogisesti voit käyttää toista lohkoketjua. 2FA-demosovelluksessa käytämme postgresql10:tä tilitietojen tallentamiseen.

Yhteysvaiheet:

  1. Luo lohkoketjuun tili, josta lähetät 2FA-koodit. Saat tunnuslauseen, jota käytetään yksityisenä avaimena viestien salaamiseen koodeilla ja tapahtumien allekirjoittamiseen.
  2. Lisää komentosarja palvelimellesi luodaksesi 2FA-koodit. Jos käytät jo jotakin muuta 2FA-menetelmää kertaluonteisella salasanan toimituksella, olet jo suorittanut tämän vaiheen.
  3. Lisää komentosarja palvelimellesi koodien lähettämiseksi käyttäjälle blockchain-viestintäohjelmassa.
  4. Luo käyttöliittymä 2FA-koodin lähettämistä ja syöttämistä varten. Jos käytät jo jotakin muuta 2FA-menetelmää kertaluonteisella salasanan toimituksella, olet jo suorittanut tämän vaiheen.

1 Tilin luominen

Tilin luominen lohkoketjussa tarkoittaa yksityisen avaimen, julkisen avaimen ja johdetun tiliosoitteen luomista.

Siirry turvataksesi 2FA:n lohkoketjussa

Ensin luodaan BIP39-salasana ja siitä lasketaan SHA-256-hajautus. Tiivistettä käytetään yksityisen avaimen ks ja julkisen avaimen kp luomiseen. Julkisesta avaimesta, käyttämällä samaa SHA-256:ta inversiolla, saamme osoitteen lohkoketjussa.

Jos haluat lähettää 2FA-koodia joka kerta uudelta tililtä, ​​tilin luontikoodi on lisättävä palvelimelle:

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

Demosovelluksessa yksinkertaistimme sitä - loimme yhden tilin verkkosovellukseen ja lähetimme koodit siitä. Useimmissa tapauksissa tämä on myös käyttäjälle kätevämpää: hän tietää, että palvelu lähettää 2FA-koodia tietystä tilistä ja osaa nimetä sen.

Siirry turvataksesi 2FA:n lohkoketjussa

2 Luodaan 2FA-koodia

Jokaiselle käyttäjälle kirjautumiselle on luotava 2FA-koodi. Käytämme kirjastoa salakapakka, mutta voit valita minkä tahansa muun.

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

Käyttäjän syöttämän 2FA-koodin oikeellisuuden tarkistaminen:

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

3 2FA-koodin lähettäminen

Voit lähettää 2FA-koodin käyttämällä blockchain node API:ta, JS API -kirjastoa tai konsolia. Tässä esimerkissä käytämme konsolia - tämä on Command Line Interface, apuohjelma, joka yksinkertaistaa vuorovaikutusta lohkoketjun kanssa. Jos haluat lähettää viestin 2FA-koodilla, sinun on käytettävä komentoa send message konsolit.

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

Vaihtoehtoinen tapa lähettää viestejä on käyttää menetelmää send JS API -kirjastossa.

4 Käyttöliittymä

Käyttäjälle on annettava mahdollisuus syöttää 2FA-koodi. Tämä voidaan tehdä eri tavoilla sovellusalustasi mukaan. Esimerkissämme tämä on Vue.

Siirry turvataksesi 2FA:n lohkoketjussa

Lohkoketjun kaksivaiheisen todennuksen demosovelluksen lähdekoodi on nähtävissä osoitteessa GitHub. Lueminut-osiossa on linkki live-demoon, josta voit kokeilla sitä.

Lähde: will.com

Lisää kommentti