Flyt for at sikre 2FA på blockchain

SMS-beskeder er den mest populære metode til to-faktor-godkendelse (2FA). Det bruges af banker, elektroniske og krypto-punge, postkasser og alle slags tjenester; antallet af metodebrugere nærmer sig 100 %.

Jeg er indigneret over dette scenarie, fordi denne metode er usikker. Omfordeling af et nummer fra et SIM-kort til et andet begyndte i begyndelsen af ​​mobiltiden - det er sådan nummeret gendannes, når et SIM-kort er tabt. "Digitalt pengetyveri-specialister" indså, at muligheden "omskriv SIM-kort" kan bruges i svigagtige ordninger. Når alt kommer til alt, kan den, der styrer SIM-kortet, kontrollere andres netbank, elektroniske tegnebøger og endda kryptovaluta. Og du kan tage en anden persons nummer i besiddelse ved at bestikke en telemedarbejder, bruge bedrageri eller forfalskede dokumenter.

Flyt for at sikre 2FA på blockchain

Tusindvis af episoder med SIM-bytning er blevet afsløret, som denne svindelordning kaldes. Omfanget af katastrofen tyder på, at verden snart vil opgive 2FA via SMS. Men dette sker ikke - i undersøgelse de siger, at det ikke er brugere, der vælger 2FA-metoden, men tjenesteejere.

Vi foreslår at bruge den sikre 2FA-metode med levering af engangskoder via blockchain, og vi vil fortælle dig, hvordan tjenesteejeren kan forbinde det.

Optællingen går i millioner

I 2019 steg svindel med SIM-bytte med 63 % ifølge Londons politi, og den "gennemsnitlige regning" for en angriber var 4,000 GBP. Jeg har ikke fundet nogen statistikker i Rusland, men jeg går ud fra, at de er endnu værre.

SIM swapping bruges til at stjæle populære Twitter, Instagram, Facebook, VK konti, bankkonti og for nylig endda kryptovalutaer - Det skriver avisen Times ifølge Bitcoin-iværksætteren Joby Weeks. Højprofilerede sager om tyveri af kryptovaluta ved brug af SIM-bytte er dukket op i pressen siden 2016; 2019 oplevede et rigtigt højdepunkt.

I maj, den amerikanske attorney's Office for Eastern District of Michigan rejste tiltale ni unge mennesker mellem 19 og 26 år: de menes at være en del af en hackerbande kaldet "The Community". Banden er sigtet for syv swap-angreb, som et resultat af, at hackerne stjal kryptovaluta til en værdi af over 2,4 millioner dollars. Og i april fik den californiske studerende Joel Ortiz 10 års fængsel for SIM-bytte; hans produktion var $7.5 millioner i kryptovalutaer.

Flyt for at sikre 2FA på blockchain
Foto af Joel Ortiz på en universitetspressekonference. To år senere vil han blive varetægtsfængslet for cybersvindel.

Sådan fungerer SIM-swap

"Swap" betyder bytte. I alle sådanne ordninger overtager kriminelle ofrets telefonnummer, normalt ved at genudstede et SIM-kort, og bruger det til at nulstille adgangskoden. Et typisk SIM-swap ser i teorien sådan ud:

  1. Efterretningstjeneste. Svindlere finder ud af ofrets personlige oplysninger: navn og telefonnummer. De kan findes i åbne kilder (sociale netværk, venner) eller modtages fra en medskyldig - en medarbejder hos en mobiloperatør.
  2. Blokering. Offerets SIM-kort er deaktiveret; For at gøre dette skal du blot ringe til udbyderens tekniske support, angive nummeret og sige, at telefonen var tabt.
  3. Optag, overfør nummeret til dit SIM-kort. Normalt sker dette også gennem en medskyldig i teleselskabet eller gennem dokumentfalsk.

I det virkelige liv er tingene endnu mere alvorlige. Angribere udvælger et offer og sporer derefter telefonens placering dagligt – én anmodning om at modtage information om, at abonnenten er gået over til roaming, koster 1-2 øre. Så snart ejeren af ​​SIM-kortet er rejst til udlandet, forhandler de med chefen i kommunikationsbutikken om at udstede et nyt SIM-kort. Det koster omkring $50 (jeg fandt information - i forskellige lande og med forskellige operatører fra $20 til $100), og i værste fald vil manageren blive fyret - der er intet ansvar for dette.

Nu vil alle SMS blive modtaget af angribere, og ejeren af ​​telefonen vil ikke kunne gøre noget ved det - han er i udlandet. Og så får skurkene adgang til alle ofrets konti og skifter adgangskoder, hvis det ønskes.

Chancer for at returnere stjålne ejendele

Banker tager nogle gange imod ofre halvvejs og trækker overførsler fra deres konti. Derfor er det muligt at returnere fiat-penge, selvom den kriminelle ikke bliver fundet. Men med cryptocurrency tegnebøger er alt mere kompliceret - og teknisk set, og lovgivningsmæssigt. Indtil videre har ikke en eneste børs/pung betalt kompensation til ofre for bytte.

