Passeu per assegurar 2FA a la cadena de blocs

Els missatges SMS són el mètode més popular d'autenticació de dos factors (2FA). És utilitzat per bancs, carteres electròniques i criptomonedes, bústies de correu i tot tipus de serveis; el nombre d'usuaris del mètode s'acosta al 100%.

Estic indignat per aquest escenari, perquè aquest mètode no és segur. La reassignació d'un número d'una targeta SIM a una altra va començar al començament de l'era dels mòbils; així és com es restaura el número quan es perd una targeta SIM. Els "especialistes en robatori de diners digitals" es van adonar que l'opció de "reescriure la targeta SIM" es pot utilitzar en esquemes fraudulents. Després de tot, qui controla la targeta SIM pot controlar la banca en línia d'altres persones, carteres electròniques i fins i tot criptomoneda. I podeu prendre possessió del número d'una altra persona subornant un empleat de telecomunicacions, utilitzant enganys o documents falsificats.

Passeu per assegurar 2FA a la cadena de blocs

S'han descobert milers d'episodis d'intercanvi de SIM, com s'anomena aquest esquema de frau. L'escala del desastre suggereix que el món aviat abandonarà 2FA per SMS. Però això no passa - en investigació diuen que no són els usuaris els que trien el mètode 2FA, sinó els propietaris del servei.

Us proposem utilitzar el mètode segur 2FA amb el lliurament de codis d'un sol cop a través de la cadena de blocs, i us direm com el propietari del servei pot connectar-lo.

El recompte arriba a milions

El 2019, el frau d'intercanvi de SIM va augmentar un 63% segons la policia de Londres i la "factura mitjana" d'un atacant va ser de 4,000 GBP. No he trobat cap estadística a Rússia, però suposo que encara són pitjors.

L'intercanvi de SIM s'utilitza per robar comptes populars de Twitter, Instagram, Facebook, VK, comptes bancaris i, recentment, fins i tot criptomonedes: El diari The Times informa segons l'empresari de Bitcoin Joby Weeks. Casos d'alt perfil de robatori de criptomoneda mitjançant l'intercanvi de SIM han aparegut a la premsa des del 2016; El 2019 va veure un autèntic cim.

Al maig, l'oficina del fiscal dels Estats Units per al districte oriental de Michigan va presentar càrrecs nou joves d'entre 19 i 26 anys: es creu que formen part d'una banda de pirates informàtics anomenada "The Community". La banda està acusada de set atacs d'intercanvi, com a resultat dels quals els pirates informàtics van robar criptomoneda per valor de més de 2,4 milions de dòlars. I a l'abril, l'estudiant de Califòrnia Joel Ortiz va rebre 10 anys de presó per intercanvi de SIM; la seva producció va ser de 7.5 milions de dòlars en criptomonedes.

Passeu per assegurar 2FA a la cadena de blocs
Foto de Joel Ortiz en una roda de premsa universitària. Dos anys després serà detingut per frau cibernètic.

Com funciona l'intercanvi de SIM

"Canviar" vol dir intercanvi. En tots aquests esquemes, els delinqüents es fan càrrec del número de telèfon de la víctima, normalment mitjançant la reemissió d'una targeta SIM, i l'utilitzen per restablir la contrasenya. Un intercanvi de SIM típic en teoria té aquest aspecte:

  1. Servei d'intel·ligència. Els estafadors descobreixen la informació personal de la víctima: nom i número de telèfon. Es poden trobar en fonts obertes (xarxes socials, amics) o rebre d'un còmplice: un empleat d'un operador mòbil.
  2. Bloqueig. La targeta SIM de la víctima està desactivada; Per fer-ho, només cal que truqueu al servei d'assistència tècnica del proveïdor, proporcioneu el número i digueu que el telèfon s'ha perdut.
  3. Captura, transfereix el número a la teva targeta SIM. Normalment això també es fa a través d'un còmplice de l'empresa de telecomunicacions o mitjançant falsificació de documents.

A la vida real les coses són encara més greus. Els atacants seleccionen una víctima i després fan un seguiment diari de la ubicació del telèfon: una sol·licitud per rebre informació que l'abonat ha canviat a la itinerància costa entre 1 i 2 cèntims. Tan bon punt el propietari de la targeta SIM ha marxat a l'estranger, negocien amb el responsable de la botiga de comunicacions per emetre una nova targeta SIM. Costa uns 50 dòlars (he trobat informació -en diferents països i amb diferents operadors entre 20 i 100 dòlars), i en el pitjor dels casos el gerent serà acomiadat; no hi ha cap responsabilitat per això.

Ara tots els SMS seran rebuts pels atacants i el propietari del telèfon no podrà fer-hi res: és a l'estranger. A continuació, els dolents tenen accés a tots els comptes de la víctima i canvien les contrasenyes si ho desitgen.

Possibilitats de retornar els objectes robats

De vegades, els bancs donen cabuda a les víctimes a mig camí i retiren transferències dels seus comptes. Per tant, és possible retornar diners fiduciaris encara que no es trobi el criminal. Però amb les carteres de criptomoneda tot és més complicat, i tècnicament, i legislativament. Fins ara, ni un sol intercanvi/cartera ha pagat una compensació a les víctimes de l'intercanvi.

Si les víctimes volen defensar els seus diners als tribunals, culpen a l'operador: va crear les condicions per al robatori de diners del compte. Això és exactament el que vaig fer Miquel Turpin, que va perdre 224 milions de dòlars a causa de l'intercanvi. Ara està demandant l'empresa de telecomunicacions AT&T.

Passeu per assegurar 2FA a la cadena de blocs

Fins ara, cap estat no disposa d'esquemes de treball per protegir legalment els propietaris de criptomonedes. És impossible assegurar el seu capital o rebre una compensació per la seva pèrdua. Per tant, prevenir un atac d'intercanvi és més fàcil que fer front a les seves conseqüències. La manera més òbvia és utilitzar un "segon factor" més fiable per a 2FA.

L'intercanvi de SIM no és l'únic problema amb 2FA per SMS

