A SMS üzenetek a legnépszerűbb módszerek a kétfaktoros hitelesítés (2FA) terén. Használják őket bankok, elektronikus és kriptovaluta pénztárcák, e-mail fiókok és különféle szolgáltatások; .
Ez a helyzet felháborít, mivel ez a módszer nem biztonságos. A számok átírása egyik SIM-kártyáról a másikra még a mobil korszak hajnalán kezdődött — így állítják vissza a számot a SIM-kártya elvesztésekor. A "digitális pénz eltulajdonításának szakemberei" felismerték: a "SIM-kártya újraírásának" lehetősége csalásos rendszerekben is felhasználható. Hiszen aki ellenőrzi a SIM-kártyát, az képes irányítani más online banki szolgáltatását, elektronikus pénztárcákat és akár a kriptovalutát is. Egy másik személy számának megszerzése lehetővé válik a telekommunikációs alkalmazott megvesztegetésével, átveréssel vagy hamis dokumentumokkal.

Tízezer SIM-csapás episzódja vált nyilvánvalóvá — így nevezték el ezt a csalási módszert. A katasztrófa mértéke arra utal, hogy a világ hamarosan lemond a SMS-alapú 2FA-ról. De ez nem történik meg — azt beszélik, hogy nem a felhasználók választják a 2FA módszert, hanem a szolgáltatások tulajdonosai.
Javasoljuk, hogy használjanak biztonságos 2FA módszert, amely az egyszeri kódok blokkláncon keresztül való továbbításával működik, és elmondjuk, hogyan tudja a szolgáltatás tulajdonosa ezt csatlakoztatni.
A tét a milliók.
2019-ben a SIM-csapásos csalások száma 63%-kal nőtt a londoni rendőrség adatai szerint, míg a csalók "átlagos bevétele" 4000 GBP. Oroszországban nem találtam statisztikákat, de feltételezem, hogy ott még rosszabb a helyzet.
A SIM-csapást népszerű Twitter, Instagram, Facebook, VK fiókok ellopására is használják, nemrég pedig a kriptovalutákhoz is eljutottak — Joby Wicks bitcoin vállalkozó szerint. A SIM-csapásos kriptovaluta-lopások nagy ügyei 2016 óta szerepelnek a sajtóban; 2019 volt a valódi csúcs.
Májusban az Egyesült Államok ügyészsége Michigan keleti kerületében kilenc fiatal ellen, akik 19 és 26 év közöttiek: feltételezhetően a „The Community” nevű hacker bandához tartoznak. A bandára hét SIM-csapási támadást róttak, amelyek során a hackerek több mint 2,4 millió dollár értékű kriptovalutát tulajdonítottak el. Áprilisban pedig egy kaliforniai diák, Joel Ortiz 10 év börtönbüntetést kapott a SIM-csapás miatt; az ő zsákmánya 7,5 millió dollár volt kriptovalutákban.