Hvis ofrene ønsker at forsvare deres penge i retten, giver de operatøren skylden: han skabte betingelserne for tyveri af penge fra kontoen. Det var præcis, hvad jeg gjorde Michael Turpin, der tabte 224 millioner dollars på grund af byttehandel.Han sagsøger nu teleselskabet AT&T.

Flyt for at sikre 2FA på blockchain

Indtil videre har ingen stat fungerende ordninger til lovligt at beskytte kryptovaluta-ejere. Det er umuligt at forsikre din kapital eller få erstatning for dens tab. Derfor er det nemmere at forhindre et bytteangreb end at håndtere dets konsekvenser. Den mest oplagte måde er at bruge en mere pålidelig "anden faktor" til 2FA.

SIM swap er ikke det eneste problem med 2FA via SMS

Bekræftelseskoder i SMS er også usikre ud fra et teknisk synspunkt. Meddelelser kan opsnappes på grund af uoprettede sårbarheder i Signaling System 7 (SS7). 2FA over SMS er officielt anerkendt som usikker (det amerikanske National Institute of Standards and Technology siger dette i sin Digital Authentication Guide).

Samtidig giver tilstedeværelsen af ​​2FA ofte brugeren en følelse af falsk sikkerhed, og han vælger en enklere adgangskode. Derfor gør en sådan godkendelse det ikke vanskeligt, men gør det lettere for en angriber at få adgang til kontoen.

Og ofte kommer SMS med lang forsinkelse eller kommer slet ikke.

Andre 2FA metoder

Selvfølgelig konvergerede lyset ikke på smartphones og SMS. Der er andre metoder til 2FA. For eksempel engangs-TAN-koder: en primitiv metode, men den virker - den bruges stadig i nogle banker. Der er systemer, der bruger biometriske data: fingeraftryk, nethindescanninger. En anden mulighed, der virker som et rimeligt kompromis med hensyn til bekvemmelighed, pålidelighed og pris, er specielle applikationer til 2FA: RSA Token, Google Authenticator. Der er også fysiske nøgler og andre metoder.

I teorien ser alt logisk og pålideligt ud. Men i praksis har moderne 2FA-løsninger problemer, og på grund af dem adskiller virkeligheden sig fra forventningerne.

Ifølge Exploration, brugen af ​​2FA er i princippet en ulempe, og populariteten af ​​2FA via SMS forklares med "mindre besvær i forhold til andre metoder" - at modtage engangskoder er forståeligt for brugeren.

Brugere forbinder mange 2FA-metoder med frygten for, at adgangen går tabt. Den fysiske nøgle eller listen over TAN-adgangskoder kan gå tabt eller stjålet. Jeg har personligt haft dårlige erfaringer med Google Authenticator. Min første smartphone med denne applikation gik i stykker - værdsætter min indsats for at genoprette adgangen til mine konti. Et andet problem er at skifte til en ny enhed. Google Authenticator har ikke en eksportmulighed på grund af sikkerhedsmæssige årsager (hvis nøgler kan eksporteres, hvilken sikkerhed er der så?). Engang bar jeg nøglerne manuelt, og så besluttede jeg, at det var nemmere at efterlade den gamle smartphone i en æske på en hylde.

2FA-metoden skal være:

  • Sikker - kun du og ikke angribere skal få adgang til din konto
  • Pålidelig - du får adgang til din konto, når du har brug for det
  • Praktisk og tilgængelig - at bruge 2FA er overskuelig og tager minimal tid
  • Billig

Vi mener, at blockchain er den rigtige løsning.

Brug 2FA på blockchain

For brugeren ser 2FA på blockchain det samme ud som at modtage engangskoder via SMS. Den eneste forskel er leveringskanalen. Metoden til at opnå en 2FA-kode afhænger af, hvad blockchain tilbyder. I vores projekt (oplysninger findes i min profil) er dette en webapplikation, Tor, iOS, Android, Linux, Windows, MacOS.

Tjenesten genererer en engangskode og sender den til messengeren på blockchain. Følg derefter klassikerne: brugeren indtaster den modtagne kode i servicegrænsefladen og logger ind.

Flyt for at sikre 2FA på blockchain

I artiklen Hvordan fungerer en decentral messenger på blockchain? Jeg skrev, at blockchain sikrer sikkerheden og privatlivets fred for meddelelsestransmission. Om spørgsmålet om at sende 2FA-koder vil jeg fremhæve:

  • Et klik for at oprette en konto - ingen telefoner eller e-mails.
  • Alle beskeder med 2FA-koder er krypteret End-to-End curve25519xsalsa20poly1305.
  • MITM-angreb er udelukket - hver besked med 2FA-koden er en transaktion på blockchain og er underskrevet af Ed25519 EdDSA.
  • Beskeden med 2FA-koden ender i sin egen blok. Sekvensen og tidsstemplet af blokke kan ikke rettes, og derfor rækkefølgen af ​​meddelelser.
  • Der er ingen central struktur, der kontrollerer "ægtheden" af en besked. Dette gøres af et distribueret system af noder baseret på konsensus, og det ejes af brugerne.
  • Kan ikke deaktiveres - konti kan ikke blokeres, og beskeder kan ikke slettes.
  • Få adgang til 2FA-koder fra enhver enhed til enhver tid.
  • Bekræftelse af beskedlevering med 2FA kode. Tjenesten, der sender engangsadgangskoden, ved med sikkerhed, at den er leveret. Ingen "Send igen"-knapper.

