Aller au contenu

Drakvuf & Cuckoo3 en conditions réelles : retour d’expérience et comparatif technique

·9503 mots·45 mins· loading · loading · ·
Sommaire

There is an english version on this article that you can find here.

Cet article présente un retour d’expérience sur l’installation et les tests de deux sandboxes :

  • Drakvuf, maintenue par le CERT polonais
  • Cuckoo3, maintenue par le CERT estonien

L’idée de cet article est de proposer un retour d’expérience concret en résumant :

  • l’installation de ces deux sandboxes,
  • les principales difficultés rencontrées,
  • leurs principales fonctionnalités d’analyse,
  • ainsi que les avantages et inconvénients de chacune.

Pourquoi ces deux projets ?
#

On pourrait se demander pourquoi avoir choisi Drakvuf et Cuckoo3, plutôt que d’autres projets tels que :

Les projets retenus sont des solutions récentes, activement maintenues, et proches, dans leur fonctionnement, d’outils comme any.run ou JoeSandbox.

Au fil des recherches, une étude comparative réalisée par l’Université de la Défense de Serbie a été identifiée : A pilot comparative analysis of the Cuckoo and Drakvuf sandboxes: An end-user perspective, cette ci apporte un éclairage intéressant sur le sujet.

  • Cette étude date de 2022.
  • Elle compare Cuckoo 2.05 et Drakvuf 0.18.

Les versions comparées dans cet article sont :

  • Cuckoo3 v0.11.1, sortie le 9 mai 2025, installée sur une machine virtuelle sous Ubuntu 22, hébergée par un ESXi en version 8.0 U3.

    Cuckoo3 est une version entièrement réécrite de Cuckoo, qui était initialement en Python 2.

  • Drakvuf v0.20, sortie le 17 novembre 2025, installée sur un serveur bare metal équipé d’un Xeon E5-1650 v2, fonctionnant sous Ubuntu 24.04.3 LTS.
Toute la première partie de la rédaction de cet article s’appuie sur la version 0.19 sortie le 6 août 2025, qui était la dernière publiée lorsque j’ai commencé mes recherches. En cours de rédaction, j’ai décidé de passer à la version 0.20, car celle-ci corrigeait de nombreux bugs que je rencontrais et apportait de nouvelles fonctionnalités. J’y reviens donc rapidement dans la dernière partie de cet article ; gardez cependant à l’esprit que celui-ci a été en partie rédigé en se basant sur les fonctionnalités de la version 0.19. Les passages concernés sont annotés lorsque certains des bugs observés en version 0.19 ne sont plus d’actualité en version 0.20.

Même si cet article n’a pas vocation à être une mise à jour de l’étude universitaire mentionnée plus haut, je ne m’interdis pas d’en réutiliser certaines parties pour illustrer les évolutions des deux projets.
Cette comparaison m’est permise par la licence utilisée par l’étude : Creative Commons Attribution 4.0 International.
Cet article repose donc sur la même licence, et peut être librement partagé et adapté, sous réserve de respecter les conditions d’attribution prévues par celle-ci.

Passons maintenant aux choses sérieuses.


Vue d’ensemble
#

Aperçu de la comparaison / TLDR

Cet article compare deux sandboxes open source récentes, Drakvuf Sandbox et Cuckoo3, en se concentrant à la fois sur l’installation, l’usage au quotidien et leur comportement face à des binaires malveillants.

En simplifiant, les positions sont les suivantes :

  • Drakvuf / drakrun

    • Analyse “sans agent” depuis l’hyperviseur Xen (VMI, VT-x/EPT, altp2m) : approche très furtive, idéale face aux malwares avec de fortes capacités anti-sandbox.
    • Installation et exploitation plus complexes, dépendantes de Xen, mais offrant une excellente visibilité bas niveau (kernel, syscalls, process, réseau) via ses plugins VMI.
    • Pertinent pour des labs avancés, des équipes R&D ou des analyses ciblées sur des échantillons suspects d’anti-VM.
  • Cuckoo3

    • Sandbox avec une approche plus classique, mais pas moins intéressante, avec un agent invité et une DLL de monitoring dans la VM : instrumentation riche côté applicatif, formats supportés variés (PE, documents, scripts, archives, URL).
    • Installation plus simple, intégration facilitée (API REST, signatures, modules), bonne gestion de plusieurs détonations en parallèle.
    • Adapté au triage quotidien de pièces jointes, à l’analyse en SOC ou à un usage en entreprise avec des besoins opérationnels plus généraux.

Dans la plupart des contextes opérationnels, les deux projets sont davantage complémentaires que concurrents : Cuckoo3 couvre efficacement le gros du flux, tandis que Drakvuf offre une couche d’observation plus discrète pour les échantillons les plus méfiants. Le tableau ci-dessous résume les principaux compromis architecturaux et fonctionnels entre les deux approches.

AspectDRAKVUF / drakrunCuckoo3
Mode d’analyseHyperviseur (Xen), VMI, approche agentlessAgent invité + DLL de monitoring injectée dans les processus
HyperviseurXen uniquement, CPU Intel VT-x / EPT requisKVM/QEMU, mais plusieurs autres hyperviseurs possibles (VirtualBox, VMware, etc.)
StealthTrès élevé (aucun code de monitoring dans le guest)Bon, mais agent/monitor in-guest détectables
Visibilité kernelExcellente (introspection noyau via VMI)Indirecte (via hooks et monitor in-guest)
Types de fichiers / fluxPrincipalement binaires PE (.exe), documents possibles si configuration manuelleLarge : PE, documents, archives, scripts, URL, etc.
Surface de détectionArtefacts de virtualisation (Xen, timings), pas d’agent ni de DLL à détecterAgent, DLL injectée et hooks en mémoire potentiellement recherchés par le malware
Niveau d’automatisationSemi-automatisé : orchestration par drakrun, possibilité d’interactionsTrès automatisé : scénarios pilotés par l’agent, pas d’intervention manuelle
Interactivité en détonationPossible (prise de main sur la VM via VNC depuis l’interface Web)Pas d’accès interactif, seulement des screenshots
Intégration / écosystèmePlugins VMI puissants, approche plus spécialiséeÉcosystème plus large (signatures, modules, API REST, intégration SOC facilitée)

Drakvuf Sandbox
#

Présentation
#

Drakvuf Sandbox est une sandbox d’analyse comportementale sans agent (agentless) fondée sur l’introspection de machines virtuelles : elle observe l’exécution d’un échantillon depuis l’hyperviseur via DRAKVUF, sans utiliser d’agent sur la VM invitée, ce qui réduit fortement les mécanismes d’évasion.

L’interface Web orchestre le cycle dépôt → exécution contrôlée → restitution et fournit des traces détaillées (arbre des processus, appels système, fichiers, registre, réseau) exploitables pour qualifier rapidement un binaire.


Installation
#

Préambule
#

En introduction, dans le README du dépôt GitHub, voici le commentaire laissé par les développeurs :

Here be dragons 🐉. Maintaining your own sandbox is a difficult task and this project uses technology that is not user-friendly. Be prepared to brush up on your debugging skills as bugs may be reproducible only on your configuration. On the other hand, it’s not purely an R&D project and it is used in production! Source code and issues section on both DRAKVUF Sandbox and DRAKVUF engine projects are your best friend.

Préparez-vous donc à devoir débuguer à de nombreuses reprises.

Il est recommandé, plutôt que d’utiliser une image ISO “brute” de Windows, de préparer un fichier autounattend.xml qui automatisera une bonne partie (sinon l’intégralité) de l’installation de Windows.
D’autant plus que vous pouvez automatiser certaines tâches hors ligne demandées plus tard par la documentation de cette façon !

Pour cela, une fois votre image ISO téléchargée (miroir), rendez-vous sur le site schneegans.de qui permet de générer le fichier XML directement depuis votre navigateur, sans devoir installer plusieurs dizaines de SDK Microsoft.

Ensuite, pour intégrer ce fichier XML dans l’ISO, depuis Windows, vous pouvez utiliser le projet WIMUtil, qui répond parfaitement à ce besoin. (Aucune solution n’a été testée sous Linux dans le cadre de cet article, mais des alternatives existent probablement. 😉.)

Avant toute installation, il est recommandé de consulter la documentation officielle du projet.
Les éléments ci-dessous constituent des notes d’installation et de débugage complémentaires, basées sur les problèmes rencontrés lors des tests.

🧰 Installation de Xen
#

cd /tmp

# Télécharger et installer les paquets précompilés Xen depuis le dépôt GitHub
# Adapter la commande ci-dessous
wget https://github.com/tklengyel/drakvuf-builds/releases/xen-files.deb

sudo apt update
sudo apt install ./xen-hypervisor*.deb

sudo reboot

Vérifier la bonne installation de Xen :

# Détecter si le système est compatible Xen
xen-detect