Joel Ortiz fényképe egy egyetemi sajtótájékoztatón. Két év múlva kiber csalás miatt őrizetbe veszik.
A SIM-csere működési elve
A "csere" szó jelentése csere. Az ilyen rendszerekben a bűnözők megszerzik a célpont telefonszámát, általában a SIM-kártya újrarendelésén keresztül, és használják azt a jelszavak visszaállítására. A tipikus SIM-csere elméletileg így néz ki:
- Felderítés. A bűnözők megszerzik a célpont személyes adatait: nevét és telefonszámát. Ezek megtalálhatók nyilvános forrásokban (közösségi média, barátok) vagy megkérdezheti egy társukat - a mobilszolgáltató alkalmazottját.
- Blokkolás. A célpont SIM-kártyája inaktiválódik; ehhez elegendő felhívni a szolgáltató ügyfélszolgálatát, közölni a számot, és azt mondani, hogy a telefon elveszett.
- Átirányítás, a szám átvitele saját SIM-kártyára. Ezt gyakran egy szolgáló közvetítésével végzik a telekommunikációs cégnél, vagy hamis dokumentumokkal.
A valóságban azonban minden még szigorúbb. A bűnözők kiválasztanak egy célpontot, majd naponta figyelik a telefon helyzetét - egy lekérdezés a roaming információról mindössze 1-2 centbe kerül. Amint a SIM-kártya tulajdonosa külföldre utazik, megállapodnak egy információs bolt munkatársával egy új SIM-kártya kiadásáról. Ez körülbelül 50 dollárral kerül (tudom, hogy az információ - különböző országokban és különböző szolgáltatóknál 20 és 100 dollár között változik), és a bolt vezetője a legrosszabb esetben felmond - ezért nincs felelősség.
Mostantól minden SMS-t a bűnözők kapnak, míg a telefon tulajdonosa semmit sem tud tenni - ő külföldön van. Ezt követően a gonosztevők hozzáférést nyernek a célpont összes fiókjához, és ha akarják, megváltoztatják a jelszavakat.
Az ellopott javak visszaszerzésének esélyei
A bankok néha segítenek az áldozatoknak, és visszaadják a számlájukról történő átutalásokat. Ezért lehetséges a fiat pénz visszaszerzése, még akkor is, ha a bűnözőt nem találják meg. De a kriptovaluta tárcákkal bonyolultabb a helyzet - technikaiés jogi szempontból. Eddig egyetlen tőzsde/tárca sem fizetett kártalanítást a csere áldozatainak.
Ha az áldozatok szeretnék védeni a pénzüket a bíróság előtt, az üzemeltetőt vonják felelősségre: ő teremtette meg a feltételeket a pénz lopásához. Pontosan ezt tette , aki a csere következtében 224 millió dollárt vesztett. Jelenleg a AT&T távközlési céggel perel.

Jelenleg egyetlen ország sem rendelkezik működő módszerekkel, hogy jogilag megvédje a kriptovaluta-tulajdonosokat. Az tőke biztosítása vagy kártalanítás annak elvesztése esetén lehetetlen. Ezért a swap támadás megelőzése könnyebb, mint annak következményeivel küzdeni. A legnyilvánvalóbb módja ennek a megbízhatóbb "második faktor" használata a 2FA-hoz.
A SIM-swap nem az egyetlen probléma a SMS-alapú 2FA-val kapcsolatban
A SMS-ben küldött megerősítő kódok technikai szempontból nem biztonságosak. Az üzeneteket meg lehet téveszteni az SS7 jelzési rendszerben fellelhető megoldhatatlan sebezhetőségek miatt. A SMS-alapú 2FA hivatalosan is elismert, mint nem biztonságos (az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete beszél erről a ).
Ennek ellenére a 2FA jelenléte gyakran hamis biztonságérzetet kelt a felhasználóban, és egyszerűbb jelszó választására ösztönöz. Ezért ez a hitelesítési forma nem nehezíti, hanem egyszerűsíti a támadó hozzáférését a fiókhoz.
Emellett gyakran érkeznek SMS-ek nagy késéssel, vagy egyáltalán nem érkeznek meg.
Egyéb 2FA módszerek
Természetesen a mobiltelefonok és az SMS nem az egyetlen megoldás a 2FA-ra. Vannak más módszerek is. Például az egyszeri TAN-kódok: primitív megoldás, de működőképes - ezt még mindig használják egyes bankokban. Léteznek biometrikus adatok alkalmazásával működő rendszerek is: ujjlenyomatok, íriszképek. Egy másik változat, amely ésszerű kompromisszumnak tűnik a kényelem, megbízhatóság és ár között - speciális 2FA alkalmazások: RSA Token, Google Authenticator. Továbbá léteznek fizikai kulcsok és más módszerek.
Elméletileg minden logikusnak és megbízhatónak tűnik. A gyakorlatban azonban a modern 2FA megoldásoknak vannak problémái, és ezek miatt a valóság eltér a várakozásoktól.
A következő szerint , a 2FA használata alapvetően kényelmetlenséget okoz, és a SMS-alapú 2FA népszerűségét az magyarázza, hogy "kevésbé kényelmetlen más módszerekhez képest" - az egyszeri kódok megszerzése a felhasználó számára érthető.
Sok felhasználó úgy köti össze a 2FA módszereket a félelemmel, hogy esetleg el fogják veszíteni a hozzáférést. Fizikai kulcsot vagy TAN-jegylista elveszíthető, vagy ellophatják. Személy szerint negatív tapasztalatom van a Google Authenticator használatával. Az első okostelefonom, amelyen ez az alkalmazás volt, tönkremenetele miatt értékelje az erőfeszítéseimet, hogy visszaállítsam a hozzáférést a fiókjaimhoz. Egy másik probléma az új eszközre való áttérés. A Google Authenticator nem kínál exportálási lehetőséget biztonsági megfontolások miatt (ha a kulcsok exportálhatók, akkor hol a biztonság?). Egyszer manuálisan átvitettem a kulcsokat, aztán úgy döntöttem, hogy egyszerűbb, ha az öreg okostelefonomat a dobozában hagyom a polcon.
A 2FA módszernek a következőképpen kell működnie:
- Biztonságosnak — a fiókhoz való hozzáférést csak Ön, és nem rosszindulatú támadók kapják meg.
- Megbízhatónak — akkor kap hozzáférést a fiókjához, amikor csak szüksége van rá.
- Kényelmesnek és elérhetőnek — a 2FA használata egyértelmű és minimális időt igényel.
- Olcsónak
Úgy véljük, hogy a blokklánc egy megfelelő megoldás.
Használjon 2FA-t a blokkláncon
A felhasználó számára a blokklánc 2FA-ja úgy néz ki, mint az egyszer használatos kódok SMS-ben történő fogadása. A különbség csak a szállítási csatornában rejlik. A 2FA-kód megszerzésének módja attól függ, hogy mit kínál a blokklánc. A projektünkben (az információ a profilomban található) ez egy webalkalmazás, Tor, iOS, Android, Linux, Windows és MacOS.
A szolgáltatás egy egyszer használatos kódot generál, és a blokklánc üzenetküldő rendszerébe küldi. Tovább — a klasszikus módon: a felhasználó beírja az érkezett kódot a szolgáltatás felületén, és hitelesíti magát.

