Déplacez-vous vers la sécurisation du 2FA sur la blockchain

Les messages SMS sont la méthode d'authentification à deux facteurs (2FA) la plus populaire. Il est utilisé par les banques, les portefeuilles électroniques et cryptographiques, les boîtes aux lettres et toutes sortes de services ; le nombre d'utilisateurs de la méthode approche les 100%.

Je suis indigné de ce scénario, car cette méthode est dangereuse. La réattribution d'un numéro d'une carte SIM à une autre a commencé au début de l'ère mobile - c'est ainsi que le numéro est restauré en cas de perte d'une carte SIM. Les « spécialistes du vol d’argent numérique » ont réalisé que l’option « réécriture de la carte SIM » pouvait être utilisée dans des stratagèmes frauduleux. Après tout, celui qui contrôle la carte SIM peut contrôler les services bancaires en ligne, les portefeuilles électroniques et même les crypto-monnaies d’autres personnes. Et vous pouvez prendre possession du numéro d’une autre personne en soudoyant un employé des télécommunications, en utilisant la tromperie ou en falsifiant des documents.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

Des milliers d’épisodes d’échange de cartes SIM ont été découverts, comme on appelle ce stratagème frauduleux. L’ampleur du désastre suggère que le monde va bientôt abandonner le 2FA par SMS. Mais cela n'arrive pas - dans Recherche ils disent que ce ne sont pas les utilisateurs qui choisissent la méthode 2FA, mais les propriétaires de services.

Nous proposons d'utiliser la méthode sécurisée 2FA avec livraison de codes à usage unique via la blockchain, et nous vous indiquerons comment le propriétaire du service peut le connecter.

Le compte se compte en millions

En 2019, la fraude par échange de carte SIM a augmenté de 63 % selon la police de Londres, et la « facture moyenne » d'un attaquant s'élevait à 4,000 XNUMX GBP. Je n’ai trouvé aucune statistique en Russie, mais je suppose qu’elles sont encore pires.

L'échange de cartes SIM est utilisé pour voler des comptes populaires Twitter, Instagram, Facebook, VK, des comptes bancaires et, récemment, même des crypto-monnaies - Le journal The Times rapporte selon l'entrepreneur Bitcoin Joby Weeks. Des cas très médiatisés de vol de crypto-monnaie utilisant l’échange de cartes SIM sont apparus dans la presse depuis 2016 ; L’année 2019 a connu un véritable pic.

En mai, le bureau du procureur américain pour le district oriental du Michigan porté plainte neuf jeunes âgés de 19 à 26 ans : ils feraient partie d'un gang de hackers appelé « The Community ». Le gang est accusé de sept attaques de swap, à la suite desquelles les pirates ont volé une crypto-monnaie d'une valeur de plus de 2,4 millions de dollars. Et en avril, l'étudiant californien Joel Ortiz a été condamné à 10 ans de prison pour échange de carte SIM ; sa production était de 7.5 millions de dollars en crypto-monnaies.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain
Photo de Joel Ortiz lors d'une conférence de presse universitaire. Deux ans plus tard, il sera arrêté pour cyberfraude.

Comment fonctionne l'échange de carte SIM

« Swaping » signifie échange. Dans tous ces stratagèmes, les criminels s'emparent du numéro de téléphone de la victime, généralement en réémettant une carte SIM, et l'utilisent pour réinitialiser le mot de passe. En théorie, un échange de carte SIM typique ressemble à ceci :

  1. Service de renseignements. Les fraudeurs découvrent les informations personnelles de la victime : nom et numéro de téléphone. Ils peuvent être trouvés dans des sources ouvertes (réseaux sociaux, amis) ou reçus d'un complice - un employé d'un opérateur mobile.
  2. Blocage. La carte SIM de la victime est désactivée ; Pour ce faire, appelez simplement le support technique du fournisseur, indiquez le numéro et indiquez que le téléphone a été perdu.
  3. Capturez, transférez le numéro sur votre carte SIM. Habituellement, cela se fait également par l'intermédiaire d'un complice de l'entreprise de télécommunications ou par la falsification de documents.

Dans la vraie vie, les choses sont encore plus graves. Les attaquants sélectionnent une victime, puis suivent quotidiennement l'emplacement du téléphone - une demande pour recevoir des informations indiquant que l'abonné est passé en itinérance coûte 1 à 2 centimes. Dès que le propriétaire de la carte SIM part à l'étranger, il négocie avec le gérant du magasin de communication la délivrance d'une nouvelle carte SIM. Cela coûte environ 50 $ (j'ai trouvé des informations - dans différents pays et auprès de différents opérateurs de 20 $ à 100 $), et dans le pire des cas, le manager sera licencié - il n'y a aucune responsabilité pour cela.

Désormais, tous les SMS seront reçus par des attaquants et le propriétaire du téléphone ne pourra rien y faire - il est à l'étranger. Ensuite, les méchants accèdent à tous les comptes des victimes et modifient les mots de passe s’ils le souhaitent.

Chances de restituer les biens volés

Les banques accommodent parfois les victimes à mi-chemin et retirent les virements de leurs comptes. Par conséquent, il est possible de restituer de l’argent fiduciaire même si le criminel n’est pas retrouvé. Mais avec les portefeuilles de crypto-monnaie, tout est plus compliqué – et techniquement, et sur le plan législatif. Jusqu’à présent, pas un seul échange/portefeuille n’a versé d’indemnisation aux victimes d’échange.

Si les victimes veulent défendre leur argent devant les tribunaux, elles blâment l'opérateur : il a créé les conditions du vol d'argent du compte. C'est exactement ce que j'ai fait Michel Turpin, qui a perdu 224 millions de dollars à cause des échanges, poursuit désormais la société de télécommunications AT&T.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

Jusqu’à présent, aucun État n’a mis en place de système efficace pour protéger légalement les propriétaires de cryptomonnaies. Il est impossible d'assurer votre capital ni d'obtenir une indemnisation pour sa perte. Par conséquent, il est plus facile de prévenir une attaque par swap que de gérer ses conséquences. Le moyen le plus évident consiste à utiliser un « deuxième facteur » plus fiable pour 2FA.

L'échange de carte SIM n'est pas le seul problème avec 2FA via SMS

Les codes de confirmation dans les SMS sont également dangereux d'un point de vue technique. Les messages peuvent être interceptés en raison de vulnérabilités non corrigées dans Signaling System 7 (SS7). 2FA par SMS est officiellement reconnu comme non sécurisé (l'Institut national américain des normes et de la technologie le dit dans son rapport). Guide d'authentification numérique).

Dans le même temps, la présence du 2FA donne souvent à l'utilisateur un sentiment de fausse sécurité, et il choisit un mot de passe plus simple. Par conséquent, une telle authentification ne rend pas la tâche difficile, mais permet à un attaquant d'accéder plus facilement au compte.

Et souvent les SMS arrivent avec beaucoup de retard ou n’arrivent pas du tout.

Autres méthodes 2FA

Bien entendu, la lumière n’a pas convergé vers les smartphones et les SMS. Il existe d'autres méthodes de 2FA. Par exemple, les codes TAN à usage unique : une méthode primitive, mais qui fonctionne - elle est encore utilisée dans certaines banques. Il existe des systèmes utilisant des données biométriques : empreintes digitales, scanners rétiniens. Une autre option qui semble être un compromis raisonnable en termes de commodité, de fiabilité et de prix concerne les applications spéciales pour 2FA : RSA Token, Google Authenticator. Il existe également des clés physiques et d'autres méthodes.

En théorie, tout semble logique et fiable. Mais dans la pratique, les solutions 2FA modernes rencontrent des problèmes et, à cause d’eux, la réalité diffère des attentes.

selon recherche, l'utilisation du 2FA est en principe un inconvénient, et la popularité du 2FA via SMS s'explique par « moins d'inconvénients par rapport aux autres méthodes » - la réception de codes à usage unique est compréhensible pour l'utilisateur.

Les utilisateurs associent de nombreuses méthodes 2FA à la crainte de perdre l’accès. La clé physique ou la liste des mots de passe TAN peuvent être perdues ou volées. J'ai personnellement eu de mauvaises expériences avec Google Authenticator. Mon premier smartphone avec cette application est tombé en panne - j'apprécie mes efforts pour restaurer l'accès à mes comptes. Un autre problème est le passage à un nouvel appareil. Google Authenticator ne propose pas d'option d'exportation pour des raisons de sécurité (si les clés peuvent être exportées, quelle est la sécurité ?). Une fois, j'ai porté les clés manuellement, puis j'ai décidé qu'il était plus facile de laisser l'ancien smartphone dans une boîte sur une étagère.

La méthode 2FA doit être :

  • Sécurisé : seul vous, et non les attaquants, devriez accéder à votre compte
  • Fiable : vous avez accès à votre compte quand vous en avez besoin
  • Pratique et accessible : l'utilisation de 2FA est claire et prend un minimum de temps
  • Bon marché

Nous pensons que la blockchain est la bonne solution.

Utiliser 2FA sur la blockchain

Pour l’utilisateur, 2FA sur la blockchain revient à recevoir des codes à usage unique par SMS. La seule différence réside dans le canal de livraison. La méthode pour obtenir un code 2FA dépend de ce que propose la blockchain. Dans notre projet (les informations sont dans mon profil) il s'agit d'une application Web, Tor, iOS, Android, Linux, Windows, MacOS.

Le service génère un code à usage unique et l'envoie au messager sur la blockchain. Suivez ensuite les classiques : l'utilisateur saisit le code reçu dans l'interface du service et se connecte.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

L'article Comment fonctionne une messagerie décentralisée sur la blockchain ? J'ai écrit que la blockchain garantit la sécurité et la confidentialité de la transmission des messages. Sur la question de l’envoi des codes 2FA, je soulignerai :

  • Un clic pour créer un compte - pas de téléphone ni d'e-mail.
  • Tous les messages avec des codes 2FA sont cryptés de bout en bout Curve25519xsalsa20poly1305.
  • L'attaque MITM est exclue - chaque message avec le code 2FA est une transaction sur la blockchain et est signé par Ed25519 EdDSA.
  • Le message avec le code 2FA se retrouve dans son propre bloc. La séquence et l'horodatage des blocs ne peuvent pas être corrigés, et donc l'ordre des messages.
  • Il n’existe pas de structure centrale qui vérifie « l’authenticité » d’un message. Cela se fait par un système distribué de nœuds basé sur le consensus et appartenant aux utilisateurs.
  • Ne peut pas être désactivé : les comptes ne peuvent pas être bloqués et les messages ne peuvent pas être supprimés.
  • Accédez aux codes 2FA depuis n’importe quel appareil à tout moment.
  • Confirmation de la remise du message avec le code 2FA. Le service qui envoie le mot de passe à usage unique sait avec certitude qu'il a été délivré. Pas de boutons « Envoyer à nouveau ».

Pour comparer avec d'autres méthodes 2FA, j'ai fait un tableau :

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

L'utilisateur reçoit un compte dans la messagerie blockchain pour recevoir des codes en une seconde - seule une phrase secrète est utilisée pour se connecter. Par conséquent, les modalités d'application peuvent être différentes : vous pouvez utiliser un seul compte pour recevoir des codes pour tous les services, ou vous pouvez créer un compte distinct pour chaque service.

Il y a aussi un inconvénient : le compte doit avoir au moins une transaction. Pour que l'utilisateur reçoive un message crypté avec un code, il doit connaître sa clé publique, et elle n'apparaît dans la blockchain qu'à la première transaction. C’est ainsi que nous avons réussi à nous en sortir : nous leur avons donné la possibilité de recevoir des tokens gratuits dans leur portefeuille. Cependant, une meilleure solution consiste à nommer le compte une clé publique. (A titre de comparaison, nous avons un numéro de compte U1467838112172792705 est un dérivé de la clé publique cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Pour le messager, c'est plus pratique et lisible, mais pour le système d'envoi de codes 2FA, c'est une limitation). Je pense qu'à l'avenir, quelqu'un prendra une telle décision et déplacera « Commodité et accessibilité » dans la zone verte.

