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
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
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
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.
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
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
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 \\vboxsrv\share
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
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_settings\all_user\Start_Menu\Programs\startup – 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
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...)
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
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
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
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...)
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)
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
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.
et Yara – Configuration • Modifier le fichier /opt/cuckoo/data/yara/index_binaries.yar • Tester la règle : include "/home/r1tch1e/opt/cuckoo/data/yara/binaries/embedded.yar" include "/home/r1tch1e/opt/cuckoo/data/yara/binaries/shellcodes.yar" include "/home/r1tch1e/opt/cuckoo/data/yara/binaries/vmdetect.yar" include "/home/r1tch1e/opt/cuckoo/data/yara/binaries/hello.yar" $ yara hello.yar /home/r1tch1e/share/ HelloWorld /home/r1tch1e/share//hello.exe
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)
• 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