A cikkben Írtam, hogy a blokklánc biztonságot és a hírek privát átvitelét biztosítja. A 2FA kódok küldését illetően a következőket emelném ki:
- Egy kattintás az fiók létrehozásához — sem telefon, sem e-mail cím nem szükséges.
- Minden 2FA kód üzenet End-to-End titkosítással van ellátva curve25519xsalsa20poly1305 formátumban.
- A MITM-támadások kizártak — minden 2FA kód üzenet egy tranzakció a blokkláncon, melyet az Ed25519 EdDSA ír alá.
- A 2FA kód üzenete egy saját blokkba kerül. A blokkok sorrendje és időbélyegzője nem módosítható, így az üzenetek sorrendje sem.
- Nincs központi struktúra, amely ellenőrzi az üzenetek „hitelességét”. Ezt a konszenzus alapú elosztott csomópont rendszer végzi, és ez a felhasználók tulajdonában van.
- A kikapcsolás lehetetlensége — a fiókok nem zárhatók le, és az üzenetek nem törölhetők.
- Hozzáférés a 2FA kódokhoz bármely eszközről, bármikor.
- A 2FA kód üzenetének kézbesítése megerősítve. A szolgáltatás, amely az egyszer használatos jelszót küldi, pontosan tudja, hogy az kézbesítve lett. Nincsenek „Küldje el újra” gombok.
Összehasonlításként néhány más 2FA módszerrel készítettem egy táblázatot:

A felhasználó a blokkchain üzenetküldőben másodpercek alatt kapja meg a kódokat – a belépéshez csak a jelszóra van szükség. Ezért a felhasználási módok eltérőek lehetnek: használhat egy fiókot minden szolgáltatáshoz, vagy létrehozhat külön fiókot minden egyes szolgáltatáshoz.
Van egy hátrány is – a fióknak legalább egy tranzakcióval kell rendelkeznie. Ahhoz, hogy a felhasználó titkosított üzenetet kapjon a kódról, ismernie kell a nyilvános kulcsát, amely a blokkchainben csak az első tranzakcióval jelenik meg. Megoldottuk ezt úgy, hogy lehetőséget adtunk ingyenes tokenek begyűjtésére a pénztárcában. Azonban a helyesebb megoldás az lenne, ha a fiókot a nyilvános kulcs szerint neveznénk el. (Összehasonlításképpen nálunk a fiók száma U1467838112172792705 a nyilvános kulcsból származik cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Az üzenetküldő számára ez kényelmesebb és áttekinthetőbb, ám a 2FA kódok küldésére szolgáló rendszer számára korlátot jelent). Gondolom, a jövőben valaki kitalál egy ilyen megoldást, és átváltja a "Kényelem és elérhetőség" fogalmát zöld zónába.
A 2FA-kód küldésének ára tényleg alacsony – 0.001 ADM, jelenleg ez 0.00001 USD. Ismételt lehetőség, hogy saját blokkchain-t indítson, és így ingyenessé tegye az árat.
Hogyan lehet a blokkchain 2FA-t csatlakoztatni a szolgáltatásához
Remélem, sikerült felkeltenem néhány olvasó érdeklődését, hogy blokklánc-azonosítást adjanak a szolgáltatásaikhoz.
Elmondom, hogyan lehet ezt megtenni a mi üzenetküldőnk példáján, de analógiaként más blokkchain-t is használhat. Az 2FA demóalkalmazásban a postgresql10-et használjuk a fiókadatok tárolására.
A csatlakoztatás lépései:
- Hozzon létre egy fiókot a blokkchain-en, ahonnan a 2FA kódokat küldi. Kap egy jelszót, amely privát kulcsként szolgál az üzenetek kódolásához és a tranzakciók aláírásához.
- Adjon a szerveréhez egy scriptet a 2FA kódok generálásához. Ha már használ más módszert a 2FA egyedi jelszavainak kézbesítésére, ezt a lépést már elvégezte.
- Adjon a szerveréhez egy scriptet a kódok felhasználónak történő elküldéséhez a blokkchain üzenetküldőbe.
- Hozzon létre egy felhasználói felületet a 2FA kódok küldésére és bevitelére. Ha már használ más módszert a 2FA egyedi jelszavainak kézbesítésére, ezt a lépést már elvégezte.
1 Fiók létrehozása
A blokklánc fiók létrehozása a privát kulcs, a publikus kulcs és az abból származó fiókcím generálását jelenti.

Először egy BIP39 jelszót generálunk, amelyből egy SHA-256 hash készül. Ezt a hash-t használjuk a ks privát kulcs és a kp publikus kulcs generálására. A publikus kulcsból ugyanazzal a SHA-256 hash-tel és megfordítással kapjuk meg a blokklánc címet.
Ha mindig új fiókról szeretné elküldeni a 2FA kódokat, akkor a fiók létrehozásához szükséges kódot a szerverre kell hozzáadni:
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()
}A demóalkalmazásban egyszerűsítettük a folyamatot — létrehoztunk egy fiókot a webalkalmazásban, és onnan küldjük a kódokat. A legtöbb esetben ez praktikusabb a felhasználók számára: tudják, hogy a szolgáltatás konkrét fiókból küldi a 2FA kódokat, és elnevezhetik azt.

2 2FA kódok generálása
A 2FA kódot minden felhasználói bejelentkezéshez generálni kell. A következő könyvtárat használjuk: , de bármely másik könyvtár is választható.
const hotp = speakeasy.hotp({
counter,
secret: account.seSecretAscii,
});
A felhasználó által megadott 2FA kód érvényességének ellenőrzése:
se2faVerified = speakeasy.hotp.verify({
counter: this.seCounter,
secret: this.seSecretAscii,
token: hotp,
});
3 2FA kód küldése
A 2FA kód küldéséhez használhatja a blokklánc csomópont API-ját, a JS API könyvtárat vagy a konzolt. Ebben a példában a konzolt használjuk — ez a Parancssori Felület, amely leegyszerűsíti a blokklánccal való interakciót. A 2FA kódot tartalmazó üzenet elküldéséhez az alábbi parancsot kell használni: send message a konzolban.
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);
Alternatív módszer az üzenetek küldésére: használja a send JS API könyvtárát.
4 Felhasználói felület
A felhasználónak lehetőséget kell adni a 2FA kód bevitelére, ezt a platformtól függően különböző módokon lehet megtenni. Példánkban ez Vue.

A blokkláncalapú kéttényezős azonosító demóalkalmazás forráskódja itt tekinthető meg . A Readme tartalmaz egy linket az Élő demóra, hogy ki lehessen próbálni.
Forrás: habr.com
