Sec day cuckoo_workshop

49
Analyse de malware automatisée avec Cuckoo SandBox ESGI - Workshop Security Day 2015 Thomas ROCCIA | [email protected] | @R1tch1e_

Transcript of Sec day cuckoo_workshop

Analyse de malware automatisée avec Cuckoo SandBox

ESGI - Workshop Security Day 2015

Thomas ROCCIA | [email protected] | @R1tch1e_

Workshop Cuckoo Sandbox 2

Sommaire

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

Workshop Cuckoo Sandbox 3

0x01 Présentation

● Thomas ROCCIA | @R1tch1e_● Analyste en Sécurité des Systèmes d'Information

– Investigation numérique (forensic)

– Analyse de malware

– Test d'intrusion

Workshop Cuckoo Sandbox 4

0x02 Objectifs

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

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

Workshop Cuckoo Sandbox 6

0x03 Analyse de malware

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

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

Workshop Cuckoo Sandbox 8

0x04 Analyse automatisée

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

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

Workshop Cuckoo Sandbox 10

0x05 Cuckoo Sandbox

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

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.

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

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)

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

Workshop Cuckoo Sandbox 15

0x05 Cuckoo Sandbox

● Configuration de l'hôte Cuckoo

– Installation par défaut Ubuntu Desktop 14 LTS (25Go et 3Go de RAM)

– Installation des paquets python et dépendances :

$ apt­get install python 2.7 $ apt­get install python­magic $ apt­get install python­dpkt $ apt­get install python­mako$ apt­get install python­sqlalchemy  $ apt­get install python­jinja2$ apt­get install python­bottle$ apt­get install python­pefile$ apt­get install python­libvirt$ apt­get install python2.7­dev

$ apt­get update && apt­get dist­upgrade

Workshop Cuckoo Sandbox 16

0x05 Cuckoo Sandbox

● Configuration du serveur Cuckoo

– Installation ssdeep pour le calcul de hash :

– Installation de MongoDB :

$ apt­get install ssdeep  $ apt­get install python­pyrex $ apt­get install subversion  $ apt­get install libfuzzy­dev   $ svn checkout http://pyssdeep.googlecode.com/svn/trunk/ pyssdeep  $ cd pyssdeep  $ python setup.py build  $ python setup.py install

$ apt­get install ssdeep build­essential git libpcre3 libpcre3­dev   $ apt­get install python­pyrex libcre++­dev libssdeep$ apt­get install subversion  $ apt­get install libfuzzy­dev $ cd /opt  $ git clone https://github.com/kbandla/pydeep.git  $ cd /opt/pydeep/ $ python setup.py build  $ python setup.py install

$ apt­get install python­pymongo $ apt­get install mongodb 

Workshop Cuckoo Sandbox 17

0x05 Cuckoo Sandbox

● Configuration de l'hôte Cuckoo

– Installation de Yara :

 $ apt­get install g++ $ apt­get install automake ­y $ wget http://yara­project.googlecode.com/files/yara­1.6.tar.gz   $ tar ­xvzf yara­1.6.tar.gz   $ cd yara­1.6   $ ./configure   $ make   $ make check   $ make install $ wget http://yara­project.googlecode.com/files/yara­python­1.6.tar.gz   $ tar ­xvzf yara­python­1.6.tar.gz   $ cd yara­python­1.6   $ python setup.py build   $ python setup.py install

Workshop Cuckoo Sandbox 18

0x05 Cuckoo Sandbox

● Configuration de l'hôte Cuckoo 

– Installation de TCPdump :

– Téléchargement de Cuckoo Sandbox :

– Création du user cuckoo et installation virtualbox :

$ apt­get install tcpdump libcap2­bin  $ setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump  $ getcap /usr/sbin/tcpdump

$ git clone git://github.com/cuckoobox/cuckoo.git   

$ sudo apt­get install virtualbox$ sudo adduser cuckoo  $ usermod ­a ­G vboxusers cuckoo $ sudo usermod ­G libvirtd cuckoo$ id cuckoo

Workshop Cuckoo Sandbox 19

0x05 Cuckoo Sandbox

● Configuration de l'hôte Cuckoo 

– Paquets supplémentaires :

