Détection et analyse de botnets grâce à des honeypots

Analyse des résultats

Les pots de miel mis en place, il faut maintenant attendre des attaques et analyser les résultats de ces dernières. Cette partie décrit dans un premier temps comment retrouver et surveiller des botnets à travers les binaires ou scripts récoltés sur les honeypots puis décrit les analyses et les actions enregistrées sur les botnets surveillés dans un second temps.

Analyse des binaires ou scripts

La mise en place des honeypots décrite dans la section précédente a permis de récolter sur deux semaines :

L'analyse des requêtes web malveillantes peut permettre de trouver des vulnérabilités non connues publiquement (0day) dans des applications web et de connaitre les mots clés utilisés (dork) dans les moteurs de recherche pour tomber sur des sites vulnérables.

La récupération des sites hébergeant du contenu malveillant peut être utilisée pour étoffer les listes de sites dangereux comme celles de Google. Les attaques sur Nepenthes peuvent également révéler de nouvelles techniques d'exploitation de vulnérabilités (celles qui passent au travers du DEP mis en place sous Windows) ou des vulnérabilités non connues dans les services Windows.

L'analyse des binaires et des scripts peut être utilisée pour récupérer des adresses de botnets, ce qui est justement ce qui nous intéresse.

Analyse des scripts

Grâce à webtrap, une trentaine de scripts PHP ou Perl ont pu être récupérés. L'analyse de ces derniers est plus ou moins simple dans le sens où nous disposons des sources de ces scripts. Ainsi il suffit de connaitre ces deux langages pour déterminer les actions des scripts et récupérer des adresses de botnets.

Par exemple dans le bout de code suivant tiré d'un script écrit en Perl, nous retrouvons l'adresse d'un serveur IRC irc.byroe.net ainsi que le channel #Dragon_fly auquel le robot se connectera. C'est à travers ce serveur IRC que le pirate à la tête du botnet, nommé kunci, passera ces commandes aux robots.

(...)
##[ KONFIGURASI IRC ]##
my @servers = ("irc.byroe.net");
my %bot     = (
  nick    => "good[".int(rand(100))."]",
  ident   => "good".int(rand(100)),
  chan    => ["#Dragon_fly"],
  server  => $servers[rand(scalar(@servers))],
  port    => "6667"
);

