Přejděte na bezpečné 2FA na blockchainu

SMS zprávy jsou nejpopulárnějším způsobem dvoufaktorové autentizace (2FA). Používají je banky, elektronické a kryptoměnové peněženky, e-mailové schránky a různé služby; počet uživatelů této metody se blíží 100%.

Takový vývoj událostí ve mně vyvolává rozhořčení, protože tato metoda není bezpečná. Přenášet číslo z jedné SIM karty na jinou začali již na počátku mobilní éry — tak se obnovuje číslo při ztrátě SIM karty. "Odborníci na krádeže digitálních peněz" si uvědomili, že možnost „přepsání SIM“ lze využít v podvodných schématech. Ten, kdo kontroluje SIM kartu, může spravovat cizí internetové bankovnictví, elektronické peněženky, a dokonce i kryptoměnu. A zmocnit se čísla jiné osoby lze prostřednictvím úplatku zaměstnanci telekomunikační společnosti, podvodu nebo falešných dokladů.

Přejděte na bezpečné 2FA na blockchainu

Byly odhaleny tisíce případů SIM swappingu — tak je tato podvodná schéma nazvána. Rozsah této pohromy naznačuje, že svět brzy opustí 2FA přes SMS. Ale to se ještě neděje — výzkumu říkají, že metodu 2FA nevolí uživatelé, ale vlastníci služeb.

Doporučujeme používat bezpečnější metodu 2FA s doručováním jednorázových kódů přes blockchain a představíme, jak ji vlastník služby může připojit.

Jde o miliony

V roce 2019 vzrostlo podvodné SIM swapping o 63% podle údajů londýnské policie, a "průměrná ziskovost" útočníka činila 4 000 GBP. Statistiky v Rusku jsem nenašel, ale předpokládám, že jsou ještě horší.

SIM swapping se používá ke krádeži populárních účtů na Twitteru, Instagramu, Facebooku, VK, bankovních účtů, a nedávno se dostal i k kryptoměnám — hlásí noviny Times podle slov bitcoinového podnikatele Jobyho Wicks. Velké případy krádeže kryptoměny pomocí SIM swappingu se objevují v tisku od roku 2016; v roce 2019 došlo k opravdovému vrcholu.

V květnu prokuratura USA ve východním Michiganu vznesla obvinění devíti mladým lidem ve věku od 19 do 26 let: údajně patří do hackerské bandy zvané „The Community“ („Společenství“). Bandy je obviňována ze sedmi swapových útoků, při nichž hackeři získali kryptoměnu v hodnotě přes 2,4 milionu dolarů. A v dubnu byl student z Kalifornie Joel Ortiz odsouzen na 10 let vězení za SIM swapping; získal kryptoměny v hodnotě 7,5 milionu dolarů.

Přejděte na bezpečné 2FA na blockchainu
Fotografie Joela Ortiza na tiskové konferenci na univerzitě. O dva roky později bude zadržen za kybernetické podvody.

Princip fungování SIM swapingu

„Swapping“ znamená výměnu. Ve všech podobných schématech si zločinci přivlastňují telefonní číslo oběti, obvykle pomocí vydání nové SIM karty, a používají ho k resetování hesla. Typický SIM swapping v teorii vypadá takto:

  1. Zpravodajství. Podvodníci získávají osobní údaje oběti: jméno a telefon. Tyto údaje lze najít ve veřejných zdrojích (sociální sítě, přátelé) nebo je získat od kompliců — zaměstnanců mobilního operátora.
  2. Blokace. SIM karta oběti je deaktivována; k tomu stačí zavolat na podporu poskytovatele, sdělit číslo a říct, že telefon byl ztracen.
  3. Získání, převod čísla na svou SIM kartu. To se obvykle dělá také prostřednictvím kompliců v telekomunikační společnosti nebo paděláním dokumentů.

V reálném životě je to ještě horší. Zločinci si vyberou oběť a poté každý den sledují polohu telefonu — jeden dotaz na získání informace, že účastník přešel do roamingu, stojí 1-2 centy. Jakmile majitel SIM karty vycestuje do zahraničí, domluví se s manažerem v obchodě s mobilními telefony na vydání nové SIM karty. Stojí to asi 50 dolarů (našel jsem informace, že v různých zemích a u různých operátorů od 20 do 100 dolarů), přičemž manažer bude v tom horším případě propuštěn — za to není zodpovědnost.

Nyní všechny SMS bude dostávat zločinec, zatímco majitel telefonu s tím nebude moci nic dělat — je v zahraničí. A dál zloději získávají přístup ke všem účtům oběti a pokud chtějí, mění hesla.

Šance na navrácení ukradeného

Banky někdy vycházejí vstříc obětem a vracejí převody z jejich účtů. Proto je možné vrátit fiat peníze, i když pachatel není nalezen. Ale s kryptoměnovými peněženkami je to složitější — jak technicky, tak legislativně. Zatím žádná burza/peněženka nevyplatila odškodnění obětem swappingu.

Pokud oběti chtějí hájit své peníze u soudu, obviňují operátora: ten vytvořil podmínky pro krádež peněz z účtu. Takto jednal Michael Terpin, který přišel v důsledku swappingu o 224 milionů dolarů. Nyní se soudí s telekomunikační společností AT&T.

Přejděte na bezpečné 2FA na blockchainu

Dosud žádný stát nemá pracovní schéma, které by legislativně chránilo majitele kryptoměn. Není možné zajistit svůj kapitál nebo získat kompenzaci za jeho ztrátu. Proto je jednodušší zabránit útoku swapování než bojovat s jeho následky. Nejzřejmější způsob je použít spolehlivější „druhý faktor“ pro 2FA.

SIM swapování není jediný problém 2FA přes SMS

Potvrzovací kódy v SMS nejsou technicky bezpečné. Zprávy mohou být zachyceny kvůli neodstranitelným zranitelnostem v signální systému Signaling System 7 (SS7). 2FA přes SMS je oficiálně uznána jako nebezpečná (Národní institut standardů a technologií USA o tom hovoří ve svém Průvodci digitální autentizací).

Přítomnost 2FA však často vzbuzuje u uživatele pocit falešné bezpečnosti, a ten si volí jednodušší heslo. Proto taková autentizace nezkomplikuje, ale usnadní přístup útočníka k účtu.

A navíc zprávy SMS často přicházejí s velkým zpožděním nebo vůbec nepřicházejí.

Další způsoby 2FA

Samozřejmě, na chytrých telefonech a SMS není svět jen ve dvou rozměrech. Existují i jiné způsoby 2FA. Například jednorázové TAN kódy: metoda je primitivní, ale funkční — stále se používá v některých bankách. Jsou zde také systémy využívající biometrické údaje: otisky prstů, skeny duhovky. Další možností, která se zdá být rozumným kompromisem mezi pohodlím, bezpečností a cenou, jsou speciální aplikace pro 2FA: RSA Token, Google Authenticator. A také fyzické klíče a další metody.

Teoreticky to vypadá logicky a bezpečně. Ale v praxi mají současná řešení 2FA problémy, a kvůli nim se realita liší od očekávání.

Podle výzkumu, používání 2FA je v zásadě nepohodlné, a popularitu 2FA přes SMS vysvětlují „menším nepohodlím ve srovnání s jinými metodami“ — získání jednorázových kódů je uživatelsky srozumitelné.

Mnoho uživatelů spojuje způsoby 2FA se strachem, že dojde ke ztrátě přístupu. Fyzický klíč nebo seznam TAN kódů může být ztracen nebo ukraden. Osobně mám negativní zkušenost s použitím Google Authenticator. Můj první smartphone s touto aplikací se pokazil — jak hodnotíte mé úsilí o obnovení přístupu k účtům? Další problém je přechod na nové zařízení. Google Authenticator nemá možnost exportu z bezpečnostních důvodů (pokud lze klíče exportovat, jaká je tam bezpečnost?). Jednou jsem přenášel klíče ručně, a pak jsem se rozhodl, že je jednodušší nechat starý smartphone v krabici na polici.

Metoda 2FA by měla být:

  • Bezpečná — přístup k účtu by měli mít pouze vy, nikoli zloději.
  • Spolehlivá — přístup k účtu máte vždy, když ho potřebujete.
  • Pohodlná a dostupná — používání 2FA je intuitivní a zabere minimum času.
  • Levná.

Domníváme se, že blockchain je vhodné řešení.

Používejte 2FA na blockchainu.

Pro uživatele vypadá 2FA na blockchainu stejně jako obdržení jednorázových kódů přes SMS. Rozdíl je pouze v kanálu dodání. Způsob získání 2FA kódu závisí na tom, co blockchain nabízí. V našem projektu (informace najdete v mém profilu) je to webová aplikace, Tor, iOS, Android, Linux, Windows, MacOS.

Služba generuje jednorázový kód a posílá ho do messengeru na blockchainu. Dále následně — jak je klasické: uživatel zadává obdržený kód do rozhraní služby a autentizuje se.

Přejděte na bezpečné 2FA na blockchainu

V článku Jak funguje decentralizovaný messenger na blockchainu Napsal jsem, že blockchain zajišťuje bezpečnost a soukromí při přenosu zpráv. Co se týká zasílání 2FA kódů, vyzdvihnu:

  • Jedním kliknutím vytvoříte účet — žádné telefony a e-mailové adresy.
  • Všechny zprávy s 2FA kódy jsou šifrovány End-to-End curve25519xsalsa20poly1305.
  • MITM útok je vyloučen — každá zpráva s 2FA kódem je transakcí v blockchainu a je podepsaná Ed25519 EdDSA.
  • Zpráva s 2FA kódem se dostává do svého bloku. Následnost a timestamp bloků nelze opravit, a tudíž ani pořadí zpráv.
  • Není centrální struktura, která by prováděla kontroly „autenticity“ zprávy. To provádí distribuovaný systém uzlů na základě konsensu, který patří uživatelům.
  • Impossibilita deaktivace — účty nelze blokovat a zprávy mazat.
  • Přístup k 2FA kódům z jakéhokoli zařízení kdykoli.
  • Potvrzení doručení zprávy s 2FA kódem. Služba, která odesílá jednorázové heslo, přesně ví, že bylo doručeno. Žádná tlačítka „Odeslat znovu.”

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

