Skift til sikker 2FA på blockchain

SMS-beskeder er den mest populære metode til to-faktor autentificering (2FA). Den anvendes af banker, elektroniske og kryptovaluta tegnebøger, e-mail-konti og forskellige tjenester; antallet af brugere af metoden nærmer sig 100%.

Denne udvikling gør mig ophidset, da denne metode ikke er sikker. At overføre et nummer fra et SIM-kort til et andet begyndte allerede i begyndelsen af den mobile æra – sådan gendannes nummeret ved tab af SIM-kort. "Specialister i at stjæle digitale penge" har indset, at muligheden for 'overførsel af SIM-kort' kan bruges i svindelschemes. For den der kontrollerer SIM-kortet kan også styre andres online banking, elektroniske tegnebøger og endda kryptovaluta. Og at få fat i en andens nummer kan gøres gennem bestikkelse af telekompersonale, ved hjælp af bedrageri eller falske dokumenter.

Skift til sikker 2FA på blockchain

Tusinder af tilfælde af SIM-swapping er blevet afsløret – dette svindel kaldt sådan. Omfanget af katastrofen viser, at verden snart vil opgive 2FA via SMS. Men dette sker ikke – i forskning viser, at det ikke er brugerne, men ejere af tjenester, der vælger 2FA-metoden.

Vi tilbyder at bruge en sikker 2FA-metode med levering af engangskoder via blockchain, og vi vil forklare, hvordan tjenesteudbyderen kan aktivere den.

Det drejer sig om millioner

I 2019 steg svindel med SIM-swapping med 63% ifølge London politi, og 'den gennemsnitlige billetpris' for svindleren var 4.000 GBP. Jeg fandt ikke statistikker i Rusland, men jeg formoder, at de er endnu værre.

SIM-swapping bruges til at stjæle populære konti som Twitter, Instagram, Facebook, VK, bankkonti, og for nylig er de også nået til kryptovaluta – beretter avisen Times ifølge bitcoin-iværksætteren Joby Wicks. Opmærksomme sager om tyveri af kryptovaluta via SIM-swapping er blevet omtalt i pressen siden 2016; 2019 var et rigtigt højdepunkt.

I maj anklagede anklagemyndigheden i det østlige Michigan forbød ni unge unge mennesker i alderen 19 til 26 år: de formodes at være en del af en hackerbande kaldet "The Community". Banden står anklaget for syv SIM-swapping-angreb, hvor hackerne har tilegnet sig kryptovalutaer til en værdi af over $2,4 millioner. I april modtog en studerende fra Californien, Joel Ortiz, 10 års fængsel for SIM-swapping; hans udbytte var $7,5 millioner i kryptovalutaer.

Skift til sikker 2FA på blockchain
Foto af Joel Ortiz på en pressekonference på universitetet. To år senere vil han blive anholdt for cyberkriminalitet.

Hvordan SIM-swapping fungerer

"Swapping" betyder udveksling. I alle lignende ordninger tilegner kriminelle sig offerets telefonnummer, typisk ved at få udstedt et nyt SIM-kort, og bruger det til at nulstille adgangskoder. Typisk ser SIM-swapping i teorien således ud:

  1. Undersøgelse. Svindlere indhenter personlige oplysninger om offeret: navn og telefonnummer. Disse kan findes i åbne kilder (sociale medier, venner) eller fås fra en medskyldig – en ansat hos mobiloperatøren.
  2. Deaktivering. Offerets SIM-kort bliver deaktiveret; det kræver blot at ringe til kundeservice hos leverandøren, oplyse nummeret og sige, at telefonen er blevet tabt.
  3. Overtagelse, overførsel af nummeret til eget SIM-kort. Dette sker normalt også via en medskyldig i telekomfirmaet eller ved hjælp af falsk dokumentation.

I virkeligheden er det endnu mere alvorligt. Gerningsmændene vælger et offer, hvorefter de dagligt overvåger telefonens placering – en forespørgsel om, at abonnenten er blevet roaming, koster 1-2 cent. Så snart ejeren af SIM-kortet er rejst udenlands, aftaler de med en manager i en telebutik om udstedelse af et nyt SIM-kort. Det koster omkring $50 (jeg har fundet oplysninger – i forskellige lande og hos forskellige operatører fra $20 til $100), og i værste fald vil manageren blive fyret – der er ikke noget ansvar for dette.

Nu vil alle SMS'er komme til gerningsmændene, og ejeren af telefonen kan ikke gøre noget ved det – han er i udlandet. Og derefter får skurke adgang til alle offerets konti og kan ændre adgangskoder, hvis de ønsker det.

Chancerne for at få det stjålne tilbage

Bankerne går nogle gange imøde med ofrene og annullerer overførsler fra deres konti. Derfor kan fiatpenge nogle gange returneres, selvom gerningsmanden ikke er fundet. Men med kryptovaluta-tegnebøger er det mere kompliceret – og teknisk, og lovgivningsmæssigt. Indtil videre har ingen børs/mobiltegningssystemer udbetalt erstatning til ofrene for svopning.