# Lister les machines virtuelles gérées par Xen
xl list
# Ajouter les binaires Xen au PATH
# Ajouter le chemin des binaires et un alias pratique dans ~/.bashrc
echo "export PATH=$PATH:/usr/sbin" >> ~/.bashrc
echo "alias ll='ls -la'" >> ~/.bashrc

# Recharger le fichier de configuration du shell
source ~/.bashrc


🧠 Installation du moteur Drakvuf
#

cd /tmp

# Télécharger les paquets Drakvuf depuis le dépôt GitHub
# Adapter la commande ci-dessous
wget https://github.com/tklengyel/drakvuf-builds/releases/drakvuf-files.deb

# Mettre à jour les dépôts et installer le bundle Drakvuf
sudo apt update
sudo apt install ./drakvuf-bundle*.deb

Vérifier le fonctionnement de VMI :

# Vérifier que la commande vmi-win-guid fonctionne correctement
vmi-win-guid
# Vérifier le bon chargement des commandes
drakvuf
injector

🧩 Installation des dépendances et de la sandbox
#

# Installation des outils nécessaires
sudo apt update
sudo apt install btop iptables tcpdump dnsmasq qemu-utils bridge-utils libmagic1 python3-venv redis-server

# Création d'un environnement virtuel Python
cd /opt
python3 -m venv venv
. venv/bin/activate

# Installation de Drakvuf Sandbox
pip install wheel
pip install drakvuf-sandbox

💽 Installation de Windows dans la VM
#

# Copier l'ISO de Windows 10 22H2 sur la VM
# Installation de l'image Windows
drakrun install ./Win10_22H2.iso --vcpus 4 --memory 8192

# Se connecter via VNC à la machine virtuelle pour terminer l'installation.

# (Optionnel) Suppression des pilotes audio si un problème survient
sudo sed -i '/^soundhw *=/d' /etc/drakrun/cfg.template

Post-installation :

# Une fois l'installation initiale de la VM terminée, exécutez la commande suivante pour générer les différents profils
drakrun postinstall

🧱 Modification de la VM master (si nécessaire)
#

# Modifier le fichier de configuration pour activer Internet
nano /etc/drakrun/config.toml
# --> Changer la valeur de net_enable de "false" à "true"

# (Optionnel) Suppression de l'exécution du fichier PowerShell lors du démarrage de la VM d'analyse si celui-ci pose problème par la suite
# --> Changer la valeur de no_post_restore de "false" à "true"

# Démarrer la modification de la VM master
drakrun modify-vm0 begin
# Effectuer les modifications souhaitées

# Valider les changements
drakrun modify-vm0 commit

# Annuler les modifications effectuées
drakrun modify-vm0 rollback

Une fois la VM lancée, il est nécessaire d’ajouter des DNS à la carte réseau.

Pour ne pas être gêné lors des analyses à venir, je conseille, une fois l’installation de Windows terminée et Internet activé, d’installer les dépendances suivantes :

Dans la documentation, il est également demandé de :

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
ngen.exe executeQueuedItems
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
ngen.exe executeQueuedItems

🚀 Lancer manuellement la VM d’analyse et Drakvuf
#

# Démarrer la machine virtuelle d'analyse
drakrun vm-start

# Tester l'exécution de Drakvuf
drakrun drakvuf-cmdline

# Exemple d'exécution manuelle de Drakvuf avec les profils JSON
drakvuf -o json -F -k 0x1aa002 -r /var/lib/drakrun/profiles/kernel.json -d vm-1 \
  --json-ntdll /var/lib/drakrun/profiles/native_ntdll_profile.json \
  --json-wow /var/lib/drakrun/profiles/wow64_ntdll_profile.json \
  --json-win32k /var/lib/drakrun/profiles/native_win32k_profile.json \
  --json-kernel32 /var/lib/drakrun/profiles/native_kernel32_profile.json \
  --json-wow-kernel32 /var/lib/drakrun/profiles/wow64_kernel32_profile.json \
  --json-tcpip /var/lib/drakrun/profiles/native_tcpip_profile.json \
  --json-sspicli /var/lib/drakrun/profiles/native_sspicli_profile.json \
  --json-kernelbase /var/lib/drakrun/profiles/native_kernelbase_profile.json \
  --json-iphlpapi /var/lib/drakrun/profiles/native_iphlpapi_profile.json \
  --json-mpr /var/lib/drakrun/profiles/native_mpr_profile.json \
  --json-clr /var/lib/drakrun/profiles/native_clr_profile.json

# Exemple d'exécution automatisée avec le profil par défaut
$(drakrun drakvuf-cmdline) -a procmon

# Lancer le worker Drakrun sur la VM 1
drakrun worker --vm-id 1

Pour la suite de l’installation (création de services, lancement de l’interface Web), la documentation du projet peut être suivie pour compléter l’installation. Aucune difficulté particulière n’ayant été rencontrée à cette étape, aucun complément spécifique n’est ajouté ici.

Difficultés rencontrées
#

Lors de la création de la VM master, des problèmes liés aux pilotes audio ont été rencontrés.

Pour rappel, ce problème a été résolu en supprimant l’implémentation du son depuis le fichier cfg.template avec la commande suivante :

sudo sed -i '/^soundhw *=/d' /etc/drakrun/cfg.template

Un second problème observé concernait d’importantes lenteurs, ainsi que des problèmes de stabilité de l’injection de l’agent drakcore.
Ces 3 points ont été corrigés lors du passage en version 0.20.


Utilisation
#

Certains dysfonctionnements observés sont considérés comme spécifiques à l’environnement de test utilisé, et ne doivent pas être interprétés comme inhérents au projet.

Une première tentative (en version 0.19) a été réalisée en utilisant la virtualisation imbriquée sur un ESXi, mais d’importants problèmes de stabilité ont été rencontrés. Ces problèmes n’ont pas été reproduits sur un serveur bare metal. L’installation de la sandboxes n’a pas pu être terminé sur l’ESXi.

Toutes les captures d’écran ont été prises depuis la version 0.19, il est possible que l’interface soit légèrement différente dans la version 0.20.

Une fois une partie des problèmes corrigés, on peut accéder pour la première fois à l’interface Web via l’adresse IP de la machine sur le port 5000 (si ce port n’a pas été modifié lors de la configuration).

Interface Web Drakvuf
Onglet principal lors de l’accès à l’interface Web

Voici ce à quoi ressemble l’interface Web après quelques utilisations.

Par défaut, vous n’aurez évidemment pas de rapports d’analyse préexistants.

L’interface Web est très fonctionnelle (dans le bon sens du terme) : il n’y a aucune fonctionnalité inutile.

Après l’installation, cet onglet est vide ; nous y reviendrons prochainement.

Drakvuf Upload Tab
Onglet Upload sample

  • Choix de la durée d’analyse entre 1 et 15 minutes
  • Choix des plugins parmi une liste assez importante permettant d’interagir avec la VM d’analyse pendant l’exécution du binaire
  • Possibilité de définir le nom du binaire
  • Possibilité de lancer le sample avec une commande de lancement personnalisée

Par défaut, Internet (si configuré) et les captures d’écran sont activés. Il est possible de les désactiver en cochant une case.

L’onglet “API Docs” renvoie vers la documentation Swagger, qui permet de tester les différents endpoints en situation réelle.

Drakvuf API doc
Onglet API Docs - capture non exhaustive des possibilités permises par la sandbox.

Je ne sais pas si le projet est pensé “API-first”, mais il semble pouvoir fonctionner en totale autonomie via l’API (soumission des binaires, récupération des rapports, etc.).

Enfin, l’onglet “RQ Dashboard” permet d’accéder aux informations des différents workers stockés dans le cache Redis.

Drakvuf redis information
Onglet RQ Dashboard - oui, lors de mes premières analyses, j’ai eu quelques jobs en erreur… ou quelques dizaines

Tout ça, c’est bien beau, mais à quoi ressemble un rapport d’analyse ?

Eh bien, à ça :

Drakvuf Analyse Report
Analysis report

Les rapports sont composés de trois catégories principales :

  • Le process tree

  • Les informations sur le binaire, avec la possibilité de récupérer certaines captures (liées aux plugins sélectionnés lors du lancement de l’analyse) :

    • Captures PCAP
    • Clés TLS
    • Dumps mémoire
      • À noter ici qu’il s’agit d’une archive zip contenant des fichiers de vidages mémoire de plusieurs processus et non de d’un dump mémoire de toute la VM.
  • La suite du rapport, composée de quatre onglets principaux :

    • Summary report

      Ici, on retrouve le processus créé, ainsi que les domaines appelés, les requêtes HTTP, les "Cracked URLs", les connexions, les fichiers modifiés et ceux supprimés, ainsi que les TTPs.

    • General logs

      Drakvuf Analysis Report General Logs

      Ici se trouvent les différents logs d’exécution de l’analyse, regroupés par plugins.

    • Process info

      Pour chacun des processus du process tree, il est possible d’avoir des détails avancés sur celui-ci.

      Cette fonctionnalité n’a pas pu être testée dans l’environnement utilisé pour cet article.

    Drakvuf Analysis Report Process Information
    Exemple issu de la documentation

    • Screenshots
      Comme proposé par beaucoup d’autres sandboxes commerciales aujourd’hui, Drakvuf prend des captures d’écran au cours de la détonation, sans doute parce que cela nécessite moins d’espace de stockage qu’une vidéo de la détonation complète, pour une plus-value qui reste très intéressante.
      Drakvuf Analysis Report Screenshots
      Il est possible de cliquer sur une capture d’écran pour l’agrandir.

