Analyse du botnet MIRAI avec un honeypot

De Ensiwiki
Aller à : navigation, rechercher

Projet Réseau Avancé - 3a ISI Ensimag slides de la présentation : [A venir]

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 économique. 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ème dont une bonne partie connectés 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 meilleur 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 visible sur internet.


MIRAI

Le code source de MIRAI est disponible sur github depuis Octobre 2016. C’est un virus qui prend contrôle du 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és 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 machine 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 machine 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) scanne 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 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 scannes du botnet.
  2. Ce dernier donne l’adresse de la machine à attaquer au loader.
  3. Le loader contact la caméra cible et télécharge le virus sur cette dernière, le lance. La machine est alors infecté et fait partie du botnet MIRAI.

Controle

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, mais pour rester discret la communication est initialisée par les machines infectées. Le CNC contrôle le réseau, par exemple il 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é 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 honeypot.

Pratique

Botnet mirai configuration.png

Schéma 2. Configuration

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 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 DB 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. Nous avons aussi constaté que certaines étapes, en particulier la 5.c, ne sont pas nécessaires sur un OS 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 2.)
    4. Mettre une image pour le cas de la livebox.
  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

Résultats

Environnement de mesure

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

Configuration matériel test:

  • Réseau privée, livebox Orange adresse IP fourni par le FAI
  • Ubuntu 16.04 sous VirtualBox 5.30 sur MAC
  • Redirection de port NAT 22 vers avec l’host MAC comme bridge


Configuration matériel :

  • Réseau privée, bbox Bouygues Telecom adresse IP fixe fourni par le FAI
  • Ubuntu 16.04 dual boot
  • Redirection de port NAT 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 analyse le réseau. Il n’y a pas que MIRAI.

[Résultats] Graphe Kippo à venir

[Analyse] Explication et analyse à venir.

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.