Analyser un logiciel malveillant comme un nul(l) 1/2

La semaine dernière, vous avez téléchargé un jeu cracké sur votre site de partage préféré et vous y jouez depuis trois jours…

Sauf que voilà, de récents commentaires indiquent que l’archive contient un virus et qu’il vaut mieux ne pas la télécharger.

Pas de panique ! Voici un bon moyen pour vous instruire un peu en trouvant comment nettoyer votre ordinateur !

Mouton armé

Note : Au cours de cet article, j’analyserai les fichiers d’un jeu piraté, téléchargé sur un site de torrents bien connu. Je l’ai bien évidemment téléchargé uniquement à des fins d’analyse pour rédiger cet article.

Virus detecté par Avira : SPR/Tool.Keygen.3507
Je m’en passerais donc malgré l’avoir telechargé.

kaspersky l’a choppé : « trojan ». 2 Go pour rien ! dommage
c pas pour moi on dirai

<= Les fautes de français ne sont pas de moi !

Ce genre de commentaire peut vite vous faire déchanter s’ils sont postés pour un logiciel que vous avez téléchargé illégalement et utilisez depuis quelques jours.

Avast ne détecte rien

Mais Avast ne détecte rien… Qui doit-on croire ? Que doit-on faire ?

Analyser la menace et l’éradiquer de manière ciblée !

Initialisons notre environnement d’analyse

Nous utiliserons le logiciel d’analyse « Cuckoo ».

Installation de cuckoo sous kali Linux

Python et ses plugins

Python devrait déjà être installé par défaut. Il faut quand même que nous installions quelques modules additionnels :

apt-get install python python2.7-dev python-sqlalchemy python-dpkt python-jinja2 python-magic python-pymongo python-libvirt python-bottle python-pefile

Il faut aussi installer ssdeep et pyssdeep :

wget http://downloads.sourceforge.net/project/ssdeep/ssdeep-2.9/ssdeep-2.9.tar.gz
tar xzfvp ssdeep-2.9.tar.gz
cd ssdeep-2.9
svn checkout http://pyssdeep.googlecode.com/svn/trunk/ pyssdeep 
./configure 
make 
make install 
cd pyssdeep 
make 
make install
ldconfig

tcpdump

Normalement, cet outil est déjà installé sous backtrack.

Dans le doute, vous pouvez exécuter la commande suivante :

apt-get install tcpdump

On ne veut pas que Cuckoo s’exécute avec les droits « root », il faut permettre à tous les utilisateurs d’utiliser tcpdump :

setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

Installer cuckoo

Nous commençons par installer git s’il n’est pas déjà présent sur notre Linux :

apt-get install git

Puis nous installons cuckoo :

cd /opt
git clone git://github.com/cuckoobox/cuckoo.git
sudo adduser cuckoo

Nous pouvons maintenant configurer Cuckoo comme bon nous semble en éditant les fichiers suivants :

  • conf/cuckoo.conf
  • conf/virtualbox.conf
  • conf/reporting.conf

A priori les options sont bien documentées et on peut facilement comprendre à quoi elles servent.

Installer VirtualBox

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
echo "deb http://download.virtualbox.org/virtualbox/debian oneiric contrib" >> /etc/apt/sources.list
apt-get update
apt-get install virtualbox-4.2 linux-headers-3.7-trunk-686-pae dkms libsdl-ttf2.0-0
sudo usermod -a -G vboxusers cuckoo
 

Pas trop dur ?

Création d’une machine virtuelle Windows

Vous devez maintenant créer une machine virtuelle sous Windows XP ou Windows 7 (sans contrôle d’accès utilisateur).

Pensez bien à faire correspondre la configuration de votre machine virtuelle avec les données saisies dans le fichier virtualbox.conf.

Installez les « Additions invitées » sur votre machine virtuelle.

Installer python sur la machine virtuelle

Cuckoo requiert que python soit installé sur votre machine virtuelle. La librairie de traitement d’image est également nécessaire si vous souhaitez avoir des captures d’écran dans les rapports :

