Flytta för att säkra 2FA på blockchain

SMS-meddelanden är den mest populära metoden för tvåfaktorsautentisering (2FA). Det används av banker, elektroniska och kryptoplånböcker, brevlådor och alla typer av tjänster; antalet metodanvändare närmar sig 100 %.

Jag är indignerad över det här scenariot, eftersom den här metoden är osäker. Omtilldelning av ett nummer från ett SIM-kort till ett annat började i början av mobiltiden - så här återställs numret när ett SIM-kort tappas bort. "Digitala pengastöldspecialister" insåg att alternativet "skriva om SIM-kort" kan användas i bedrägliga system. När allt kommer omkring kan den som kontrollerar SIM-kortet kontrollera andras nätbanker, elektroniska plånböcker och till och med kryptovaluta. Och du kan ta en annan persons nummer i besittning genom att muta en telekomanställd, använda bedrägeri eller förfalskade dokument.

Flytta för att säkra 2FA på blockchain

Tusentals episoder av SIM-byte har upptäckts, som detta bedrägeriprogram kallas. Katastrofens omfattning tyder på att världen snart kommer att överge 2FA via SMS. Men detta händer inte - i studie de säger att det inte är användare som väljer 2FA-metoden, utan tjänsteägare.

Vi föreslår att du använder den säkra 2FA-metoden med leverans av engångskoder via blockkedjan, och vi kommer att berätta hur tjänsteägaren kan koppla den.

Räkningen går i miljoner

Under 2019 ökade bedrägerierna med SIM-byte med 63 % enligt Londonpolisen, och "genomsnittsräkningen" för en angripare var 4,000 XNUMX GBP. Jag har inte hittat någon statistik i Ryssland, men jag antar att den är ännu värre.

SIM-byte används för att stjäla populära Twitter-, Instagram-, Facebook-, VK-konton, bankkonton och nyligen även kryptovalutor - Det rapporterar tidningen Times enligt Bitcoin-entreprenören Joby Weeks. Högprofilerade fall av stöld av kryptovaluta med SIM-byte har dykt upp i pressen sedan 2016; 2019 såg en riktig topp.

I maj, U.S.A. Attorney's Office för Eastern District of Michigan väckt åtal nio ungdomar mellan 19 och 26 år: de tros vara en del av ett hackergäng som heter "The Community". Gänget åtalas för sju swapattacker, som ett resultat av vilka hackarna stal kryptovaluta värda över 2,4 miljoner dollar. Och i april fick Kalifornien-studenten Joel Ortiz 10 års fängelse för SIM-byte; hans produktion var 7.5 miljoner dollar i kryptovalutor.

Flytta för att säkra 2FA på blockchain
Foto på Joel Ortiz vid en presskonferens vid universitetet. Två år senare kommer han att häktas för cyberbedrägeri.

Hur SIM-byte fungerar

"Swap" betyder utbyte. I alla sådana system tar brottslingar över offrets telefonnummer, vanligtvis genom att återutställa ett SIM-kort, och använder det för att återställa lösenordet. Ett typiskt SIM-byte ser i teorin ut så här:

  1. Underrättelsetjänst. Bedragare tar reda på offrets personliga information: namn och telefonnummer. De kan hittas i öppna källor (sociala nätverk, vänner) eller tas emot från en medbrottsling - en anställd hos en mobiloperatör.
  2. Blockering. Offrets SIM-kort är avaktiverat; För att göra detta, ring bara leverantörens tekniska support, ange numret och säg att telefonen var förlorad.
  3. Fånga, överför numret till ditt SIM-kort. Vanligtvis sker detta också genom en medbrottsling i telekombolaget eller genom dokumentförfalskning.

I verkliga livet är saker och ting ännu svårare. Angripare väljer ett offer och spårar sedan telefonens plats dagligen - en begäran om att få information om att abonnenten har gått över till roaming kostar 1-2 cent. Så fort SIM-kortets ägare åkt utomlands förhandlar de med chefen på kommunikationsbutiken om att ge ut ett nytt SIM-kort. Det kostar ungefär $50 (jag hittade information - i olika länder och med olika operatörer från $20 till $100), och i värsta fall kommer chefen att få sparken - det finns inget ansvar för detta.

Nu kommer alla SMS att tas emot av angripare, och ägaren till telefonen kommer inte att kunna göra något åt ​​det - han är utomlands. Och sedan får skurkarna tillgång till offrets alla konton och byter lösenord om så önskas.

Chanser att återlämna stulen egendom

Banker tar ibland emot offer halvvägs och tar ut överföringar från deras konton. Därför är det möjligt att returnera fiat-pengar även om brottslingen inte hittas. Men med cryptocurrency-plånböcker är allt mer komplicerat - och tekniskt, och lagstiftningsmässigt. Hittills har inte en enda börs/plånbok betalat ut ersättning till offer för byte.

