Sorry, you need to enable JavaScript to visit this website.

Image CAPTCHA
Saisir les caractères affichés dans l'image.

Cartographier un botnet via GoogleMaps : Les scripts !

Cartographier un botnet via GoogleMaps : Les scripts !
2010-12-092013-02-11DDoS/Botnetsfr
Comment cartographier un botnet via GoogleMaps : C'est l'objet de ce bulletin qui rentre dans les arcanes techniques de cet exercise qui reste assez simple. Les scripts Perl, python et Javascript sont disponibles en téléchargement pour modification, réutilisation,...
Publié le 9 Décembre 2010 par Jean-François Audenard dans DDoS/Botnets
Carte GoogleMaps générée avec les scripts et fichiers mis à disposition

Cet article s'inscrit dans la ligne directe de l'article du 6 septembre "Cartographier un botnet via GoogleMaps" qui présentait comment j'avais mis un visage sur un réseau de machines zombies en le cartographiant via GoogleMaps.


passons à la technique

Il est maintenant temps de rentrer dans les détails de mise en œuvre afin que vous puissiez faire de même de votre coté. Une fois n'est pas coutume, on va faire dans le code source : Au menu, un peu de Perl suivi d'un script en Python et en dessert du Javascript.
Je vous rassure : Ce qui a été fait reste assez simple et pourra facilement être reproductible voir même étendu.
 

générer une liste d'adresses IP

Comme je ne pouvais évidemment pas vous donner la liste des adresses IP du botnet utilisées dans l'article initial, un script était nécessaire pour générer des adresses IP aléatoire : donne la possibilité de générer de la "matière de base" avec laquelle travailler.

Ce script Perl est super simple (directement pompé d'un forum sur le Net). Vous le lancez et vous récupérez 2600 adresses IP aléatoires, une adresse IP par ligne (le script Perl est disponible dans l'archive en fin de l'article, et il y a aussi un fichier avec des adresses IP aléatoires pour les impatients).
Pour utiliser le script, redirigez simplement la sortie standard vers un fichier : linuxbox$ ./generate_random_ip.pl > iplist.txt

Utilisez vos adresses IP ou générez-en. L'important c'est d'avoir des adresses IP à se mettre sous la dent. Cartographier ses logs de firewalls ou de serveurs de mail (par exemple) peut être intéressant... a vous de voir !


installez un moteur de géolocalisation d'adresses IP

Pour géolocaliser mes adresses IP, j'ai utilisé la version gratuite de la base proposée par MaxMind. Il y a une version payante plus précise et plus à jour mais pour mes tests c'était grandement suffisant. Pour télécharger les versions "Lite", cela se trouve ICI.

Je ne rentrerai pas dans les détails de l'installation de la base MaxMind car les informations fournies sont plutôt bien faites. A vous de vous débrouiller sur ce coup là. Perso, sous un Linux Ubuntu c'était "finger in the noze".

Gardez dans un coin l'endroit (le chemin) ou la base MaxMind est installée : Cela sera nécessaire pour configurer le script python qui va servir pour la phase de géolocalisation.


script de géolocalisation et génération d'un fichier XML en sortie

Maintenant ça ne rigole plus : On rentre dans le cœur du sujet.
Le script python va tout d'abord ouvrir le fichier texte contenant les adresses IP et va créer une table avec toutes les adresses IP, en prenant soin d'enlever celles qui sont éventuellement en double.

Une fois le tableau créé avec les adresses IP récupérée depuis le fichier texte, le script va réaliser; via un appel au moteur MaxMind, la géolocalisation de chaque adresse IP : Parmi les informations récupérées, on retrouve la longitude, la latitude, le pays, etc...
Avec ces infos, il va tout simplement générer un nœud XML qui sera intégré dans un document XML.

Le script Python s'attend à trouver un fichier texte (iplist.txt) dans le répertoire courant et affiche sur la sortie standard le XML généré, pour lancer le script et créer un fichier avec les données : linuxbox$ ./geolocalise_ip.py > data.xml


un peu de HTML et du JavaScript

Le dernier fichier, c'est une page HTML contenant du code Javascript qui va faire les appels à GoogleMaps pour créer la carte GoogleMaps. Vous noterez que j'utilise une librairie tierce qui fait ce que l'on appelle du "clustering" (c'est à dire du regroupement de points) afin d'éviter d'avoir trop de points sur la carte.