Fun fact : lors de mes tests, l’IP de ma machine DRAKVUF s’est retrouvée bloquée par mon IDS Suricata pour avoir fait sonner les règles ET ATTACK_RESPONSE PowerShell NoProfile Command Received In Powershell Stagers et ET HUNTING PowerShell NonInteractive Command Common In Powershell Stagers (lors de l’analyse d’un binaire qui appelait un script PowerShell, dont des bribes se sont retrouvées écrites dans le rapport). Vous pourriez alors me dire que cela ne serait pas arrivé si j’avais configuré plus tôt le certificat SSL de mon serveur… et vous auriez raison !


Avantages et inconvénients
#

Avantages :

  • Documentation maintenue et à jour
  • API documentée et complète
  • Support de Windows 7 / 10 (22H2)
  • Moteur Drakvuf
  • Plugins nombreux associés au moteur Drakvuf (parmi lesquels les principaux : apimon, filetracer, memdump, procmon, socketmon et tlsmon ; liste non exhaustive)
  • Accès VNC à la VM depuis l’interface Web, ce qui permet, dans le temps imparti, de naviguer à travers les répertoires une fois le sample exécuté
  • Process tree détaillé, possibilité d’obtenir des détails sur chacun des processus, de manière individuelle (ne fonctionne pas dans mon cas)
  • Possibilité de déchiffrer le trafic de la capture réseau de l’analyse
  • Prise en charge des archives chiffrées (depuis la version 0.20)

Inconvénients :

  • Ne prend pas en charge les versions récentes de Windows 10, ni aucune version de Windows 11 (probablement lié à l’injection de l’agent drakcore)
  • Ne prend pas en charge Linux non plus
  • Impossibilité d’analyser des liens (contournement possible en téléversant un fichier vide et en exécutant une commande personnalisée)
  • Impossibilité d’interrompre une analyse une fois lancée
  • Nested Virtualization (virtualisation imbriquée) assez aléatoire (sur VMware ESXi en tout cas)
  • Impossibilité de détonner des menaces récentes de type clickfix ou filefix ou en tout cas pas nativement.

Lors des analyses, la navigation dans la VM via VNC peut s’avérer assez lente, mais ce n’est pas réellement un défaut : c’est une conséquence du fonctionnement intrinsèque du modèle d’introspection sur lequel repose la sandbox Drakvuf.


Cuckoo3
#

Présentation
#

Cuckoo3 est une réécriture moderne et open source (Python 3) du projet Cuckoo originel.

Il s’agit d’une sandbox d’analyse dynamique de malwares : elle exécute des fichiers ou des URL suspects dans des VM Windows isolées et journalise leur comportement afin de produire des rapports. Le projet fournit également une API et une interface Web.


Installation
#

Un accès VPN a été configuré à la place du routage Internet de base, afin de pouvoir sortir sur Internet avec plusieurs adresses IP sans exposer l’IP du serveur.

L’exemple ci-dessous s’appuie sur Proton VPN, mais la configuration est similaire pour tout fichier de connexion OpenVPN.

Plusieurs problèmes de connectivité réseau ont été observés, notamment ceux décrits dans les issues GitHub : Error when using the Network feature with Internet forward enabled, Failed to run plugin Pcapreader. ‘int’ object has no attribute ’type’() et OpenVPN error with “–iproute” parameter.

Plusieurs moyens de correction ou de contournement sont détaillés dans la partie installation.

À noter que les récents changements d’API de VirusTotal (en lien avec l’intégration de VirusTotal et Mandiant dans la nouvelle plateforme Google Threat Intelligence) peuvent également poser problème : Virustotal api change causes server error 500.

Cela étant dit, les analyses sans réseau fonctionnent, bien qu’elles soient plus limitées.

À nouveau, gardez à l’esprit qu’il s’agit de notes d’installation personnelles qui n’ont pas vocation à servir de tutoriel d’installation complet.

La documentation d’installation officielle est disponible sur le GitHub du projet.

Même si l’installation de ce projet est nettement plus simple que celle de la sandbox Drakvuf, il reste indispensable de savoir débuguer pour exploiter tout le potentiel de la plateforme.

curl -sSf https://cuckoo-hatch.cert.ee/static/install/quickstart | sudo bash

Le script est interactif (quelques questions au début), puis l’installation dure entre 30 et 40 minutes.

Ensuite, ajoutez une tâche cron pour créer le bridge réseau au démarrage de la machine (crontab -e) :

@reboot /home/cuckoo/vmcloak/bin/vmcloak-qemubridge br0 192.168.30.1/24

Créez ensuite des services systemd pour pérenniser l’installation.

Service : /etc/systemd/system/cuckoo3.service

[Unit]
Description=Cuckoo3 Sandbox
After=network.target cuckoo3-rooter.service
Requires=cuckoo3-rooter.service

[Service]
Type=simple
User=cuckoo
WorkingDirectory=/home/cuckoo
Environment="PATH=/home/cuckoo/cuckoo3/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/home/cuckoo/cuckoo3/venv/bin/cuckoo --quiet
Restart=on-failure

[Install]
WantedBy=multi-user.target

Générez la commande du rooter :

cd /home/cuckoo/cuckoo3
source venv/bin/activate
cuckoorooter -d --group cuckoo --print-command /tmp/cuckoo3-rooter.sock

Copiez-collez la commande affichée par --print-command dans ExecStart= du service cuckoo3-rooter.service.

Service : /etc/systemd/system/cuckoo3-rooter.service

[Unit]
Description=Cuckoo3 Rooter
After=network.target

[Service]
Type=simple
User=root
# Coller ici la commande générée précédemment
ExecStart=
Restart=on-failure

[Install]
WantedBy=multi-user.target

Rechargez ensuite systemd et activez les services :

sudo systemctl daemon-reload
sudo systemctl enable --now cuckoo3-rooter.service cuckoo3.service
[Facultatif] Configuration VPN

Pour configurer les sorties réseau et le VPN, voici ce que j’ai renseigné dans mon fichier ~/.cuckoocwd/conf/node/routing.yaml :

internet:
  # Pas d’accès direct Internet, uniquement via VPN.
  enabled: False
  interface: null
  routing_table: main

vpn:
  # On n'utilise pas de VPN déjà monté (preconfigured), seulement le pool.
  preconfigured:
    enabled: False
    vpns: {}

  vpnpool:
    # On laisse le service rooter démarrer / arrêter les VPN Proton automatiquement.
    enabled: True
    routing_tables:
      start_range: 100
      end_range: 200

    providers:
      protonvpn:
        max_connections: 3

        vpns:
          - type: openvpn
            config_path: /home/cuckoo/proton/ca.protonvpn.udp.ovpn
            up_script: /home/cuckoo/.cuckoocwd/rooter/scripts/openvpnroutes.sh
            country: ca

          - type: openvpn
            config_path: /home/cuckoo/proton/ch.protonvpn.udp.ovpn
            up_script: /home/cuckoo/.cuckoocwd/rooter/scripts/openvpnroutes.sh
            country: ch

          - type: openvpn
            config_path: /home/cuckoo/proton/fr.protonvpn.udp.ovpn
            up_script: /home/cuckoo/.cuckoocwd/rooter/scripts/openvpnroutes.sh
            country: fr

Pour permettre aux profils de configuration de s’authentifier auprès des serveurs Proton, il est nécessaire de renseigner vos identifiants dans un fichier, puis de le référencer dans chacun des profils .ovpn.
Depuis le répertoire qui contient les fichiers .ovpn :

# Crée le fichier /home/cuckoo/protonvpn/auth.txt contenant :
#   <username>
#   <password>
cd /home/cuckoo/protonvpn
sed -i 's|^auth-user-pass.*|auth-user-pass /home/cuckoo/protonvpn/auth.txt|' *.ovpn

Restreignez ensuite l’accès au fichier d’authentification :

# À exécuter en root
sudo chown root:root /home/cuckoo/protonvpn/auth.txt
sudo chmod 600 /home/cuckoo/protonvpn/auth.txt

