Přesuňte se, abyste zajistili 2FA na blockchainu

SMS zprávy jsou nejoblíbenější metodou dvoufaktorové autentizace (2FA). Používají ho banky, elektronické a kryptopeněženky, poštovní schránky a všechny druhy služeb; počet uživatelů metody se blíží 100 %.

Jsem tímto scénářem rozhořčen, protože tato metoda není bezpečná. Přeřazení čísla z jedné SIM karty na druhou začalo na začátku mobilní éry – takto se číslo obnoví při ztrátě SIM karty. „Specialisté na krádeže digitálních peněz“ si uvědomili, že možnost „přepsat SIM kartu“ může být použita v podvodných schématech. Koneckonců, ten, kdo ovládá SIM kartu, může ovládat online bankovnictví jiných lidí, elektronické peněženky a dokonce i kryptoměny. A můžete se zmocnit čísla jiné osoby tím, že podplatíte zaměstnance telekomunikací, použijete podvodné nebo padělané dokumenty.

Přesuňte se, abyste zajistili 2FA na blockchainu

Byly odhaleny tisíce epizod výměny SIM karet, jak se tomuto podvodnému schématu říká. Rozsah katastrofy naznačuje, že svět brzy opustí 2FA prostřednictvím SMS. Ale to se nestane - in výzkum říkají, že metodu 2FA nevybírají uživatelé, ale majitelé služeb.

Navrhujeme použít zabezpečenou metodu 2FA s doručováním jednorázových kódů přes blockchain a řekneme vám, jak to může vlastník služby propojit.

Počet jde do milionů

V roce 2019 se podvody s výměnou SIM karet podle londýnské policie zvýšily o 63 % a „průměrný účet“ útočníka byl 4,000 XNUMX GBP. V Rusku jsem žádné statistiky nenašel, ale předpokládám, že jsou ještě horší.

Výměna SIM karet se používá ke krádeži populárních účtů Twitter, Instagram, Facebook, VK účtů, bankovních účtů a v poslední době dokonce i kryptoměn – Informuje o tom list The Times podle bitcoinového podnikatele Joby Weeks. Od roku 2016 se v tisku objevují vysoce známé případy krádeží kryptoměny pomocí výměny SIM; Rok 2019 zaznamenal skutečný vrchol.

V květnu americká prokuratura pro východní obvod Michiganu vznesl obvinění devět mladých lidí ve věku 19 až 26 let: věří se, že jsou součástí hackerského gangu zvaného „The Community“. Gang je obviněn ze sedmi swapových útoků, v důsledku kterých hackeři ukradli kryptoměnu v hodnotě přes 2,4 milionu dolarů. A v dubnu dostal kalifornský student Joel Ortiz 10 let vězení za výměnu SIM karty; jeho produkce byla 7.5 milionu dolarů v kryptoměnách.

Přesuňte se, abyste zajistili 2FA na blockchainu
Fotografie Joela Ortize na univerzitní tiskové konferenci. O dva roky později bude zadržen za kybernetické podvody.

Jak funguje výměna SIM

"Swapování" znamená výměnu. Ve všech těchto schématech zločinci převezmou telefonní číslo oběti, obvykle prostřednictvím opětovného vydání SIM karty, a použijí ji k resetování hesla. Typická výměna SIM karty teoreticky vypadá takto:

  1. Zpravodajská služba. Podvodníci zjistí osobní údaje oběti: jméno a telefonní číslo. Lze je nalézt v otevřených zdrojích (sociální sítě, přátelé) nebo je získat od komplice – zaměstnance mobilního operátora.
  2. Blokování. SIM karta oběti je deaktivována; Chcete-li to provést, stačí zavolat na technickou podporu poskytovatele, poskytnout číslo a říci, že telefon byl ztracen.
  3. Zachyťte, přeneste číslo na SIM kartu. Obvykle se tak děje také prostřednictvím komplice v telekomunikační společnosti nebo prostřednictvím padělání dokumentů.

V reálném životě jsou věci ještě vážnější. Útočníci si denně vyberou oběť a poté sledují polohu telefonu – jeden požadavek na obdržení informace, že účastník přešel na roaming, stojí 1–2 centy. Jakmile majitel SIM karty odjede do zahraničí, domluví se s vedoucím v obchodě komunikace na vydání nové SIM karty. Stojí to asi 50 USD (informace jsem našel - v různých zemích a u různých operátorů od 20 do 100 USD) a v nejhorším případě manažera vyhodí - za to nenese odpovědnost.

Nyní budou všechny SMS dostávat útočníci a majitel telefonu s tím nebude moci nic dělat - je v zahraničí. A pak darebáci získají přístup ke všem účtům obětí a v případě potřeby změní hesla.

Šance na vrácení ukradeného majetku

Banky někdy obětem vyjdou vstříc a stahují převody z jejich účtů. Proto je možné vrátit fiat peníze, i když se zločinec nenajde. Ale s kryptoměnovými peněženkami je všechno složitější – a technickya legislativně. Dosud ani jedna burza/peněženka nevyplatila odškodnění obětem swapu.