En effet, la première carte que j'ai mise au point déposait un point ("marqueur") pour chaque adresse IP : Ça marche mais au delà de 1000 IP c'est devenu d'une lenteur effroyable...
Le script Javascript est commenté, je ne le détaillerai pas plus. Ceux qui bidouillent un peu devraient s'y retrouver sans trop de problèmes.

Le script cherche un fichier "data.xml" présent dans le même répertoire, l'ouvre et parse le XML. Il récupère les infos utiles et appelle les API de GoogleMaps ainsi que celles de la la librairie de clustering.


pour tester par vous-même,

ca se passe à cette URL : Une belle carte GoogleMaps navigable/zoomable générée en direct. (Le message d'erreur Google sur l'absence d'une clef API est normal).


voila c'est fini

En fait, avec le reçul, rien de bien magique mais le résultat est sympathique et diablement "fun" pour épater la galerie. :-)

Bon, mes scripts sont un peu "brut de fonderie" et feront surement hurler les developpeurs Perl, Python ou Javascript. En fait, je suis resté dans le mode "quick & dirty" car il ne s'agissait que de tester une idée... A vos claviers pour faire encore mieux. Vous aurez un message d'erreur au démarrage (absence de clef API GoogleMaps) : Ca marche quand même mais je vous laisserai le soin de faire ce qu'il faut.

Si il y a des questions : je tenterai d'y répondre via la fonction "commentaires". Pour ceux ayant des propositions d'améliorations, n'hésitez pas à les partager !

Fichiers:
J'ai mis dans une archive "ZIP" l'ensemble des fichiers suivants :


  • generate_random_ip.pl : Script Perl pour générer des adresses IP aléatoires
  • iplist.txt : Une liste de 2600 adresses IP aléatoires
  • geolocalise_ip.py : Script Pythong pour la géolocalisation et genération d'un document XML.
  • index.html : Fichier principal avec le Javascript appelant l'API GoogleMaps

2 Commentaires

  • 18 Décembre 2010
    2010-12-18
    par
    Un autre exemple d'utilisation de ces scripts est disponible sur le blog sécurité de Xavier Mertens.
    Dans son article intitulé Iptables Logs Mapping on GoogleMaps, Xavier détaille comment traiter les logs d'un firewall iptables, stocker les adresses IP dans une table MySQL pour ensuite faire les graphes.
  • 17 Décembre 2010
    2010-12-18
    par
    Bonjour,

    Pour compléter les scripts très intéressants du Professeur Audenard, je vous propose ci-contre une procédure d'installation de la Base Geolite-City pour linux / Python.

    En premier, pour consulter la base geolite-city en Python, il faut la librairie C GeoIP : ICI
    - Décompresser l'archive et effectuer les commandes suivantes à la racine du dossier.

    -----$ ./configure
    -----$ make
    -----$ make check
    -----$ make install


    Ensuite, il faut installer l'API Python : ICI
    - Décompresser l'archive et effectuer les commandes suivantes à la racine du dossier.

    -----$ python2 setup.py build
    -----$ python2 setup.py install


    Enfin il faut installer la base en question : ICI
    - Décompresser l'archive et effectuer les commandes suivantes à la racine du dossier.

    -----$ mv GeoIP-133_20051201/GeoIP-133_20051201.dat /usr/local/share/GeoIP/GeoLiteCity.dat

    Voila, la base est prête pour une consultation grâce au script "geolocalise_ip.py".

Ajouter un commentaire

comments

  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <br>

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Email HTML

  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
Image CAPTCHA
Saisir les caractères affichés dans l'image.
Changer d'affichage