Lépjen a 2FA biztosításához a blokkláncon

Az SMS-üzenetek a kétfaktoros hitelesítés (2FA) legnépszerűbb módszere. Bankok, elektronikus és kriptopénztárcák, postafiókok és mindenféle szolgáltatás használják; a módszert használók száma megközelíti a 100%-ot.

Felháborít ez a forgatókönyv, mert ez a módszer nem biztonságos. A számok átrendelése egyik SIM-kártyáról a másikra a mobilkorszak elején kezdődött – így áll vissza a szám, ha elveszik a SIM-kártyát. A „digitális pénzlopás-specialisták” rájöttek, hogy a „SIM-kártya átírása” lehetőség csalárd konstrukciókban is használható. Hiszen az, aki a SIM-kártyát kezeli, irányíthatja mások online banki tevékenységét, elektronikus pénztárcáját és még a kriptovalutát is. És birtokba veheti egy másik személy számát egy távközlési alkalmazott megvesztegetésével, megtévesztéssel vagy hamisított dokumentumokkal.

Lépjen a 2FA biztosításához a blokkláncon

A SIM-csere több ezer epizódját tárták fel, ahogy ezt a csalási sémát nevezik. A katasztrófa mértéke azt sugallja, hogy a világ hamarosan elhagyja a 2FA-t SMS-ben. De ez nem történik meg - in tanulmány azt mondják, hogy nem a felhasználók választják a 2FA módszert, hanem a szolgáltatástulajdonosok.

Javasoljuk a biztonságos 2FA módszer használatát az egyszeri kódok blokkláncon keresztül történő kézbesítésével, és elmondjuk, hogyan kapcsolhatja be a szolgáltatás tulajdonosa.

A szám milliósra rúg

2019-ben a SIM-csere-csalás 63%-kal nőtt a londoni rendőrség szerint, és egy támadó „átlagszámlája” 4,000 GBP volt. Nem találtam statisztikát Oroszországban, de feltételezem, hogy még rosszabbak.

A SIM-cserével népszerű Twitter, Instagram, Facebook, VK-fiókokat, bankszámlákat, sőt mostanában kriptovalutákat is ellopnak – – írja a The Times újság a Joby Weeks Bitcoin-vállalkozó szerint. 2016 óta bukkannak fel a sajtóban a SIM-cserét használó kriptovaluta-lopások nagy horderejű esetei; 2019 igazi csúcsot hozott.

Májusban az Egyesült Államok Michigan keleti körzetének ügyészsége vádat emeltek kilenc 19 és 26 év közötti fiatal: úgy gondolják, hogy a „The Community” nevű hackerbanda tagjai. A bandát hét cseretámadással vádolják, amelyek eredményeként a hackerek több mint 2,4 millió dollár értékben loptak el kriptovalutát. Áprilisban pedig Joel Ortiz kaliforniai diák 10 év börtönt kapott SIM-kártya cseréje miatt; termelése 7.5 millió dollár volt kriptovalutában.

Lépjen a 2FA biztosításához a blokkláncon
Joel Ortiz fotója egy egyetemi sajtótájékoztatón. Két évvel később számítógépes csalás miatt fogva tartják.

Hogyan működik a SIM-csere

A „csere” cserét jelent. Minden ilyen sémában a bűnözők átveszik az áldozat telefonszámát, általában a SIM-kártya újbóli kibocsátásával, és ezzel állítják vissza a jelszót. Egy tipikus SIM-csere elméletben így néz ki:

  1. Hírszerző szolgálat. A csalók megtudják az áldozat személyes adatait: nevét és telefonszámát. Megtalálhatók nyílt forrásokból (közösségi hálózatok, barátok), vagy egy bűntárstól - egy mobilszolgáltató alkalmazottjától - kaphatók.
  2. Blokkolás. Az áldozat SIM-kártyája deaktiválva van; Ehhez csak hívja a szolgáltató műszaki támogatását, adja meg a számot, és mondja ki, hogy a telefon elveszett.
  3. Rögzítse, vigye át a számot a SIM-kártyára. Általában ez is egy távközlési cég cinkostársán vagy okirat-hamisításon keresztül történik.

