Cryptojacking : Quand les attaquants en veulent à votre CPU

Blockchain, crypto-monnaies, Bitcoin, Ethereum, ICO, minage, Smart-Contracts, etc. Les crypto-monnaies et crypto-actifs ont régulièrement fait l’actualité en 2017 et un intérêt croissant du grand public pour ces technologies a été observé. Cet engouement est avant tout explicable par la forte augmentation du cours du Bitcoin attirant les spéculateurs.

A l’instar du grand public, les criminels ont également profité de l’essor des crypto-actifs en 2017.  Un rapport de Symantec daté du 21 mars 2018 révèle une augmentation de 8500% en 2017 des détections de cryptominers par les équipements de Symantec (Antivirus). [1]

Pour simplifier, un cryptominer est un programme fournissant de la puissance de calcul pour assurer le fonctionnement d’une blockchain [2]. La majorité des crypto-actifs récompense les mineurs afin de rendre attractif le minage nécessaire au fonctionnement des blockchains. Une des principales préoccupations des personnes minant des crypto-actifs est d’obtenir une rémunération supérieure au coût du matériel et de son fonctionnement (consommation électrique).

Cet écosystème profite également à certains attaquants qui cherchent à détourner des équipements informatiques (hijacking [3]) pour miner des crypto-actifs. Les coûts du minage se retrouvent supportés par les victimes, à leur insu. Ce type d’attaque est appelé cryptojacking.

L’intérêt croissant des attaquants pour le cryptojacking est à mettre en perspective avec l’envolée du prix des crypto-actifs. Le graphique suivant représente le prix du bitcoin en dollars au cours de l’année 2017 [4] :

cours bitcoin 2017

source : https://coinmarketcap.com/currencies/bitcoin/

Attaques identiques, finalités différentes

Les vecteurs d’infections communément utilisés par les autres menaces (ransomwares, botnets, vols de données) sont également exploités par les cryptominers.

Les principales attaques sont les suivantes :

L’exploitation d’un défaut de configuration

En 2016, le botnet Mirai [5] [6] a infecté plus de 600 000 équipements informatiques, essentiellement des objets connectés, en utilisant les identifiants et mots de passe par défaut de ces équipements.

L’exploitation de vulnérabilités connues

A l’instar du ransomware Wannacry [7], le code d’exploitation EternalBlue affectant le protocole SMBv1 (MS17-010) est utilisé par certains cryptominers pour se propager [8].

Le recours au phishing et spearphishing

Les campagnes de phishing ou spearphishing [9] consistent à exploiter une faille humaine (Ingénierie sociale) souvent dans un but malveillant lucratif (vols d’informations personnelles, compromissions de postes utilisateurs). Pour la propagation de malwares, les attaquants envoient un message (par email par exemple) incitant le destinataire à exécuter une charge malveillante. Une des approches préférées des attaquants depuis presque 20 ans est d’embarquer cette charge dans un document Microsoft Office. L’exécution du code malveillant intervient au moment de l’activation des Macros du document.

L’utilisation d’exploit kits

Un exploit kit est une page Web malveillante compilant des codes d’exploitation de vulnérabilités souvent récentes permettant la compromission des ordinateurs des visiteurs de la page infectée. Ces codes d’exploitation se concentrent sur les technologies les plus vulnérables des navigateurs Web comme Adobe Flash, Java, Microsoft Silverlight [10].

La compromission d’un équipement par un cryptominer peut avoir des conséquences néfastes sur le réseau d’une entreprise avec des pertes de disponibilité, une augmentation de la facture d’électricité ou de la facture cloud dans le cas de serveurs virtuels facturant la consommation CPU (par exemple Amazon Web Services).

Vive le JavaScript !

En plus des menaces traditionnelles, les attaquants ont exploité en 2017 une nouvelle source de revenus. Elle repose sur le détournement de la puissance de calcul autorisé par un navigateur lors de la consultation d’une page web pour miner des crypto-actifs.

Concrètement, le code JavaScript malveillant permettant le minage d’une crypto-monnaie communique avec un pool de minage. Ce type de service permet de mutualiser les calculs entre les mineurs et d’augmenter ainsi la rentabilité. Sans cette mutualisation des ressources, le minage de crypto-monnaies serait tout simplement impossible.

Le principal pool de minage utilisé par les mineurs JavaScript est le site CoinHive [11], qui représente 92% du marché [12]. Ce service permet de miner la monnaie Monero [13]. Les deux principaux avantages de cette crypto-monnaie sont l’anonymat des transactions et l’algorithme de minage, favorisant une décentralisation des mineurs. En effet, l’algorithme CryptoNight réduit l’avantage des GPU sur les CPU [14]. Sans ce type d’algorithme, l’essentiel du minage serait effectué par des ordinateurs dédiés à cette tâche (ASIC) et le minage en JavaScript ne serait pas économiquement profitable, voire impossible.

Plusieurs scénarios peuvent expliquer la présence de scripts de minage JavaScript sur une application Web :

  • L’administrateur peut volontairement intégrer un script de minage à son application Web. Le 17 septembre 2017, le site The Pirate Bay [15] a mis en place le mineur CoinHive sans recueillir le consentement des utilisateurs.
  • La découverte et l’exploitation d’une vulnérabilité de type Cross-site scripting stockée (XSS stored) [16] sur une application permettent à un attaquant d’injecter du code JavaScript dans une page Web. Les visiteurs de la page impactée exécutent le code pouvant contenir un mineur JavaScript injecté par l’attaquant.
  • Les sites utilisant le protocole HTTP ne peuvent pas garantir l’intégrité des données envoyées aux utilisateurs, par conséquent, un attaquant en coupure sur le même réseau que la victime (Man In The Middle) peut modifier le contenu des pages envoyées par le serveur en y ajoutant par exemple un cryptominer. Ce scénario a été observé sur le réseau Wifi public d’un Starbucks de Buenos Aires fin 2017 [17].