Pour tester si les fichiers OVPN sont correctement configurés, on peut exécuter cette commande :

sudo openvpn --config /home/cuckoo/proton/fr.protonvpn.udp.ovpn

Redémarrez ensuite les services :

sudo systemctl restart cuckoo3-rooter.service
sudo systemctl restart cuckoo3.service

Commandes pour vérifier le bon fonctionnement et débuguer en cas de besoin :

sudo systemctl status cuckoo3.service
sudo systemctl status cuckoo3-rooter.service

sudo journalctl -eu cuckoo3 -n 50
sudo journalctl -eu cuckoo3-rooter -n 50

Une fois les services créés, vous pouvez redémarrer la machine pour contrôler que tout se passe comme prévu.

Debug

Il peut être nécessaire de rendre le script /home/cuckoo/.cuckoocwd/rooter/scripts/openvpnroutes.sh exécutable avec un chmod +x.

Si vous rencontrez l’erreur suivante dans les logs du fichier router.log :

Running OpenVPN starting command. command=['/usr/sbin/openvpn', '--config', '/home/cuckoo/proton/fr.protonvpn.udp.ovpn', ... '--iproute', '/sbin/ip', ...]
...
error=Failed to start VPN ... VPN exited during startup. Exit code: 1. See logs /home/cuckoo/.cuckoocwd/log/rooter/protonvpn-fr.protonvpn.udp.ovpn.log.

Il peut s’agir de cette issue GitHub (OpenVPN error with “–iproute” parameter #189).

Comme indiqué dans l’issue, le problème peut être contourné en commentant les lignes suivantes dans le fichier vpn.py :

if iproute_path:
    command.extend(["--iproute", str(iproute_path)])

(N’oubliez pas de redémarrer vos services pour que cette modification soit prise en compte.)

Enfin, j’ai rencontré un autre problème documenté dans l’issue GitHub #193, qui a été corrigé récemment et devrait prochainement être mergé dans la prochaine version du projet :

Failed to run plugin Pcapreader. 'int' object has no attribute 'type'

En attendant le merge, le problème a été contourné en installant une version patchée de la bibliothèque httpreplay sans pour autant désactiver pcapreader. Depuis le vev du projet :

pip install --force-reinstall "git+https://github.com/LM-CT/httpreplay.git@main"

Puis de redémarrer à nouveau les services.

C’est ainsi que j’ai pu utiliser la sandbox avec les fonctionnalités réseau, sans exposer l’IP de mon routeur aux malwares et sans désactiver de fonctionnalités intéressantes !


Utilisation
#

Une fois la machine redémarrée, vous pouvez accéder à l’interface Web (en HTTP par défaut, via l’adresse IP de la machine).
La page par défaut est celle des statistiques.

Cuckoo3 Statistiques

Il n’y a pour le moment pas grand-chose à observer.
Vous pouvez donc vous rendre dans Submit et envoyer votre premier binaire.

Si vous n’avez pas de binaire à analyser, vous pouvez vous rendre sur MalwareBazaar

Une fois ce fake captcha ce test de QI achevé, vous pourrez télécharger les binaires malveillants de votre choix.

MalwarebazaarCaptcha
Après des années à entraîner l’IA, c’est maintenant elle qui nous entraîne…

Gardez à l’esprit que l’environnement n’a pas accès à Internet pour le moment.
Si vous manquez d’inspiration, ce binaire est utilisé dans la suite de cet article. Il permet de tester un certain nombre de fonctionnalités proposées par Cuckoo3. Évitez naturellement de l’exécuter sur votre hôte 😉

Vous pouvez maintenant sélectionner votre binaire.
Si vous téléversez une archive chiffrée (ce qui est recommandé), vous pouvez renseigner le mot de passe sur l’écran de sélection.

Cuckoo3 Submit

Vous pouvez ensuite configurer l’analyse :

Cuckoo3 ConfigAnalysis

Vous pouvez choisir la durée d’analyse, la priorité (si plusieurs analyses sont lancées simultanément), ainsi que l’activation ou non du réseau (si celui-ci a été configuré en amont).

Une fois l’analyse lancée, comptez une minute de plus pour la création du rapport.

Vous pouvez ensuite vous rendre dans Analyses et attendre que votre détonation soit terminée.

Cuckoo3 analysis page

Cliquez ensuite sur la tâche pour accéder au rapport.

Cuckoo3 Report Summary

Dans le cas de ce binaire, le rapport est assez fourni. La détection du type de malware (sur la Behavioral map) ne se fait pas lors de chaque détonation, par exemple.

Le rapport se décompose en plusieurs parties :

Le Summary
  • Le Summary, lui-même composé :
    • d’informations sur l’analyse (le score, l’ID de l’analyse, les hash, etc.) ;
    • d’informations sur le fichier lui-même (dans Target, on retrouve le nom, le poids, le type, les hash, etc.) ;
    • d’informations sur la soumission du fichier (si le fichier était dans une archive, on retrouve ses informations ici) ;
    • et des différents paramètres de la détonation (durée, priorité, présence ou non d’Internet, commande utilisée pour le lancement, etc.).

Cuckoo3 Summary Analysis
Ce bandeau reste présent sur une grande partie des sous-menus du rapport

Cuckoo3 Summary Target

Cuckoo3 Summary Submission

Cuckoo3 Summary Settings

Il y a ensuite une matrice MITRE des différentes TTP observées lors de la détonation du binaire :

Cuckoo3 Matrice MITRE

Puis la Behavioral map, si le type de menace a pu être établi.

Passons maintenant à la partie PE File de l’analyse, dans laquelle nous pouvons retrouver le timestamp du fichier, l’Imphash, les sections, les ressources, les signatures, les imports et les exports.

Cuckoo3 PE File

Task Report
  • Enfin, vous pouvez accéder à la section Task Report en allant dans la partie Windows 10. Vous y retrouvez toujours des informations sur la tâche, mais aussi les Signatures associées aux TTP MITRE vues précédemment, les différents processus présentés sous la forme d’un process tree et des screenshots de l’attaque.

Cuckoo3 Task Report

Les sections Settings et Machine ne sont pas détaillées ici, car elles apportent relativement peu d’éléments dans le cadre de ce rapport. Sachez simplement que l’on y retrouve des informations sur la connectivité (ou son absence), ainsi que des détails sur le master de la VM, ici celui par défaut proposé par l’équipe de développement du projet.

Cuckoo3 Task Signatures
La "criticité" de la TTP la plus élevée détermine le score final de l’analyse, ici 10 (le score maximal).

Cuckoo3 Process Tree

Cuckoo3 Screenshots
Assez peu pertinente dans le cadre de cette détonation, mais elle peut donner une bonne indication de ce qui s’est passé sur la VM dans d’autres circonstances.

Par ailleurs, la partie Network permet de récupérer des informations intéressantes.
En plus de pouvoir télécharger le PCAP de l’analyse, il est possible de visualiser les appels DNS et les connexions UDP directement depuis la page de l’analyse.

Cuckoo3 DNS Query
La tentative de résolution d’un site .onion.pw (une des passerelles "Tor2web" les plus utilisées il y a quelques années) me semble, historiquement, d’une légitimité absolue…


Avantages et inconvénients
#

Avantages :

  • Documentation maintenue et à jour
  • Installation basique (sans prise en charge réseau) rapide et “simple” (plus que l’installation de Drakvuf, en tout cas)
  • API documentée
  • Support de Windows 7 / 10 (build 1703)
  • Supporte très bien la virtualisation imbriquée (sur un ESXi en tout cas)
  • Analyses de binaires assez rapides
  • Consommation de ressources lors des détonations assez raisonnable
  • Possibilité de lancer plusieurs détonations simultanées par défaut (au nombre de 3, à partir d’une même snapshot de la VM fournie par défaut)
  • Installation automatique d’un “pack logiciel” cohérent lors de l’installation de la VM (lecteur PDF, dépendances .NET, etc.)
  • Possibilité de soumettre une archive chiffrée et d’indiquer le mot de passe lors de la soumission de celle-ci
  • Possibilité de soumettre des liens (URL) pour analyse

Inconvénients :

  • Version de Windows 10 un peu datée aujourd’hui
  • Pas de prise en charge des binaires Linux
  • Impossibilité d’interagir avec la VM, ni même de voir en temps réel ce qui se passe visuellement lors de l’analyse (seules les captures d’écran automatisées peuvent en donner un aperçu)
  • Impossibilité de détonner des menaces récentes de type clickfix ou filefix, ou en tout cas pas nativement.

Tests comparatifs des sandboxes
#

Protocole de test
#

Depuis une machine virtuelle sous Windows 11 24H2, 5 binaires malveillants ont été téléchargés depuis MalwareBazaar, ainsi qu’un scénario supplémentaire de type ClickFix.

Liste des binaires

Les liens renvoient vers MalwareBazaar (ou JoeSandbox pour le ClickFix).
Les noms renseignés sont ceux indiqués dans les tags.

Afin de s’affranchir des difficultés potentielles liées à l’extraction et de réaliser ces tests dans de bonnes conditions, les binaires sont extraits en amont avant leur soumission aux sandboxes.

Les binaires ont été prétestés : pour ceux dont la chaîne d’infection repose sur plusieurs stages (dont certains nécessitent un accès en ligne), le fonctionnement a été vérifié en amont des tests le jour de l’analyse, afin de s’assurer qu’ils sont fonctionnels.

Les deux sandboxes disposent d’une connexion Internet lors de l’exécution des binaires.
Drakvuf utilise une IP de sortie OVH, tandis que Cuckoo3 sort via une IP ProtonVPN.

Pour ces tests, la durée d’exécution est fixée à 10 minutes pour Drakvuf et 5 minutes pour Cuckoo3.

Pour chaque détonation, les rapports générés par les deux sandboxes sont comparés selon les dimensions suivantes :

  • Process tree (clarté / complétude)
  • Fichiers / registre (visibilité, granularité)
  • Réseau (richesse des informations, URLs, domaines, protocoles)
  • TTP / MITRE / signatures (quantité et pertinence)
  • Verdict / classification (lorsqu’il existe)
  • Stabilité / erreurs éventuelles

Analyses
#

Ransom.Satan - exe

Date de l’analyse : 20/12/2025
Type : application/x-dosexec
Famille : Ransomware
Sha256 : 1a0a2fd546e3c05e15b2db3b531cb8e8755641f5f1c17910ce2fb7bbce2a05b7
Info malware : MalwareBazaar
Particularité : communication Tor (via proxy .pw)

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Process treeArbre clair et completArbre clair et complet
Fichiers / registreListe détaillée des fichiers édités et supprimésNA
RéseauInformations réseau détaillées (DNS, IP, URLs)Informations réseau détaillées (DNS, IP, URLs)
MITRE / TTP / signatures17 TTP remontées11 TTP et 16 signatures
Verdict / classificationFonctionnalité non présenteClassé comme Ransomware

Observations
#

  • Le chiffrement des données n’a démarré dans aucune des deux détonations.
  • Divergences notables :
    • L’injection de processus est remontée dans les TTP du rapport de Cuckoo3, mais n’apparaît pas dans celles observées par Drakvuf.
  • Dans les deux cas, la communication vers l’infrastructure Tor via une passerelle .onion.pw est correctement observée dans la partie réseau.
  • Le type de menace est correctement identifié comme ransomware par la sandbox.

Captures Drakvuf
#

Drakvuf Ransom.Satan - process tree
Process tree Drakvuf

Drakvuf Ransom.Satan - TTP
TTP détectées par Drakvuf

La requête vers le site sur le réseau Tor via la passerelle .pw est bien détectée.

Drakvuf Ransom.Satan - URLs
URLs détectées par Drakvuf

Captures Cuckoo3
#

Cuckoo3 Ransom.Satan - process tree
Process tree Cuckoo3

Cuckoo3 Ransom.Satan - TTP
TTP détectées par Cuckoo3

Cuckoo3 Ransom.Satan - URLs
L’URL .onion.pw est également détectée par le moteur d’analyse.

Cuckoo3 Ransom.Satan - signatures
Signatures associées à l’analyse Cuckoo3


Ransomware.Petya - exe

Date de l’analyse : 20/12/2025
Type : application/x-dosexec
Famille : Ransomware
Sha256 : 26b4699a7b9eeb16e76305d843d4ab05e94d43f3201436927e13b3ebafa90739
Info malware : MalwareBazaar
Particularité : BSOD / redémarrage (faux CHKDSK)

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Comportement systèmeBSOD déclenché, redémarrage non achevéLe redémarrage n’a pas été initié lors de l’exécution du binaire, et aucun BSOD n’a été observé
Process treeAucun processus enfant observéAucun processus enfant observé
RéseauAucun trafic réseau significatif observéAucun trafic réseau significatif observé
MITRE / TTP / signaturesTTP limitées, focalisées sur le comportement système4 TTP et 3 signatures
Verdict / classificationNANon explicitement classé dans le rapport

Observations
#

  • Dans les deux cas, la machine n’a pas achevé le redémarrage. Le faux CHKDSK n’a donc pas été entièrement observé à l’écran, bien que le message soit présent dans le binaire :

    WARNING: DO NOT TURN OFF YOUR PC! IF YOU ABORT THIS PROCESS, YOU COULD
    DESTROY ALL OF YOUR DATA! PLEASE ENSURE THAT YOUR POWER CABLE IS PLUGGED
    CHKDSK is repairing sector
    • Drakvuf : le BSOD est déclenché, indiquant un impact fort sur la stabilité du système.
    • Cuckoo3 : la VM reste dans un état incohérent et ne redémarre pas correctement après l’exécution.
  • Aucune des deux sandboxes n’a identifié les URLs .onion en analyse statique, et aucun hit réseau vers ces domaines n’a été observé :

    • http[://]petya5koahtsf7sv[.]onion/
    • http[://]petya37h5tbhyvki[.]onion/
  • La ransom note, bien présente en dur dans le binaire, n’a été créée sur aucune des deux machines :

    You became victim of the PETYA RANSOMWARE!
    The harddisks of your computer have been encrypted with an military grade
    encryption algorithm. There is no way to restore your data without a special
    key. You can purchase this key on the darknet page shown in step 2.
    [...]

Captures Drakvuf
#

Drakvuf Ransomware.Petya - process tree
Process tree Drakvuf

Drakvuf Ransomware.Petya - TTP
TTP détectées par Drakvuf

Drakvuf Ransomware.Petya - BSOD
BSOD / faux CHKDSK observé
Drakvuf Ransomware.Petya - BSOD (suite)
Suite de l’écran de BSOD / faux CHKDSK

Captures Cuckoo3
#

Cuckoo3 Ransomware.Petya - process tree
Process tree Cuckoo3

Cuckoo3 Ransomware.Petya - TTP
TTP détectées par Cuckoo3

Cuckoo3 Ransomware.Petya - signatures
Signatures associées à l’analyse Cuckoo3


Vidar - exe

Date de l’analyse : 20/12/2025
Type : application/x-dosexec
Famille : Infostealer (Vidar)
Sha256 : 0c123691f58f567a62eb1202a285e07bf635a040a1b35427438c0bcef491a20d
Info malware : MalwareBazaar
Particularité : binaire décompressé UPX (entrée UPX unpacked, tag upx-dec)

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Process treeAucun processus enfant observéAucun processus enfant observé
Fichiers / registrePeu d’interactions entre le binaire et le système de fichiersNA
RéseauAucune communication C2 observéeAucune communication C2 observée
MITRE / TTP / signatures18 TTP4 TTP et 6 signatures
Verdict / classificationNANon explicitement classé dans le rapport

Observations
#

  • La connexion C2 ne s’est pas établie, possiblement car le serveur a été suspendu par l’hébergeur.
  • Un surprenant pop-up laisse penser que ce binaire était un test, ou que le threat actor n’a pas payé la licence de son packer :

Vidar - pop-up d’avertissement
Une étonnante mise en garde

  • Il aurait été intéressant de détonner également la version unpackée pour vérifier si le message persiste et si le comportement reste identique.

Captures Drakvuf
#

Drakvuf Vidar - process tree
Process tree Drakvuf

Drakvuf Vidar - TTP
TTP détectées par Drakvuf

Captures Cuckoo3
#

Cuckoo3 Vidar - process tree
Process tree Cuckoo3

Cuckoo3 Vidar - TTP
TTP détectées par Cuckoo3
Cuckoo3 Vidar - signatures
Signatures associées à l’analyse Cuckoo3


AgentTesla - exe

Date de l’analyse : 23/12/2025
Type : application/x-dosexec
Famille : AgentTesla
Sha256 : 24fe87b1951171c60a79a85bd1edc5da865222b2065c8cd30de6d5dacabb5f85
Info malware : MalwareBazaar
Particularité : présence d’un endpoint d’exfiltration SMTP indiqué dans l’entrée (mail.en-oc.com:587)

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Process treeNA (rapport en erreur)Aucun processus enfant observé
Fichiers / registreNANA
RéseauNAAucune communication C2 observée
MITRE / TTP / signaturesNA5 TTP et 10 signatures
Verdict / classificationNALe binaire a été catégorisé comme Stealer plutôt que comme Trojan

Observations
#

  • Le format du binaire n’a pas permis son exécution sur Drakvuf, même après plusieurs essais.
  • Le binaire n’est pas parvenu à contacter son C2.
  • Aucune trace de tentative d’exfiltration SMTP n’a été observée vers mail.en-oc.com:587.

Captures Drakvuf
#

Drakvuf AgentTesla - erreur
Rapport en erreur côté Drakvuf

Captures Cuckoo3
#

Cuckoo3 AgentTesla - process tree
Process tree Cuckoo3

Cuckoo3 AgentTesla - TTP
TTP détectées par Cuckoo3

Cuckoo3 AgentTesla - signatures
Signatures associées à l’analyse Cuckoo3


QuasarRAT - exe

Date de l’analyse : 23/12/2025
Type : application/x-dosexec
Famille : RAT (QuasarRAT)
Sha256 : e04c0a63203c01287f3caeb0713dbdaf55cf31a3fbaf5fdefd9e1047beb9436b
Info malware : MalwareBazaar
Particularité : Remote Administration Tool, C2 exposé dans l’entrée (178.22.24.175:4782)

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Process treeUn processus enfant observé6 processus enfants observés
Fichiers / registrePas de remontées pertinentesNA
RéseauPas de communication observée vers le C2 déclaréPas de communication observée vers le C2 déclaré, bien que le binaire ait déroulé plusieurs de ses stages
MITRE / TTP / signatures15 TTP9 signatures
Verdict / classificationNAPas de catégorie définie

Observations
#

  • Le binaire n’est pas parvenu à contacter son C2.
  • L’analyse de Cuckoo3 est plus complète, la chaîne d’exécution a pu aller plus loin.

Captures Drakvuf
#

Drakvuf QuasarRAT - process tree
Process tree Drakvuf

Drakvuf QuasarRAT - TTP
TTP détectées par Drakvuf

Captures Cuckoo3
#

Cuckoo3 QuasarRAT - process tree
Process tree Cuckoo3

Matrice MITRE non présente dans le rapport ; voici les signatures indiquées à la place :

Cuckoo3 QuasarRAT - signatures
Signatures détectées par Cuckoo3


ClickFix

Date de l’analyse : 23/12/2025
Type : URL (campagne web / faux CAPTCHA)
Famille : CAPTCHA scam (ClickFix), avec mention de DonutLoader dans l’analyse
Sha256 : n/a (analyse d’URL)
Info malware : JoeSandbox
Particularité : page “ClickFix” (faux CAPTCHA) observée sur www.tripmate.co.il + infrastructure associée (ex. getfix.win, noverfault.org)

Notes
#

L’interaction n’étant pas possible sur Cuckoo3, et Drakvuf n’ayant pas été pensé pour l’analyse de ce type de menace (flot d’exécution déclenché par clic utilisateur sur une page web), j’ai dû détourner une fonctionnalité présente sur les deux sandboxes pour simuler l’exécution d’un scénario ClickFix.

Pour cela, j’ai sélectionné un fichier arbitraire sur ma machine, puis utilisé :

  • la fonctionnalité “Launch command” sur Cuckoo3 ;
  • la fonctionnalité “Start command” sur Drakvuf.

Ces deux fonctionnalités sont normalement prévues pour lancer le binaire uploadé avec des arguments précis.
Dans ce cas, j’ai simplement récupéré (depuis une VM de test et non directement depuis les sandboxes) la commande PowerShell que le faux CAPTCHA demande d’exécuter, et c’est cette commande que j’ai utilisée avec les deux mécanismes de lancement mentionnés plus tôt.

Concrètement :

  • le fichier sélectionné initialement depuis l’interface web n’est pas exécuté ;
  • seule la commande fournie par le faux CAPTCHA est lancée dans la VM via les options “Launch/Start command”.

Cela permet de tester un scénario ClickFix dans ces sandboxes bien qu’elles ne supportent pas nativement ce type de menace (déclenchée par interaction utilisateur sur une page web plutôt que par exécution directe d’un binaire).

Comparaison Drakvuf / Cuckoo3
#

AspectDrakvufCuckoo3
Process treeSeul le premier PowerShell est observé dans l’arbre des processus4 processus enfants sont observés
RéseauNARien de significatif n’est observé dans la partie réseau
MITRE / TTP / signatures12 TTP7 TTP et 9 signatures
Verdict / classificationNAPas de catégorie définie

Observations
#

  • Une fois le script exécuté, celui-ci semble récupérer les ressources nécessaires à la compilation du stage final.
  • Bien que ces étapes se soient déroulées sur Cuckoo3, je n’ai observé aucune communication C2 sur l’une ou l’autre des deux sandboxes.

Captures Drakvuf
#

Drakvuf ClickFix - process tree
Process tree Drakvuf

Drakvuf ClickFix - TTP
TTP détectées par Drakvuf

Captures Cuckoo3
#

Cuckoo3 ClickFix - process tree
Process tree Cuckoo3

Cuckoo3 ClickFix - TTP
TTP détectées par Cuckoo3

Cuckoo3 ClickFix - signatures
Signatures associées à l’analyse Cuckoo3


Astuce pour trouver des fake CAPTCHA et des ClickFix récents à des fins d’analyse : JoeSandbox - Any.Run (chercher “clickfix”)

Il est important de garder à l’esprit que ces deux solutions sont encore en test, en bêta, et ne sont pas vouées à être utilisées telles quelles en production. Les observations ci-dessous n’ont pas vocation à critiquer les projets, mais à analyser les comportements que j’ai observés lors de mon utilisation de celles-ci.

À la lecture des détonations ci-dessus, on pourrait avoir l’impression que les fonctionnalités réseau de Drakvuf ne sont pas pleinement opérationnelles. Ce comportement ne reflète toutefois pas les observations globales effectuées lors des tests. À plusieurs reprises, l’exécution de plusieurs stages d’un même binaire a été observée, y compris ceux nécessitant une connectivité réseau fonctionnelle. Dans l’environnement de test utilisé pour cet article, les détonations faisant appel au réseau se déroulent correctement dans environ 25 % des cas.

Les TTP observées par Drakvuf sont celles de l’ensemble des processus, mais le fait de savoir quel processus a déclenché chaque TTP est particulièrement intéressant. Ce point est également valable pour les différents éléments du rapport (interactions réseau, fichiers touchés, etc.). La quantité d’informations apportée par les logs de chacun des plugins sélectionnés au démarrage de la détonation permet une analyse manuelle plus fine de ce qui s’est passé après l’exécution.

Il ne faut cependant pas s’imaginer que l’interaction permise par Drakvuf est au même niveau que celle proposée par certains services en ligne tels que JoeSandbox ou Any.Run. Même si l’approche peut paraître similaire (une fenêtre avec une intégration VNC de la machine durant l’analyse), le modèle agentless de Drakvuf introduit une certaine latence lors de l’exécution. C’est aussi cette approche qui permet d’obtenir des logs aussi détaillés. Les informations fournies pour chaque processus exécuté sont également très utiles en post-analyse.

Enfin, certains formats de fichiers ne peuvent pas être détonnés dans Drakvuf (HTA, LNK, VBS). À la date de rédaction, les fichiers qui s’exécutent sans problème sont principalement les exécutables, les DLL et les scripts .bat. Ces deux listes ne sont pas exhaustives.

Pour Cuckoo3, il est intéressant de noter que le score associé à l’analyse est celui de la signature ayant le score le plus élevé. J’ai toutefois remarqué, lors de mes analyses, que le fonctionnement même de la VM durant l’exécution fait qu’il n’est pas possible d’obtenir un score inférieur à 6, y compris lorsque le binaire est légitime.

Même constat pour l’analyse de sites (non représentée dans les analyses ci-dessus, car la fonctionnalité n’existe pas sur Drakvuf) : en l’état, cette fonctionnalité ne s’est pas révélée particulièrement pertinente. Elle permet d’obtenir une prévisualisation de la page et une analyse des flux réseau, mais sans aller beaucoup plus loin. Sur ce point, des services comme urlscan.io ou Farelo sont bien plus pertinents et généreux en détails sur le site analysé. Peut-être que cette fonctionnalité sera développée dans de prochaines versions. À noter également que le score associé à l’analyse d’un site n’est pas très représentatif : dès lors que la signature Checks computer location settings est déclenchée, le score ne peut pas être inférieur à 7, même lorsque le site est légitime. Le système de classification peut être pratique, bien que celui-ci ne soit pas sans faille. Il est cependant regrettable que les classifications, lorsqu’elles sont présentes dans le rapport, ne soient pas visibles dans une colonne dédiée depuis la liste des analyses.

Les informations fournies pour chaque appel HTTP sont très complètes et permettent d’en comprendre rapidement le contenu. Les autres appels réseau (Host, UDP, DNS, Domain et TCP) sont également bien représentés et pratiques à exploiter.

Les deux sandboxes proposent de récupérer le PCAP de l’analyse, ce qui peut être pertinent pour produire un contre-rapport et pousser l’analyse plus loin. Drakvuf propose en plus la récupération des clés TLS (permettant de déchiffrer l’intégralité du trafic web chiffré) et des dumps mémoire des processus.

Enfin, les captures d’écran permettent de conserver une trace visuelle des analyses, surtout dans le cas de Cuckoo3 où, sans les screenshots, il n’y aurait aucun moyen de savoir comment l’analyse s’est visuellement déroulée.

En résumé, sous forme d’un tableau :

Les deux projets sont encore en bêta et n’ont pas vocation, en l’état, à être déployés tels quels en production. Les constats ci-dessous reflètent uniquement les comportements observés pendant les détonations présentées dans l’article.

Aspect opérationnelDrakvuf (constats sur ces échantillons)Cuckoo3 (constats sur ces échantillons)Plus-value concrète mise en évidence
Maturité / posture produitProjet très orienté R&D / lab, toujours en cours de développement, déploiement plus délicat, tuning important. Fonctionne bien sur un serveur bare metal, plus capricieux en nested virtualization.Installation plus guidée, mieux adaptée à un usage SOC / triage quotidien, mais toujours en cours de développement également et nécessitant aussi du débug (réseau, VPN, etc.).Les deux doivent être traités comme des projets intéressants et pertinents, pas comme des produits production ready.
Verdict, score et classificationPas de verdict ni de score automatique : on raisonne sur les TTP et les logs.Score = score de la signature la plus élevée. Score rarement < 6 pour un binaire, même légitime. Pour les sites, Checks computer location settings bloque le score à ≥ 7. Classification explicite (Ransomware, Stealer).Cuckoo3 apporte un triage rapide (type de menace + score), mais le score ne doit pas être interprété comme une mesure fine de légitimité et les classifications peuvent être erronées.
Richesse des TTP / granularité comportementaleBeaucoup de TTP même sans C2 actif (17 pour Ransom.Satan, 18 pour Vidar, 15 pour QuasarRAT, 12 pour ClickFix). TTP attribuées à un processus donné, logs de plugins très détaillés.Moins de TTP brutes, mais complétées par les signatures et la matrice MITRE. Vue plus “haut niveau” sur le comportement (Ransom.Satan, AgentTesla, QuasarRAT).Drakvuf excelle pour une analyse manuelle fine (qui fait quoi, quand, comment), Cuckoo3 pour le mapping rapide vers des patterns connus.
Process tree / chaîne d’exécutionArbre clair mais parfois peu bavard : pas ou peu d’enfants sur Vidar / Petya / ClickFix ; 1 enfant sur QuasarRAT.Process tree plus riche sur les scénarios multi-stages : 6 processus enfants (QuasarRAT), 4 pour ClickFix, vision plus “applicative” des enchaînements.Cuckoo3 est plus confortable pour visualiser les chaînes multi-processus, Drakvuf reste plus synthétique mais compensé par ses TTP ainsi que l’analyse des accès, modifications et suppressions de fichiers.
Réseau : fiabilité et visibilitéDans cet environnement, les détonations nécessitant du réseau aboutissent correctement dans ~25 % des cas, mais lorsqu’elles passent, on observe bien les stages en ligne. PCAP + clés TLS.Connectivité plus fiable dans ces tests. Les appels HTTP sont très détaillés (URL, headers, payload) et les autres artefacts (Host, UDP, DNS, Domain, TCP) sont bien représentés. PCAP téléchargeable (sans clés TLS).En contexte C2 parfois injoignable, Drakvuf donne une vue bas niveau + déchiffrement TLS et est le seul à remonter les Cracked URL. Cuckoo3 offre une lecture très lisible du trafic observé.
Analyse d’URL / scénarios webPas d’analyse de site dédiée. Scénario ClickFix rejoué via la commande PowerShell (Start command), avec TTP pertinentes, mais pas de vue spécifique “web”.Analyse de sites existante mais assez limitée : prévisualisation + flux réseau, peu exploitable comparé à des services comme urlscan.io ou Farelo. Score peu représentatif (signature de localisation).Pour l’instant, ni l’un ni l’autre ne remplace un outil spécialisé d’analyse d’URL ; Cuckoo3 reste un complément pour voir “ce que la VM a chargé”.
Scénarios “user-driven” (ClickFix, PowerShell)Permet de rejouer la commande ClickFix via Start command. Voit le PowerShell et les TTP associées, mais process tree minimal.Même approche via Launch command, avec 4 processus enfants et signatures associées. Toujours sans interaction utilisateur native dans le navigateur.Les deux peuvent être détournées pour rejouer un flux ClickFix, Cuckoo3 offre un peu plus de détails sur la chaîne de processus déclenchés.
Comportements destructifs / instabilité systèmeSupporte bien les comportements agressifs (BSOD Petya).Sur Petya, la VM se retrouve dans un état incohérent, sans BSOD net ni redémarrage maîtrisé.Drakvuf est plus adapté pour observer des échantillons très destructifs sans perdre la visibilité ni casser entièrement le scénario.
Formats de fichiers pris en chargeÀ la date de rédaction : exécutable PE, DLL et scripts .bat fonctionnent correctement. Pas de support pour HTA, LNK, VBS.Large éventail : PE, documents, archives, scripts, et URLs. Meilleur candidat pour simuler un flux utilisateur “classique” (PJ, scripts, etc.).Pour un flux d’entreprise hétérogène, Cuckoo3 couvre nettement plus de formats ; Drakvuf est plus ciblé sur le PE / code natif.
Artefacts post-mortem (PCAP, TLS, mémoire, etc.)PCAP, clés TLS (pour déchiffrer le trafic web), dumps mémoire par processus, plus logs détaillés des plugins.PCAP téléchargeable, vue réseau organisée (HTTP, DNS, UDP, TCP…). Pas de clés TLS ni de dumps mémoire orientés processus.Drakvuf est très fort pour la forensique approfondie, Cuckoo3 est plus efficace pour une lecture rapide et structurée des artefacts réseau.
Traces visuelles et interactionAccès VNC depuis l’interface, mais avec une latence sensible liée au modèle agentless. Permet surtout de “jeter un œil” pendant ou après la détonation.Pas d’accès interactif ; seules les captures d’écran permettent de comprendre visuellement ce qui s’est passé. Indispensables pour reconstruire le déroulé côté analyste.Drakvuf donne un minimum de contrôle interactif, Cuckoo3 compense par des captures d’écran qui servent de journal visuel de la détonation.
Couverture globale sur cet échantillon de testsExcellente visibilité bas niveau, nombreuses TTP, observation fiable d’effets système extrêmes et artefacts réseau/mémoire, mais couverture partielle des formats et du réseau.Très bon pour le triage de binaires Windows “classiques”, avec score, classification, process tree riche et réseau lisible, mais score parfois trop optimiste et URL analysis limitée.Les deux sont clairement complémentaires : Drakvuf éclaire le comment en profondeur, Cuckoo3 aide à qualifier rapidement le quoi et le pourquoi.

Synthèse
#

Malgré certaines difficultés liées à l’installation et à la configuration des deux projets, je tiens à remercier les équipes qui travaillent dessus. Je n’imagine pas le temps qu’il a fallu pour rendre ces projets utilisables.

Bien que n’étant pas aussi complètes que les solutions payantes et en ligne du marché, ces sandboxes peuvent tout à fait répondre aux besoins d’entreprises soucieuses de ne pas partager leurs binaires à l’extérieur (à condition d’avoir suffisamment d’administrateurs en capacité de débuguer et de maintenir le projet en interne).

Les deux projets reposent sur des philosophies différentes : l’un adopte une approche plus automatisée lors des détonations (Cuckoo3), et le second est plus “semi-automatisé” (en laissant la possibilité à l’utilisateur d’interagir avec la sandbox lors des détonations).
Aucune de ces approches n’est meilleure en soi : elles répondent à des besoins légèrement différents.

Comme indiqué en introduction, c’est sur la version 0.19 de la sandbox Drakvuf que l’essentiel des tests a été réalisé. La version 0.20 étant récemment sortie (en date du 17 novembre), la comparaison ci-dessus a été faite sur cette nouvelle version.

Comparaison des produits
#

Les approches des deux solutions sont assez différentes.

DRAKVUF s’appuie sur l’hyperviseur Xen et sur les extensions de virtualisation matérielle d’Intel (VT-x / EPT), ainsi que sur le mécanisme altp2m de Xen. En pratique, certaines pages mémoire de la VM invitée sont marquées dans les Extended Page Tables de façon à provoquer un VM-exit dès que le malware exécute du code dessus. À ce moment-là, l’exécution bascule dans l’hyperviseur et DRAKVUF reconstruit l’événement (appel d’API, syscall, accès mémoire critique, etc.) en lisant la mémoire et les registres de la machine invitée via la VMI. Toute l’observation repose donc sur l’introspection côté hyperviseur, sans driver ni DLL de monitoring installés dans le Windows invité : c’est une approche agentless.

Pour enrichir cette observation brute, DRAKVUF s’appuie sur une série de plugins qui décodent différents aspects du comportement : traçage de processus et de threads, surveillance des opérations sur les fichiers et le registre, suivi du réseau ou détection d’injections de code. Techniquement, ces plugins ne hookent pas les API depuis l’intérieur du système, mais posent des breakpoints et des événements mémoire sur les routines kernel et les bibliothèques système intéressantes. À chaque déclenchement, l’hyperviseur récupère le contexte et reconstruit l’appel observé. Fonctionnellement, on obtient un traçage API/syscall très proche de celui d’une sandbox classique, mais toute la logique reste en dehors de la VM, dans Xen et dans le démon DRAKVUF.

Par-dessus ce moteur d’introspection, la DRAKVUF Sandbox ajoute le composant drakrun, qui orchestre les machines virtuelles dédiées à l’analyse : création de la base, gestion des snapshots, configuration réseau, lancement des détonations et collecte des résultats. L’injection des binaires dans l’invité est confiée à un outil dédié, l’injector, qui utilise les primitives de DRAKVUF pour détourner un thread d’un processus stable à l’intérieur de la VM (typiquement un thread d’explorer.exe) et lui faire exécuter des actions pilotées depuis l’hôte : copier un fichier dans le profil utilisateur, lancer un exécutable, exécuter une commande de préparation, etc. Ce thread reste un thread “légitime” du point de vue de Windows, mais son flux est temporairement contrôlé via l’hyperviseur, ce qui permet d’automatiser l’analyse sans installer d’agent permanent. Une fois le sample lancé, l’analyse proprement dite reste agentless : seuls subsistent les hooks VMI posés via EPT/altp2m et les plugins qui traitent les événements.

Du point de vue du malware, la surface de détection est donc limitée aux artefacts inhérents à la virtualisation Xen : périphériques virtuels caractéristiques, configuration matérielle un peu atypique, et éventuellement des timings légèrement dégradés dus aux VM-exits fréquents et au coût de l’introspection. En revanche, il n’y a pas de service d’“agent” qui écoute sur un port, pas de DLL de monitoring injectée en permanence, ni de processus au nom suspect dans la VM. Cette architecture rend DRAKVUF particulièrement intéressante face à des échantillons dotés de capacités anti-sandbox avancées, qui cherchent explicitement les artefacts de solutions comme Cuckoo3, tout en offrant une excellente visibilité sur les appels API et les syscalls, aussi bien en userland qu’au niveau noyau.

Cuckoo3 adopte une philosophie presque inverse. Là où DRAKVUF observe le comportement depuis l’hyperviseur en reconstruisant les événements à partir de la mémoire, Cuckoo3 repose sur un couple “agent / monitor” installé à l’intérieur de la machine invitée. Un agent tourne dans le système analysé pour recevoir les ordres du serveur Cuckoo3, déposer les fichiers à tester, lancer les exécutables ou ouvrir les URL, puis renvoyer des informations de statut. La collecte fine du comportement est assurée par un monitor dédié (DLL et stager fournis avec Cuckoo3), injecté dans les processus ciblés ; ce monitor hooke directement les API de Windows, suit la création de processus fils, intercepte les opérations sur les fichiers, le registre et le réseau, puis renvoie un flux d’événements comportementaux au serveur d’analyse. Toute la chaîne de collecte est donc in-guest : elle vit dans le contexte même où s’exécute le malware.

Ce choix architectural a des conséquences fonctionnelles importantes. D’un côté, comme le monitor s’exécute dans le même espace d’adressage que le malware et hooke les API au moment où elles sont réellement appelées, Cuckoo3 peut capturer des informations très riches et de haut niveau, y compris les paramètres exacts des appels, certaines chaînes manipulées ou des artefacts d’interface utilisateur, le tout avec un coût de mise au point relativement faible. De l’autre, cette instrumentation laisse des traces visibles dans le système invité : un agent qui écoute sur un port, une DLL injectée et des hooks en mémoire que des malwares un peu méfiants peuvent rechercher explicitement. Cuckoo3 reste néanmoins très attractif en pratique, car il gère nativement une grande variété de formats (exécutables, documents, archives, scripts, URL), s’intègre bien dans un environnement SOC grâce à ses API et à ses modules de reporting, et bénéficie d’un écosystème important de signatures et de modules de post-traitement.

En résumé, DRAKVUF (via drakrun) et Cuckoo3 analysent tous deux le comportement dynamique d’un binaire malveillant, mais ils ne le font ni au même niveau ni avec les mêmes compromis. DRAKVUF privilégie une observation très furtive et très bas niveau depuis l’hyperviseur, en s’appuyant sur EPT et altp2m pour déclencher des VM-exits et sur des plugins d’introspection pour reconstruire ce que fait le malware sans jamais toucher au système invité. Cuckoo3, à l’inverse, assume pleinement une instrumentation en profondeur depuis l’intérieur de la VM, avec un agent et un monitor hookant les API, pour proposer une plateforme d’analyse généraliste, extensible et simple à intégrer dans des workflows de réponse à incident. Dans un contexte opérationnel, les deux approches sont moins concurrentes que complémentaires : Cuckoo3 traite efficacement le gros du flux avec une visibilité très riche côté applicatif, tandis que DRAKVUF apporte une couche d’observation plus discrète et plus robuste face aux échantillons les plus hostiles à la sandbox.

AspectDRAKVUF / drakrunCuckoo3
Mode d’analyseHyperviseur (Xen), VMI, approche agentlessAgent invité + DLL de monitoring injectée dans les processus
HyperviseurXen uniquement, CPU Intel VT-x / EPT requisKVM/QEMU, mais plusieurs autres hyperviseurs possibles (VirtualBox, VMware, etc.)
StealthTrès élevé (aucun code de monitoring dans le guest)Bon, mais agent/monitor in-guest détectables
Visibilité kernelExcellente (introspection noyau via VMI)Indirecte (via hooks et monitor in-guest)
Types de fichiers / fluxPrincipalement binaires PE (.exe), documents possibles si configuration manuelleLarge : PE, documents, archives, scripts, URL, etc.
Surface de détectionArtefacts de virtualisation (Xen, timings), pas d’agent ni de DLL à détecterAgent, DLL injectée et hooks en mémoire potentiellement recherchés par le malware
Niveau d’automatisationSemi-automatisé : orchestration par drakrun, possibilité d’interactionsTrès automatisé : scénarios pilotés par l’agent, pas d’intervention manuelle
Interactivité en détonationPossible (prise de main sur la VM via VNC depuis l’interface Web)Pas d’accès interactif, seulement des screenshots
Intégration / écosystèmePlugins VMI puissants, approche plus spécialiséeÉcosystème plus large (signatures, modules, API REST, intégration SOC facilitée)

Et après ?
#

Si vous avez tenu jusqu’ici, vous avez sans doute compris que Drakvuf et Cuckoo3 ne sont qu’une petite partie de l’écosystème. D’autres briques méritent clairement un coup d’œil. Côté gestion de machines virtuelles, on peut par exemple citer mofos de Synacktiv, un framework de manipulation de VM basé sur Libvirt/QEMU/KVM, très inspiré de Qubes OS, qui permet de monter rapidement des environnements compartimentés avec gestion du réseau, du presse-papiers et des fenêtres applicatives.
Dans un registre plus orienté cyber range, Ludus permet d’automatiser la création de lab complets (AD, postes Windows, Linux, etc.) sur Proxmox, en s’appuyant sur Packer et Ansible pour déployer des environnements de test clés en main pour red, blue ou purple team.
Et si vous cherchez une sandbox dans la lignée de Cuckoo, CAPE (Config And Payload Extraction) en reprend l’architecture tout en ajoutant du dépackaging dynamique, de la classification via règles YARA sur les payloads déchiffrés et un moteur d’extraction de configuration nettement plus poussé, pensé pour automatiser une bonne partie du travail habituellement fait en rétro.
Enfin, si vous cherchez une analyse récente et complète des sandboxes sur un plan plus académique, je ne peux que vous conseiller ce papier : A Classification of Malware Sandboxes and Their Features.

Rien n’empêche non plus de combiner tout ça pour monter votre propre lab sur mesure : hyperviseur maison (Proxmox, KVM, ESXi), un peu d’Ansible ou de Terraform pour l’orchestration, et quelques briques réseau (proxy, DNS, IDS/IPS) pour recoller le tout. Mais ça, ce sera peut être l’objet d’un prochain article, dédié à la construction d’un petit lab modulaire “from scratch” en partant de ces différents outils. 🙂


Cet article est publié sous licence Creative Commons Attribution 4.0 International.
Vous êtes libre de le partager et de l’adapter, à condition de créditer l’auteur et de mentionner les éventuelles modifications.
Crédit photo d’illustration : Jobert Enamno

Articles connexes