Sur le modèle de sécurité des portefeuilles logiciels | registre

Sur le modèle de sécurité des portefeuilles logiciels | registre

Nœud source: 2671485

Nous pouvons distinguer deux types de portefeuilles courants : les portefeuilles logiciels et matériels. Ils remplissent la même fonction, mais d'une manière différente. Les portefeuilles logiciels sont considérés comme plus simples à utiliser : un seul programme suffit pour créer, valider et signer des transactions. Avec un portefeuille logiciel, il n'est pas nécessaire de créer la transaction sur le logiciel et de la confirmer sur un périphérique matériel.

Il y a deux semaines, Histoires interdites a dévoilé une attaque ciblée contre des milliers de personnes à travers le monde. Cette attaque exploitait des vulnérabilités sur Android et iOS, pour installer un logiciel espion développé par le groupe NSO : Pegasus. Ce malware est capable de surveiller toute l'activité de l'appareil, et d'exfiltrer des informations personnelles : SMS, conversations WhatsApp et Signal, appels téléphoniques, etc. Cet article explique comment, dans ces conditions, un tel malware serait capable d'extraire toutes les les secrets d'un portefeuille logiciel et les différences d'un point de vue de la sécurité entre les portefeuilles logiciels sur les téléphones mobiles et les ordinateurs de bureau.

Cet article se veut peu technique. Pour rester relativement simple, seules les fonctionnalités de base seront abordées.

Protéger les secrets

Qu'est-ce qui est stocké dans un portefeuille crypto ?

Les portefeuilles ne stockent pas réellement les crypto-monnaies des utilisateurs : ils ne stockent que les secrets, notamment les clés privées, qui permettent d'accéder aux crypto-monnaies et de pouvoir les dépenser. Ces clés privées sont majoritairement des clés privées ECC (elliptic curve cryptography) sur des courbes différentes selon la blockchain. Les courbes les plus courantes sont secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero), ou BLS12-381 (Ethereum 2).

Ces clés sont utilisées pour signer des transactions, et plus généralement pour interagir avec les actifs de la blockchain.

Le stockage de ces clés dépend du type de portefeuille : déterministe ou non. Un portefeuille Hiérarchique Déterministe (HD) permet la création d'un arbre de clés à partir d'un secret maître unique appelé la graine (cf BIP44). Cette graine est souvent issue d'une séquence mnémonique de 12, 18 ou 24 mots générés aléatoirement ou choisis par l'utilisateur (cf.BIP39). Ces mnémoniques permettent de limiter le nombre de clés à stocker : elles peuvent être recalculées à tout moment à partir de la graine. Les portefeuilles HD ne stockent que ce mnémonique ou la graine.

Les portefeuilles non déterministes génèrent une nouvelle clé pour chaque utilisation et doivent tous les stocker. Les portefeuilles non déterministes ne peuvent pas être facilement migrés vers un autre portefeuille car les sauvegardes ne sont pas compatibles.

