Les chercheurs ont découvert plusieurs vulnérabilités dans la bibliothèque BitcoinJS qui pourraient exposer les portefeuilles Bitcoin créés en ligne il y a une dizaine d’années au piratage. Le problème fondamental est que les clés privées de ces portefeuilles de cryptomonnaies ont été générées avec une prévisibilité bien plus grande que ce à quoi les développeurs de la bibliothèque s’attendaient.
Vulnérabilités Randstorm et conséquences
Reprenons depuis le début. Les chercheurs d’Unciphered, une société spécialisée dans la récupération des accès aux portefeuilles de cryptomonnaies ont découvert et décrit un certain nombre de vulnérabilités dans la bibliothèque JavaScript BitcoinJS utilisée par de nombreuses plateformes de cryptomonnaies en ligne. Parmi ces services, il en existe d’autres très populaires, en particulier Blockchain.info, maintenant connu sous le nom de Blockchain.com. Les chercheurs ont baptisé cet ensemble de vulnérabilités Randstorm.
Bien que les vulnérabilités dans la bibliothèque BitcoinJS aient été corrigées en 2014, le problème s’étend aux résultats de l’utilisation de cette bibliothèque : les portefeuilles de cryptomonnaies créés avec BitcoinJS au début des années 2010 peuvent ne pas être sécurisés, dans le sens où il est beaucoup plus facile de trouver leurs clés privées que ne le suppose la cryptographie Bitcoin sous-jacente.
Les chercheurs estiment que plusieurs millions de portefeuilles, pour un total d’environ 1,4 million de BTC, sont potentiellement à risque en raison de Randstorm. Parmi les portefeuilles potentiellement vulnérables, 3 à 5 % d’entre eux sont réellement vulnérables à de véritables attaques selon les chercheurs. Sur la base du taux de change approximatif du bitcoin d’environ 36 500 dollars au moment de la publication, cela donne un butin total de 1,5 à 2,5 milliards de dollars pour les pirates informatiques qui pourraient réussir à exploiter les vulnérabilités Randstorm.
Les chercheurs affirment que ces vulnérabilités peuvent effectivement être utilisées pour des attaques dans le monde réel contre des portefeuilles de cryptomonnaies. De plus, ils ont réussi à exploiter ces vulnérabilités pour rétablir l’accès à plusieurs portefeuilles de cryptomonnaies créés sur Blockchain.info avant mars 2012. Pour des raisons éthiques, l’entreprise n’a pas publié la démonstration de faisabilité de l’attaque, car cela aurait directement exposé des dizaines de milliers de portefeuilles de cryptomonnaies à un risque de vol.
Les chercheurs ont déjà contacté les services de cryptomonnaies en ligne connus pour avoir utilisé des versions vulnérables de la bibliothèque BitcoinJS. À leur tour, ces services ont informé leurs clients qui pourraient potentiellement être affectés par les vulnérabilités Randstorm.
La nature des vulnérabilités Randstorm
Examinons plus en détail le fonctionnement de ces vulnérabilités. La clé privée est au cœur de la sécurité du portefeuille Bitcoin. Comme tout système cryptographique moderne, Bitcoin repose sur le fait que cette clé est secrète et indéchiffrable. Encore une fois, comme dans tout système cryptographique moderne, cela implique l’utilisation de très longs nombres aléatoires.
Et pour la sécurité des données protégées par la clé privée, cette dernière doit être aussi aléatoire que possible. Si le nombre utilisé comme clé est hautement prévisible, il permet à un pirate informatique, en possession des informations sur la procédure de génération de clés, de la pirater par force brute.
N’oubliez pas que la génération d’un nombre vraiment aléatoire n’est pas une mince affaire. Et les ordinateurs, de par leur nature, ne sont pas du tout adaptés à cette tâche, car ils sont trop prévisibles. Par conséquent, nous obtenons habituellement des nombres pseudo-aléatoires, et pour augmenter l’entropie de la génération (en langage cryptographique, il s’agit de la mesure d’imprévisibilité), nous nous appuyons sur des fonctions spéciales.
Revenons maintenant à la bibliothèque BitcoinJS. Pour obtenir des nombres pseudo-aléatoires » de haute qualité « , cette bibliothèque utilise une autre bibliothèque JavaScript appelée JSBN (JavaScript Big Number), plus précisément sa fonction SecureRandom. Comme son nom l’indique, cette fonction a été conçue pour générer des nombres pseudo-aléatoires pouvant être utilisés en cryptographie. Pour augmenter leur entropie, SecureRandom s’appuie sur la fonction de navigateur window.crypto.random.
C’est là que réside le problème : bien que la fonction window.crypto.random ait existé dans la famille de navigateurs Netscape Navigator 4.x, ces navigateurs étaient déjà obsolètes lorsque les services Internet ont commencé à utiliser activement la bibliothèque BitcoinJS. Et dans les navigateurs populaires de l’époque – Internet Explorer, Google Chrome, Mozilla Firefox et Apple Safari – la fonction window.crypto.random n’était tout simplement pas mise en œuvre.
Malheureusement, les développeurs de la bibliothèque JSBN n’ont prévu aucun type de vérification ni message d’erreur correspondant. Par conséquent, la fonction SecureRandom a passé sous silence l’étape d’incrémentation de l’entropie, confiant dans les faits la tâche de création de clés privées au générateur de nombres pseudo-aléatoires standard, Math.random.
Ce n’était pas une bonne idée, car Math.random n’a pas été conçu pour des fins cryptographiques. Mais la situation est encore plus confuse du fait que la mise en œuvre du générateur Math.random dans les navigateurs populaires de 2011 à 2015, en particulier Google Chrome, contenait des bugs qui produisaient des nombres aléatoires encore plus faibles que ce qui aurait dû être le cas.
À son tour, la bibliothèque BitcoinJS a hérité de JSBN tous les problèmes susmentionnés. Par conséquent, les plateformes qui l’ont utilisé pour générer des clés privées pour les portefeuilles de cryptomonnaies ont obtenu de la fonction SecureRandom beaucoup moins de nombres aléatoires que ne le pensaient les développeurs de la bibliothèque. De plus, comme ces clés sont générées avec une grande prévisibilité, il est beaucoup plus facile de les pirater par force brute, ce qui permet d’accéder à des portefeuilles de cryptomonnaies vulnérables.
Comme mentionné ci-dessus, il ne s’agit pas d’un danger théorique, mais bien pratique : l’équipe d’Unciphered a pu exploiter ces vulnérabilités pour rétablir l’accès (autrement dit, pirater de manière éthique) plusieurs anciens portefeuilles de cryptomonnaies créés sur Blockchain.info.
Qui est exposé au risque Randstorm
BitcoinJS a utilisé la bibliothèque JSBN vulnérable depuis son introduction en 2011 jusqu’en 2014. Notez toutefois que certains projets de cryptomonnaies peuvent utiliser une version moins récente de la bibliothèque depuis un certain temps. Quant aux bugs qui affectaient Math.random dans les navigateurs courants, ils ont été corrigés depuis 2016 en modifiant les algorithmes de génération des nombres pseudo-aléatoires. Cela donne donc une période approximative de 2011 à 2015 pour la création des portefeuilles de cryptomonnaies potentiellement vulnérables.
Les chercheurs soulignent que BitcoinJS était très populaire au début des années 2010, il est donc difficile de dresser une liste complète des services qui auraient pu utiliser une version vulnérable de cette bibliothèque. Leur rapport dresse la liste des plateformes qu’ils ont pu identifier comme étant à risque :
- BitAddress: toujours opérationnelle.
- BitCore (BitPay) : toujours opérationnelle.
- Bitgo: toujours opérationnelle.
- info: toujours opérationnelle sous le nom de Blockchain.com.
- Blocktrail : redirige vers
https://btc.com
ouhttps://blockchair.com
. - BrainWallet : n’existe plus.
- CoinKite: vend désormais des portefeuilles matériels.
- CoinPunk : n’existe plus.
- Dark Wallet : redirige vers
https://crypto-engine.org
. - DecentralBank : n’existe plus.
- info (Block.io) : toujours opérationnelle.
- EI8HT: n’existe plus.
- GreenAddress : redirige vers
https://blockstream.com/green/
. - QuickCon : n’existe plus.
- Robocoin : n’existe plus.
- Skyhook ATM : redirige vers
https://yuan-pay-group.net
.
Outre les portefeuilles Bitcoin, les portefeuilles Litecoin, Zcash et Dogecoin présentent également un risque, car il existe aussi des bibliothèques basées sur BitcoinJS pour ces cryptomonnaies. Il semble logique de supposer que ces bibliothèques pourraient être utilisées pour générer des clés privées pour les portefeuilles de cryptomonnaies correspondants.
Le rapport d’Unciphered décrit une série d’autres subtilités liées à Randstorm. En résumé, les portefeuilles créés entre 2011 et 2015 à l’aide de la bibliothèque concernée peuvent être vulnérables à des degrés divers, selon les circonstances.
Comment se protéger contre les vulnérabilités Randstorm ?
Comme les chercheurs l’affirment à juste titre, il ne suffit pas de corriger la vulnérabilité dans le logiciel : il n’est pas possible de « corriger » les clés privées des propriétaires de portefeuilles et de les remplacer par des clés sécurisées. Ainsi, bien que les bugs aient été corrigés depuis longtemps, ils continuent de toucher les portefeuilles de cryptomonnaies créés lorsque les erreurs décrites ci-dessus affectaient la bibliothèque BitcoinJS. Les propriétaires de portefeuilles vulnérables doivent donc eux-mêmes prendre des mesures de protection.
Il est difficile de dresser la liste complète des plateformes de cryptomonnaies qui ont utilisé la bibliothèque vulnérable. Par conséquent, il vaut mieux être prudent et considérer tout portefeuille de cryptomonnaies créé en ligne entre 2011 et 2015 comme potentiellement dangereux (à moins d’être certain du contraire). Et bien sûr, plus le portefeuille est rempli, plus il est tentant pour les criminels.
La solution évidente (et unique) au problème consiste à créer de nouveaux portefeuilles de cryptomonnaies et à y transférer tous les fonds des portefeuilles potentiellement vulnérables.
Et puisque vous devez de toute façon le faire, il est logique de procéder avec la plus grande prudence cette fois-ci. La protection des cryptomonnaies est un processus en plusieurs étapes, c’est pourquoi nous avons élaboré pour vous une liste de contrôle complète contenant de nombreuses informations complémentaires, accessibles via les liens suivants :
- Découvrez en détail les principales menaces liées aux cryptomonnaies et les modes de protection.
- Découvrez les différences entre les portefeuilles de cryptomonnaies chauds et froids et les moyens les plus courants de les pirater.
- Utilisez un portefeuille matériel (froid) pour le stockage à long terme des principales ressources cryptographiques, et un portefeuille chaud avec un minimum de fonds pour les transactions quotidiennes.
- Avant de transférer tous les fonds de l’ancien portefeuille vers le nouveau, il faut équiper tous vos appareils d’une protection fiable . Elle protégera votre smartphone ou votre ordinateur des chevaux de Troie qui cherchent à voler mots de passe et clés privées ou contre les clippers qui substituent les adresses du portefeuille de cryptomonnaies dans le presse-papiers. Elle protégera aussi votre ordinateur des mineurs de cryptomonnaies malveillants et des accès à distance non autorisés.
- Ne stockez jamais une photo ou une capture d’écran de votre phrase secrète sur votre smartphone, ne publiez jamais votre phrase secrète dans les clouds publics, ne l’envoyez jamais par messagerie ou par email et ne la saisissez nulle part sauf pour récupérer une clé privée perdue.
- Conservez en toute sécurité votre clé privée et la phrase secrète à des fins de récupération. Pour cela, vous pouvez utiliser le Coffre-fort de protection de votre identité Kaspersky Premium, qui chiffre toutes les données stockées au moyen du chiffrement AES-256. Le mot de passe n’est stocké nulle part ailleurs que dans votre tête (à moins que, bien sûr, il se trouve sur un post-it collé à votre écran) et est irrécupérable, si bien que la seule personne ayant accès à vos documents personnels, c’est vous.
- Une autre option consiste à utiliser un portefeuille de cryptomonnaies froid, qui ne requiert pas de phrase secrète pour sauvegarder la clé privée. C’est ainsi que fonctionne le portefeuille matériel Tangem.