$ wget https://bootstrap.pypa.io/get­pip.py$ sudo python get­pip.py$ sudo pip install cybox==2.0.1.4$ sudo pip install maec==4.0.1.0

$ sudo apt­get install wireshark

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 \\vboxsrv\share

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

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_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

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...)

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

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

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

Workshop Cuckoo Sandbox 27

0x05 Cuckoo Sandbox

Workshop Cuckoo Sandbox 28

0x05 Cuckoo Sandbox

● Base de données de malware :

– http://malwaredb.malekal.com/

– http://virusshare.com/

– http://oc.gtisc.gatech.edu:8080/

– http://contagiodump.blogspot.fr/

– https://www.google.com/cse/home?cx=001439139068102559330:uruncpbgqm8

– https://avcaesar.malware.lu/

– http://syrianmalware.com/

– URLs malveillantes : http://www.scumware.org/

Workshop Cuckoo Sandbox 29

0x05 Cuckoo Sandbox

● Analyse d'un fichier malveillant

– Envoi du fichier laroux.xls :

Workshop Cuckoo Sandbox 30

0x05 Cuckoo Sandbox

● Analyse d'URL malveillante :

– Configuration de l'interface réseau (NAT)

– Envoi de l'URL malveillante :

$ ./submit.py ­­url <url>  

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/

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...)

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 apt­get install treeline$ Treeline report.maec.xml (choisir generic xml)

http://maec.mitre.org/

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 apt­get install wkhtmltopdf$ git clone https://github.com/JazzCore/python­pdfkit.git$ sudo python setup.py build$ sudo python setup.py install

import pdfkitdef create_pdf(xhtml, dest):    pdfkit.from_file(xhtml, dest)

 from pdf import create_pdf 

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)

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

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

Workshop Cuckoo Sandbox 38

0x05 Cuckoo Sandbox

● Interface web Cuckoo 1.2

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.

Workshop Cuckoo Sandbox 40

0x05 Cuckoo Sandbox

● Cuckoo Sandbox et Volatility

– Analyse de baseIdentification de la machine :$ volatility ­f memory.dmp imageinfo

Analyse des processus :$ volatility ­f memory.dmp ­­profile=WinXPSP3x86 pslist$ volatility ­f memory.dmp ­­profile=WinXPSP3x86 pstree

Analyse des connexions :$ volatility ­f memory.dmp ­­profile=WinXPSP3x86 connections

Dump d'un processus :$ volatility ­f memory.dmp ­­profile=WinXPSP3x86 procexedump ­p 564 ­D opt/$ volatility ­f memory.dmp ­­profile=WinXPSP3x86 procexedump ­p 564 ­D opt/

Afficher l'aide :$ volatility ­h

Workshop Cuckoo Sandbox 41

0x05 Cuckoo Sandbox

● Cuckoo Sandbox et Yara

– Configuration● Créer une nouvelle

règle /opt/cuckoo/data/yara/binaries/hello.yar:

rule HelloWorld{

meta:        author = "r1tch1e"

strings:$a = "hello world"

condition:$a

}

Workshop Cuckoo Sandbox 42

0x05 Cuckoo Sandbox

● Cuckoo Sandbox 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

Workshop Cuckoo Sandbox 43

0x05 Cuckoo Sandbox

● Volatitlity et Yara :

volatility ­f memory.dmp yarascan ­y cuckoo/data/yara/binaries/hello.yar 

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)

Workshop Cuckoo Sandbox 45

0x06 Documentation

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

Workshop Cuckoo Sandbox 46

0x06 Documentation

● http://www.cuckoosandbox.org/

● https://malwr.com/

● https://github.com/bostonlink/cuckooforcanari

● http://maec.mitre.org/

● https://cuckoo.readthedocs.org/en/latest/

● https://blog.malwarebytes.org/intelligence/2014/04/automating-malware-analysis-with-cuckoo-sandbox/

● http://www.honeynet.org/

● http://www.google.fr (joke inside)

Workshop Cuckoo Sandbox 47

0x07 Conclusion

0x01 Présentation

0x02 Objectifs

0x03 Analyse de malware

0x04 Analyse automatisée

0x05 Cuckoo Sandbox

0x06 Documentation

0x07 Conclusion

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

Workshop Cuckoo Sandbox 49

Thomas ROCCIA | @R1tch1e_