Cuckoo – Traiter le résultat avec Gephi 2

Dans le précédent post on a vu comment construire un graphique à partir de l’analyse d’un lot de malwares. Le résultat est plutôt sympathique, mais pas si concluant que ça.

Pour obtenir des choses plus intéressantes il va falloir sélectionner, supprimer, filtrer des choses, je ne vais pas détailler cela ici mais simplement vous proposer des résultats.


Malwares – Malwares

Ce graphique ne se compose que de malwares, mais les liens entre eux montrent les comportements qu’ils ont en communs.

Cuckoo - Gephi malwares

On voit que certaines catégories sont absentes ou peu présentes. C’est sans doute dû à la base comportementale qui n’est pas forcement adaptée à certains types de malwares (les vers, les virus ou les adwares par exemple).

PDF

Comportements – Comportements

L’échantillon de malwares prit n’est pas vraiment représentatif de l’ensemble des infections, mais il peut être intéressant de voir quels sont les comportements les plus centraux de ces malwares. On va séparer entre comportements au niveau des fichiers, du registre et l’API.

Cuckoo - Gephi comportements fichiers

PDF

Cuckoo - Gephi comportements registre

PDF

Cuckoo - Gephi comportements api

PDF

Mauvaises détections

Pour chacun de nos malwares, nous avons des taux de détection à notre disposition. Essayons de voir comment s’organise notre graphique pour les malwares mal détectés (on choisit pour cela une valeur un peu arbitraire : moins de 7 détections).

Cuckoo - Gephi Mauvaises detections

Si l’on considère que les anti-virus se servent en partie des comportements des malwares pour décider du caractère infectieux ou non de ceux-ci (ce qui est bien sur à vérifier), les comportements les plus visibles ici sont donc peu pris en compte par ces sociétés.

PDF

Détections heuristiques

Les anti-virus embarquent souvent un moteur de détection heuristique. En l’absence de signature connue, en analysant le comportement d’un fichier ils peuvent dire (avec une certaine incertitude) si celui-ci est infectieux ou non.
On ne va donc garder que les malwares dont le nom est précédé d’un “HEUR:“, “suspicious“, etc.
Voyons quels comportements font tilter nos anti-virus.

Gephi - cuckoo heuristique

PDF

La suite ici.

Pour toutes questions ou commentaires, vous pouvez aller sur le forum. ici

Cuckoo – Traiter le résultat avec Gephi

Vous avez installé cuckoo et analysé plein de malwares. C’est sympa tout ça, mais vous n’avez peut-être pas envie de lire tous les rapports ?

Dans ce post, on va créer un rendu visuel de ces analyses, duquel on pourra extraire des informations pertinentes grâce au logiciel Gephi !


L’idée

Le but du traitement à réaliser est de trouver un moyen pour regrouper/classer les fichiers analysés. Dans les rapports, on va trouver pour chaque malwares plein d’indications, je vais appeler ça des comportements.

L’idée de départ était de regrouper les malwares étudiés entre-eux en fonction de leur comportement observé. Pour cela, chaque comportement partagé entre deux malwares donne un lien entre eux deux. Par conséquent, plus il existe de lien entre les malwares, plus leur comportement global est proche.

Cette idée pose deux problèmes majeurs :

  • En faisant comme ça on ne voit que les liens entre les malwares, c’est un peu pauvre, on veut aussi s’intéresser aux comportements.
  • C’est très lourd, ça implique de parcourir tous les rapports plusieurs fois, il faut aussi créer des algorithmes complexes pour identifier tous ces comportements (on ne peut pas se contenter de comparer chaque lignes)

Traitement

Pour résoudre ce problème, on va l’attaquer autrement. Les comportements seront prédéfinis (base comportementale) et correspondront chacun à un nœud. Les malwares qui auront ce comportement auront un lien avec lui. On aura donc un graphique bipartite (malwares et comportements ensembles).

Construire une base comportementale ça prend du temps, celle que je vous propose est donc loin d’être exhaustive et peut posséder des erreurs.
Voici un exemple de comportement :

SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32
2
Lancement automatique (Drivers32)

La première ligne désigne ce qu’il faut rechercher dans le rapport. La seconde pour le type (2 = clé de registre) et la troisième est une explication courte.

Base comportementale : base_comportement base_comportement_details

Maintenant il ne reste plus qu’à parcourir les résultats.
On met le contenu du répertoire storage/analyses dans un dossier à part avec les bases et le programme de traitement.