Les principales caractéristiques de sécurité d'un portefeuille consistent à générer, stocker et utiliser correctement ces secrets. Il existe différents niveaux de sécurité contre différents types de menaces :

  • Protection contre les attaques de "femme de chambre maléfique" : Un attaquant ayant un accès temporaire au portefeuille ne doit pas pouvoir ajouter une porte dérobée à l'intérieur du portefeuille permettant de voler le code PIN ou le mot de passe protégeant les secrets.
  • Matériel cryptographique sécurisé : Les clés et les nonce générés par le portefeuille ne doivent jamais être prévisibles. De plus, la connaissance des secrets (à l'exception de la graine) générés à un moment donné ne doit pas permettre de prédire le secret qui sera généré dans le futur.
  • Protection au repos : Si un attaquant obtient des données persistantes d'un portefeuille logiciel, il ne doit pas être en mesure d'extraire les clés.
  • Protection lors d'une utilisation secrète : Lorsque le portefeuille est déverrouillé, les clés ne doivent pas être accessibles par un attaquant ou un malware.
Portefeuilles de matériel

Le modèle de sécurité d'un portefeuille matériel vise à parer à ces menaces de sécurité. Les portefeuilles matériels protègent contre les logiciels malveillants dès leur conception. Ce sont des appareils indépendants qui signent eux-mêmes des transactions. Les matériels cryptographiques restent toujours à l'intérieur de l'appareil et ne sont jamais envoyés à l'application logicielle avec laquelle ils communiquent. L'interface de communication est toujours simple ce qui réduit drastiquement la surface d'attaque. Il peut s'agir d'USB, Micro SD ou appareil photo + écran (via QR code), ou Bluetooth Low Energy.

De plus, les portefeuilles matériels intègrent un écran directement dans l'appareil permettant à l'utilisateur de vérifier les actions qu'il s'apprête à faire lorsqu'il interagit avec ses clés secrètes. Ces contrôles manuels sur les appareils sont une contre-mesure très efficace contre les logiciels malveillants sur l'ordinateur/le mobile. Là où des logiciels malveillants sur un ordinateur/appareil mobile pourraient accéder aux secrets (clés de départ ou privées) ou même échanger/modifier des adresses ou des montants lorsque l'utilisateur effectue une transaction, cela n'est pas possible avec un portefeuille matériel.

Les portefeuilles matériels sont également conçus pour se protéger contre les attaques de "mauvaises femmes malfaisantes" et contre un attaquant ayant un accès physique. Selon le portefeuille matériel, ils ont différents niveaux de sécurité, mais dans tous les cas, ils sont conçus pour se protéger contre ces menaces. Une description détaillée des modèles de menace Ledger Nano peut être trouvée ici.

Portefeuilles logiciels

Les portefeuilles logiciels classiques protègent les secrets avec des moyens classiques : des mécanismes de sécurité du système d'exploitation sur lequel ils s'exécutent et parfois un contrôle d'accès basé sur un code PIN ou un mot de passe.

Dans ce qui suit, les portefeuilles de bureau (Windows, macOS, Linux) et les portefeuilles mobiles sont pris en compte. Les principales différences entre eux reposent principalement sur les mécanismes de sécurité offerts par le système d'exploitation.

Portefeuilles logiciels sur un ordinateur

Plusieurs portefeuilles populaires, tels que Electrum, Exodus, Atomic ou Bitcoin core, fonctionnent sur des ordinateurs.

Sur un ordinateur, les mécanismes de sécurité offerts par le système d'exploitation pour isoler un processus de portefeuille des autres processus sont limités. La plupart des applications sont exécutées par le même utilisateur et les applications sont autorisées à lire les données d'autres applications.

La sécurité de ces portefeuilles logiciels repose principalement sur la sécurité du mot de passe qui les protège, et aussi sur le fait qu'aucun malware ne tourne sur l'OS (ce qui est assez difficile à garantir, voir l'actualité récente concernant Pegasus).

La plupart du temps, la graine est stockée dans un conteneur chiffré protégé par un mot de passe. Une attaque simple consiste, pour un malware ou un outil d'administration à distance, à récupérer ce conteneur chiffré et à l'envoyer à l'attaquant. Ensuite, le mot de passe peut être soit forcé brutalement, soit obtenu en utilisant un keylogger.

Dans un scénario où un attaquant ne parvient qu'à accéder au conteneur chiffré (l'attaquant trouve une clé USB contenant un portefeuille, ou installe un logiciel malveillant sur un ordinateur, mais la victime n'ouvre jamais son application de portefeuille), l'attaquant doit forcer brutalement le mot de passe.

La plupart des mots de passe sont mauvais. Des milliards de mots de passe ont été divulgués sur le Web et de nombreuses personnes ont tendance à réutiliser leurs mots de passe pour plusieurs services. Des outils prêts à l'emploi vous permettent de récupérer les mots de passe des portefeuilles de crypto-monnaies, tels que btcrecover or hashcat. Les mots de passe peuvent être complexes, mais derrière chaque portefeuille il y a de l'argent réel, donc les attaquants n'hésiteront pas à investir des ressources pour casser ces mots de passe.

Deux principes de sécurité de base pour protéger vos mots de passe sont d'utiliser un gestionnaire de mots de passe et de ne jamais réutiliser votre mot de passe à des fins différentes.

Les menaces les plus préoccupantes pour les portefeuilles logiciels sont les logiciels malveillants et les voleurs dédiés, développés spécifiquement pour drainer vos fonds. De tels logiciels malveillants, tels que KPOT ou ÉlectroRAT, n'ont même pas besoin de brutaliser votre mot de passe : ils peuvent le capturer directement lorsque vous le saisissez, décrypter les données de configuration du portefeuille et exfiltrer la graine.

Voici une application jouet, développée pour cet article, qui cible le portefeuille Electrum (bien qu'il aurait pu s'agir d'un autre portefeuille logiciel). Il simule un logiciel malveillant qui vole le mot de passe de l'utilisateur lorsqu'il est saisi par la victime. Le mot de passe est ensuite utilisé pour déchiffrer les données du portefeuille et pour afficher la graine :

Comme vous le voyez, même si le mot de passe est complexe, l'application est capable de le récupérer car elle le renifle directement en mémoire.

Cet exemple est très similaire au récent Logiciel malveillant .SCR campagnes utilisées pour voler des crypto-monnaies. Les criminels ont utilisé des techniques d'ingénierie sociale pour inciter les utilisateurs à télécharger un économiseur d'écran malveillant. Cet économiseur d'écran volait en fait des informations à la victime de l'ordinateur, y compris des informations sur le portefeuille et l'échange de crypto-monnaie.

Pour conclure sur les portefeuilles logiciels fonctionnant sur des ordinateurs :

  • Dans la plupart des cas, les portefeuilles logiciels exécutés sur des ordinateurs protègent la graine de l'utilisateur à l'aide d'un mot de passe.
  • Le contrôle d'accès à ces fichiers de portefeuille repose principalement sur la sécurité de l'ordinateur. En pratique, il est difficile de protéger les ordinateurs contre les logiciels malveillants, et à mesure que les crypto-monnaies se généraliseront, les attaques contre les portefeuilles deviendront de plus en plus sophistiquées.
  • Utiliser de tels portefeuilles logiciels pour sécuriser les actifs numériques n'est pas une bonne idée. Tout logiciel malveillant spécialisé pourra obtenir les fichiers du portefeuille et trouver les mots de passe hors ligne, ou obtenir le mot de passe via un enregistreur de frappe.
Portefeuilles logiciels sur un smartphone

Les smartphones Android et iOS offrent par défaut des fonctionnalités de sécurité qui ne sont pas largement utilisées sur les systèmes d'exploitation de bureau.

Les systèmes d'exploitation mobiles offrent une protection des applications et des données utilisateur. En particulier, les bacs à sable des applications sont obligatoires pour toutes les applications. Ce n'est pas le cas, par exemple, sur Windows : par défaut, n'importe quelle application peut accéder aux données de l'utilisateur.

Ainsi, une application malveillante ne peut pas lire les données d'une autre application, sauf si :

  • Il trouve une vulnérabilité sur cette application.
  • Soit il parvient à élever les privilèges, par exemple en exploitant une vulnérabilité du noyau lui permettant d'obtenir un accès root au système.

Malheureusement, de telles attaques existent. Ils sont beaucoup plus faciles sur les versions obsolètes d'Android et d'iOS, et sur les appareils plus anciens ou bon marché où le code tiers est souvent moins sécurisé.

Sur un système d'exploitation à jour, ces attaques sont plus difficiles mais pas impossibles à distance. Par exemple, Ian Beer a montré un attaque zéro clic extrêmement impressionnante sur iOS 13.5 en décembre 2020. Guang Gong a présenté une chaîne d'exploitation pour rooter à distance une large gamme d'appareils Android basés sur Qualcomm en juin 2020. Et, il y a deux semaines, Histoires interdites a dévoilé que NSO Group utilisait une chaîne d'exploitation pour cibler les appareils iOS et Android récents utilisant des vulnérabilités 0-day.

Les attaquants moins sophistiqués peuvent utiliser des vulnérabilités locales leur permettant d'extraire les données du portefeuille d'une application malveillante. Les courtiers en vulnérabilité tels que Zerodium paient jusqu'à 200,000 $ pour une élévation de privilèges pour rooter sur Android et iOS, mais jusqu'à 1,500,000 XNUMX XNUMX $ pour les attaques à distance.

Nous avons étudié quelques portefeuilles Android/iOS. Leur sécurité dépend de l'application elle-même, mais aussi des fonctionnalités de sécurité du système d'exploitation sous-jacent. Bien sûr, lorsque la sécurité du système d'exploitation est mise en échec, l'application n'est plus sécurisée

Deux méthodes de protection de la semence sont couramment utilisées :

  • protection par mot de passe – les données du portefeuille sont protégées par un mot de passe saisi par l'utilisateur. Le design est le même que pour les portefeuilles de bureau. En pratique, les données sont plus difficiles à extraire que d'un ordinateur, car récupérer les données d'une application malveillante est techniquement plus difficile, pour les raisons expliquées ci-dessus. Cependant, récupérer le mot de passe une fois les données volées est en pratique plus facile : la saisie de mots de passe complexes sur les téléphones portables est fastidieuse, les utilisateurs ont donc tendance à choisir des mots de passe plus simples. De plus, les mécanismes de dérivation de clé (utilisés pour créer une clé à partir d'un mot de passe) sur les appareils mobiles sont généralement plus simples à casser, car ils sont souvent plus légers pour des raisons de performances.
  • Coinomi et Metamask sont des exemples de tels portefeuilles.

Dans la vidéo suivante, nous montrons une autre application de jouet développée pour cet article. Il s'agit d'un malware déguisé en un faux widget de ticker Bitcoin. Les logiciels malveillants exploitent une vulnérabilité connue sur un appareil non corrigé pour obtenir un accès root sur l'appareil et pour exfiltrer la graine chiffrée vers un serveur distant. Le serveur force ensuite brutalement le mot de passe pour déchiffrer la graine.

Cette méthode n'est pas spécifique à un wallet. Il peut être (plus ou moins) facilement adapté à n'importe quel portefeuille protégé par mot de passe. Voici le même exemple avec Coinbase Wallet :

[Contenu intégré]

  • Sécurité basée sur Android Keystore (ou iOS Keychain) – Dans ce cas, les données du portefeuille sont cryptées avec une clé de cryptage stockée dans le Keystore Android (iOS Keychain). Ces services ont été initialement conçus pour stocker en toute sécurité des clés de chiffrement, et de nombreuses applications les utilisent pour générer une clé qui chiffrera toutes les données utilisateur sensibles. Les applications utilisant le Keystore implémentent le mécanisme suivant :
    • L'application demande au Keystore de générer une clé de chiffrement pour un identifiant donné. Keystore génère la clé et la stocke en toute sécurité.
    • Lorsque l'application souhaite chiffrer ou déchiffrer un blob, elle envoie le blob avec l'identifiant de la clé au Keystore.
    • Enfin, le magasin de clés vérifie si l'application a réellement le droit d'utiliser cette clé et renvoie ensuite les données de sortie à l'application.

Avec ce modèle, l'application ne peut pas connaître la valeur de la clé mais peut l'utiliser. Il est également possible d'associer des contrôles d'accès supplémentaires à la clé : par exemple, l'accès à la clé peut être conditionné à une authentification de l'utilisateur (demander un code PIN ou un schéma de déverrouillage).

Ce mécanisme peut fournir une sécurité supplémentaire par rapport à la protection par mot de passe. En effet, sur les téléphones récents, le Keystore est adossé à un Trusted Execution Environment (TEE), ou parfois un Secure Element.

Cela signifie qu'un attaquant disposant des privilèges root ne pourra pas extraire les clés de chiffrement du magasin de clés. Néanmoins, ils pourront utiliser le Keystore comme oracle de déchiffrement, et chiffrer ou déchiffrer toutes les données qu'ils souhaitent.

Keystore propose des services de chiffrement, mais aussi de signature. Alors, un portefeuille pourrait-il protéger ses clés de chiffrement, les rendant difficiles à extraire ? La réponse est malheureusement non : les portefeuilles logiciels n'utilisent pas Keystore pour signer les transactions ainsi que les clés privées sont toujours manipulées en clair par l'application.

C'est pour une raison simple : KeyStore et KeyChain offrent des services de signature et de chiffrement génériques, mais ne prennent pas en charge la cryptographie utilisée dans les crypto-monnaies. Par exemple, le KeyStore implémente ECDSA Signature mais uniquement sur les courbes NIST définies dans FIPS 186-4 (P-224, P-256, P-384 et P-521). Bitcoin utilise une autre courbe, secp256k1, qui n'est pas encore pris en charge.

Pour résumer, Keystore et Keychain sont de bons services pour protéger clés secrètes et privées. Ils peuvent offrir une certaine sécurité en cryptant les données sensibles : certaines classes de vulnérabilités (lecture arbitraire de fichiers, par exemple) seront traitées par le cryptage Keystore. Cependant, si une élévation des privilèges root n'est pas suffisante pour extraire les valeurs de clé d'un magasin de clés basé sur le matériel, il suffit de déchiffrer les données sensibles. Un attaquant capable d'instrumenter l'application est capable de récupérer ses secrets.

Pour conclure sur les portefeuilles mobiles :

  • Le mécanisme d'isolation entre les applications fourni par iOS/Android relève la barre de la sécurité par rapport à un portefeuille logiciel exécuté sur un ordinateur. L'attaquant a d'abord besoin d'une élévation de privilèges pour accéder aux données de l'application. Ceci est faisable sur des appareils obsolètes. Des attaquants qualifiés (Ian Beer l'a fait en 6 mois seulement mais… c'est Ian Beer) peuvent aussi le faire sur des appareils récents et patchés.
  • Les services de protection de clés (KeyStore, KeyChain) pourraient ajouter une couche de sécurité supplémentaire pour protéger les secrets au repos. Néanmoins, comme ils ne prennent pas en charge les algorithmes cryptographiques pour les applications de crypto-monnaie, la clé peut toujours être extraite.
  • Dans tous les cas, un attaquant disposant d'un accès root peut soit récupérer la graine au repos, lorsqu'elle est utilisée, soit tirer parti des droits de l'utilisateur pour vider le portefeuille en utilisant le portefeuille logiciel comme oracle.

Voici un dernier exemple d'un logiciel espion jouet ciblant le portefeuille Blockchain.com (bien que cela puisse être effectué sur de nombreux autres portefeuilles tout aussi facilement). Il est installé à distance et surveille le portefeuille. Une fois que l'utilisateur s'est authentifié à l'aide de son empreinte digitale, la clé de cryptage est déverrouillée et les données du portefeuille sont décryptées. Le logiciel espion instrumente l'application pour récupérer cette clé de cryptage. Il exfiltre ensuite la clé et les données du wallet vers un serveur distant :

[Contenu intégré]

Conclusion

En conclusion, les portefeuilles logiciels ont différents niveaux de sécurité. Cependant, leur modèle de menace ne couvre pas le cas d'un logiciel malveillant s'exécutant sur le système d'exploitation avec une élévation de privilèges. C'est par conception : l'application de portefeuille ne peut pas être plus sécurisée que le système d'exploitation sur lequel elle s'exécute.

  • Le mécanisme d'isolation entre les applications fourni par iOS/Android relève la barre de la sécurité par rapport à un portefeuille logiciel exécuté sur un ordinateur. L'attaquant a d'abord besoin d'une élévation de privilèges pour accéder aux données de l'application.
  • Les services de protection de clés (KeyStore, KeyChain) pourraient ajouter une couche de sécurité supplémentaire pour protéger les secrets au repos. Néanmoins, comme ils ne prennent pas en charge les algorithmes cryptographiques pour les applications de crypto-monnaie, les clés doivent être manipulées directement depuis l'application, elles offrent donc une protection limitée.
  • Dans tous les cas, un attaquant disposant d'un accès root, peut soit récupérer la graine au repos, lorsqu'elle est utilisée, soit tirer parti des droits de l'utilisateur pour vider le portefeuille en utilisant le portefeuille logiciel comme oracle.

Horodatage:

Plus de Ledger