Przejdź, aby zabezpieczyć 2FA na blockchainie

Wiadomości SMS to najpopularniejsza metoda uwierzytelniania dwuskładnikowego (2FA). Wykorzystują go banki, portfele elektroniczne i kryptograficzne, skrzynki pocztowe i wszelkiego rodzaju usługi; liczba użytkowników metody zbliża się do 100%.

Jestem oburzony takim scenariuszem, bo ta metoda jest niebezpieczna. Przenoszenie numeru z jednej karty SIM na drugą rozpoczęło się na początku ery mobilnej - w ten sposób numer jest przywracany w przypadku utraty karty SIM. „Specjaliści od kradzieży pieniędzy cyfrowych” zdali sobie sprawę, że opcja „przepisz kartę SIM” może zostać wykorzystana w oszukańczych planach. Przecież ten, kto kontroluje kartę SIM, może kontrolować cudzą bankowość internetową, portfele elektroniczne, a nawet kryptowalutę. A numer innej osoby można przejąć w drodze przekupstwa pracownika telekomunikacyjnego, podstępu lub podrobienia dokumentów.

Przejdź, aby zabezpieczyć 2FA na blockchainie

Odkryto tysiące przypadków wymiany karty SIM, jak nazywa się ten schemat oszustwa. Skala katastrofy sugeruje, że świat wkrótce odejdzie od 2FA poprzez SMS. Ale tak się nie dzieje - w badania mówią, że to nie użytkownicy wybierają metodę 2FA, ale właściciele usług.

Proponujemy skorzystanie z bezpiecznej metody 2FA z dostarczaniem kodów jednorazowych poprzez blockchain, a my podpowiemy w jaki sposób właściciel usługi może ją podłączyć.

Liczba idzie w miliony

Według londyńskiej policji w 2019 r. liczba oszustw związanych z zamianą kart SIM wzrosła o 63%, a „średni rachunek” atakującego wyniósł 4,000 funtów. W Rosji nie znalazłem żadnych statystyk, ale zakładam, że są jeszcze gorsze.

Zamiana kart SIM służy do kradzieży popularnych kont na Twitterze, Instagramie, Facebooku, kontach VK, kontach bankowych, a ostatnio nawet kryptowalutach - Donosi gazeta „The Times”. według przedsiębiorcy Bitcoin Joby Weeks. Głośne przypadki kradzieży kryptowalut z wykorzystaniem wymiany karty SIM pojawiają się w prasie od 2016 roku; Rok 2019 przyniósł prawdziwy szczyt.

W maju Biuro Prokuratora Amerykańskiego dla Wschodniego Okręgu Michigan wniósł oskarżenie dziewięciu młodych ludzi w wieku od 19 do 26 lat: uważa się, że należą do gangu hakerskiego o nazwie „The Community”. Gang jest oskarżony o siedem ataków typu swap, w wyniku których hakerzy ukradli kryptowalutę o wartości ponad 2,4 mln dolarów. W kwietniu student z Kalifornii Joel Ortiz został skazany na 10 lat więzienia za wymianę karty SIM; jego produkcja wyniosła 7.5 miliona dolarów w kryptowalutach.

Przejdź, aby zabezpieczyć 2FA na blockchainie
Zdjęcie Joela Ortiza na uniwersyteckiej konferencji prasowej. Dwa lata później zostanie zatrzymany za oszustwa internetowe.

Jak działa wymiana karty SIM

„Zamiana” oznacza wymianę. We wszystkich tego typu schematach przestępcy przejmują numer telefonu ofiary, zwykle poprzez ponowne wydanie karty SIM, i wykorzystują go do resetowania hasła. Typowa wymiana karty SIM w teorii wygląda następująco:

  1. Agencja Wywiadowcza. Oszuści zdobywają dane osobowe ofiary: imię i nazwisko oraz numer telefonu. Można je znaleźć w otwartych źródłach (sieci społecznościowe, znajomi) lub otrzymać od wspólnika - pracownika operatora komórkowego.
  2. Bloking. Karta SIM ofiary jest dezaktywowana; Aby to zrobić, wystarczy zadzwonić do pomocy technicznej dostawcy, podać numer i powiedzieć, że telefon zaginął.
  3. Przechwyć, przenieś numer na kartę SIM. Zwykle odbywa się to również za pośrednictwem wspólnika firmy telekomunikacyjnej lub poprzez fałszowanie dokumentów.

W prawdziwym życiu sytuacja jest jeszcze poważniejsza. Atakujący codziennie wybierają ofiarę, a następnie śledzą lokalizację telefonu – jedno żądanie otrzymania informacji, że abonent przeszedł na roaming, kosztuje 1-2 centy. Gdy tylko właściciel karty SIM wyjedzie za granicę, negocjuje z menadżerem w sklepie komunikacyjnym wydanie nowej karty SIM. Kosztuje to około 50 dolarów (znalazłem informacje – w różnych krajach i u różnych operatorów od 20 do 100 dolarów), a w najgorszym przypadku menadżer zostanie zwolniony – nie ma za to żadnej odpowiedzialności.

Teraz wszystkie SMS-y zostaną odebrane przez atakujących, a właściciel telefonu nie będzie mógł nic z tym zrobić – przebywa za granicą. Następnie złoczyńcy uzyskują dostęp do wszystkich kont ofiary i w razie potrzeby zmieniają hasła.

Szanse na odzyskanie skradzionego mienia

Banki czasami łagodzą ofiary w połowie i wycofują przelewy ze swoich rachunków. Dlatego możliwy jest zwrot pieniędzy fiducjarnych nawet w przypadku nie odnalezienia przestępcy. Ale w przypadku portfeli kryptowalutowych wszystko jest bardziej skomplikowane – i techniczniei legislacyjne. Jak dotąd żadna giełda/portfel nie wypłaciła odszkodowania ofiarom swapów.

Jeśli ofiary chcą bronić swoich pieniędzy w sądzie, obwiniają operatora: stworzył warunki do kradzieży pieniędzy z konta. Dokładnie to zrobiłem Michał Turpin, który w wyniku zamiany stracił 224 miliony dolarów, pozywa teraz firmę telekomunikacyjną AT&T.

Przejdź, aby zabezpieczyć 2FA na blockchainie

Jak dotąd żadne państwo nie ma działających programów prawnych chroniących właścicieli kryptowalut. Nie da się ubezpieczyć kapitału ani otrzymać rekompensaty za jego utratę. Dlatego zapobieganie atakowi typu swap jest łatwiejsze niż radzenie sobie z jego konsekwencjami. Najbardziej oczywistym sposobem jest użycie bardziej niezawodnego „drugiego czynnika” dla 2FA.

Wymiana karty SIM to nie jedyny problem z 2FA przez SMS

Kody potwierdzające w wiadomościach SMS są również niebezpieczne z technicznego punktu widzenia. Wiadomości mogą zostać przechwycone z powodu niezałatanych luk w zabezpieczeniach systemu sygnalizacyjnego 7 (SS7). 2FA przez SMS jest oficjalnie uznawane za niebezpieczne (tak stwierdza amerykański Narodowy Instytut Standardów i Technologii w swoim dokumencie). Przewodnik po uwierzytelnianiu cyfrowym).

Jednocześnie obecność 2FA często daje użytkownikowi poczucie fałszywego bezpieczeństwa i wybiera prostsze hasło. Dlatego takie uwierzytelnienie nie utrudnia, ale ułatwia atakującemu uzyskanie dostępu do konta.

Często SMS-y docierają z dużym opóźnieniem lub w ogóle nie docierają.

Inne metody 2FA

Oczywiście światło nie zbiegło się w smartfonach i SMS-ach. Istnieją inne metody 2FA. Na przykład jednorazowe kody TAN: metoda prymitywna, ale działa - w niektórych bankach nadal jest stosowana. Istnieją systemy wykorzystujące dane biometryczne: odciski palców, skany siatkówki. Kolejną opcją, która wydaje się rozsądnym kompromisem pod względem wygody, niezawodności i ceny, są specjalne aplikacje dla 2FA: RSA Token, Google Authenticator. Istnieją również klucze fizyczne i inne metody.

W teorii wszystko wygląda logicznie i niezawodnie. Jednak w praktyce nowoczesne rozwiązania 2FA mają problemy i przez to rzeczywistość odbiega od oczekiwań.

Według badania, korzystanie z 2FA jest w zasadzie niedogodnością, a popularność 2FA poprzez SMS tłumaczy się „mniejszą niedogodnością w porównaniu do innych metod” – otrzymywanie kodów jednorazowych jest dla użytkownika zrozumiałe.