Ce programme a été écrit en C, c’est pas très jolie, c’est lourd, mais ça fait son travail.

Code : main.c

En sortie on aura 2 fichiers GDF (un format compréhensible par Gephi), l’un contiendra les nœuds, l’autre les liens.

s256, ,malware,'Trojan-FakeAV.Win32.SmartFortress2012.acxa',12

Voilà un exemple de nœud, c’est un malware détecté en tant que “Trojan-FakeAV.Win32.SmartFortress2012.acxa” par 12 antivirus.

Quand on assemble les deux fichiers on obtient un fichier GDF prêt à être chargé sur Gephi : result.gdf.

Gephi

Gephi est un logiciel open-source multiplate-forme de visualisation développé en Java.

Télécharger Gephi.

On charge le fichier GDF, il faut supprimer les nœuds orphelins si il y en a.

Dans l’onglet Laboratoire de données on retrouve nos nœuds et liens. La partie Vue d’ensemble nous permet de modifier notre graphique, on peut commencer par lui appliquer un algorithme de spatialisation comme le Force Atlas 2.

Graphique bipartite gephi

On obtient un (beau) graphique. On peut l’exporter au format pdf par exemple : gephi_bipartite_1.pdf

Graphique bipartite résultat

Un cluster bipartite 1

Un cluster bipartite 2

La suite par ici.

Pour toutes questions ou commentaires, vous pouvez aller sur le forum. ici

Cuckoo – Analyser un lot de malwares

Avec Cuckoo Sandbox, vous allez voir qu’il est très simple d’analyser tout un lot de malwares.

Il est recommandé d’avoir un PC puissant, une quantité suffisante de mémoire, et un peu de place sur son disque dur.

Ce post fait suite à celui détaillant l’installation de cuckoo.


Dans un premier temps, nous allons optimiser un peu l’analyse.

Paralléliser l’analyse

Cuckoo c’est bien, mais ce n’est pas ce qu’il y a de plus rapide, on se rend vite compte que l’analyse d’un seul fichier peut durer plusieurs minutes.
Il est donc intéressant d’utiliser plusieurs machines virtuelles.

Relancez virtualbox, pour rappel il suffit de faire :

sudo chroot /srv/chroot/cuckoo_chroot
su cuckoo
virtualbox&

Faites un clique droit sur votre machine puis clôner. Clône intégral de l’état actuel.

Démarrer votre nouvelle machine, puis modifier son adresse IP en 192.168.56.102. (changer le dernier octet pour chaque machine)

Configuration réseau clone machine virtuelle

Enfin, redémarrez votre machine virtuelle puis prenez un instantané.

Recommencez cette manipulation pour chaque nouvelles machines.

Maintenant, éditons le fichier virtualbox.conf situé dans le dossier conf de cuckoo.

Ajoutez vos machines :

machines = cuckoo1,cuckoo2,cuckoo3,cuckoo4

Pour chacune, créez une section :

[cuckoo2]
# Specify the label name of the current machine as specified in your
# VirtualBox configuration.
label = cuckoo2

# Specify the operating system platform used by current machine
# [windows/darwin/linux].
platform = windows

# Specify the IP address of the current machine. Make sure that the IP address
# is valid and that the host machine is able to reach it. If not, the analysis
# will fail.
ip = 192.168.56.102

Analyse

Il vous faut maintenant récupérer des fichiers à analyser et les mettre dans le répertoire de l’utilisateur cuckoo (en faisant toujours attention aux droits, ne pas hésiter à utiliser la commande chown).

Avant de commencer, si votre PC a tendance à chauffer, il peut être bon de limiter cuckoo et virtualbox (en terme de ressources utilisées). On peut utiliser cpulimit pour ça. Les commandes sont à adapter à votre configuration (voir explications)

cpulimit --path=/usr/bin/python --limit 15&
cpulimit --path=/usr/bin/virtualbox --limit 15&

Nous sommes prêt, allez dans le répertoire de cuckoo.
Si vous avez déjà lancé des analyses, vous pouvez les effacer avec la commande :

./utils/clean.sh

Pour lancer l’analyse :

python cuckoo.py&
./utils/submit.py /dossier/avec/vos/malware

Les fichiers sont ajoutés à une file d’attente, les machines virtuelles se lancent et s’éteignent automatiquement.

Cuckoo file d'attente

Cuckoo fonctionnement normal

Et le résultat final.

Dossier résultat analyse lot de malware

Il ne vous reste plus qu’à analyser tous ces rapports 🙂