A való életben a dolgok még súlyosabbak. A támadók kiválasztanak egy áldozatot, majd naponta nyomon követik a telefon helyét – egy kérés, hogy megkapja az információt, hogy az előfizető roamingra váltott, 1-2 centbe kerül. Amint a SIM-kártya tulajdonosa külföldre ment, a kommunikációs üzlet vezetőjével egyeztetnek az új SIM-kártya kiadásáról. Körülbelül 50 dollárba kerül (találtam információkat - különböző országokban és különböző szolgáltatóknál 20 és 100 dollár között), és a legrosszabb esetben a menedzsert elbocsátják - ezért nincs felelősség.

Most minden SMS-t megkapnak a támadók, és a telefon tulajdonosa nem fog tudni mit kezdeni – külföldön tartózkodik. Ezután a gazemberek hozzáférnek az áldozat összes fiókjához, és szükség esetén megváltoztatják a jelszavakat.

Az ellopott javak visszaszolgáltatásának esélye

A bankok néha félúton szállásolják el az áldozatokat, és levonják az átutalásokat a számlájukról. Ezért a fiat pénzt akkor is vissza lehet adni, ha a bűnözőt nem találják meg. De a kriptovaluta pénztárcákkal minden bonyolultabb - és technikailagés jogalkotási. Eddig egyetlen váltó/pénztárca sem fizetett kártérítést a csere áldozatainak.

Ha az áldozatok bíróság előtt akarják megvédeni pénzüket, az üzemeltetőt hibáztatják: ő teremtette meg a feltételeket a számláról történő pénzlopáshoz. Pontosan ezt tettem Michael Turpin, aki 224 millió dollárt veszített a csere miatt.Most beperli az AT&T távközlési céget.

Lépjen a 2FA biztosításához a blokkláncon

Eddig egyetlen állam sem rendelkezik működő rendszerrel a kriptovaluta-tulajdonosok jogi védelmére. Lehetetlen a tőkéjét biztosítani, vagy kártérítést kapni a veszteségéért. Ezért egy cseretámadást könnyebb megelőzni, mint a következményeit kezelni. A legkézenfekvőbb módszer egy megbízhatóbb "második tényező" használata a 2FA-hoz.

A SIM-csere nem az egyetlen probléma a 2FA-val SMS-ben

Az SMS-ben lévő visszaigazoló kódok technikai szempontból sem biztonságosak. Az üzenetek elfoghatók a Signaling System 7 (SS7) javítatlan biztonsági rései miatt. Az SMS-en keresztüli 2FA hivatalosan nem biztonságos (az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete ezt mondja Digitális hitelesítési útmutató).

Ugyanakkor a 2FA jelenléte gyakran hamis biztonságérzetet kelt a felhasználóban, és egyszerűbb jelszót választ. Ezért az ilyen hitelesítés nem nehezíti meg, de megkönnyíti a támadó számára a fiókhoz való hozzáférést.

És gyakran az SMS-ek nagy késéssel vagy egyáltalán nem érkeznek meg.

Egyéb 2FA módszerek

Természetesen az okostelefonokon és az SMS-eken nem konvergált a fény. Vannak más 2FA-módszerek is. Például az egyszeri TAN kódok: primitív módszer, de működik - egyes bankokban még mindig használják. Vannak biometrikus adatokat használó rendszerek: ujjlenyomatok, retinaszkennelés. Egy másik lehetőség, amely ésszerű kompromisszumnak tűnik a kényelem, a megbízhatóság és az ár tekintetében, a 2FA speciális alkalmazásai: RSA Token, Google Authenticator. Vannak fizikai kulcsok és egyéb módszerek is.

Elméletileg minden logikusnak és megbízhatónak tűnik. De a gyakorlatban a modern 2FA megoldásoknak vannak problémái, és ezek miatt a valóság eltér az elvárásoktól.

Szerint felderítés, a 2FA használata elvileg kényelmetlenséget jelent, az SMS-ben történő 2FA népszerűségét pedig a „más módszerekhez képest kisebb kényelmetlenséggel” magyarázzák – az egyszeri kódok fogadása a felhasználó számára érthető.