Hvis de ramte ønsker at forsvare deres penge i retten, beskylder de operatøren: han har skabt betingelserne for at stjæle penge fra kontoen. Det var netop sådan, Michael Terpin, som tabte $224 millioner på grund af svopning. Han sagsøger i øjeblikket teleselskabet AT&T.

Skift til sikker 2FA på blockchain

Indtil videre har ingen stat et fungerende system til lovgivningsmæssigt at beskytte ejere af kryptovaluta. Det er umuligt at forsikre sin kapital eller få erstatning for tabet. Derfor er det lettere at forhindre en svopning-attak end at kæmpe mod konsekvenserne. Den mest åbenlyse måde er at bruge en mere pålidelig 'anden faktor' til 2FA.

SIM-svopning er ikke det eneste problem ved 2FA via SMS

Bekræftelseskoder via SMS er utrygge og teknisk set usikre. Beskeder kan blive opfanget på grund af uoprettelige sårbarheder i signaleringssystemet Signaling System 7 (SS7). 2FA via SMS er officielt blevet anerkendt som usikker (National Institute of Standards and Technology i USA siger dette i deres Guide til digital autentifikation).

Desuden giver tilstedeværelsen af 2FA ofte brugeren en falsk følelse af sikkerhed, hvilket får dem til at vælge en lettere adgangskode. Derfor gør en sådan autentifikation ikke tilgangen vanskeligere, men lettere for angriberen.

Og ofte kommer SMS'er også med stor forsinkelse eller slet ikke.

Andre metoder til 2FA

Selvfølgelig er smartphone og SMS ikke den eneste løsning. Der er også andre metoder til 2FA. For eksempel engangskoder TAN: en primitiv, men fungerende metode — den bruges stadig i nogle banker. Der findes systemer, der anvender biometriske data: fingeraftryk, iris-scanninger. Endnu en mulighed, der synes at være et rimeligt kompromis mellem brugervenlighed, sikkerhed og pris — særlige apps til 2FA: RSA Token, Google Authenticator. Der findes også fysiske nøgler og andre metoder.

Teoretisk set ser alt logisk og sikkert ud. Men i praksis har moderne 2FA-løsninger problemer, og derfor adskiller virkeligheden sig fra forventningerne.

Ifølge undersøgelsen, brugen af 2FA er i princippet en ulempe, og populariteten af 2FA via SMS forklares med 'mindre ulempe sammenlignet med andre metoder' — at modtage engangskoder er forståeligt for brugeren.

Mange forbinder 2FA-metoder med frygt for at miste adgangen. En fysisk nøgle eller en liste over TAN-koder kan gå tabt eller blive stjålet. Personligt har jeg haft en negativ oplevelse med Google Authenticator. Min første smartphone med denne app gik i stykker — prøv at vurdere mine anstrengelser for at genskabe adgangen til mine konti. Et andet problem er overgangen til en ny enhed. Google Authenticator har ikke muligheden for eksport af sikkerhedshensyn (hvis nøglerne kan eksporteres, hvor er sikkerheden så?). En gang flyttede jeg nøglerne manuelt, og derefter besluttede jeg, at det var nemmere at lade den gamle smartphone ligge i æsken på hylden.

2FA-metoden skal være:

  • Sikker — kun du skal have adgang til kontoen, ikke angribere
  • Pålidelig — du skal altid kunne få adgang til kontoen, når det er nødvendigt
  • Praktisk og tilgængelig — brugen af 2FA er intuitiv og tager minimal tid
  • Billig

Vi mener, at blockchain er en passende løsning.

Brug 2FA på blockchain

For brugeren ser 2FA på blockchain ud på samme måde som at modtage engangskoder via SMS. Forskellen ligger kun i leveringskanalen. Metoden til at modtage 2FA-koden afhænger af, hvad blockchain tilbyder. I vores projekt (oplysninger er i min profil) er det en webapplikation, Tor, iOS, Android, Linux, Windows, MacOS.

Tjenesten genererer en engangskode og sender den til en messenger på blockchain. Resten følger klassisk: brugeren indtaster den modtagne kode i grænsefladen for tjenesten og logger ind.

Skift til sikker 2FA på blockchain