For at sammenligne med nogle andre 2FA-metoder lavede jeg en tabel:

Flyt for at sikre 2FA på blockchain

Brugeren modtager en konto i blockchain-messengeren for at modtage koder på et sekund - kun en adgangssætning bruges til at logge ind. Derfor kan anvendelsesmetoderne være forskellige: Du kan bruge én konto til at modtage koder for alle tjenester, eller du kan oprette en separat konto for hver tjeneste.

Der er også en ulempe - kontoen skal have mindst én transaktion. For at brugeren kan modtage en krypteret besked med en kode, skal du kende hans offentlige nøgle, og den vises kun i blockchainen ved den første transaktion. Sådan lykkedes det os at komme ud af det: Vi gav dem mulighed for at modtage gratis tokens i deres pung. En bedre løsning er dog at navngive kontoen som en offentlig nøgle. (Til sammenligning har vi kontonummeret U1467838112172792705 er en afledt af den offentlige nøgle cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. For messenger er dette mere bekvemt og læsbart, men for systemet til at sende 2FA-koder er det en begrænsning). Jeg tror, ​​at nogen i fremtiden vil tage sådan en beslutning og flytte "Bekvemmelighed og tilgængelighed" til den grønne zone.

Prisen for at sende en 2FA-kode er virkelig lav - 0.001 ADM, nu er den 0.00001 USD. Igen kan du hæve din blockchain og gøre prisen til nul.

Sådan forbinder du 2FA på blockchain til din tjeneste

Jeg håber, jeg var i stand til at interessere nogle få læsere til at tilføje blockchain-autorisation til deres tjenester.

Jeg vil fortælle dig, hvordan du gør dette ved at bruge vores messenger som eksempel, og analogt kan du bruge en anden blockchain. I 2FA-demo-appen bruger vi postgresql10 til at gemme kontooplysninger.

Forbindelsesfaser:

  1. Opret en konto på blockchainen, hvorfra du sender 2FA-koder. Du vil modtage en adgangssætning, som bruges som en privat nøgle til at kryptere beskeder med koder og til at underskrive transaktioner.
  2. Tilføj et script til din server for at generere 2FA-koder. Hvis du allerede bruger en anden 2FA-metode med engangsadgangskodelevering, har du allerede gennemført dette trin.
  3. Tilføj et script til din server for at sende koder til brugeren i blockchain-messengeren.
  4. Opret en brugergrænseflade til at sende og indtaste en 2FA-kode. Hvis du allerede bruger en anden 2FA-metode med engangsadgangskodelevering, har du allerede gennemført dette trin.

1 Kontooprettelse

At oprette en konto i blockchain betyder at generere en privat nøgle, en offentlig nøgle og en afledt kontoadresse.

Flyt for at sikre 2FA på blockchain

Først genereres BIP39-adgangssætningen, og SHA-256-hashen beregnes ud fra den. Hash bruges til at generere den private nøgle ks og den offentlige nøgle kp. Fra den offentlige nøgle, ved at bruge den samme SHA-256 med inversion, får vi adressen i blockchainen.

Hvis du vil sende 2FA-koder hver gang fra en ny konto, skal kontooprettelseskoden føjes til serveren:

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

I demoapplikationen forenklede vi det - vi oprettede én konto i webapplikationen og sender koder fra den. I de fleste tilfælde er dette også mere bekvemt for brugeren: han ved, at tjenesten sender 2FA-koder fra en bestemt konto og kan navngive den.

Flyt for at sikre 2FA på blockchain

2 Generering af 2FA-koder

Der skal genereres en 2FA-kode for hvert brugerlogin. Vi bruger biblioteket smugkro, men du kan vælge en hvilken som helst anden.

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

Kontrol af gyldigheden af ​​2FA-koden indtastet af brugeren:

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

3 Sender 2FA-kode

For at indsende en 2FA-kode kan du bruge blockchain node API, JS API-bibliotek eller konsollen. I dette eksempel bruger vi konsollen - dette er Command Line Interface, et værktøj, der forenkler interaktion med blockchain. For at sende en besked med en 2FA-kode skal du bruge kommandoen send message konsoller.

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

En alternativ måde at sende beskeder på er at bruge metoden send i JS API-biblioteket.

4 Brugergrænseflade

Brugeren skal have mulighed for at indtaste en 2FA-kode, dette kan gøres på forskellige måder afhængig af din applikationsplatform. I vores eksempel er dette Vue.

Flyt for at sikre 2FA på blockchain

Kildekoden til blockchain to-faktor autentificering demo-applikationen kan ses på GitHub. Der er et link i Readme til en Live-demo for at prøve det.

Kilde: www.habr.com

Tilføj en kommentar