A felhasználók sok 2FA módszert azzal a félelemmel társítanak, hogy a hozzáférés elveszik. A fizikai kulcs vagy a TAN-jelszavak listája elveszhet vagy ellopható. Nekem személy szerint rossz tapasztalataim vannak a Google Authenticatorral. Elromlott az első okostelefonom ezzel az alkalmazással – köszönjük a fiókjaimhoz való hozzáférés visszaállítására irányuló erőfeszítéseimet. Egy másik probléma az új eszközre való váltás. A Google Authenticator biztonsági okokból nem rendelkezik exportálási lehetőséggel (ha a kulcsok exportálhatók, milyen biztonságról van szó?). Egyszer manuálisan vittem a kulcsokat, aztán úgy döntöttem, hogy a régi okostelefont könnyebb dobozban hagyni a polcon.

A 2FA módszernek a következőnek kell lennie:

  • Biztonságos – csak Ön férhet hozzá fiókjához, a támadók nem
  • Megbízható – bármikor hozzáférhet fiókjához, amikor szüksége van rá
  • Kényelmes és hozzáférhető – a 2FA használata egyértelmű és minimális időt vesz igénybe
  • Olcsó

Hiszünk abban, hogy a blokklánc a megfelelő megoldás.

Használjon 2FA-t a blokkláncon

A felhasználó számára a 2FA a blokkláncon ugyanúgy néz ki, mint az egyszeri kódok SMS-ben történő fogadása. Az egyetlen különbség a szállítási csatorna. A 2FA kód megszerzésének módja attól függ, hogy mit kínál a blokklánc. Projektünkben (információ a profilomban) ez egy webes alkalmazás, Tor, iOS, Android, Linux, Windows, MacOS.

A szolgáltatás egy egyszeri kódot generál, és elküldi a blokkláncon lévő messengernek. Ezután kövesse a klasszikusokat: a felhasználó beírja a kapott kódot a szolgáltatási felületen, és bejelentkezik.

Lépjen a 2FA biztosításához a blokkláncon

A cikk Hogyan működik egy decentralizált üzenetküldő a blokkláncon? Azt írtam, hogy a blokklánc biztosítja az üzenettovábbítás biztonságát és titkosságát. A 2FA kódok küldésével kapcsolatban kiemelem:

  • Egy kattintással hozhat létre fiókot – nincs telefon vagy e-mail.
  • Minden 2FA kódot tartalmazó üzenet titkosítva van. End-to-End curve25519xsalsa20poly1305.
  • A MITM támadás kizárt – minden 2FA kódot tartalmazó üzenet tranzakció a blokkláncon, és az Ed25519 EdDSA aláírja.
  • A 2FA kódot tartalmazó üzenet a saját blokkjába kerül. A blokkok sorrendje és időbélyege nem javítható, így az üzenetek sorrendje sem.
  • Nincs olyan központi struktúra, amely ellenőrizné az üzenet „hitelességét”. Ezt konszenzuson alapuló elosztott csomópontrendszer végzi, és a felhasználók tulajdonában van.
  • Nem lehet letiltani – a fiókokat nem lehet letiltani, és az üzeneteket nem lehet törölni.
  • Bármikor elérheti a 2FA kódokat bármely eszközről.
  • Az üzenet kézbesítésének megerősítése 2FA kóddal. Az egyszeri jelszót küldő szolgáltatás biztosan tudja, hogy azt kézbesítették. Nincsenek „Küldés újra” gombok.

Néhány más 2FA módszerrel való összehasonlításhoz készítettem egy táblázatot:

Lépjen a 2FA biztosításához a blokkláncon

A felhasználó fiókot kap a blockchain messengerben, hogy egy másodperc alatt megkapja a kódokat - csak egy jelszót használnak a bejelentkezéshez. Emiatt az igénylés módjai eltérőek lehetnek: egy fiókkal minden szolgáltatáshoz kódot kaphat, vagy minden szolgáltatáshoz külön fiókot hozhat létre.

Van egy kellemetlenség is - a számlán legalább egy tranzakciónak kell lennie. Ahhoz, hogy a felhasználó kódot tartalmazó titkosított üzenetet kapjon, ismernie kell a nyilvános kulcsát, és az csak az első tranzakciónál jelenik meg a blokkláncban. Így sikerült kilépnünk belőle: lehetőséget adtunk nekik, hogy ingyenes tokeneket kapjanak a pénztárcájukba. Jobb megoldás azonban, ha a fiókot nyilvános kulcsnak nevezi el. (Összehasonlításképpen megvan a számlaszám U1467838112172792705 a nyilvános kulcs származéka cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. A messenger számára ez kényelmesebb és olvashatóbb, de a 2FA kódok küldésére szolgáló rendszer számára ez korlátozás). Szerintem a jövőben valaki meghoz egy ilyen döntést, és áthelyezi a „Kényelmet és akadálymentesítést” a zöld zónába.

A 2FA kód küldésének ára nagyon alacsony - 0.001 ADM, most 0.00001 USD. Ismét megemelheti a blokkláncot, és nullázhatja az árat.

Hogyan csatlakoztasd a 2FA-t a blokkláncon a szolgáltatásodhoz

Remélem sikerült felkelteni néhány olvasót, hogy blokklánc-engedélyezést adjanak szolgáltatásaikhoz.

Elmondom, hogyan kell ezt megtenni a messengerünkkel példaként, és analógia útján használhat egy másik blokkláncot. A 2FA demóalkalmazásban postgresql10-et használunk a fiókadatok tárolására.

Csatlakozási szakaszok:

  1. Hozzon létre egy fiókot a blokkláncon, amelyből 2FA kódot küld. Kap egy jelszót, amelyet privát kulcsként használnak az üzenetek kódokkal történő titkosításához és a tranzakciók aláírásához.
  2. Adjon hozzá egy szkriptet a szerveréhez a 2FA kódok generálásához. Ha már más 2FA-módszert használ egyszeri jelszókézbesítéssel, akkor ezt a lépést már elvégezte.
  3. Adjon hozzá egy szkriptet a szerveréhez, hogy kódokat küldjön a felhasználónak a blokklánc üzenetküldőben.
  4. Hozzon létre egy felhasználói felületet a 2FA kód küldéséhez és beviteléhez. Ha már más 2FA-módszert használ egyszeri jelszókézbesítéssel, akkor ezt a lépést már elvégezte.

1 Fiók létrehozása

A fiók létrehozása a blokkláncban egy privát kulcs, egy nyilvános kulcs és egy származtatott fiókcím létrehozását jelenti.

Lépjen a 2FA biztosításához a blokkláncon

Először a BIP39 jelmondatot állítják elő, és ebből számítják ki az SHA-256 hash-t. A hash a ks privát kulcs és a kp nyilvános kulcs generálására szolgál. A nyilvános kulcsból, ugyanazt az SHA-256-ot használva inverzióval, megkapjuk a címet a blokkláncban.

Ha minden alkalommal 2FA kódot szeretne küldeni egy új fiókból, akkor a fiók létrehozási kódját hozzá kell adni a szerverhez:

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 demo alkalmazásban leegyszerűsítettük - létrehoztunk egy fiókot a webes alkalmazásban, és kódokat küldtünk belőle. A legtöbb esetben ez a felhasználó számára is kényelmesebb: tudja, hogy a szolgáltatás 2FA kódot küld egy adott fiókból, és el tudja nevezni azt.

Lépjen a 2FA biztosításához a blokkláncon

2 2FA kód generálása

Minden egyes felhasználói bejelentkezéshez létre kell hozni egy 2FA kódot. Használjuk a könyvtárat beszédes, de választhatsz másikat is.

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

A felhasználó által beírt 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 beküldéséhez használhatja a blokklánc csomópont API-t, a JS API könyvtárat vagy a konzolt. Ebben a példában a konzolt használjuk - ez a Command Line Interface, egy segédprogram, amely leegyszerűsíti a blokklánccal való interakciót. Ha 2FA kóddal szeretne üzenetet küldeni, akkor a parancsot kell használnia send message konzolok.

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

Az üzenetküldés másik módja a módszer használata send a JS API könyvtárban.

4 Felhasználói felület

A felhasználónak lehetőséget kell adni a 2FA kód megadására, ez az alkalmazás platformjától függően többféleképpen is megtehető. Példánkban ez a Vue.

Lépjen a 2FA biztosításához a blokkláncon

A blokklánc kéttényezős hitelesítés demóalkalmazásának forráskódja megtekinthető a címen GitHub. A Readme-ben található link egy élő demóhoz, ahol kipróbálhatod.

Forrás: will.com

Hozzászólás