Els codis de confirmació en SMS també són insegurs des del punt de vista tècnic. Els missatges es poden interceptar a causa de vulnerabilitats sense pegats al Sistema de senyalització 7 (SS7). 2FA per SMS es reconeix oficialment com a insegur (l'Institut Nacional d'Estàndards i Tecnologia dels EUA ho diu al seu Guia d'autenticació digital).

Al mateix temps, la presència de 2FA sovint dóna a l'usuari una sensació de falsa seguretat i tria una contrasenya més senzilla. Per tant, aquesta autenticació no dificulta, però facilita que un atacant accedeixi al compte.

I sovint els SMS arriben amb un llarg retard o no arriben del tot.

Altres mètodes 2FA

Per descomptat, la llum no va confluir en els telèfons intel·ligents i els SMS. Hi ha altres mètodes de 2FA. Per exemple, codis TAN d'una sola vegada: un mètode primitiu, però funciona; encara s'utilitza en alguns bancs. Hi ha sistemes que utilitzen dades biomètriques: empremtes dactilars, exploracions de la retina. Una altra opció que sembla un compromís raonable en termes de comoditat, fiabilitat i preu són les aplicacions especials per a 2FA: RSA Token, Google Authenticator. També hi ha claus físiques i altres mètodes.

En teoria, tot sembla lògic i fiable. Però a la pràctica, les solucions modernes de 2FA tenen problemes i, per això, la realitat difereix de les expectatives.

Segons investigació, l'ús de 2FA és un inconvenient en principi, i la popularitat de 2FA per SMS s'explica per "menys inconvenients en comparació amb altres mètodes": rebre codis d'una sola vegada és comprensible per a l'usuari.

Els usuaris associen molts mètodes 2FA amb la por que es perdi l'accés. La clau física o la llista de contrasenyes TAN es pot perdre o robar. Personalment, he tingut males experiències amb Google Authenticator. El meu primer telèfon intel·ligent amb aquesta aplicació es va avariar; agraeixo els meus esforços per restaurar l'accés als meus comptes. Un altre problema és canviar a un dispositiu nou. Google Authenticator no té cap opció d'exportació per motius de seguretat (si es poden exportar les claus, quina seguretat hi ha?). Una vegada vaig portar les claus manualment, i després vaig decidir que era més fàcil deixar el telèfon intel·ligent vell en una caixa en un prestatge.

El mètode 2FA hauria de ser:

  • Segur: només vostè i no els atacants hauríeu d'accedir al vostre compte
  • Fiable: tens accés al teu compte sempre que ho necessitis
  • Convenient i accessible: utilitzar 2FA és clar i requereix un temps mínim
  • Barat

Creiem que blockchain és la solució adequada.

Utilitzeu 2FA a la cadena de blocs

Per a l'usuari, 2FA a la cadena de blocs té el mateix aspecte que rebre codis únics per SMS. L'única diferència és el canal de lliurament. El mètode per obtenir un codi 2FA depèn del que ofereix la cadena de blocs. En el nostre projecte (la informació està al meu perfil) es tracta d'una aplicació web, Tor, iOS, Android, Linux, Windows, MacOS.

El servei genera un codi únic i l'envia al missatger a la cadena de blocs. A continuació, seguiu els clàssics: l'usuari introdueix el codi rebut a la interfície del servei i inicia sessió.

Passeu per assegurar 2FA a la cadena de blocs

L’article Com funciona un missatger descentralitzat a la cadena de blocs Vaig escriure que la cadena de blocs garanteix la seguretat i la privadesa de la transmissió de missatges. Sobre el tema de l'enviament de codis 2FA, destacaré:

  • Un clic per crear un compte, sense telèfons ni correus electrònics.
  • Tots els missatges amb codis 2FA estan xifrats d'extrem a extrem curve25519xsalsa20poly1305.
  • L'atac MITM està exclòs: cada missatge amb el codi 2FA és una transacció a la cadena de blocs i està signat per Ed25519 EdDSA.
  • El missatge amb el codi 2FA acaba en el seu propi bloc. La seqüència i la marca de temps dels blocs no es poden corregir i, per tant, l'ordre dels missatges.
  • No hi ha cap estructura central que controli l'"autenticitat" d'un missatge. Això es fa mitjançant un sistema distribuït de nodes basat en el consens, i és propietat dels usuaris.
  • No es pot desactivar: els comptes no es poden bloquejar i els missatges no es poden suprimir.
  • Accediu als codis 2FA des de qualsevol dispositiu en qualsevol moment.
  • Confirmació del lliurament del missatge amb codi 2FA. El servei que envia la contrasenya única sap del cert que s'ha lliurat. No hi ha botons "Envia de nou".

Per comparar amb altres mètodes 2FA, vaig fer una taula:

Passeu per assegurar 2FA a la cadena de blocs

L'usuari rep un compte al missatger de cadena de blocs per rebre codis en un segon; només s'utilitza una contrasenya per iniciar sessió. Per tant, els mètodes d'aplicació poden ser diferents: podeu utilitzar un compte per rebre codis per a tots els serveis, o podeu crear un compte independent per a cada servei.

També hi ha un inconvenient: el compte ha de tenir almenys una transacció. Perquè l'usuari rebi un missatge xifrat amb un codi, cal conèixer la seva clau pública, i només apareix a la cadena de blocs amb la primera transacció. Així és com vam aconseguir sortir-ne: els vam donar l'oportunitat de rebre fitxes gratuïtes a la seva cartera. Tanmateix, una millor solució és anomenar el compte com a clau pública. (Per comparació, tenim un número de compte U1467838112172792705 és un derivat de la clau pública cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Per al missatger això és més còmode i llegible, però per al sistema d'enviament de codis 2FA és una limitació). Crec que en el futur algú prendrà aquesta decisió i traslladarà "Confort i accessibilitat" a la zona verda.

El preu d'enviar un codi 2FA és molt baix: 0.001 ADM, ara és de 0.00001 USD. De nou, podeu augmentar la vostra cadena de blocs i fer que el preu sigui zero.

Com connectar 2FA a la cadena de blocs al vostre servei

Espero haver pogut interessar uns quants lectors per afegir autorització blockchain als seus serveis.

Us explicaré com fer-ho fent servir el nostre missatger com a exemple i, per analogia, podeu utilitzar una altra cadena de blocs. A l'aplicació de demostració 2FA fem servir postgresql10 per emmagatzemar informació del compte.

Etapes de connexió:

  1. Creeu un compte a la cadena de blocs des del qual enviareu codis 2FA. Rebràs una frase de contrasenya, que s'utilitza com a clau privada per xifrar missatges amb codis i signar transaccions.
  2. Afegiu un script al vostre servidor per generar codis 2FA. Si ja esteu utilitzant qualsevol altre mètode 2FA amb lliurament de contrasenya única, ja heu completat aquest pas.
  3. Afegiu un script al vostre servidor per enviar codis a l'usuari al missatger de cadena de blocs.
  4. Creeu una interfície d'usuari per enviar i introduir un codi 2FA. Si ja esteu utilitzant qualsevol altre mètode 2FA amb lliurament de contrasenya única, ja heu completat aquest pas.

1 Creeu un compte

Crear un compte a la cadena de blocs significa generar una clau privada, una clau pública i una adreça de compte derivada.

Passeu per assegurar 2FA a la cadena de blocs

En primer lloc, es genera la contrasenya BIP39 i es calcula el hash SHA-256 a partir d'ella. El hash s'utilitza per generar la clau privada ks i la clau pública kp. De la clau pública, utilitzant el mateix SHA-256 amb inversió, obtenim l'adreça a la cadena de blocs.

Si voleu enviar codis 2FA cada cop des d'un compte nou, caldrà afegir el codi de creació del compte al servidor:

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 l'aplicació de demostració, la vam simplificar: vam crear un compte a l'aplicació web i vam enviar-ne codis. En la majoria dels casos, això també és més convenient per a l'usuari: sap que el servei envia codis 2FA des d'un compte concret i li pot anomenar.

Passeu per assegurar 2FA a la cadena de blocs

2 Generació de codis 2FA

S'ha de generar un codi 2FA per a cada sessió d'usuari. Utilitzem la biblioteca bar clandestí, però pots triar-ne qualsevol altre.

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

Comprovació de la validesa del codi 2FA introduït per l'usuari:

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

3 Enviament del codi 2FA

Per enviar un codi 2FA, podeu utilitzar l'API del node blockchain, la biblioteca de l'API JS o la consola. En aquest exemple, utilitzem la consola: aquesta és la interfície de línia d'ordres, una utilitat que simplifica la interacció amb la cadena de blocs. Per enviar un missatge amb un codi 2FA, heu d'utilitzar l'ordre send message consola.

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

Una manera alternativa d'enviar missatges és utilitzar el mètode send a la biblioteca de l'API JS.

4 Interfície d'usuari

S'ha de donar a l'usuari l'opció d'introduir un codi 2FA, això es pot fer de diferents maneres en funció de la plataforma d'aplicació. En el nostre exemple, això és Vue.

Passeu per assegurar 2FA a la cadena de blocs

El codi font de l'aplicació de demostració d'autenticació de dos factors de blockchain es pot veure a GitHub. Hi ha un enllaç al Llegiu-me a una demostració en directe per provar-ho.

Font: www.habr.com

Afegeix comentari