Om offren vill försvara sina pengar i domstol, skyller de på operatören: han skapade förutsättningarna för stöld av pengar från kontot. Det var precis vad jag gjorde Michael Turpin, som förlorade 224 miljoner dollar på grund av att byta.Han stämmer nu telekommunikationsföretaget AT&T.

Flytta för att säkra 2FA på blockchain

Hittills har ingen stat fungerande system för att lagligt skydda kryptovalutaägare. Det är omöjligt att försäkra ditt kapital eller få ersättning för dess förlust. Därför är det lättare att förhindra en bytesattack än att hantera dess konsekvenser. Det mest uppenbara sättet är att använda en mer pålitlig "andra faktor" för 2FA.

SIM-byte är inte det enda problemet med 2FA via SMS

Bekräftelsekoder i SMS är också osäkra ur teknisk synpunkt. Meddelanden kan fångas upp på grund av oparpade sårbarheter i Signaling System 7 (SS7). 2FA över SMS är officiellt erkänt som osäkert (US National Institute of Standards and Technology säger detta i sin Digital autentiseringsguide).

Samtidigt ger närvaron av 2FA ofta användaren en känsla av falsk säkerhet, och han väljer ett enklare lösenord. Därför gör sådan autentisering det inte svårt, utan gör det lättare för en angripare att få tillgång till kontot.

Och ofta kommer SMS med lång fördröjning eller kommer inte fram alls.

Andra 2FA-metoder

Naturligtvis konvergerade inte ljuset på smartphones och SMS. Det finns andra metoder för 2FA. Till exempel engångs-TAN-koder: en primitiv metod, men den fungerar - den används fortfarande i vissa banker. Det finns system som använder biometriska data: fingeravtryck, näthinneskanningar. Ett annat alternativ som verkar vara en rimlig kompromiss när det gäller bekvämlighet, tillförlitlighet och pris är specialapplikationer för 2FA: RSA Token, Google Authenticator. Det finns även fysiska nycklar och andra metoder.

I teorin ser allt logiskt och pålitligt ut. Men i praktiken har moderna 2FA-lösningar problem, och på grund av dem skiljer sig verkligheten från förväntningarna.

Enligt Exploration, användningen av 2FA är i princip en olägenhet, och populariteten för 2FA via SMS förklaras av "mindre besvär jämfört med andra metoder" - att ta emot engångskoder är förståeligt för användaren.

Användare förknippar många 2FA-metoder med rädslan för att åtkomsten ska gå förlorad. Den fysiska nyckeln eller listan över TAN-lösenord kan förloras eller bli stulen. Jag har personligen haft dåliga erfarenheter av Google Authenticator. Min första smartphone med den här applikationen gick sönder - uppskatta mina ansträngningar för att återställa åtkomsten till mina konton. Ett annat problem är att byta till en ny enhet. Google Authenticator har inget exportalternativ på grund av säkerhetsskäl (om nycklar kan exporteras, vilken säkerhet finns det?). En gång bar jag nycklarna manuellt, och då bestämde jag mig för att det var lättare att lämna den gamla smarttelefonen i en låda på en hylla.

2FA-metoden bör vara:

  • Säkert – bara du och inte angripare ska få tillgång till ditt konto
  • Pålitlig – du får tillgång till ditt konto när du behöver det
  • Bekvämt och tillgängligt - att använda 2FA är tydligt och tar minimal tid
  • Billig

Vi tror att blockchain är rätt lösning.

Använd 2FA på blockchain

För användaren ser 2FA på blockkedjan ut som att ta emot engångskoder via SMS. Den enda skillnaden är leveranskanalen. Metoden för att få en 2FA-kod beror på vad blockkedjan erbjuder. I vårt projekt (information finns i min profil) är detta en webbapplikation, Tor, iOS, Android, Linux, Windows, MacOS.

Tjänsten genererar en engångskod och skickar den till budbäraren på blockkedjan. Följ sedan klassikerna: användaren anger den mottagna koden i tjänstens gränssnitt och loggar in.

Flytta för att säkra 2FA på blockchain

Artikeln Hur fungerar en decentraliserad budbärare på blockkedjan? Jag skrev att blockchain säkerställer säkerheten och integriteten för meddelandeöverföring. När det gäller frågan om att skicka 2FA-koder kommer jag att lyfta fram:

  • Ett klick för att skapa ett konto - inga telefoner eller e-postmeddelanden.
  • Alla meddelanden med 2FA-koder är krypterade End-to-End curve25519xsalsa20poly1305.
  • MITM-attack är uteslutet - varje meddelande med 2FA-koden är en transaktion på blockkedjan och är signerad av Ed25519 EdDSA.
  • Meddelandet med 2FA-koden hamnar i ett eget block. Sekvensen och tidsstämpeln för block kan inte korrigeras, och därför ordningen på meddelanden.
  • Det finns ingen central struktur som kontrollerar ett meddelandes "äkthet". Detta görs av ett distribuerat system av noder baserat på konsensus, och det ägs av användarna.
  • Kan inte inaktiveras - konton kan inte blockeras och meddelanden kan inte raderas.
  • Få åtkomst till 2FA-koder från vilken enhet som helst när som helst.
  • Bekräftelse av meddelandeleverans med 2FA-kod. Tjänsten som skickar engångslösenordet vet med säkerhet att det har levererats. Inga "Skicka igen"-knappar.