I artiklen Hvordan fungerer en decentraliseret messenger på blockchain skrev jeg, at blockchain sikrer sikkerhed og privatliv i transmissionsprocessen for beskeder. Vedrørende udsendelse af 2FA-koder vil jeg fremhæve:

  • Én klik for at oprette en konto — ingen telefonnumre eller e-mailer.
  • Alle beskeder med 2FA-koder er end-to-end krypteret med curve25519xsalsa20poly1305.
  • MITM-angreb er udelukket — hver besked med 2FA-koden er en transaktion i blockchain og underskrives med Ed25519 EdDSA.
  • Beskeden med 2FA-koden kommer i sin blok. Sekvensen og tidsstemplet for blokkene kan ikke ændres, og dermed rækkefølgen af beskederne.
  • Der er ingen central struktur, der verificerer "validiteten" af beskeden. Dette udføres af et distribueret system af noder baseret på konsensus, og den tilhører brugerne.
  • Umuligheden ved at deaktivere - konti kan ikke blokkeres, og beskeder kan ikke slettes.
  • Adgang til 2FA-koder fra enhver enhed til enhver tid.
  • Bekræftelse af levering af beskeden med 2FA-koden. Tjenesten, der sender engangskoden, ved med sikkerhed, at den er blevet leveret. Ingen 'Send igen'-knapper.

Til sammenligning med nogle andre metoder til 2FA har jeg lavet en tabel:

Skift til sikker 2FA på blockchain

En konto i blockchain-messenger til modtagelse af kode brugs hurtigt — adgang anvender kun en frase. Derfor kan anvendelsesmetoderne være forskellige: man kan bruge én konto til at modtage koder til alle tjenester eller oprette en særskilt konto for hver tjeneste.

Der er også en ulempe — kontoen skal have mindst én transaktion. For at brugeren kan modtage en krypteret besked med koden, kræves det, at man kender sin offentlige nøgle, da den kun fremkommer i blockchain ved den første transaktion. Vi har løst dette ved at give mulighed for at modtage gratis tokens i wallet'en. Men en mere korrekt løsning ville være at navngive kontoen med den offentlige nøgle. (Til sammenligning er vores kontonummer U1467838112172792705 afledt af den offentlige nøgle cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. For messenger er dette mere praktisk og læsevenligt, men for systemet til afsendelse af 2FA-koder - en begrænsning). Jeg tror, at nogen i fremtiden vil lave en sådan løsning og oversætte "Praktisk og tilgængelighed" til den grønne zone.

Prisen for at sende 2FA-koden er virkelig lav - 0,001 ADM, det er i øjeblikket 0,00001 USD. Igen kan man starte sin egen blockchain og gøre prisen nul.

Hvordan man tilslutter 2FA på blockchain til din service

Jeg håber, jeg har været i stand til at interessere nogle læsere til at tilføje blockchain-godkendelse til deres tjenester.

Jeg vil fortælle, hvordan dette gøres ved hjælp af vores messenger som eksempel, og analogt kan du bruge en anden blockchain. I demo-applikationen for 2FA bruger vi postgresql10 til at gemme information om konti.

Trin til tilslutning:

  1. Opret en konto i blockchain, hvorfra du vil sende 2FA-koder. Du vil modtage en frase, der bruges som privat nøgle til at kryptere beskeder med koder og til at underskrive transaktioner.
  2. Tilføj et script til at generere 2FA-koder til din server. Hvis du allerede bruger en anden metode til 2FA med levering af engangskoder, har du allerede gennemført dette trin.
  3. Tilføj et script til at sende koder til brugeren i blockchain-messenger.
  4. Opret et brugerinterface til at sende og indtaste 2FA-koden. Hvis du allerede bruger en anden metode til 2FA med levering af engangskoder, har du allerede gennemført dette trin.

1 Oprettelse af konto

Oprettelse af konto i blockchain er genereringen af en privat nøgle, en offentlig nøgle og en adresse, der er afledt heraf.

Skift til sikker 2FA på blockchain

Først genereres en BIP39-frase, som herefter omregnes til en SHA-256-hash. Hashen bruges til at generere den private nøgle ks og den offentlige nøgle kp. Fra den offentlige nøgle får vi adressen i blockchain ved hjælp af den samme SHA-256 med inversion.

Hvis du vil sende 2FA-koder fra en ny konto hver gang, skal koden til oprettelse af kontoen tilfø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 demo-applikationen har vi forenklet det - oprettet én konto i webapplikationen og sender koderne derfra. I de fleste tilfælde er det mere praktisk for brugeren: han ved, at tjenesten sender 2FA-koder fra en specifik konto, og kan navngive den.

Skift til sikker 2FA på blockchain

2 Generering af 2FA-koder

2FA-koden skal genereres for hver brugerlogin. Vi bruger biblioteket speakeasy, men du kan vælge et andet.

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

Kontrol af gyldigheden af den 2FA-kode, som brugeren har indtastet:

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

3 Afsendelse af 2FA-kode

For sending a 2FA code, you can use the blockchain node API, the JS API library, or the console. In this example, we are using the console — it is a Command Line Interface, a utility that simplifies interaction with the blockchain. To send a message with the 2FA code, you need to use the command send message console.

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

An alternative way to send messages is to use the method send in the JS API library.

4 User Interface

The user needs to be given the option to input the 2FA code, which can be done in various ways depending on your application's platform. In our example, it's Vue.

Skift til sikker 2FA på blockchain

The source code of the demonstration application for two-factor authentication on the blockchain can be found at GitHub. There is a link to a Live demo in the Readme to try it out.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster