Allez sécuriser 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% .

J'ai un tel déclenchement d'événements est scandaleux, car cette méthode n'est pas sûre. Réaffecter le numéro d'une carte SIM à une autre a commencé au début de l'ère du mobile - c'est ainsi que le numéro est restauré lorsque la carte SIM est perdue. Réalisation des «spécialistes du sevrage de l'argent numérique»: l'option «écraser les cartes SIM» peut être utilisée dans des stratagèmes frauduleux. Après tout, celui qui contrôle la carte SIM peut gérer les services bancaires en ligne, les portefeuilles électroniques et même la crypto-monnaie d'autres personnes. Et vous pouvez reprendre le numéro d'une autre personne en soudoyant un employé des télécommunications à l'aide de fraude ou de faux documents.



Des milliers d'épisodes d'échange de cartes SIM ont été découverts - c'est ainsi que ce système de fraude a été appelé. L'ampleur de la catastrophe suggère que le monde abandonnera bientôt le 2FA via SMS. Mais cela ne se produit pas - l' étude indique que ce ne sont pas les utilisateurs qui choisissent la méthode 2FA, mais les propriétaires de services.

Nous vous suggérons d'utiliser la méthode sécurisée 2FA avec la livraison de codes uniques via la blockchain, et nous vous indiquerons comment le connecter au propriétaire du service.

La facture va à des millions


En 2019, la fraude par échange de cartes SIM a augmenté de 63% selon la police de Londres, et le «chèque moyen» de l'attaquant était de 4 000 GBP. Je n'ai pas trouvé de statistiques en Russie, mais je suppose que c'est encore pire.

L'échange de cartes SIM est utilisé pour voler des comptes Twitter, Instagram, Facebook, VK, des comptes bancaires populaires et a récemment atteint les crypto-monnaies, rapporte le journal Times de l'entrepreneur Bitcoin Joby Weeks. Des cas très connus de vol de crypto-monnaies à l'aide du swap SIM ont fait surface dans la presse depuis 2016; en 2019 est venu un vrai pic.

En mai, des procureurs américains du district oriental du Michigan ont inculpé neuf jeunes âgés de 19 à 26 ans: ils appartiendraient à un gang de hackers appelé The Community. Le gang est accusé de sept attaques de swap, à la suite desquelles les pirates se sont appropriés une crypto-monnaie d'une valeur de plus de 2,4 millions de dollars. Et en avril, un étudiant de Californie, Joel Ortiz, a été condamné à 10 ans de prison pour échange de carte SIM; 7,5 millions de dollars de crypto-monnaies sont devenus sa proie.


Photo de Joel Ortiz lors d'une conférence de presse universitaire. Deux ans plus tard, il sera détenu pour cyber-fraude.

Le principe du swap SIM


L'échange signifie l'échange. Dans tous ces systèmes, les criminels attribuent le numéro de téléphone d'une victime, généralement en réémettant une carte SIM, et l'utilisent pour réinitialiser un mot de passe. Un échange de carte SIM typique en théorie ressemble à ceci:

  1. Intelligence. Les fraudeurs découvrent les données personnelles de la victime: nom et téléphone. Ils peuvent être trouvés dans des sources ouvertes (réseaux sociaux, amis) ou obtenus auprès 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, il suffit d'appeler le support technique du fournisseur, de signaler le numéro et de dire que le téléphone a été perdu.
  3. Capturez, transférez des numéros sur votre carte SIM. Habituellement, cela se fait également par le biais d'un complice dans une entreprise de télécommunications ou en falsifiant des documents.

Dans la vraie vie, c'est encore plus grave. Les attaquants sélectionnent une victime, puis surveillent quotidiennement l'emplacement du téléphone - une demande d'informations que l'abonné est passé en itinérance coûte 1-2 cents. Dès que le propriétaire de la carte SIM est parti à l'étranger, il convient avec le responsable du salon de la communication d'émettre une nouvelle carte SIM. Cela coûte environ 50 $ (j'ai trouvé des informations - dans différents pays et de différents opérateurs de 20 $ à 100 $), alors que le gestionnaire sera renvoyé dans le pire des cas - il n'y a aucune responsabilité.

Désormais, tous les intrus recevront tous les SMS et le propriétaire du téléphone ne pourra rien y faire - il est à l'étranger. Et puis les méchants ont accès à tous les comptes de la victime et, si désiré, changent les mots de passe.

Chances de restituer les biens volés


Les banques vont parfois vers les victimes et retirent les virements de leurs comptes. Par conséquent, il est possible de restituer de l'argent fiduciaire, même si le contrevenant n'est pas trouvé. Mais avec les portefeuilles de crypto-monnaie, tout est plus compliqué - à la fois techniquement et légalement. Jusqu'à présent, aucun échange / portefeuille n'a versé d'indemnisation pour échanger les victimes.

Si les victimes veulent défendre leur argent devant les tribunaux, alors elles accusent l'opérateur: il a créé les conditions pour le vol d'argent sur le compte. C'est exactement ce qu'a fait Michael Turpin , qui a perdu 224 millions de dollars à cause du swap. Il poursuit maintenant la société de télécommunications AT&T.



Jusqu'à présent, aucun État n'a de plans de travail pour protéger légalement les propriétaires de crypto-monnaie. Il est impossible d'assurer votre capital ou de recevoir une compensation pour sa perte. Par conséquent, il est plus facile de prévenir une attaque par échange que d'en combattre les conséquences. La manière la plus évidente est d'utiliser un «deuxième facteur» plus fiable pour 2FA.

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


Les codes de confirmation dans SMS sont également dangereux d'un point de vue technique. Les messages peuvent être interceptés en raison de vulnérabilités fatales dans Signaling System 7 (SS7). 2FA par SMS est officiellement reconnu comme dangereux (le National Institute of Standards and Technology des États-Unis en parle dans son guide d'authentification numérique ).

De plus, la présence de 2FA inspire 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 complique pas, mais facilite l'accès d'un attaquant au compte.

Et souvent, les SMS arrivent avec un long retard ou ne viennent pas du tout.

Autres méthodes 2FA


Bien sûr, sur les smartphones et les SMS, la lumière n'a pas convergé. Il existe d'autres méthodes 2FA. Par exemple, codes TAN à usage unique: la méthode est primitive, mais fonctionne - elle est toujours utilisée dans certaines banques. Il existe des systèmes utilisant des données biométriques: empreintes digitales, scintigraphies rétiniennes. Une autre option qui semble être un compromis raisonnable en termes de commodité, de fiabilité et de prix est les applications spéciales pour 2FA: RSA Token, Google Authenticator. Et il y a 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 ont des problèmes, et à cause d'eux, la réalité est différente des attentes.

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

De nombreux utilisateurs de méthodes 2FA s'associent à la crainte que l'accès ne soit perdu. Une clé physique ou une liste de mots de passe TAN peut être perdue ou volée. J'ai personnellement une expérience négative en utilisant Google Authenticator. Mon premier smartphone avec cette application est tombé en panne - évaluez mes efforts pour restaurer l'accès aux comptes. Un autre problème est la transition vers un nouvel appareil. Google Authenticator n'est pas en mesure d'exporter en raison de problèmes de sécurité (si les clés peuvent être exportées, quel type de sécurité existe-t-il?) Une fois que j'ai transféré les clés manuellement, 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ûr - vous seul devez avoir accès à votre compte, pas aux attaquants
  • Fiable - vous avez accès à votre compte chaque fois que vous en avez besoin
  • Pratique et abordable - l'utilisation de 2FA est claire et prend un minimum de temps
  • Bon marché

Nous pensons que la blockchain est la bonne solution.

Utilisez 2FA sur la blockchain


Pour un utilisateur, 2FA sur la blockchain ressemble à la réception de codes à usage unique par SMS. La seule différence est dans le canal de livraison. La façon d'obtenir un code 2FA dépend de ce que propose la blockchain. Dans notre projet (les informations se trouvent dans mon profil) il s'agit d'une application Web, Tor, iOS, Android, Linux, Windows, MacOS.

Le service génère un code unique et l'envoie au messager sur la blockchain. De plus, selon les classiques: l'utilisateur entre le code reçu dans l'interface de service et se connecte.