Configurer le réseau de votre machine virtuelle

Backtrack doit voir passer le trafic entre la machine virtuelle et Internet.

La manière la plus simple est de configurer le réseau de la machine virtuelle en « Host only » et faire suivre le trafic en direction de l’extérieur à l’aide des tables de routage :

iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

Dans la première commande, vous devez adapter quelques options :

  • eth0 correspond à l’interface réseau de backtrack connectée à Internet (-o veut dire « out »)
  • vboxnet0 correspond à l’interface réseau de backtrack connectée à la machine virtuelle (-i veut dire « in »)
  • 192.168.56.0/24 est le masque de sous réseau de l’interface vboxnet0.

Ajoutez ensuite une entrée dans la table de routage de votre Windows pour rediriger le trafic sur la bonne interface réseau :

route -p add 0.0.0.0 mask 0.0.0.0 192.168.56.1

Pour terminer la configuration du réseau, il ne reste qu’à activer le reroutage :

sysctl -w net.ipv4.ip_forward=1

Placer l’agent cuckoo

On n’a pas installé python sur la machine virtuelle par plaisir…

Pour que cuckoo fonctionne, il a besoin que le script agent.py que l’on trouve dans le dossier agent soit lancé sur la machine virtuelle.

Nous devons le copier sur la machine virtuelle et changer son extension en « .pyw » (pour ne pas afficher la console)

Finalisation de la machine

Pour bien terminer cette installation, il faut redémarrer la machine virtuelle.

Il est très fortement conseillé ensuite de sauvegarder l’état de la machine pour l’utiliser et analyser plusieurs fichiers :

VBoxManage snapshot "cuckoo1" take "sauvegarde-2013-02-21" --pause

cuckoo1 est le nom de la machine virtuelle.

sauvegarde-2013-02-21 est le nom de la sauvegarde.

Vous pourrez à tout moment restaurer cette sauvegarde en exécutant les commandes suivantes :

VBoxManage controlvm "cuckoo1" poweroff
VBoxManage snapshot "cuckoo1" restorecurrent

Analysons le « jeu » comme des nul(l)s

Dans un premier temps, lançons cuckoo :

cd /opt/cuckoo
python cuckoo.py

Démarrage de cuckoo

Cas d’un simple exécutable

Il faut soumettre notre jeu à cuckoo :

./utils/submit.py --package exe MarkoftheNinja.exe

Cas d’une arborescence

Il faut utiliser notre gestionnaire d’archives favoris pour placer toute l’arborescence d’installation du jeu dans une archive zip sans mot de passe.

Il ne nous reste qu’à donner cette archive à cuckoo :

./utils/submit.py --package zip --options file=setup.exe mon-archive.zip

–package zip indique que l’on souhaite analyser une archive. Plus d’options sont disponibles ici : http://docs.cuckoosandbox.org/en/latest/usage/packages/

–options file=setup.exe donne le chemin du fichier à exécuter une fois l’archive décompressée.

mon-archive.zip est le chemin vers l’archive à envoyer à la machine virtuelle.

Résultats

Après quelques problèmes liés à la taille du fichier testé (2Go à peu près), j'ai pu obtenir les résultats !

Après quelques problèmes liés à la taille du fichier testé (2Go à peu près), j’ai pu obtenir les résultats !

 

J’analyserai ces résultats en détail dans mon prochain article.

Note : J’ai dû copier mon exécutable à la main sur ma machine virtuelle Windows 7, puis j’ai modifié le code source de la fonction « add_malware » dans agent.py comme ceci :

def add_malware(self, data, name):
«  » »Get analysis data.
@param data: analysis data.
@param name: file name.
@return: operation status.
«  » »
global ERROR_MESSAGE
data = data.data

if self.system == « windows »:
root = os.environ[« TEMP »]
elif self.system == « linux » or self.system == « darwin »:
root = « /tmp »
else:
ERROR_MESSAGE = « Unable to write malware to disk because of failed identification of the operating system »
return False

file_path = os.path.join(root, name)