Le prix d'envoi d'un code 2FA est vraiment bas - 0.001 ADM, il est maintenant de 0.00001 USD. Encore une fois, vous pouvez augmenter votre blockchain et rendre le prix nul.

Comment connecter 2FA sur la blockchain à votre service

J'espère avoir pu intéresser quelques lecteurs à ajouter l'autorisation blockchain à leurs services.

Je vais vous expliquer comment procéder en utilisant notre messager comme exemple, et par analogie, vous pouvez utiliser une autre blockchain. Dans l'application de démonstration 2FA, nous utilisons postgresql10 pour stocker les informations de compte.

Étapes de connexion :

  1. Créez un compte sur la blockchain à partir duquel vous enverrez des codes 2FA. Vous recevrez une phrase secrète, qui est utilisée comme clé privée pour crypter les messages avec des codes et pour signer des transactions.
  2. Ajoutez un script à votre serveur pour générer des codes 2FA. Si vous utilisez déjà une autre méthode 2FA avec livraison de mot de passe à usage unique, vous avez déjà terminé cette étape.
  3. Ajoutez un script à votre serveur pour envoyer des codes à l'utilisateur dans la messagerie blockchain.
  4. Créez une interface utilisateur pour envoyer et saisir un code 2FA. Si vous utilisez déjà une autre méthode 2FA avec livraison de mot de passe à usage unique, vous avez déjà terminé cette étape.

1 Création de compte

Créer un compte dans la blockchain signifie générer une clé privée, une clé publique et une adresse de compte dérivée.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

Tout d’abord, la phrase secrète BIP39 est générée et le hachage SHA-256 est calculé à partir de celle-ci. Le hachage est utilisé pour générer la clé privée ks et la clé publique kp. A partir de la clé publique, en utilisant le même SHA-256 avec inversion, on obtient l'adresse dans la blockchain.

Si vous souhaitez envoyer à chaque fois des codes 2FA depuis un nouveau compte, il faudra ajouter le code de création de compte sur le serveur :

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

Dans l'application de démonstration, nous l'avons simplifié : nous avons créé un compte dans l'application Web et envoyé des codes à partir de celui-ci. Dans la plupart des cas, c'est aussi plus pratique pour l'utilisateur : il sait que le service envoie des codes 2FA à partir d'un compte spécifique et peut le nommer.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

2 Générer des codes 2FA

Un code 2FA doit être généré pour chaque connexion utilisateur. Nous utilisons la bibliothèque speakeasy, mais vous pouvez en choisir un autre.

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

Vérification de la validité du code 2FA saisi par l'utilisateur :

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

3 Envoi du code 2FA

Pour soumettre un code 2FA, vous pouvez utiliser l'API du nœud blockchain, la bibliothèque API JS ou la console. Dans cet exemple, nous utilisons la console - il s'agit de l'interface de ligne de commande, un utilitaire qui simplifie l'interaction avec la blockchain. Pour envoyer un message avec un code 2FA, vous devez utiliser la commande send message consoles.

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

Une autre façon d'envoyer des messages consiste à utiliser la méthode send dans la bibliothèque API JS.

4Interface utilisateur

L'utilisateur doit avoir la possibilité de saisir un code 2FA, cela peut être fait de différentes manières en fonction de votre plateforme d'application. Dans notre exemple, il s'agit de Vue.

Déplacez-vous vers la sécurisation du 2FA sur la blockchain

Le code source de l'application de démonstration d'authentification à deux facteurs blockchain peut être consulté sur GitHub. Il y a un lien dans le fichier Lisezmoi vers une démo en direct pour l'essayer.

Source: habr.com

Ajouter un commentaire