Użytkownicy wiele metod 2FA kojarzą z obawą utraty dostępu. Klucz fizyczny lub lista haseł TAN może zostać zgubiona lub skradziona. Osobiście mam złe doświadczenia z Google Authenticatorem. Zepsuł mi się pierwszy smartfon z tą aplikacją - doceńcie moje wysiłki w przywróceniu dostępu do moich kont. Kolejnym problemem jest przejście na nowe urządzenie. Google Authenticator nie ma opcji eksportu ze względów bezpieczeństwa (jeśli można wyeksportować klucze, jakie są zabezpieczenia?). Kiedyś niosłem klucze ręcznie, a potem stwierdziłem, że łatwiej będzie mi stary smartfon zostawić w pudełku na półce.

Metoda 2FA powinna być:

  • Bezpieczne - tylko Ty, a nie atakujący, powinieneś uzyskać dostęp do Twojego konta
  • Niezawodny – dostęp do swojego konta masz wtedy, kiedy tego potrzebujesz
  • Wygodnie i przystępnie – korzystanie z 2FA jest przejrzyste i zajmuje minimum czasu
  • Tani

Wierzymy, że blockchain jest właściwym rozwiązaniem.

Użyj 2FA na blockchainie

Dla użytkownika 2FA na blockchainie wygląda tak samo, jak otrzymywanie jednorazowych kodów poprzez SMS. Jedyną różnicą jest kanał dostawy. Sposób uzyskania kodu 2FA zależy od tego, co oferuje blockchain. W naszym projekcie (informacja jest w moim profilu) jest to aplikacja internetowa, Tor, iOS, Android, Linux, Windows, MacOS.

Usługa generuje jednorazowy kod i wysyła go do komunikatora na blockchainie. Następnie postępuj zgodnie z klasyką: użytkownik wpisuje otrzymany kod w interfejsie usługi i loguje się.

Przejdź, aby zabezpieczyć 2FA na blockchainie

Artykuł Jak zdecentralizowany komunikator działa na blockchainie? Napisałem, że blockchain zapewnia bezpieczeństwo i prywatność transmisji wiadomości. W kwestii wysyłania kodów 2FA podkreślę:

  • Jedno kliknięcie, aby utworzyć konto - bez telefonów i e-maili.
  • Wszystkie wiadomości z kodami 2FA są szyfrowane metodą End-to-End curve25519xsalsa20poly1305.
  • Atak MITM jest wykluczony - każda wiadomość z kodem 2FA jest transakcją na blockchainie i jest podpisana przez Ed25519 EdDSA.
  • Wiadomość z kodem 2FA trafia do osobnego bloku. Nie można skorygować kolejności i znacznika czasu bloków, a tym samym kolejności komunikatów.
  • Nie ma centralnej struktury sprawdzającej „autentyczność” wiadomości. Odbywa się to poprzez rozproszony system węzłów oparty na konsensusie i jest własnością użytkowników.
  • Nie można wyłączyć - nie można blokować kont ani usuwać wiadomości.
  • Uzyskaj dostęp do kodów 2FA z dowolnego urządzenia w dowolnym momencie.
  • Potwierdzenie dostarczenia wiadomości kodem 2FA. Serwis wysyłający hasło jednorazowe wie na pewno, że zostało ono dostarczone. Brak przycisków „Wyślij ponownie”.

Aby porównać z innymi metodami 2FA, stworzyłem tabelę:

Przejdź, aby zabezpieczyć 2FA na blockchainie

Użytkownik otrzymuje konto w komunikatorze blockchain, aby w ciągu sekundy otrzymać kody – do logowania wykorzystywane jest jedynie hasło. Dlatego sposoby składania wniosków mogą być różne: możesz używać jednego konta do otrzymywania kodów na wszystkie usługi lub możesz utworzyć osobne konto dla każdej usługi.

Jest też niedogodność – na koncie musi znajdować się przynajmniej jedna transakcja. Aby użytkownik otrzymał zaszyfrowaną wiadomość z kodem, trzeba znać jego klucz publiczny, a pojawia się on w blockchainie dopiero przy pierwszej transakcji. W ten sposób udało nam się z tego wyjść: daliśmy im możliwość otrzymania darmowych tokenów do swojego portfela. Jednak lepszym rozwiązaniem jest nadanie kontu nazwy klucza publicznego. (Dla porównania mamy numer konta U1467838112172792705 jest pochodną klucza publicznego cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Dla komunikatora jest to wygodniejsze i czytelniejsze, natomiast dla systemu wysyłania kodów 2FA jest to ograniczenie). Myślę, że w przyszłości ktoś podejmie taką decyzję i przeniesie „Wygodę i Dostępność” do zielonej strefy.

Cena przesłania kodu 2FA jest naprawdę niska - 0.001 ADM, obecnie wynosi 0.00001 USD. Ponownie możesz podnieść swój blockchain i obniżyć cenę do zera.

Jak podłączyć 2FA na blockchainie do swojej usługi

Mam nadzieję, że udało mi się zainteresować kilku czytelników możliwością dodania autoryzacji blockchain do swoich usług.

Opowiem Ci jak to zrobić na przykładzie naszego komunikatora i analogicznie możesz zastosować inny blockchain. W aplikacji demonstracyjnej 2FA używamy postgresql10 do przechowywania informacji o koncie.

Etapy połączenia:

  1. Utwórz konto na blockchainie, z którego będziesz wysyłać kody 2FA. Otrzymasz hasło, które służy jako klucz prywatny do szyfrowania wiadomości z kodami i podpisywania transakcji.
  2. Dodaj skrypt do swojego serwera, aby wygenerować kody 2FA. Jeśli korzystasz już z innej metody 2FA z jednorazowym dostarczaniem hasła, ten krok już wykonałeś.
  3. Dodaj skrypt do swojego serwera, aby wysyłać kody do użytkownika w komunikatorze blockchain.
  4. Utwórz interfejs użytkownika do wysyłania i wprowadzania kodu 2FA. Jeśli korzystasz już z innej metody 2FA z jednorazowym dostarczaniem hasła, ten krok już wykonałeś.

1 Założenie konta

Utworzenie konta w blockchainie oznacza wygenerowanie klucza prywatnego, klucza publicznego i pochodnego adresu konta.

Przejdź, aby zabezpieczyć 2FA na blockchainie

Najpierw generowane jest hasło BIP39, z którego obliczany jest skrót SHA-256. Hash służy do generowania klucza prywatnego ks i klucza publicznego kp. Z klucza publicznego, używając tego samego SHA-256 z inwersją, uzyskujemy adres w blockchainie.

Jeżeli chcesz każdorazowo wysyłać kody 2FA z nowego konta, konieczne będzie dodanie kodu założenia konta na serwer:

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

W aplikacji demo uprościliśmy to - założyliśmy jedno konto w aplikacji webowej i z niego wysyłaliśmy kody. W większości przypadków jest to również wygodniejsze dla użytkownika: wie, że usługa wysyła kody 2FA z konkretnego konta i może je nazwać.

Przejdź, aby zabezpieczyć 2FA na blockchainie

2 Generowanie kodów 2FA

Dla każdego logowania użytkownika należy wygenerować kod 2FA. Korzystamy z biblioteki speakeasy, ale możesz wybrać dowolny inny.

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

Sprawdzanie ważności wprowadzonego przez użytkownika kodu 2FA:

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

3 Wysyłanie kodu 2FA

Aby przesłać kod 2FA, możesz skorzystać z interfejsu API węzła blockchain, biblioteki JS API lub konsoli. W tym przykładzie korzystamy z konsoli – jest to Command Line Interface, narzędzie ułatwiające interakcję z blockchainem. Aby wysłać wiadomość z kodem 2FA należy użyć komendy send message konsole.

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

Alternatywnym sposobem wysyłania wiadomości jest użycie metody send w bibliotece API JS.

4 Interfejs użytkownika

Użytkownik musi mieć możliwość wprowadzenia kodu 2FA. Można to zrobić na różne sposoby, w zależności od platformy aplikacji. W naszym przykładzie jest to Vue.

Przejdź, aby zabezpieczyć 2FA na blockchainie

Kod źródłowy aplikacji demonstracyjnej uwierzytelniania dwuskładnikowego typu blockchain można obejrzeć pod adresem GitHub. W pliku Readme znajduje się łącze do wersji demonstracyjnej na żywo, umożliwiające wypróbowanie tej funkcji.

Źródło: www.habr.com

Dodaj komentarz