SMS-meddelanden Àr den mest populÀra metoden för tvÄfaktorautentisering (2FA). Den anvÀnds av banker, elektroniska och kryptovaluta-plÄnböcker, e-postlÄdor och olika tjÀnster; .
Jag har svĂ„rt att förstĂ„ detta förfarande, eftersom denna metod Ă€r osĂ€ker. Att överföra nummer frĂ„n ett SIM-kort till ett annat började redan i den tidiga mobilĂ„ldern â sĂ„ Ă„terfĂ„r man sitt nummer vid förlust av SIM-kort. "Specialister pĂ„ digitala bedrĂ€gerier" insĂ„g att alternativet "SIM-kortsöverskrivning" kan anvĂ€ndas i bedrĂ€gliga scheman. Den som kontrollerar SIM-kortet kan ocksĂ„ hantera andras internetbank, elektroniska plĂ„nböcker och till och med kryptovaluta. För att fĂ„ tag pĂ„ nĂ„gon annans nummer kan man bestika en telekomanstĂ€lld, anvĂ€nda bedrĂ€geri eller falska dokument.

Tusentals fall av SIM-swapping har avslöjats â sĂ„ kallas detta bedrĂ€gerischema. Omfattningen av problemet tyder pĂ„ att vĂ€rlden snart kommer att överge 2FA via SMS. Men sĂ„ sker inte â i berĂ€ttar man att metoden för 2FA vĂ€ljs inte av anvĂ€ndarna, utan av tjĂ€nsteleverantörerna.
Vi erbjuder en sÀker metod för 2FA med leverans av engÄngskoder via blockchain, och vi kommer att berÀtta hur tjÀnsteleverantören kan ansluta den.
Det rör sig om miljontals
à r 2019 ökade bedrÀgerier med SIM-swapping med 63% enligt Londons polis, och "den genomsnittliga summan" för gÀrningspersonen var 4,000 GBP. Jag har inte funnit statistik i Ryssland, men jag misstÀnker att den Àr Ànnu vÀrre.
SIM-swapping anvĂ€nds för att stjĂ€la populĂ€ra konton pĂ„ Twitter, Instagram, Facebook, VK, bankkonton, och nyligen har det nĂ„tt kryptovalutor â enligt bitcoin-entreprenören Joby Wix. Stora fall av stulna kryptovalutor genom SIM-swapping har funnits i pressen sedan 2016; 2019 var det verkligen en topp.
I maj Ätalade Äklagaren i USA i östra Michigan nio unga mÀnniskor i Äldrarna 19 till 26 Är: de antas vara en del av hackergruppen "The Community". Gruppen Ätalas för sju swapping-attacker, dÀr hackers stulit kryptovaluta vÀrd mer Àn 2,4 miljoner dollar. I april fick en student frÄn Kalifornien, Joel Ortiz, 10 Ärs fÀngelse för SIM-swapping; hans byte uppgick till 7,5 miljoner dollar i kryptovaluta.

Bild pÄ Joel Ortiz vid en presskonferens pÄ universitetet. TvÄ Är senare kommer han att gripas för cyberbrott.
Principen för SIM-swapping
"Swapping" betyder byte. I dessa scheman tillskansar sig brottslingarna telefonnumret frÄn offret, vanligtvis genom att utfÀrda ett nytt SIM-kort, och anvÀnder det för att ÄterstÀlla lösenordet. Typisk SIM-swapping ser teoretiskt ut sÄ hÀr:
- Spaning. Bedragarna tar reda pĂ„ offrets personuppgifter: namn och telefon. Dessa kan hittas i offentliga kĂ€llor (sociala medier, vĂ€nner) eller erhĂ„llas frĂ„n en medbrottsling â en anstĂ€lld hos mobiloperatören.
- Blockering. Offrets SIM-kort avaktiveras; för detta rÀcker det att ringa supporten och meddela numret samt sÀga att telefonen har försvunnit.
- Ăvertagande, överföring av numret till sitt eget SIM-kort. Detta görs vanligtvis ocksĂ„ genom en medbrottsling inom telekomföretaget eller med hjĂ€lp av förfalskade dokument.
I verkliga livet Ă€r det Ă€nnu hĂ„rdare. Brottslingarna vĂ€ljer ut ett offer och övervakar dagligen telefonens plats â en förfrĂ„gan om information om att abonnenten gĂ„tt över till roaming kostar 1-2 cent. SĂ„ snart innehavaren av SIM-kortet Ă„ker utomlands, gör de en överenskommelse med en chef i en mobilbutik om att fĂ„ ett nytt SIM-kort. Det kostar cirka $50 (jag har hittat information â i olika lĂ€nder och hos olika operatörer mellan $20 och $100), och chefen riskerar i vĂ€rsta fall att bli avskedad â det finns inget straff för det.
Nu kommer alla SMS att gĂ„ till brottslingarna, och telefonens Ă€gare kan inte göra nĂ„got Ă„t det â han Ă€r utomlands. DĂ€refter fĂ„r förövarna tillgĂ„ng till alla offrets konton och kan Ă€ndra lösenord om de vill.
Chansen att ÄterfÄ det stulna
Banker gĂ„r ibland till mötes för offren och Ă„terkallar överföringar frĂ„n deras konton. DĂ€rför kan det lyckas att fĂ„ tillbaka fiatpengarna, Ă€ven om brottslingen inte hittas. Men med kryptovalutor Ă€r det svĂ„rare â bĂ„de teknisktoch juridiskt. Hittills har ingen börs/plĂ„nbok betalat ersĂ€ttning till offren för swapping.
Om de drabbade vill kÀmpa för sina pengar i domstol, anklagar de operatören: de skapade förutsÀttningar för stöld av pengar frÄn kontot. Precis som som förlorade $224 miljoner pÄ grund av swapping. Han stÀmmer nu telekomföretaget AT&T.

Inga stat har Ànnu nÄgra fungerande system för att lagligt skydda kryptovalutaÀgare. Det Àr omöjligt att försÀkra sitt kapital eller fÄ ersÀttning för dess förlust. DÀrför Àr det enklare att förhindra en SIM-swap attack Àn att bekÀmpa dess konsekvenser. Det mest uppenbara sÀttet Àr att anvÀnda en mer pÄlitlig "andra faktor" för 2FA.
SIM-swap Àr inte det enda problemet med 2FA via SMS
BekrÀftelsekoder via SMS Àr osÀkra ur teknisk synvinkel. Meddelanden kan avlyssnas pÄ grund av oÄtgÀrdbara sÄrbarheter i signalsystemet Signaling System 7 (SS7). 2FA via SMS har officiellt erkÀnts som osÀkert (detta pÄpekas av National Institute of Standards and Technology i USA) ).
Samtidigt ger nÀrvaron av 2FA ofta anvÀndaren en kÀnsla av falsk sÀkerhet, vilket gör att de vÀljer ett enklare lösenord. DÀrför försvÄrar sÄdan autentisering inte, utan underlÀttar faktiskt tillgÄngen för angriparen till kontot.
Dessutom kommer SMS ofta med stor fördröjning eller kommer överhuvudtaget inte.
Andra sÀtt för 2FA
SjĂ€lvklart har smarttelefoner och SMS inte monopol pĂ„ 2FA. Det finns andra 2FA-metoder. Till exempel engĂ„ngs TAN-koder: en primitiv men fungerande metod â den anvĂ€nds fortfarande av vissa banker. Det finns system som anvĂ€nder biometriska uppgifter: fingeravtryck, iris-skanningar. Ytterligare ett alternativ som verkar vara en rimlig kompromiss av bekvĂ€mlighet, pĂ„litlighet och pris Ă€r speciella appar för 2FA: RSA Token, Google Authenticator. Det finns ocksĂ„ fysiska nycklar och andra metoder.
I teorin verkar allt logiskt och pÄlitligt. Men i praktiken har moderna 2FA-lösningar sina problem, och dÀrför skiljer sig verkligheten frÄn förvÀntningarna.
Enligt , anvĂ€ndningen av 2FA Ă€r i grunden en olĂ€genhet, och populariteten för 2FA via SMS förklaras med "mindre besvĂ€r jĂ€mfört med andra metoder" â att fĂ„ engĂ„ngskoder Ă€r tydligt för anvĂ€ndaren.
MĂ„nga sĂ€tt att anvĂ€nda 2FA förknippar anvĂ€ndare med rĂ€dsla för att komma att förlora Ă„tkomst. En fysisk nyckel eller en lista med TAN-koder kan gĂ„ förlorad, eller sĂ„ kan de bli stulna. Jag har personligen haft en negativ upplevelse med Google Authenticator. Min första smartphone med den appen gick sönder â bedöm mina anstrĂ€ngningar för att Ă„terfĂ„ Ă„tkomst till mina konton. Ett annat problem Ă€r att byta till en ny enhet. Google Authenticator har inte exportmöjlighet av sĂ€kerhetsskĂ€l (om nycklarna kan exporteras, var Ă€r dĂ„ sĂ€kerheten?). En gĂ„ng flyttade jag nycklar manuellt, och sedan bestĂ€mde jag mig för att det var enklare att lĂ„ta den gamla smartphonen ligga i en lĂ„da pĂ„ hyllan.
Metoden för 2FA ska vara:
- SĂ€ker â endast du ska kunna fĂ„ Ă„tkomst till ditt konto, inte obehöriga
- Tillförlitlig â du ska alltid kunna fĂ„ Ă„tkomst till ditt konto nĂ€r du behöver det
- Enkel och tillgĂ€nglig â att anvĂ€nda 2FA ska vara förstĂ„eligt och ta minimalt med tid
- Billig
Vi anser att blockchain Àr en lÀmplig lösning.
AnvÀnd 2FA pÄ blockchain
För anvÀndaren ser 2FA pÄ blockchain ut precis som att ta emot engÄngskoder via SMS. Skillnaden ligger endast i leveranskanalen. Metoden för att ta emot 2FA-koden beror pÄ vad blockchain erbjuder. I vÄrt projekt (informationen finns i min profil) Àr detta en webapp, Tor, iOS, Android, Linux, Windows, MacOS.
TjÀnsten genererar en engÄngskod och skickar den till en meddelandeapp pÄ blockchain. Sedan Àr det klassiskt: anvÀndaren skriver in den mottagna koden i tjÀnstens grÀnssnitt och loggar in.

I artikeln Jag har skrivit att blockchain sÀkerstÀller sÀkerhet och integritet vid överföring av meddelanden. NÀr det gÀller att skicka 2FA-koder vill jag framhÀva:
- Ett klick för att skapa ett konto â inga telefoner eller e-postadresser.
- Alla meddelanden med 2FA-koder Àr krypterade End-to-End med curve25519xsalsa20poly1305.
- MITM-attacker Ă€r uteslutna â varje meddelande med 2FA-koden Ă€r en transaktion pĂ„ blockchain och signeras med Ed25519 EdDSA.
- Meddelandet med 2FA-koden hamnar i sin egen block. Ordningen och tidstÀmpeln för blocken gÄr inte att Àndra, vilket dÀrmed ocksÄ bevarar ordningen pÄ meddelandena.
- Det finns ingen central struktur som gör kontroller för "autenticiteten" av meddelandet. Det Àr ett distribuerat system av noder baserat pÄ konsensus, och det tillhör anvÀndarna.
- Omöjlighet att stĂ€nga av â konton kan inte blockeras och meddelanden kan inte tas bort.
- TillgÄng till 2FA-koder frÄn vilken enhet som helst nÀr som helst.
- BekrÀftelse pÄ leverans av meddelande med 2FA-kod. TjÀnsten som skickar engÄngslösenordet vet exakt att det har levererats. Inga knappar för 'Skicka igen'.
För att jÀmföra med andra 2FA-metoder har jag gjort en tabell:

Ett konto i blockchain-messenger för att ta emot koder fĂ„r anvĂ€ndaren pĂ„ en sekund â för inloggning anvĂ€nds endast en fras. DĂ€rför kan anvĂ€ndningssĂ€tten vara olika: man kan anvĂ€nda ett konto för att ta emot koder för alla tjĂ€nster, eller sĂ„ kan man skapa ett separat konto för varje tjĂ€nst.
Det finns en nackdel â kontot mĂ„ste ha minst en transaktion. För att anvĂ€ndaren ska fĂ„ ett krypterat meddelande med koden mĂ„ste man kĂ€nna till dess offentliga nyckel, och den visas i blockchain först efter den första transaktionen. Vi löste det sĂ„ hĂ€r: vi gav möjligheten att fĂ„ gratis tokens i plĂ„nboken. Men en mer korrekt lösning Ă€r att namnge kontot med den offentliga nyckeln. (För jĂ€mförelse har vi kontonummer U1467838112172792705 som Ă€r avledt frĂ„n den offentliga nyckeln cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. För messengern Ă€r detta mer praktiskt och lĂ€sbart, men för systemet för att skicka 2FA-koder Ă€r det en begrĂ€nsning). Jag tror att nĂ„gon kommer att ta fram en sĂ„dan lösning i framtiden och föra 'BekvĂ€mlighet och tillgĂ€nglighet' in i den gröna zonen.
Kostnaden för att skicka en 2FA-kod Ă€r verkligen lĂ„g â 0.001 ADM, vilket i nulĂ€get motsvarar 0.00001 USD. Ă terigen, man kan starta sin egen blockchain och göra kostnaden noll.
Hur du ansluter 2FA i blockchain till din tjÀnst
Jag hoppas att jag har lyckats intressera nÄgra lÀsare för att lÀgga till blockchain-autentisering till sina tjÀnster.
Jag ska berÀtta hur man gör detta med vÄrt messengertjÀnst som exempel, och analogt kan du anvÀnda en annan blockchain. I demoapplikationen för 2FA anvÀnder vi postgresql10 för att lagra information om konton.
Stegen för anslutning:
- Skapa ett konto i blockchain dÀrifrÄn du kommer att skicka 2FA-koder. Du kommer att fÄ en fras som anvÀnds som privat nyckel för att kryptera meddelanden med koder och för att signera transaktioner.
- LÀgg till ett skript pÄ din server för att generera 2FA-koder. Om du redan anvÀnder en annan metod för 2FA med leverans av engÄngslösenord, har du redan genomfört detta steg.
- LÀgg till ett skript pÄ din server för att skicka koder till anvÀndaren i blockchain-messenger.
- Skapa ett anvÀndargrÀnssnitt för att skicka och mata in 2FA-kod. Om du redan anvÀnder nÄgon annan metod för 2FA med leverans av engÄngslösenord har du redan slutfört detta steg.
1 Skapa konto
Att skapa ett konto pÄ blockchain innebÀr att generera en privat nyckel, en publik nyckel och en avledd adress för kontot.

Först genereras en BIP39-passfras, vars SHA-256-hash berÀknas. Hashen anvÀnds för att generera den privata nyckeln ks och den publika nyckeln kp. FrÄn den publika nyckeln fÄr vi adressen pÄ blockchain genom att anvÀnda samma SHA-256 med invers.
Om du vill skicka 2FA-koder varje gÄng frÄn ett nytt konto mÄste koden för att skapa kontot lÀggas till 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 har vi förenklat â vi skapade ett konto i webbapplikationen och skickar koder frĂ„n det. I de flesta fall Ă€r detta bekvĂ€mare för anvĂ€ndaren: han vet att tjĂ€nsten skickar 2FA-koder frĂ„n ett specifikt konto och kan namnge det.

2 Generering av 2FA-koder
En 2FA-kod mÄste genereras för varje anvÀndarinloggning. Vi anvÀnder biblioteket , men du kan vÀlja vilket annat som helst.
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
Verifiera giltigheten av 2FA-koden som anvÀndaren angett:
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 Skicka 2FA-kod
För att skicka 2FA-koden kan du anvĂ€nda blockchain-nodens API, JS API-biblioteket eller konsolen. I detta exempel anvĂ€nder vi konsolen â det Ă€r ett kommandoradsgrĂ€nssnitt, ett verktyg som förenklar interaktionen med blockchain. För att skicka ett meddelande med 2FA-koden mĂ„ste du anvĂ€nda kommandot send message i konsolen.
const util = require('util');
const exec = util.promisify(require('child_process').exec);
âŠ
const command = `adm send message ${adamantAddress} "2FA-kod: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);
Ett alternativt sÀtt att skicka meddelanden Àr att anvÀnda metoden send i JS API-bibliotek.
4 AnvÀndargrÀnssnitt
AnvÀndaren mÄste ges möjlighet att ange 2FA-koden, vilket kan göras pÄ olika sÀtt beroende pÄ plattformen för din applikation. I vÄrt exempel Àr det Vue.

KÀllkoden för demonstrationsapplikationen för tvÄfaktorsautentisering pÄ blockkedjan kan ses i . I Readme finns en lÀnk till Live demo för att prova.
KĂ€lla: habr.com