try:
os.rename(os.path.join(root, « MarkoftheNinja.exe »), file_path)

except IOError as e:
ERROR_MESSAGE = « Unable to write malware to disk: %s » % e
return False

return True

C’est de la grosse bidouille, mais ça a fonctionné !

Conclusion

Exécuter un virus, un cheval de Troie ou tout autre logiciel malveillant sur un ordinateur n’est pas une fatalité en soi : si vous savez ce qu’il modifie sur votre ordinateur, pour pourrez aisément le mettre hors d’état de nuire.

Lorsque l’on étudie un logiciel malveillant, il faut toujours supposer qu’il pourra sortir de l’environnement virtuel où il est exécuté. Il ne faudra jamais que vous exécutiez Cuckoo avec des droits d’administration.

Mon prochain article sera consacré à l’analyse détaillée des résultats fournis par Cuckoo pour cet exemple, et aux moyens que l’on peut mettre en place pour se débarrasser de la menace, tout en conservant les fonctionnalités désirées du logiciel téléchargé.

Encore une fois, j’ai uniquement téléchargé cette version corrompue d’un jeu sous licence pour but d’analyse. Je vous invite à acheter le jeu si vous souhaitez y jouer en toute sécurité : http://store.steampowered.com/app/214560/?l=french . 15€, ce n’est pas excessivement cher…

Parce que je n’ai (toujours) pas la science infuse : sources

À propos

Un informaticien, qui tente de faire comprendre au public que l'informatique n'est pas si compliquée, malgré des acronymes et autres termes obscurs pour faire croire que c'est difficile (et que c'est de votre faute si "ça ne marche pas")

Tagged with: , , , , , , , , , , , , ,
Publié dans Cracking, Informatique, Installations, Intrusion, Piratage, Windows
9 comments on “Analyser un logiciel malveillant comme un nul(l) 1/2
  1. best seedbox dit :

    Magnificent items from you, man. I have remember your stuff prior to and you
    are simply too great. I actually like what you’ve received here, certainly like what you’re stating and
    the way by which you say it. You are making it entertaining and you continue to take care
    of to stay it wise. I cant wait to read much more from you.
    That is really a tremendous site.

  2. Betterstring dit :

    Super tuto mais je suppose qu’un malware pourrait vérifier les processus présents a son démarrage pour savoir si on l’exécute sur une virtual machine et si c’est le cas, « être gentil ». Est ce possible ?

    • mystcaster dit :

      Techniquement j’imagine qu’il doit y avoir des moyens pour détecter si une application est exécuté sur une machine virtuelle (en cherchant les modules invités de ces dernières par exemple).

      Mais concrètement, l’utilité de cette détection lors d’une « vraie » attaque est limitée car les serveurs que l’on veut cibler tournent souvent sur des machines virtuelles.
      Il peut par contre être intéressant de détecter la présence d’outils d’analyse forensic, comme les « bacs à sables » des antivirus, pour avoir un meilleur comportement (par exemple juste s’éteindre).
      La vidéo d’une conférence complètement dans le sujet

  3. try-sandbox dit :

    tout d’abord merci pour ce blog très utile pour l’implémentation de cuckoo. sinon après l’installation de cuckoo & virtualbox, je n’ai pas de rapport dans le dossier storage/analyses. les machines se ping, et j’ai installé l’agent sur le wxp. il est évident que j’ai du faire un loupé néanmoins cherchant de manière infructueuse depuis quelque temps. un petit coup de main ou une piste serait la
    bienvenue

  4. Rémi dit :

    Bonjour,
    j’ai lu votre tutoriel mais quandje lance cuckoo il m’affiche:

    CuckooCriticalError: Unable to bind result server on 192.168.56.1:2042: [Errno 99] Cannot assign requested address

    que faire
    merci et bonne journée.

  5. Rémi dit :

    merci de ta réponse je vais voir

Laisser un commentaire

MystCaster
mars 2013
L M M J V S D
 123
45678910
11121314151617
18192021222324
25262728293031
Catégories
Archives