Pour toutes questions ou commentaires, vous pouvez aller sur le forum. ici

Cuckoo Sandbox – Installation

Dans ce post je vais expliquer pas à pas comment installer Cuckoo Sandbox.

N’oubliez pas que l’analyse de malware peut être dangereuse, je vous conseille de prendre toutes les précautions qui s’imposent avant de commencer. Il est possible que certaines manipulations expliquées ici soient dangereuses.

L’installation sera effectuée sur une machine Debian “testing” sur une architecture amd64.


On l’installera dans un chroot, en faisant ainsi on l’isolera du reste du système (change root – changer la racine). Cuckoo sera lancé depuis un utilisateur aux droits limités dans ce chroot afin de limiter les risques pour le système hôte si un malware arrive à “s’échapper” de la machine virtuelle.

Si vous souhaitez installer cuckoo directement sur votre système vous pouvez simplement suivre la documentation.

Création du chroot

On installe les logiciels nécessaires et on crée le répertoire de notre chroot.

sudo apt-get install binutils debootstrap
sudo mkdir -p /srv/chroot/cuckoo_chroot

La commande debootstrap permet d’installer un système debian dans le sous-répertoire d’un autre système.
Veillez à choisir la même architecture que votre système.

sudo debootstrap --arch amd64 testing /srv/chroot/cuckoo_chroot http://http.debian.net/debian

Le chroot sera donc situé dans notre cas dans /srv/chroot/cuckoo_chroot.

L’installation se lance, cela peut prendre plusieurs minutes.

Pour plus d’information sur les chroot ou en cas de problème : https://wiki.debian.org/fr/Chroot

Entrons y :

sudo chroot /srv/chroot/cuckoo_chroot

Si tout va bien, quelque chose comme ça s’affiche :

root@debian:/#

Dans la suite de ce post, on va distinguer les commandes à taper sur le système principal de celles à entrer sur le chroot par un code de couleur (couleur des encadrés).

Sur le système principal
Dans le chroot en tant qu'utilisateur root
Dans le chroot en tant qu'utilisateur cuckoo

Il faut ensuite installer le logiciel de virtualisation dans lequel les malwares seront exécutés, nous utiliserons virtualbox mais vous pouvez prendre n’importe quel autre (KVM, VMware, …).

Installation de Virtualbox

Commencez par éditer le fichier /etc/apt/sources.list, ajoutez y la ligne :

deb http://http.debian.net/debian testing contrib non-free

Puis installez :

apt-get install virtualbox

Il est possible de rencontrer des problèmes à l’installation de virtualbox, c’est récurrent. Pour les résoudre je vous conseille de copier le message d’erreur sur un moteur de recherche, de nombreux sujets sur des forums existent. La Documentation debian donne aussi des solutions.

Erreurs courantes :

The character device /dev/vboxdrv does not exist.

Solution :

modprobe vboxdrv
VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

Solution :

modprobe vboxnetadp

Installation de Cuckoo

Un certain nombre de dépendances sont nécessaires, il faut aussi que tcpdump puisse se lancer avec des droits de super-utilisateur (pour capturer le trafic).

apt-get install python python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-libvirt python-bottle python-pefile tcpdump libcap2-bin
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

On crée un utilisateur,

adduser cuckoo
usermod -G vboxusers cuckoo

Il faut maintenant télécharger cuckoo : ici
On extrait le contenu du fichier cuckoo-current.tar.gz téléchargé dans notre chroot.

sudo tar xzfv cuckoo-current.tar.gz -C /srv/chroot/cuckoo_chroot/home/cuckoo/

Cuckoo est installé.
Attention aux droits, exécutez la commande suivante dans le dossier de l’utilisateur cuckoo pour qu’il soit propriétaire des fichiers (change the owner).

chown cuckoo * -R

Configuration de Virtualbox

xhost +

Cela vous permettra de lancer des applications graphiques depuis le chroot.

En utilisant le compte que l’on a créé, on va pouvoir lancer virtualbox.

su cuckoo
virtualbox&

A vous maintenant de créer une machine virtuelle, j’ai choisi d’utiliser Windows XP SP3 (si vous avez déjà une machine virtuelle de créée, vous pouvez l’importer dans le chroot) mais libre à vous de prendre un autre système (Vista, 7, 8, …).

Sur la machine virtuelle, désactiver le pare-feu et les mises à jour automatiques. Puis installer python : http://www.python.org/getit/

