Que pouvons-nous apprendre en étudiant les hacks ? Révéler des informations sur les mouvements de confidentialité et de crypto-monnaie après le piratage DAO 2016
Le terme crypto-monnaie est presque devenu synonyme de piratage. Il semble que chaque semaine, il y ait des hacks époustouflants sur les échanges, les portefeuilles des utilisateurs individuels, les contrats intelligents et les chaînes de blocs publiques sur lesquelles ils reposent. Dans de nombreux cas, les vecteurs d’attaque sont évidents rétrospectivement : le code n’a pas été testé, les processus internes pour empêcher le phishing étaient inexistants, les normes de code de base non suivies, etc. L’étude des hacks eux-mêmes ne permettra souvent pas de glaner beaucoup d’informations intéressantes pour ceux qui sont déjà familiarisés avec pratiques de sécurité de base.
Mais chaque piratage crypto a deux composants principaux – il y a le piratage lui-même, puis les méthodologies par lesquelles le pirate et ses cohortes tentent d’encaisser leur butin volé. Pour les défenseurs de la vie privée, les tentatives faites pour anonymiser ces fonds sont des études de cas intéressantes sur les niveaux d’anonymat réalisables dans les réseaux publics de blockchain.
Étant donné que les fonds sont suivis de près par des agences gouvernementales et des entreprises hautement organisées et bien financées, ils offrent à la communauté l’occasion d’observer l’efficacité des différents portefeuilles de confidentialité impliqués. Si ces pirates ne peuvent pas rester privés, quelles sont les chances que les utilisateurs moyens à la recherche de confidentialité dans les réseaux publics puissent y parvenir ?
Le hack DAO 2016, un cas exemplaire
Lors de l’étude de ces hacks et des arrestations qui ont suivi, il devient clair que dans la majorité des cas, les pirates commettent des erreurs cruciales lorsqu’ils tentent d’anonymiser leur crypto-monnaie. Dans certains cas, les échecs sont la faute de simples erreurs de l’utilisateur. Dans d’autres cas, ils sont causés par des bogues dans le logiciel de portefeuille qu’ils ont utilisé ou par d’autres faux pas moins qu’évidents dans le processus de conversion de la crypto-monnaie en actifs du monde réel.
Récemment, un cas particulièrement intéressant, le piratage de DAO en 2016, a connu un développement significatif – un article d’enquête de Forbes a été publié qui identifie le pirate informatique présumé. Le processus par lequel cette personne a été identifiée offre un aperçu d’un portefeuille de confidentialité largement utilisé, Wasabi Wallet, et comment une mauvaise utilisation du logiciel peut conduire à une « démixion » des fonds du pirate informatique présumé.
Des erreurs critiques ont été commises
Quant à l’ordre des opérations, le premier geste du pirate a été de convertir une partie de ses fonds volés d’Ethereum Classic en Bitcoin. Le pirate a utilisé le Shapeshift pour exécuter l’échange, qui à l’époque fournissait un enregistrement public complet de toutes les transactions sur la plate-forme. De Shapeshift, une partie des fonds a été transférée dans Wasabi Wallet. A partir de là, les choses se gâtent.
Pour ceux qui ne sont pas familiers, CoinJoin est le surnom d’un protocole de construction de transaction spécial qui permet à plusieurs parties de regrouper leurs fonds dans une transaction importante dans le but de rompre le lien entre les fonds entrant dans le CoinJoin et les fonds sortant du CoinJoin.
Au lieu d’une transaction ayant un seul payeur et bénéficiaire, une transaction CoinJoin a plusieurs payeurs et bénéficiaires. Supposons, par exemple, que vous ayez un CoinJoin avec 10 participants – si le CoinJoin est correctement construit et que toutes les règles d’interaction sont correctement suivies, les fonds qui sortent du CoinJoin auront un ensemble d’anonymat de 10. c’est-à-dire l’un des 10 « sorties mixtes » de la transaction pourrait appartenir à l’un des 10 (ou plus) « intrants non mélangés » de la transaction.
Bien que CoinJoins puisse être un outil très puissant, il existe de nombreuses opportunités pour les participants de commettre des erreurs critiques qui dégradent considérablement ou compromettent entièrement la confidentialité qu’ils auraient pu obtenir grâce au CoinJoin. Dans le cas du prétendu hacker DAO, une telle erreur a été commise. Comme vous le lirez ensuite, il est possible que ce bogue soit une erreur de l’utilisateur, cependant, il est également possible qu’il y ait eu un bogue (corrigé depuis) dans Wasabi Wallet qui a conduit à cette défaillance de confidentialité.
Wasabi Wallet utilise le protocole ZeroLink, qui construit des CoinJoins avec des sorties mixtes de valeur égale. Cela signifie que tous les utilisateurs ne doivent mélanger qu’une quantité spécifiée et prédéterminée de Bitcoin. Toute valeur supérieure à ce montant qui entre dans le CoinJoin doit être renvoyée sous forme de Bitcoin non mélangé aux utilisateurs respectifs.
Si, par exemple, Alice a une seule sortie Bitcoin .15 et que le CoinJoin n’accepte que les sorties de valeur .1 Bitcoin, à la fin du CoinJoin, Alice aurait une sortie Bitcoin mixte .1 et une sortie Bitcoin non mélangée .05. Le .05 Bitcoin est considéré comme « non mélangé » car il peut être lié à la sortie originale d’Alice de .15. La sortie mixte ne peut plus être directement liée à l’entrée et aura un ensemble d’anonymat composé de tous les autres participants au CoinJoin.
Pour préserver la confidentialité de CoinJoin, il est impératif que les sorties mixtes et non mixtes ne soient jamais associées les unes aux autres. Dans le cas où ils sont accidentellement agrégés sur la blockchain bitcoin dans une seule ou un ensemble de transactions, un observateur peut utiliser ces informations pour retracer les sorties mixtes jusqu’à leur source.
Dans le cas du pirate informatique DAO, il semble que lors de l’utilisation de Wasabi Wallet, ils aient utilisé une seule adresse dans plusieurs CoinJoins ; dans un cas, l’adresse a été utilisée comme sortie de modification non mélangée, dans le second cas, elle a été utilisée comme sortie mélangée.
Il s’agit d’une erreur relativement inhabituelle dans le contexte d’un CoinJoin, car cette technique de culpabilité par association nécessite une transaction en aval des CoinJoins pour « fusionner » les sorties non mélangées et mélangées, en les reliant. Mais dans ce cas, aucune transaction au-delà des deux CoinJoins ne devait être analysée car la même adresse était utilisée de manière conflictuelle sur deux CoinJoins distincts.
Fondamentalement, cette possibilité existe en raison d’une décision de conception dans le logiciel Wasabi Wallet : Wasabi Wallet utilise un chemin de dérivation unique pour les sorties mixtes et non mixtes. Ceci est considéré mauvaise pratique. Il a été déclaré par un employé de Wasabi qu’il s’agissait de rendre la restauration de portefeuille compatible avec d’autres portefeuilles, cependant, BIP84 (qui est le schéma de dérivation Wasabi Wallet utilise) dispose d’un moyen standard pour reconnaître une voie de dérivation affectée aux sorties de modification.
Les échecs résultant de ce choix de conception sont plus visibles lorsqu’un utilisateur a deux instances de Wasabi Wallet en cours d’exécution en même temps tout en utilisant la même graine. Dans ce scénario, il serait possible que les deux instances sélectionnent la même adresse de cette manière conflictuelle lorsqu’elles tentent simultanément d’exécuter un mixage à partir de chaque instance. Ceci est mis en garde contre dans la documentation officielle. Il est également possible que des bogues connus dans le portefeuille Wasabi soient le coupable.
Plats à emporter et conclusions
Alors, qu’apprenons-nous de cela? Bien que ce bogue avec Wasabi ne soit pas tout à fait la fin de l’histoire, il a joué un rôle crucial dans la traque du pirate informatique présumé. Une fois de plus, notre conviction que la vie privée est difficile est réaffirmée. Mais en pratique, nous avons un autre exemple de l’importance de prévenir la contamination de la sortie lors de l’utilisation d’outils de confidentialité, et de la prudence avec laquelle le «contrôle des pièces» est requis par les utilisateurs et les logiciels. La question devient : quels types de protocoles de confidentialité sont conçus pour minimiser cette classe d’attaques ?
Une solution intéressante est un CoinSwap, où au lieu de fusionner les sorties en une grosse transaction, vous échangez les sorties avec un autre utilisateur. De cette façon, vous échangez des historiques de pièces, et non des historiques de pièces. Plus puissamment, si un CoinSwap est effectué dans le contexte hors chaîne (tel qu’il est implémenté par Mercury Wallet), il n’y a aucune sortie de changement non mélangée à traiter.
Bien qu’il existe des erreurs d’utilisateur possibles qui peuvent entraîner le « déséchange » d’un CoinSwap, ces erreurs sont sans doute beaucoup plus évidentes pour l’utilisateur final, car toute fusion de sorties d’une manière qui viole la confidentialité ne peut être effectuée qu’en mélangeant explicitement un a échangé la sortie avec une qui n’a pas encore été échangée, par opposition à la fusion de deux sorties qui sont déjà passées par CoinJoin, dont une seule est réellement mélangée.
Portefeuille Mercure est actuellement la seule installation CoinSwap hors chaîne disponible pour les utilisateurs finaux. Il permet aux utilisateurs de verrouiller leurs pièces dans un protocole de couche deux (connu sous le nom de statechain), puis d’échanger aveuglément leurs sorties avec d’autres utilisateurs de la statechain. C’est une technique très intéressante et qui mérite d’être expérimentée pour ceux qui souhaitent explorer de nouveaux outils de confidentialité avec des fonctionnalités intéressantes et des compromis acceptables.
Que pouvons-nous apprendre en étudiant les hacks ? Révéler des informations sur la confidentialité et les mouvements de crypto-monnaie après la première apparition du piratage DAO 2016 sur CryptoSlate.