Pokud se oběti chtějí bránit své peníze u soudu, viní operátora: vytvořil podmínky pro krádež peněz z účtu. Přesně to jsem udělal Michael Turpin, který kvůli swapování přišel o 224 milionů dolarů Nyní žaluje telekomunikační společnost AT&T.

Přesuňte se, abyste zajistili 2FA na blockchainu

Dosud žádný stát nemá fungující schémata na legální ochranu vlastníků kryptoměn. Je nemožné pojistit svůj kapitál nebo získat náhradu za jeho ztrátu. Předejít swapovému útoku je proto jednodušší než řešit jeho následky. Nejviditelnějším způsobem je použití spolehlivějšího „druhého faktoru“ pro 2FA.

Výměna SIM není jediným problémem 2FA přes SMS

Potvrzovací kódy v SMS jsou také nebezpečné z technického hlediska. Zprávy mohou být zachyceny kvůli neopraveným zranitelnostem v Signaling System 7 (SS7). 2FA přes SMS je oficiálně uznáno jako nezabezpečené (uvádí to americký Národní institut pro standardy a technologie ve svém Průvodce digitální autentizací).

Přítomnost 2FA přitom často dává uživateli pocit falešného bezpečí a volí jednodušší heslo. Taková autentizace tedy neznesnadňuje, ale usnadňuje útočníkovi získat přístup k účtu.

A často SMS dorazí s velkým zpožděním nebo nedorazí vůbec.

Další metody 2FA

Světlo se samozřejmě nesbíhalo na smartphony a SMS. Existují i ​​jiné metody 2FA. Například jednorázové TAN kódy: primitivní metoda, ale funguje - v některých bankách se stále používá. Existují systémy využívající biometrická data: otisky prstů, skeny sítnice. Další možností, která se jeví jako rozumný kompromis z hlediska pohodlí, spolehlivosti a ceny, jsou speciální aplikace pro 2FA: RSA Token, Google Authenticator. Existují také fyzické klíče a další metody.

Teoreticky vše vypadá logicky a spolehlivě. Jenže v praxi mají moderní 2FA řešení problémy a kvůli nim se realita liší od očekávání.

Podle výzkum, použití 2FA je v zásadě nepohodlné a popularita 2FA prostřednictvím SMS se vysvětluje „menším nepohodlím ve srovnání s jinými metodami“ - příjem jednorázových kódů je pro uživatele srozumitelný.

Uživatelé spojují mnoho metod 2FA se strachem ze ztráty přístupu. Fyzický klíč nebo seznam hesel TAN může být ztracen nebo odcizen. Osobně mám s Google Authenticator špatné zkušenosti. Můj první smartphone s touto aplikací se porouchal - oceňuji mé úsilí při obnovení přístupu k mým účtům. Dalším problémem je přechod na nové zařízení. Google Authenticator nemá z bezpečnostních důvodů možnost exportu (pokud lze exportovat klíče, jaké je zabezpečení?). Jednou jsem klíče nosil ručně a pak jsem se rozhodl, že je jednodušší nechat starý smartphone v krabici na poličce.

Metoda 2FA by měla být:

  • Zabezpečení – k vašemu účtu byste měli získat přístup pouze vy, nikoli útočníci
  • Spolehlivost – ke svému účtu získáte přístup, kdykoli jej budete potřebovat
  • Pohodlné a dostupné – používání 2FA je jasné a zabere minimum času
  • Levný

Věříme, že blockchain je tím správným řešením.

Použijte 2FA na blockchainu

Pro uživatele vypadá 2FA na blockchainu stejně jako příjem jednorázových kódů prostřednictvím SMS. Jediným rozdílem je doručovací kanál. Způsob získání kódu 2FA závisí na tom, co blockchain nabízí. V našem projektu (informace jsou v mém profilu) se jedná o webovou aplikaci, Tor, iOS, Android, Linux, Windows, MacOS.

Služba vygeneruje jednorázový kód a odešle jej do messengeru na blockchainu. Poté postupujte klasicky: uživatel zadá přijatý kód v rozhraní služby a přihlásí se.

Přesuňte se, abyste zajistili 2FA na blockchainu

Tento článek Jak funguje decentralizovaný messenger na blockchainu? Napsal jsem, že blockchain zajišťuje bezpečnost a soukromí přenosu zpráv. V otázce zasílání 2FA kódů zdůrazním:

  • Jedním kliknutím vytvoříte účet – žádné telefony ani e-maily.
  • Všechny zprávy s 2FA kódy jsou zašifrovány End-to-End křivka25519xsalsa20poly1305.
  • Útok MITM je vyloučen – každá zpráva s kódem 2FA je transakcí na blockchainu a je podepsána Ed25519 EdDSA.
  • Zpráva s kódem 2FA končí ve vlastním bloku. Pořadí a časové razítko bloků nelze opravit, a tedy ani pořadí zpráv.
  • Neexistuje žádná centrální struktura, která by kontrolovala „pravost“ zprávy. To se provádí distribuovaným systémem uzlů založeným na konsensu a je ve vlastnictví uživatelů.
  • Nelze zakázat – účty nelze zablokovat a zprávy nelze smazat.
  • Získejte přístup ke kódům 2FA z jakéhokoli zařízení kdykoli.
  • Potvrzení doručení zprávy kódem 2FA. Služba, která posílá jednorázové heslo, s jistotou ví, že bylo doručeno. Žádná tlačítka „Odeslat znovu“.

Pro srovnání s některými jinými metodami 2FA jsem vytvořil tabulku:

Přesuňte se, abyste zajistili 2FA na blockchainu

Uživatel obdrží účet v blockchain messengeru, aby mohl během vteřiny přijímat kódy – k přihlášení se používá pouze heslo. Způsoby použití se proto mohou lišit: můžete použít jeden účet pro příjem kódů pro všechny služby, nebo můžete pro každou službu vytvořit samostatný účet.

Je tu také nepříjemnost – na účtu musí být alespoň jedna transakce. Aby uživatel dostal zašifrovanou zprávu s kódem, musíte znát jeho veřejný klíč a ten se v blockchainu objeví až při první transakci. Takto se nám z toho podařilo dostat: dali jsme jim možnost získat zdarma tokeny do peněženky. Lepším řešením je však pojmenovat účet veřejným klíčem. (Pro srovnání máme číslo účtu U1467838112172792705 je derivát veřejného klíče cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pro messenger je to pohodlnější a čitelnější, ale pro systém pro zasílání 2FA kódů je to omezení). Myslím, že v budoucnu se někdo takto rozhodne a přesune „Pohodlí a dostupnost“ do zelené zóny.

Cena za zaslání 2FA kódu je opravdu nízká - 0.001 ADM, nyní je to 0.00001 USD. Opět můžete zvýšit svůj blockchain a cenu snížit na nulu.

Jak připojit 2FA na blockchainu k vaší službě

Doufám, že se mi podařilo zaujmout několik čtenářů, aby do svých služeb přidali autorizaci blockchainu.

Řeknu vám, jak to udělat pomocí našeho messengeru jako příkladu, a analogicky můžete použít jiný blockchain. V demo aplikaci 2FA používáme postgresql10 k ukládání informací o účtu.

Fáze připojení:

  1. Vytvořte si účet na blockchainu, ze kterého budete posílat 2FA kódy. Obdržíte přístupovou frázi, která se používá jako soukromý klíč k šifrování zpráv pomocí kódů a k podepisování transakcí.
  2. Přidejte na svůj server skript pro generování kódů 2FA. Pokud již používáte jakoukoli jinou metodu 2FA s doručením jednorázového hesla, tento krok jste již dokončili.
  3. Přidejte skript na svůj server, který bude odesílat kódy uživateli v blockchainovém messengeru.
  4. Vytvořte uživatelské rozhraní pro odesílání a zadávání kódu 2FA. Pokud již používáte jakoukoli jinou metodu 2FA s doručením jednorázového hesla, tento krok jste již dokončili.

1 Vytvoření účtu

Vytvoření účtu v blockchainu znamená vygenerování soukromého klíče, veřejného klíče a odvozené adresy účtu.

Přesuňte se, abyste zajistili 2FA na blockchainu

Nejprve se vygeneruje přístupová fráze BIP39 a z ní se vypočítá hash SHA-256. Hash se používá ke generování soukromého klíče ks a veřejného klíče kp. Z veřejného klíče pomocí stejného SHA-256 s inverzí získáme adresu v blockchainu.

Pokud chcete odeslat 2FA kódy pokaždé z nového účtu, bude nutné přidat kód pro vytvoření účtu na server:

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()
}

V demo aplikaci jsme to zjednodušili – vytvořili jsme jeden účet ve webové aplikaci a z něj posíláme kódy. Ve většině případů je to také pohodlnější pro uživatele: ví, že služba posílá 2FA kódy z konkrétního účtu a umí jej pojmenovat.

Přesuňte se, abyste zajistili 2FA na blockchainu

2 Generování 2FA kódů

Pro každé přihlášení uživatele je nutné vygenerovat 2FA kód. Využíváme knihovnu speakeasy, ale můžete si vybrat jakýkoli jiný.

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

Kontrola platnosti 2FA kódu zadaného uživatelem:

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

3 Odeslání kódu 2FA

K odeslání kódu 2FA můžete použít blockchain node API, knihovnu JS API nebo konzoli. V tomto příkladu používáme konzoli – jedná se o rozhraní příkazového řádku, nástroj, který zjednodušuje interakci s blockchainem. Chcete-li odeslat zprávu s kódem 2FA, musíte použít příkaz send message řídicí panel.

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

Alternativním způsobem odesílání zpráv je použití metody send v knihovně JS API.

4 Uživatelské rozhraní

Uživatel musí mít možnost zadat kód 2FA, což lze provést různými způsoby v závislosti na platformě vaší aplikace. V našem příkladu je to Vue.

Přesuňte se, abyste zajistili 2FA na blockchainu

Zdrojový kód pro blockchainovou dvoufaktorovou autentizační demo aplikaci si můžete prohlédnout na GitHub. V souboru Readme je odkaz na živé demo, kde si to můžete vyzkoušet.

Zdroj: www.habr.com

Přidat komentář