5. Workshop Cuckoo Sandbox 5
0x02 Objectifs
● Monter un environnement d'analyse de
malware automatisée avec Cuckoo Sandbox
● Analyser les résultats provenant de Cuckoo
● Créer des rapports standards
● Aller plus loin dans l'analyse de malware
7. Workshop Cuckoo Sandbox 7
0x03 Analyse de malware
● Objectif de l'analyse de malware ?
– Comprendre son fonctionnement
– Générer une signature de détection
– Bloquer les actions malveillantes
● Limite de l'analyse de malware manuelle
– Nécessite une bonne connaissance de l'assembleur
– Analyse souvent longue et fastidieuse
9. Workshop Cuckoo Sandbox 9
0x04 Analyse automatisée
● Objectif de l'analyse automatisée ?
– Comprendre rapidement le fonctionnement du malware
– Identifier ses connexions vers l'extérieur
– Identifier les fichiers créés
– Générer une signature de détection
– Comparer sa signature sur des bases connues (virustotal)
– Établir une première estimation de ses capacités
– Générer des rapports automatisés
● Limite de l'analyse automatisée
– Nécessite une analyse approfondie complémentaire (Reverse Engineering ...)
– Certains malwares détectent qu'ils sont dans un environnement d'analyse
11. Workshop Cuckoo Sandbox 11
0x05 Cuckoo Sandbox
● Rappel et définition d'une sandbox
● Selon Wikipédia :
« Une sandbox (anglicisme signifiant « bac à sable ») est un
mécanisme qui permet l'exécution de logiciel(s) avec moins de
risques pour le système d'exploitation. Ces derniers sont souvent
utilisés pour exécuter du code non testé ou de provenance
douteuse. »
● Pour faire simple :
Une sandbox est un environnement contrôlé qui permet d'étudier
des logiciels malveillants (malware) afin d'en comprendre leur
fonctionnement.
12. Workshop Cuckoo Sandbox 12
0x05 Cuckoo Sandbox
● Présentation
– Développé par Claudio Guarnieri
– Créé en 2010
– Soutenu par le projet www.honeynet.org
– Open Source et sous licence GNU
– Développé en python
– www.cuckoosandbox.org
– irc.freenode.net #cuckoosandbox
13. Workshop Cuckoo Sandbox 13
0x05 Cuckoo Sandbox
● Principe de
fonctionnement
– Environnement
« bac-à-sable »
automatisé
– Connecté à des
machines
virtuelles
– Gestion de divers
fichiers (exe,
PDF, OLE, PHP)
14. Workshop Cuckoo Sandbox 14
0x05 Cuckoo Sandbox
● Pré-requis
– Une VM Ubuntu desktop 14 (25 Go / 3 Go de
RAM) + les VMtools
– Installation de Virtualbox dans la VM
– Un système Windows « clean » de base dans la
VM (9Go / 1Go de RAM)
● Network : Host only vboxnet et NAT
● Ajouter un mot de passe sur le compte Windows
20. Workshop Cuckoo Sandbox 20
0x05 Cuckoo Sandbox
● Configuration de la machine de test
– Windows XP (9Go et 1Go RAM)
– Configuration en 2 cartes réseaux (host-only vboxnet0 + NAT)
– Créer un compte avec mot de passe
– Installation des Virtualbox-tool
– Configuration d'un dossier partagé (Shared Folders)
● Choisir un répertoire (par exemple /home/share)
● Cocher les options (RO, Auto-mount, Permanent)
– Monter ensuite le répertoire dans Windows
● Clic droit my computer => map network drive
● Ajouter vboxsrvshare
21. Workshop Cuckoo Sandbox 21
0x05 Cuckoo Sandbox
● Configuration de la machine de test
– Désactivation des éléments de sécurité (Firewall, Windows Update...)
– Installation Python 2.7
https://www.python.org/downloads/release/python-279/
– Installation Python PIL 1.1.7 : http://www.pythonware.com/products/pil/
– Installation des logiciels susceptibles d'être des vecteurs d'infection
(Adobe Reader 9.5, Flash player 3, Office 2007 + désactiver sécu macro,
Firefox 3.6, Java 6...) et désactivation de leurs MAJ automatiques +
descendre leurs niveaux de sécurité. Http://www.oldapps.com
22. Workshop Cuckoo Sandbox 22
0x05 Cuckoo Sandbox
● Configuration de la machine de test
– Copier le script /opt/cuckoo/agent/agent.py dans le dossier share
– Dans Windows copier le fichier agent.py dans C:python27 et dans le
startup c:Document_and_settingsall_userStart_MenuProgramsstartup
– Exécuter le fichier agent.py et vérifier qu'une socket est ouverte sur le port
0.0.0.0:8000 avec la commande netstat aon
– Remarque : lorsque l'on clique sur le fichier agent.py une console s'ouvre,
pour ne pas la voir, il suffit de renommer le fichier agent.py en agent.pyw
23. Workshop Cuckoo Sandbox 23
0x05 Cuckoo Sandbox
● Configuration de Cuckoo Sandbox
– Fichier de configuration /opt/cuckoo/conf/ :
● Cuckoo.conf : c'est le fichier de configuration principal. Il
permet de définir le comportement de la sandbox et les
objectifs.
● Virtualbox.conf : il contient les informations sur
l'environnement virtuel (un fichier pour les différents
environnements)
● Processing.conf : ce fichier permet d'activer et de
configurer les différents modules de traitement (virustotal...)
● Reporting.conf : ce fichier contient les stratégies d'analyse
(réseau, comportementale...)
24. Workshop Cuckoo Sandbox 24
0x05 Cuckoo Sandbox
● Configuration de Cuckoo Sandbox
– Configuration du fichier cuckoo.conf
● Mettre l'IP de l'interface virtuel (vboxnet0)
● Machine manager : virtualbox
● D'autres fonctionnalités
– Configuration du fichier virtualbox.conf :
● Changer le nom de la machine (cuckoo1) / mettre le nom de la vm dans le
champ machine et dans le label.
● Ajouter l'OS de la VM (Windows)
● Ajouter l'IP de la VM
● Ajouter le nom du snapshot
● Dé-commenter et modifier si besoin l'interface
25. Workshop Cuckoo Sandbox 25
0x05 Cuckoo Sandbox
● Configuration de Cuckoo Sandbox
– Configuration du fichier processing.conf :
● Modifier l'API Virus Total
● Laisser le reste du fichier par défaut
– Configuration du fichier reporting.conf :
● Modifier le fichier si besoin
– Configuration du fichier physical.conf :
● Ajouter les credentiales de la machine virtuelle
– Snapshot de la machine windows (attention à respecter le nom du
snapshot (Snapshot1) et pas en root !) :
$ vboxmanage snapshot "CuckooXP" take "Snapshot1" pause
26. Workshop Cuckoo Sandbox 26
0x05 Cuckoo Sandbox
Cuckoo est à présent opérationnel !
● Lancement de Cuckoo Sandbox. Attention au droit !
● Envoi d'un fichier à cuckoo en ligne de commande
● Lancement de l'interface web
$ ./cuckoo.py
$ cd /opt/cuckoo/util/
$ ./submit.py <sample>
$ cd /opt/cuckoo/util/
$ ./web.py
31. Workshop Cuckoo Sandbox 31
0x05 Cuckoo Sandbox
● Fichiers de reporting :
– /opt/cuckoo/storage
● Analyses : contient tout les éléments de l'analyse
● Binaries : contient les binaires analysés
– /opt/cuckoo/storage/analyses/
32. Workshop Cuckoo Sandbox 32
0x05 Cuckoo Sandbox
● Contenu du fichier report.html
– Info : cette section donne des informations sur le déroulé de l'analyse (type de fichier,
timestamp, nom de la VM de test, durée de l'analyse, version de Cuckoo...)
– File : cette section contient des informations sur le fichier analysé (nom, taille, type de
fichier, empreinte, détection PeiD, détection YARA et VirusTotal)
– Signatures : Il s'agit des signatures de détection (utils/./community.py a)
– Screenshot : il s'agit des copies d'écran de la vm lors de l'analyse (fichier du
repertoire shots)
– Static Analysis : il s'agit d'informations sur le fichier (strings, DLL, Sections, imports...)
– Dropped Files : il s'agit des fichiers créés par le malware
– Network : cette section contient les connexions réseaux du fichier
– Behavior : cette section contient des informations sur le comportement du malware
(registre, processus, fichiers, mutexes...)
33. Workshop Cuckoo Sandbox 33
0x05 Cuckoo Sandbox
● Créer des rapports MAEC (Malware Attribute Enumeration
and Characterization)
– Modifier le fichier reporting.conf : maec40 = on
$ sudo aptget install treeline
$ Treeline report.maec.xml (choisir generic xml)
http://maec.mitre.org/
34. Workshop Cuckoo Sandbox 34
0x05 Cuckoo Sandbox
● Créer des rapports PDF
– Installation :
– Supprimer /cuckoo/modules/reporting/reporthtml.pyc
– Créer un fichier pdf.py :
– Dans le fichier reporthtml.py ajouter la ligne :
$ sudo aptget install wkhtmltopdf
$ git clone https://github.com/JazzCore/pythonpdfkit.git
$ sudo python setup.py build
$ sudo python setup.py install
import pdfkit
def create_pdf(xhtml, dest):
pdfkit.from_file(xhtml, dest)
from pdf import create_pdf
35. Workshop Cuckoo Sandbox 35
0x05 Cuckoo Sandbox
● Créer des rapports PDF
– Ajouter à la fin du fichier reporthtml.py :
try:
xhtml = open(self.reports_path+"/report.html")
create_pdf(xhtml, self.reports_path+"/report.pdf")
xhtml.close()
except (Exception, TypeErro, IOError) as e:
raise CuckooReportError("Failed to generate PDF report: %s" % e)
36. Workshop Cuckoo Sandbox 36
0x05 Cuckoo Sandbox
Aller plus loin dans l'analyse de malware...
● Interface Web Cuckoo 1.2
● Cuckoo et Volatility
● Cuckoo et Yara
● Aller encore plus loin
37. Workshop Cuckoo Sandbox 37
0x05 Cuckoo Sandbox
● Interface web Cuckoo 1.2
– Configuration
● Activer la base de donnée MongoDB dans le
fichier cuckoo/conf/reporting.conf
● Lancer l'interface web :
●
$ cd cuckoo/web/
$ python manage.py runserver
39. Workshop Cuckoo Sandbox 39
0x05 Cuckoo Sandbox
● Cuckoo Sandbox et Volatility
– Configuration
● Installation de volatility (apt-get install volatility)
● Cuckoo.conf : modifier memory_dump = on
● Remarque : les dumps mémoires prennent beaucoup
de place, il faudra donc prévoir en conséquence la
taille du disque dans une utilisation courante.
● Le fichier créé se retrouve donc dans le répertoire de
l'analyse.
44. Workshop Cuckoo Sandbox 44
0x05 Cuckoo Sandbox
● Pour aller encore plus loin
– CuckooMX (https://github.com/xme/cuckoomx)
– Pafish Hardening VM (https://github.com/a0rtega/pafish)
– Interface graphique avec maltego
(https://github.com/bostonlink/cuckooforcanari)
48. Workshop Cuckoo Sandbox 48
0x07 Conclusion
● Gain de temps
● Identification rapide de la charge malicieuse
● Amélioration du processus de résolution
● Analyse de fichiers et d'URLs
● Multiples fonctionnalités avec les plugins
● Gestion d'une base de connaissance
● Création automatique de rapports