För att jämföra med några andra 2FA-metoder gjorde jag en tabell:

Flytta för att säkra 2FA på blockchain

Användaren får ett konto i blockchain-messengern för att ta emot koder på en sekund - endast en lösenordsfras används för att logga in. Därför kan ansökningsmetoderna vara olika: du kan använda ett konto för att ta emot koder för alla tjänster, eller så kan du skapa ett separat konto för varje tjänst.

Det finns också en olägenhet - kontot måste ha minst en transaktion. För att användaren ska få ett krypterat meddelande med en kod måste du känna till hans publika nyckel, och den visas i blockkedjan först med den första transaktionen. Så här lyckades vi ta oss ur det: vi gav dem möjligheten att få gratis tokens i plånboken. En bättre lösning är dock att döpa kontot till en offentlig nyckel. (Som jämförelse har vi kontonumret U1467838112172792705 är en derivata av den publika nyckeln cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. För budbäraren är detta mer bekvämt och läsbart, men för systemet för att skicka 2FA-koder är det en begränsning). Jag tror att någon i framtiden kommer att fatta ett sådant beslut och flytta "Bekvämlighet och tillgänglighet" till den gröna zonen.

Priset för att skicka en 2FA-kod är riktigt lågt - 0.001 ADM, nu är det 0.00001 USD. Återigen kan du höja din blockchain och göra priset noll.

Så här ansluter du 2FA på blockchain till din tjänst

Jag hoppas att jag kunde intressera några läsare att lägga till blockchain-auktorisering till sina tjänster.

Jag kommer att berätta hur du gör detta med vår messenger som exempel, och analogt kan du använda en annan blockchain. I 2FA-demoappen använder vi postgresql10 för att lagra kontoinformation.

Anslutningssteg:

  1. Skapa ett konto på blockkedjan från vilket du skickar 2FA-koder. Du kommer att få en lösenfras, som används som en privat nyckel för att kryptera meddelanden med koder och för att signera transaktioner.
  2. Lägg till ett skript till din server för att generera 2FA-koder. Om du redan använder någon annan 2FA-metod med engångslösenordsleverans har du redan slutfört det här steget.
  3. Lägg till ett skript på din server för att skicka koder till användaren i blockchain-messengern.
  4. Skapa ett användargränssnitt för att skicka och ange en 2FA-kod. Om du redan använder någon annan 2FA-metod med engångslösenordsleverans har du redan slutfört det här steget.

1 Skapa konto

Att skapa ett konto i blockkedjan innebär att generera en privat nyckel, en offentlig nyckel och en härledd kontoadress.

Flytta för att säkra 2FA på blockchain

Först genereras BIP39-lösenordsfrasen och SHA-256-hash beräknas utifrån den. Hashen används för att generera den privata nyckeln ks och den publika nyckeln kp. Från den publika nyckeln, med samma SHA-256 med inversion, får vi adressen i blockkedjan.

Om du vill skicka 2FA-koder varje gång från ett nytt konto, måste koden för att skapa konto läggas till på servern:

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 förenklade vi det - vi skapade ett konto i webbapplikationen och skickar koder från det. I de flesta fall är detta också bekvämare för användaren: han vet att tjänsten skickar 2FA-koder från ett specifikt konto och kan namnge det.

Flytta för att säkra 2FA på blockchain

2 Generera 2FA-koder

En 2FA-kod måste genereras för varje användarinloggning. Vi använder biblioteket lönnkrog, men du kan välja vilken annan som helst.

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

Kontrollera giltigheten av 2FA-koden som angetts av användaren:

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

3 Skickar 2FA-kod

För att skicka in en 2FA-kod kan du använda blockchain node API, JS API-bibliotek eller konsolen. I det här exemplet använder vi konsolen - det här är kommandoradsgränssnittet, ett verktyg som förenklar interaktion med blockkedjan. För att skicka ett meddelande med en 2FA-kod måste du använda kommandot send message konsoler.

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

Ett alternativt sätt att skicka meddelanden är att använda metoden send i JS API-biblioteket.

4 Användargränssnitt

Användaren behöver ges möjlighet att ange en 2FA-kod, detta kan göras på olika sätt beroende på din applikationsplattform. I vårt exempel är detta Vue.

Flytta för att säkra 2FA på blockchain

Källkoden för blockchain-tvåfaktorsautentiseringsdemoapplikationen kan ses på GitHub. Det finns en länk i Readme till en Live-demo för att testa den.

Källa: will.com

Lägg en kommentar