Dans l'article Comment fonctionne un messager décentralisé sur la blockchain, j'ai écrit que la blockchain garantit la sécurité et la confidentialité de la messagerie. Concernant l'envoi de codes 2FA, je soulignerai:

  • Un clic pour créer un compte - pas de téléphones ni de courriels.
  • Tous les messages avec des codes 2FA sont chiffrés de la courbe de bout en bout25519xsalsa20poly1305.
  • L'attaque MITM est exclue - chaque message avec un code 2FA est une transaction sur la blockchain et est signé par Ed25519 EdDSA.
  • Un message avec un code 2FA tombe dans son bloc. La séquence et l'horodatage des blocs ne peuvent pas être fixés, et donc l'ordre des messages.
  • Il n'y a pas de structure centrale qui vérifie «l'authenticité» d'un message. Cela se fait par un système de nœuds distribués consensuel et appartient aux utilisateurs.
  • Impossibilité de désactiver - les comptes ne peuvent pas être bloqués et les messages peuvent être supprimés.
  • Accédez à tout moment aux codes 2FA depuis n'importe quel appareil.
  • Message de confirmation de livraison avec code 2FA. Un service qui envoie un mot de passe à usage unique sait avec certitude qu'il a été délivré. Aucun bouton «Soumettre à nouveau».

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



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

Il y a aussi un inconvénient - un compte doit avoir au moins une transaction. Pour que l'utilisateur reçoive un message crypté avec un code, vous devez connaître sa clé publique et il n'apparaît dans la blockchain qu'avec la première transaction. Nous sommes sortis de cette façon: ils nous ont donné la possibilité d'obtenir des jetons gratuits dans notre portefeuille. Cependant, une solution plus correcte consiste à nommer le compte une clé publique. (À titre de comparaison, notre 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). Je pense qu'à l'avenir, quelqu'un prendra une telle décision et transférera «Commodité et accessibilité» dans la zone verte.

L'envoi d'un code 2FA est très faible - 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 dire comment faire en utilisant l'exemple de notre messager, 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 de laquelle vous enverrez des codes 2FA. Vous recevrez un passfrase, qui est utilisé 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 une remise de mot de passe unique, cette étape est déjà terminée.
  3. Ajoutez un script à votre serveur pour envoyer des codes à l'utilisateur dans le messager blockchain.
  4. Créez une interface utilisateur pour l'envoi et la saisie du code 2FA. Si vous utilisez déjà une autre méthode 2FA avec une remise de mot de passe unique, cette étape est déjà terminée.

1 Créez un compte

La création d'un compte dans la blockchain est la génération d'une clé privée, d'une clé publique et d'une adresse de compte qui en dérive.



Tout d'abord, la phrase secrète BIP39 est générée, à partir de laquelle le hachage SHA-256 est pris en compte. Le hachage est utilisé pour générer la clé privée ks et la clé publique kp. De la clé publique avec le même SHA-256 avec inversion, nous obtenons l'adresse dans la blockchain.

Si vous souhaitez envoyer des codes 2FA à chaque fois depuis un nouveau compte, le code de création d'un compte devra être ajouté au 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ée: nous avons créé un compte dans l'application Web et envoyé les codes à partir de celle-ci. Dans la plupart des cas, cela est plus pratique pour l'utilisateur: il sait que le service envoie des codes 2FA à partir d'un compte spécifique et peut le nommer.



2 génération de codes 2FA

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

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

Validation du code utilisateur 2FA saisi par l'utilisateur:

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

3 Soumettre le code 2FA

Vous pouvez utiliser l'API du nœud de la chaîne de blocs, la bibliothèque d'API JS ou la console pour envoyer du code 2FA. 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 d' send message de la console.

 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 d' send dans la bibliothèque d'API JS.

4 interface utilisateur

L'utilisateur doit avoir la possibilité d'entrer le code 2FA, cela peut se faire de différentes manières en fonction de la plate-forme de votre application. Dans notre exemple, c'est Vue.



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

Source: https://habr.com/ru/post/fr476090/


All Articles