Sur Virtualbox allez dans Machine -> Configuration -> Dossiers partagés -> Ajouter un dossier partagé. Ajouter le dossier /home/cuckoo/cuckoo/agent et cocher montage automatique.

Virtualbox création dossier partagé

Redémarrez la machine. Depuis le dossier monté, placer le fichier agent.py dans le dossier de démarrage automatique de Windows et le renommer en agent.pyw.

Dossier démarrage machine virtuelle

Passons maintenant à la configuration réseau, éteignez la VM. Dans la fenêtre principale de virtualbox aller dans Fichier -> Paramètres -> Réseau -> Ajouter réseau privé hôte. (il est possible que vous soyez obligés d’effectuer cette manipulation après chaque redémarrage)

Dans la configuration de la machine, sur l’onglet Réseau choisissez le mode d’accès réseau privé hôte.

Virtualbox créer réseau privé

Allumez votre machine virtuelle, elle fait maintenant parti d’un réseau privé qui lui permettra de communiquer avec cuckoo. On va lui attribuer une adresse IP fixe. Dans les options internet, vous pouvez lui donner l’adresse 192.168.56.101.

Configuration réseau machine virtuelle

La configuration de la machine virtuelle est terminée, assurez vous qu’aucun programme parasite ne se lance, prenez ensuite un instantané de la machine après son démarrage (une fois que tout est bien chargé). Vous pouvez fermer virtualbox.

On n’oubliera pas d’autoriser cuckoo et la machine virtuelle à communiquer. Cette commande n’est pas permanente, il faudra l’ajouter à votre script de configuration d’iptables ou la retaper à chaque utilisation de cuckoo.

sudo iptables -A INPUT -i vboxnet0 -j ACCEPT

Configuration de Cuckoo

Aller dans le dossier de cuckoo puis dans conf. On y trouve plusieurs fichiers .conf avec des explications.

Modifier le fichier virtualbox.conf pour y indiquer votre machine virtuelle.

label = nom_de_votre_machine_virtuelle

Dans le fichier reporting.conf vous pouvez choisir quels types de rapports seront générés.

Maintenant, lançons cuckoo.

python cuckoo.py&

Démarrage cuckoo

Voilà ce que vous devriez avoir si tout va bien !

Pour analyser un fichier, il vous suffit de faire :

./utils/submit.py chemin_vers_le_fichier

Ou bien :

./utils/submit.py --url http://www.malware.com

Cuckoo fonctionnement

Les rapports d’analyses sont situés dans storage/analyses.

Cuckoo résultat html

Cuckoo résultat json

Dans les rapports on trouvera par exemple :

  • Les appels à l’API Win32
  • Les fichiers créés, supprimés ou téléchargés
  • La capture du trafic réseau
  • Les clés de registre crées, supprimées ou modifiées
  • Des captures d’écran de la machine
  • Une analyse Virustotal

Si vous souhaitez analyser de nombreux malwares, vous pouvez lire le billet suivant : Analyser un lot de malwares.

Bien d’autres possibilités existent, vous trouverez tout une documentation dans le dossier cuckoo/docs/book.
Vous pouvez par exemple donner à la machine virtuelle un accès à internet et ainsi capturer le trafic, demander à cuckoo de faire un dump mémoire, …

Pour toutes questions ou commentaires, vous pouvez aller sur le forum. ici

Analyse de malwares avec Cuckoo

Cuckoo Sandbox est un logiciel permettant d’analyser rapidement des malwares.

Codé en python, il génère des rapports détaillés sur le fichier analysé.

Je vais présenter rapidement cuckoo, puis dans une série de posts, je vais vous expliquer comment l’installer, nous verrons ensuite une application possible de ces analyses.


Exécuter un malware dans une machine virtuelle est un moyen simple de l’étudier, mais cela nécessite d’utiliser de nombreux outils et peut prendre du temps. Cuckoo va effectuer la même chose automatiquement et générer un rapport.

Pour ce faire, on installe un petit module sur une machine virtuelle qui va exécuter le malware, récupérer des informations sur le système et les transmettre à cuckoo.

On saura donc rapidement quelle incidence le malware a eu sur le système (fichiers créés, clés de registre modifiées, …).

Il est possible d’utiliser cuckoo sans installation, le site malwr.com permet d’analyser un fichier en ligne.

Merci à tout ceux qui m’ont fait découvrir cuckoo et aidé dans ce projet, en particulier igor51.

Pour toutes questions ou commentaires, vous pouvez aller sur le forum. ici