Face à ces différentes attaques, des actions peuvent être entreprises pour diminuer les risques.

Nous vous présentons quelques recommandations pour se protéger des cryptominers et des malwares en général.

  • Appliquer régulièrement les mises à jour de sécurité. L’abonnement aux bulletins de sécurité des éditeurs est une bonne pratique pour réagir rapidement lors de la publication de nouvelles vulnérabilités.
  • Durcir les configurations des services et applications. Supprimer ou désactiver les comptes inutilisés, changer les mots de passe par défaut, mettre en place une politique de mot de passe robuste, des protections antibruteforce, etc.
  • Chercher à réduire au maximum la surface d’attaque (VLAN d’administration, filtrages IP, VPN, etc.)
  • Durcir les postes utilisateurs. Interdire l’installation d’applications et d’extensions de navigateur non contrôlées par l’entreprise.
  • Sensibiliser les collaborateurs aux bonnes pratiques de sécurité (choix du mot de passe, détection des tentatives de phishing, etc.)

Voici quelques recommandations supplémentaires spécifiques au cryptojacking Javascript :

  • Dans l’idéal, il est recommandé de bloquer par défaut le JavaScript et de se constituer une liste blanche de sites approuvés. L’extension NoScript [18] pour le navigateur Firefox répond à cette problématique.
  • Une approche plus user friendly serait d’autoriser par défaut l’exécution du JavaScript et de bloquer les scripts connus comme malveillants. L’utilisation d’une extension comme uBlock Origin [19] bloque la plupart des domaines nuisibles, dont les cryptominers.
  • Utiliser un VPN de confiance lors d’une connexion à un réseau « public » (WIFI d’un café, réseau semi-public d’une université, etc.). De manière générale, être extrêmement vigilant lorsque l’on navigue sur des sites utilisant le protocole HTTP (absence du cadenas vert).

Afin d’identifier les risques réalistes de compromission d’une application ou d’un réseau interne, il est judicieux de recourir à des audits intrusifs ou tests d’intrusions. Ce type d’audit permet d’identifier les scénarios d’attaques possibles sur un périmètre à un instant t.

[1] https://www.symantec.com/about/newsroom/press-releases/2018/symantec_0321_01

[2] https://fr.wikipedia.org/wiki/Blockchain

[3] https://fr.wikipedia.org/wiki/Hijacking

[4] https://coinmarketcap.com/currencies/bitcoin/

[5] https://fr.wikipedia.org/wiki/Mirai_(logiciel_malveillant)

[6] https://kumarde.com/papers/understanding_mirai.pdf

[7] https://fr.wikipedia.org/wiki/WannaCry

[8] https://blog.trendmicro.com/trendlabs-security-intelligence/cryptocurrency-miner-uses-wmi-eternalblue-spread-filelessly/

[9] https://fr.wikipedia.org/wiki/Spear_phishing

[10] https://www.trendmicro.com/vinfo/us/security/definition/Exploit-Kit

[11] https://krebsonsecurity.com/2018/03/who-and-what-is-coinhive/

[12] https://arxiv.org/pdf/1803.02887.pdf

[13] https://fr.wikipedia.org/wiki/Monero

[14] https://cryptofr.com/topic/1097/qu-est-ce-que-monero

[15] https://www.theguardian.com/technology/2017/sep/27/pirate-bay-showtime-ads-websites-electricity-pay-bills-cryptocurrency-bitcoin

[16] https://fr.wikipedia.org/wiki/Cross-site_scripting

[17] https://twitter.com/imnoah/status/936948776119537665

[18] https://noscript.net/

[19] https://github.com/gorhill/uBlock

Je partage

Derniers articles

Illustration de sécurité WordPress avec logo central et éléments numériques de sécurité

Renforcer la sécurité WordPress, du développement des plugins à la configuration serveur

Il y a peu, dans le cadre de recherches sur des plugins WordPress, notre pentester Vincent Fourcade a découvert une injection de code, côté client, dans un module du célèbre CMS. Celle-ci fut vérifiée et validée par les équipes de WPScan. Aujourd’hui, une CVE lui a été attribuée. L’occasion de revenir aujourd’hui sur la sécurité, au sens large, dans le CMS WordPress, que ce soit au niveau de la couche applicative, de la configuration du serveur ou du bureau. C’est parti !

Lire l'article

Analyse des Métriques XSS : comprendre l’Impact des injections de code côté client

Lors des tests d’intrusion, l’injection de code côté client est généralement plus aisée à découvrir qu’une injection côté serveur. Le nombre de paramètres dynamiques transitant du back au front, la difficulté d’échapper correctement à l’entrée et à la sortie et la multitude d’encodage liés à l’affichage peuvent être des vrais casse-têtes pour qui souhaite faire la chasse à la XSS. Le JavaScript malveillant semble ainsi avoir de beaux jours devant lui. Cependant, il n’est pas rare qu’à l’issu de l’audit, la criticité d’une telle injection découle directement de la configuration des cookies présents sur l’application. En effet, l’absence de l’attribut HttpOnly majore irrémédiablement les risques liés à ce type d’attaque. Néanmoins, cela signifie-t-il que la présence de cet attribut doive absolument amenuiser la criticité d’une injection ?

Lire l'article