my %boss = (
Dragon_fly => {
pass   => "kunci",
status => "admin",
cryptz =>  0,
login  => 0
},

Parfois, une couche d'obfuscation est rajoutée au code du script avec par exemple l'utilisation d'une chaine gzippée, encodée en base64 et chiffrée par substitution monoalphabétique (rot13). Le pirate dans le script décode la chaine en base64, procède à la substitution monoalphabétique rot13 puis dé-gzippe la chaine avant de la passer à la fonction PHP eval() pour que le code PHP présent à l'intérieur de la chaine soit exécuté.

(...)
eval(gzinflate(str_rot13(base64_decode('FZzHruPQlVJ/xTO7wQFmTxs2mKPEHCcN5pwzv771d0OFbQOJvL...))));
(...)

Pour étudier le script, il suffit de remplacer l'appel à eval() par un simple print() pour afficher le code qui devrait être exécuté. Cette technique mise en place par les pirates est surtout utilisée pour évader les détecteurs d'intrusion tels que les IPS ou les WAF.

L'analyse des binaires

L'analyse des binaires est un sport plus difficile qui demande beaucoup de temps et de patience. Cependant le jeu en vaut la chandelle puisque c'est souvent dans les binaires que l'on retrouve les choses les plus intéressantes.

Pour analyser un binaire, qu'il soit pour windows (PE), GNU/Linux ou autres (ELF), nous avons deux méthodes connues.

La première méthode est de désassembler le binaire et de retracer le chemin de son exécution en décodant une à une les instructions assembleurs et en faisant attention aux techniques d'obfuscation, de chiffrement... C'est la méthode la plus fiable mais également la plus contraignante dans le sens où elle demande beaucoup de compétences et de temps.

La seconde méthode est d'exécuter le binaire dans un environnement restreint, cloisonné et sécurisé et de tracer toutes ses actions. L'environnement, appelé sandbox, est généralement un système virtualisé auquel nous émulons l'accès au réseau (fausses réponses aux requêtes DNS, HTTP) et aux disques (arborescence virtuelle). Dans le cas d'analyse de malware, il est impératif d'avoir un environnement le plus proche posible d'un environnement normal et réel pour que le binaire n'arrête pas son exécution trop prématurément ou réussit à détecter la sandbox. Plusieurs éditeurs antivirus proposent gratuitement d'exécuter et de tracer des binaires à travers leur envrionnement restreint. Même si cette technique donne des résultats assez limités dans le sens où l'exécution du binaire s'arrête généralement assez tôt, il est néanmoins possible de récupérer les adresses de botnet en regardant les requêtes DNS ou les tentatives de connexions effectuées.

Analyse du binaire dans une sandbox

La capture précédente montre le résultat d'une analyse de binaire dans la sandbox proposée par la société threatexpert. On peut voir que le binaire tente de réaliser une connexion sur le serveur irc bul.panjsheri.com sur le port 1234 et de joindre le salon de discusion #po#...

Une autre méthode très originale et nettement plus performante est la méthode qui consiste à se connecter sur le serveur de contrôle du botnet et de faire chanter le pirate à la tête du botnet afin qu'il donne les sources des ses robots. Cette technique a été découverte lors de l'infiltration d'un botnet comme nous pouvons le voir sur le log ci-dessous où sadkjas est le pirate à la tête du botnet et Pig est la personne qui veut les sources des robots utilisés par sadkjas.

 just upload the source of your bot and i will remove your net from the blog
<@sadkjas> what blog?
<Pig> http://XXX.blogspot.com I post every net there and after this they are stealed or closed
<Pig> more then 1000 people per day visit the blog lol
<Pig> and they are allready here some of them
<Pig> look this
<Pig> http://67.223.239.32/webalizer/.imbot.zip
<@sadkjas> remove from there
<@sadkjas> :)
<@sadkjas>

Pig possède un blog sur lequel il poste les adresses de tous les botnets qu'il découvre. Il demande les sources du botnet aux pirates et en échange il propose de retirer l'adresse de leur botnet de son blog. Cette méthode fonctionne très bien dans le sens où les pirates préfèrent fournir les sources de leur botnet au lieu de risquer de se faire démasquer ou piquer leur botnet...

Infiltration et analyse des botnets

Une fois les adresses de botnets récupérées, leur infiltration permet de savoir exactement ce qui est réalisé sur le botnet. En effet, même si chaque botnet possède son propre lot de commandes, il faut savoir que toutes ces commandes ne sont pas utilisées par les pirates et que certaines commandes sont rajoutées dynamiquement dans le bot après que le pirate se soit assuré que la machine n'est pas un leurre.

Deux techniques très proches peuvent être utilisées pour infiltrer un botnet basé sur IRC. La plus simple consiste à se connecter directement sur le salon de discusion du bot en passant par un réseau anonyme comme TOR ou un proxy pour masquer son adresse IP. Le but du jeu étant de se faire passer pour une machine vulnérable, il est important de changer la configuration de son client IRC (nom d'utilisateur, ident, version) pour qu'elle se rapproche de celle des robots.

La deuxième méthode d'infiltration est plus poussée et plus efficace que la précédente. Elle consiste, dans le cas d'un script, à modifier les sources du robot pour le rendre inoffensif. Cela consiste à modifier toutes les commandes du robot par un temps d'attente tout en gardant les messages de retour quite à forger des messages aléatoires. Par exemple, dans le cas de la commande qui demande un scan de port TCP sur une adresse IP, on remplace la boucle qui réalise les connexions sur chaque port TCP de l'adresse IP par un sleep() plus ou moins grand puis on retourne un message disant que les ports 80, 22, 443 sont ouverts ou que le scan a échoué. En plus de cela, on modifie le script pour enregistrer toutes les actions effecutées sur le botnet.

Cette dernière technique est très performante, il est très difficile au pirate de détecter le leurre. En revanche il faut faire très attention de ne pas oublier de modifier certaines commandes comme celles qui permettent au pirate d'injecter des commandes shells ou un autre script à travers un eval().

Ces deux techniques sont applicables aux binaires mais il faut au préalable analyser toutes les commandes disponibles sur le robot afin de pouvoir les émuler dans un script.

Analyse des actions

Une fois les botnets infiltrés, il ne suffit plus qu'à attendre que les pirates envoient des commandes aux robots. Cette section résume les actions les plus intéressantes qui ont été enregistrées sur les botnets étudiés.

La propagation

L'étape, la plus importante, pour assurer le cycle de vie du botnet et l'agrandir est la propagation. En effet, lorsque les robots n'ont rien de particulier à faire, ils tentent de se propager par différents moyens qui sont en autres :

L'exploitation de vulnérabilité comme celle utilisée par les vers blaster (DCOM) ou sasser (LSASS) et l'exploitation de remote file inclusion, une faille très présente dans les applications écrites en PHP, sont les deux méthodes de propagation priviligiées par les pirates. En effet, elles ne requièrent aucune intéraction de la part de l'utilisation et du pirate, tout est automatisé. Cependant comme ces deux méthodes sont activement utilisées par l'ensemble des botnets et comme ils exploitent généralement des failles connues (machines patchées), le rendement de nouveaux robots n'est pas assez élevé et les pirates ont du inventer de nouvelles techniques de propagation plus ou moins originales comme l'ajout du botnet dans les partages peer to peer de la machine infectée...

Vol de numéro de carte bleue

De nombreux pirates s'amusent avec des botnets dans l'unique but de réaliser du profit ainsi la plupart des botnets sont dotés d'actions permettant aux pirates de gagner de l'argent. Parmi ces actions, la plus dangereuse est celle qui permet de récolter des numéros de carte bleue sur la machine infectée. Pour cela, le programme scanne la base de registre, le disque dur et écoute le réseau à la recherche de motif correspondant à un numéro de carte bleue. Dès qu'un motif est trouvé, il est automatiquement envoyé aux pirates comme nous pouvons le voir sur la capture suivante.

Vol de numéro de carte bleue

Certains robots implémentent également la possibilité pour le pirate de faire un achat fictif sur un site d'e-commerce ou une banque en ligne dans l'unique but de tester la validité du numéro de carte bleue.

Teste de numéro de carte bleue

Envoi de spam

Selon les dernières études de la firme Symantec, les botnets sont à l'origine de l'envoi de 87,9% des spams. En effet, cette fonctionnalité est simple à implanter. Les robots scannent les machines infectées à la recherche d'adresses emails valides ou génèrent des adresses aléatoires en se basant sur des noms de domaines valides. Ensuite ils envoient les messages suppliés par le pirate à toutes ces adresses en passant par le serveur SMTP du FAI de la machine pour les robots les plus évolués.

L'envoi de spam est une activité lucrative pour les pirates dans le sens où ils font payer aux entreprises peu honnêtes la génération de spam.

Phising

Le phising est une technique utilisée par les pirates pour obtenir des renseignements personnels. La technique consiste à cloner un site internet d'une banque ou d'une administration dans le but de soutirer le maximum d'informations à la victime (numéro de carte bleue, date de naissance, login et mot de passe).

Certains botnets sont connus pour implémenter des techniques de phising très furtives comme nous pouvons le voir sur le schéma suivant. Ce schéma résume les actions effectuées par le robot pour usurper le site internet facebook.com pour récupérer les identifiants des victimes.

Phising de facebook

Le robot pointe le nom de domaine www.facebook.com sur une adresse IP contrôlée par le pirate à travers le fichier lmhosts. Lorsque la victime se connecte sur www.facebook.com, elle est redirigée, sans le savoir, sur le site contrôlé par le pirate. Sur ce site, le pirate a pris le soin de falsifier la page de garde de facebook qui demande et enregistre les identifiants de l'utilisateur pour se connecter. Après s'être identifié sur le faux facebook.com, la victime est redirigée de manière transparente vers le vrai site.

Brute force de comptes

La plupart des botnets implémentent des fonctionnalités de brute forcing de comptes sur les protocoles SSH, FTP ou encore RDP, le protocole de prise de contrôle à distance de Microsoft. Le brute force est généralement basé sur un petit dictionnaire de logins courrants (test, root, admin) et de mots de passe faibles (test, 1234, azerty).

Le pirate lance ces attaques de brute forcing en ne spécifiant généralement qu'une plage d'adresses IP. Dès qu'un compte valide est trouvé, les informations sur ce dernier et le serveur sont renvoyées aux pirates.

Brute force FTP

Stockage de warez

Lorsque les pirates tombent sur une machine puissante avec beaucoup d'espace disque, ils ne se privent pas de les utiliser afin de stocker et partager du contenu illicite. Certains robots embarquent avec eux un serveur FTP pour envoyer les fichiers illégaux ainsi qu'un serveur HTTP pour pouvoir les proposer en téléchargement. Ces deux serveurs peuvent être activés ou désactivés en seulement quelques commandes.

Déni de service distribué

La fonctionnalité, la plus ancienne et la plus médiatisée des botnets, est le déni de service distribué. Chaque botnet intègre son lot d'attaques par déni de service. Ces attaques tirent profit de la bande passante des nombreuses machines infectées qui sont connectées généralement aux quatres coins du monde. Un botnet est l'arme redoutable pour les dénis de service. Derrière les plus grands dénis de service enregistrés se cachent toujours un ou plusieurs botnets.

Les attaques par déni de service mises en oeuvre dans la plupart des botnets sont très basiques. On retrouve les célèbres TCP SYN flooding, ping flooding ou UDP flooding. Le TCP SYN flooding consiste à forger un paquet TCP avec une adresse source aléatoire demandant une ouverture de connexion (SYN) sur un port précis d'une machine. À la réception du paquet TCP, la machine victime acquitte la demande (ACK) avec une réponse TCP et se met en attente de la réponse qui n'arrivera jamais. Une connexion « pendante » est alors occupée pour rien pendant le temps d'attente de la réponse. Au bout d'un certain nombre de paquets de ce genre, la taille de la table de connexions de la machine victime atteint sa limite et aucune nouvelle connnexion est acceptée.

Il est à noter que très peu de botnets intègrent les nouvelles attaques par déni de service qui ont été dévoillées durant l'été 2009 telles que Slowloris ou SockStress alors qu'elles sont très redoutables. Le botnet Mariposa est le seul botnet connu qui implante l'attaque Slowloris. Slowloris est une attaque qui exploite une faille de conception au sein de plusieurs serveurs Web, dont Apache. Slowloris garde les connexions vers le serveur HTTP ouvertes en envoyant des requêtes partielles et continue d’envoyer régulièrement des entêtes afin d'éviter leur fermeture.

Certains pirates n'hésitent pas à lancer des dénis de service contre les infrastructures de certaines entreprises et de les faire chanter en demandant une énorme rançon en échange de l'arrêt de l'attaque.

Cassage de hash distribué

Dans le même esprit que la fonctionnalité précédente, beaucoup de botnets intègrent la possibilité de casser des hash de mots de passe de manière distribuée en utilisant le CPU de chacune des machines infectées. Ainsi le cassage de mots de passe d'un hash md5 ou sha1 se fait plus ou moins rapidement selon la taille du botnet et la puissance des machines qui le composent. Pour améliorer la rapidité de l'attaque, les robots requêtent d'abord les sites de cassage de hash en ligne basés sur des rainbow tables avant de lancer le cassage de hash en interne.

Pour la répartition des mots de passe, chaque machine possède son propre dictionnaire dans lequel se trouve tous les mots de passe à tester. C'est ce même dictionnaire qui est utilisé pour les attaques par brute force de comptes FTP par exemple. Aucun botnet étudié propose un mode brute force pur et intelligent avec la communication entre les machines pour se répartir les tâches. Les pirates ont du estimer que cela n'était pas nécessaire ou trop difficile à implanter.

Cassage de hash

Pour se faire de l'argent, certains pirates louent leur botnet à d'autres pirates pour qu'ils puissent utiliser cette fonctionnalité.