Přejděte na bezpečné 2FA na blockchainu

Účet v blockchainovém messengeru pro získávání kódů uživatel obdrží během sekundy — pro přihlášení se používá pouze fráze. Proto mohou být způsoby použití různé: můžete použít jeden účet k získání kódů pro všechny služby, nebo můžete pro každou službu vytvořit samostatný účet.

Existuje i nevýhoda — účet musí mít alespoň jednu transakci. Aby uživatel obdržel zašifrovanou zprávu s kódem, je potřeba znát jeho veřejný klíč, a ten se v blockchainu objevuje až s první transakcí. Vyřešili jsme to takto: umožnili jsme získat v peněžence bezplatné tokeny. Nicméně lepší řešení by bylo pojmenovat účet veřejným klíčem. (Pro srovnání, naše číslo účtu U1467838112172792705 je odvozeno od veřejného klíče cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pro messenger je to pohodlnější a čitelnější, avšak pro systém odesílání 2FA kódů — omezení). Myslím, že v budoucnu někdo vyvine takové řešení a převede "Pohodlí a dostupnost" do zelené zóny.

Cena odeslání 2FA kódu je skutečně nízká — 0,001 ADM, nyní je to 0,00001 USD. Opět lze založit svůj blockchain a cenu udělat nulovou.

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

Doufám, že jsem mohl zaujmout několik čtenářů, aby přidali blockchainovou autorizaci na své služby.

Povím, jak to udělat na příkladu našeho messengeru, a podle analogie můžete použít i jiný blockchain. V demo aplikaci 2FA používáme postgresql10 pro ukládání informací o účtech.

Kroky připojení:

  1. Vytvořte účet v blockchainu, ze kterého budete odesílat kódy 2FA. Získáte frázi, která se používá jako soukromý klíč pro zašifrování zpráv s kódy a pro podepisování transakcí.
  2. Přidejte na svůj server skript pro generování kódů 2FA. Pokud již používáte nějakou jinou metodu 2FA s doručováním jednorázových hesel, tento krok už máte splněný.
  3. Přidejte na svůj server skript pro odesílání kódů uživateli do blockchainového messengeru.
  4. Vytvořte uživatelské rozhraní pro odesílání a zadávání kódu 2FA. Pokud již používáte nějakou jinou metodu 2FA s doručováním jednorázových hesel, tento krok už máte splněný.

1 Vytvoření účtu

Vytvoření účtu na blockchainu zahrnuje generaci privátního klíče, veřejného klíče a od něj odvozené adresy účtu.

Přejděte na bezpečné 2FA na blockchainu

Nejdříve se generuje fráze BIP39, z níž se počítá SHA-256 hash. Hash se používá pro generaci privátního klíče ks a veřejného klíče kp. Z veřejného klíče stejným SHA-256 s inverzí získáme adresu v blockchainu.

Pokud chcete posílat 2FA kódy pokaždé z nového účtu, je třeba kód pro vytvoření účtu přidat 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 kódy posíláme z něj. Ve většině případů je to pro uživatele pohodlnější: ví, že služba posílá 2FA kódy z konkrétního účtu a může jej pojmenovat.

Přejděte na bezpečné 2FA na blockchainu

2 Generování 2FA kódů

Kód 2FA je třeba generovat pro každé přihlášení uživatele. Používáme knihovnu speakeasy, ale můžete si vybrat libovolnou jinou.

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

Kontrola platnosti kódu 2FA, který zadal uživatel:

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

3 Odesílání kódu 2FA

K odeslání 2FA kódu můžete použít API uzlu blockchainu, knihovnu JS API nebo konzoli. V tomto příkladu používáme konzoli — to je Command Line Interface, nástroj, který usnadňuje interakci s blockchainem. K odeslání zprávy s 2FA kódem je třeba použít příkaz send message konzole.

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í způsob odesílání zpráv — použití metody send v JS API knihovně.

4 Uživatelské rozhraní

Uživatel by měl mít možnost zadat 2FA kód, což lze udělat různými způsoby v závislosti na platformě vaší aplikace. V našem příkladu používáme Vue.

Přejděte na bezpečné 2FA na blockchainu

Zdrojový kód demonstrační aplikace pro dvoufaktorovou autentizaci na blockchainu si můžete prohlédnout na GitHub. V Readme najdete odkaz na Live demo, abyste si to mohli vyzkoušet.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster