
Le sandbox Linux multiplateforme
Detux est un bac à sable développé pour analyser le trafic des logiciels malveillants Linux et capturer les IOCs ce faisant. L'hyperviseur QEMU est utilisé pour émuler Linux (Debian) pour diverses architectures CPU.
Les CPU suivants sont actuellement pris en charge :
Utilisez la version live maintenant : http://detux.org
Cette version de Detux contient le script pour exécuter un binaire/script Linux dans une architecture CPU spécifiée. Ne vous inquiétez pas si vous ne connaissez pas la plateforme, c'est dans le script, le package Magic aide à choisir l'architecture CPU de manière automatisée. x86 est la version CPU par défaut, elle peut être modifiée vers une autre dans le fichier de configuration.
Cette version fournit le rapport d'analyse au format DICT, qui peut être facilement personnalisé pour être inséré dans des bases NOSQL.
Un exemple de script a été fourni qui démontre l'utilisation de la bibliothèque du bac à sable.
- Analyse statique
-- Chaînes de base extraites du binaire
-- Informations ELF générées par les commandes readelf
-- report.py peut être modifié pour ajouter plus de commandes tierces pour analyser le binaire et ajouter le résultat au DICT.
- Analyse dynamique
-- Les pcaps capturés sont analysés avec DPKT pour extraire les IOC et les informations lisibles des paquets.
Paquets système
Bibliothèques Python (de préférence utiliser un environnement virtuel)
Veuillez vous assurer que les prérequis ci-dessus sont satisfaits avant d'utiliser Detux. Quelques dépendances peuvent varier d'un OS à l'autre.
- NIC1 : Cette interface est pour accéder à l'hôte
- NIC2 : Interface pontée avec les VM du bac à sable QEMU. On peut rediriger le trafic de l'interface vers WHONIX ou REMNUX ou une passerelle personnalisée pour filtrer/autoriser l'accès Internet pour les VM sandboxées.
Un grand merci à aurel qui a téléchargé des images VM Debian QEMU préconstruites pour toutes les architectures CPU possibles. Les images VM se trouvent à : https://people.debian.org/~aurel32/qemu/, le même lien contient des exemples de commandes pour invoquer les images VM.
Vous pouvez utiliser le script suivant pour télécharger automatiquement les images VM dans le dossier "qemu" de Detux.
#x86
wget https://people.debian.org/~aurel32/qemu/i386/debian_wheezy_i386_standard.qcow2 -P qemu/x86/1/
#x86-64
wget https://people.debian.org/~aurel32/qemu/amd64/debian_wheezy_amd64_standard.qcow2 -P qemu/x86-64/1/
#arm
wget https://people.debian.org/~aurel32/qemu/armel/debian_wheezy_armel_standard.qcow2 -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/initrd.img-3.2.0-4-versatile -P qemu/arm/1/
wget https://people.debian.org/~aurel32/qemu/armel/vmlinuz-3.2.0-4-versatile -P qemu/arm/1/
#mips
wget https://people.debian.org/~aurel32/qemu/mips/vmlinux-3.2.0-4-4kc-malta -P qemu/mips/1/
wget https://people.debian.org/~aurel32/qemu/mips/debian_wheezy_mips_standard.qcow2 -P qemu/mips/1/
#mipsel
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta -P qemu/mipsel/1/
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2 -P qemu/mipsel/1/
Detux utilise SSH pour communiquer avec les VM, donc ceci est actuellement nécessaire pour que les VM aient une capacité réseau. En considérant que les binaires listés sont dans le même chemin, vous pouvez ajouter les lignes suivantes à /etc/sudoers (uniquement si vous êtes un utilisateur non root) :
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<your detux username here> ALL = (ALL) NOPASSWD: QEMU_CMD
Changez les chemins vers les binaires s'ils diffèrent pour vous.
Ajoutez la configuration suivante à /etc/qemu-ifup, sauvegardez l'original si vous en avez déjà un :
#! /bin/sh
# Script to bring a network (tap) device for qemu up.
# The idea is to add the tap device to the same bridge
# as we have default routing to.
# in order to be able to find brctl
PATH=$PATH:/sbin:/usr/sbin
ip=$(which ip)
ifconfig=$(which ifconfig)
echo "Starting" $1
if [ -n "$ip" ]; then
ip link set "$1" up
else
brctl=$(which brctl)
if [ ! "$ip" -o ! "$brctl" ]; then
echo "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2
exit 0
fi
ifconfig "$1" 0.0.0.0 up
fi
switch=$(ip route ls | \
awk '/^default / {
for(i=0;i<NF;i++) { if ($i == "dev") { print $(i+1); next; } }
}'
)
if [ -d /sys/class/net/br0/bridge/. ]; then
if [ -n "$ip" ]; then
ip link set "$1" master br0
else
brctl addif br0 "$1"
fi
exit # exit with status of the previous command
fi
echo "W: $0: no bridge for guest interface found" >&2
En considérant que eth0 est l'interface avec laquelle vous voulez que vos VM soient pontées, vous pouvez supprimer les configurations pour eth0 et utiliser les configurations suivantes dans /etc/network/interfaces :
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
Vous pouvez aussi spécifier une adresse statique que vous utilisiez pour eth0.
Naviguez jusqu'au dossier dans lequel se trouvent vos images VM pour chaque image QEMU, par exemple pour ARM :
<your detux folder>/qemu/arm/1/
Pour chaque image, suivez les instructions de démarrage de la VM données à "https://people.debian.org/~aurel32/", pour lancer la VM. Cependant, si vous êtes un utilisateur non root, vous devrez utiliser sudo.
Commandes pour démarrer les VM (Remplacez par l'adresse MAC que vous souhaitez) :
#x86
sudo qemu-system-i386 -hda qemu/x86/1/debian_wheezy_i386_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#x86-64
sudo qemu-system-x86_64 -hda qemu/x86-64/1/debian_wheezy_amd64_standard.qcow2 -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#arm
sudo qemu-system-arm -M versatilepb -kernel qemu/arm/1/vmlinuz-3.2.0-4-versatile -initrd qemu/arm/1/initrd.img-3.2.0-4-versatile -hda qemu/arm/1/debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mips
sudo qemu-system-mips -M malta -kernel qemu/mips/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mips/1/debian_wheezy_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
#mipsel
sudo qemu-system-mipsel -M malta -kernel qemu/mipsel/1/vmlinux-3.2.0-4-4kc-malta -hda qemu/mipsel/1/debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0" -vnc 127.0.0.1:5901 -net nic,macaddr=<MACADDR> -net tap -monitor stdio
Detux nécessite un snapshot de VM préconfiguré avec des adresses IP et une configuration SSH.
(qemu)
(qemu) savevm init
(qemu) q
-- Répétez depuis l'étape 1 pour toutes les VM
Pour qu'un utilisateur non root puisse capturer des paquets, Dumpcap a besoin de privilèges de capture. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
La commande suivante peut activer cela pour vous :
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <your user name>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
Gardez à l'esprit que vous pourriez avoir à vous déconnecter et vous reconnecter ou redémarrer l'hôte pour appliquer les permissions. Si vous ne parvenez pas à capturer des paquets ou si vous obtenez des erreurs liées à dumpcap, vous devez vérifier que les permissions pour vos utilisateurs sont correctement définies et que le chemin de dumpcap est correct.
Les fichiers detux.cfg dans le répertoire principal doivent être configurés. Chaque section VM doit être configurée avec les bons paramètres réseau et les identifiants SSH. Vous pouvez choisir l'utilisateur root/non-root selon vos besoins.
La bibliothèque Detux située dans le répertoire "core" peut être utilisée selon vos besoins d'analyse. Le dépôt contient "detux.py" qui analyse le binaire donné, sauvegarde la pcap dans le dossier pcap et écrit la sortie JSON dans un chemin de fichier spécifié.
usage: detux.py [-h] --sample SAMPLE [--cpu {x86,x86-64,arm,mips,mipsel}]
[--int {python,perl,sh,bash}] --report REPORT
optional arguments:
-h, --help show this help message and exit
--sample SAMPLE Sample path (default: None)
--cpu {x86,x86-64,arm,mips,mipsel}
CPU type (default: auto)
--int {python,perl,sh,bash}
Architecture type (default: None)
--report REPORT JSON report output path (default: None)
Exemple :
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
Merci à Aurélien Jarno (@aurel32) (https://www.aurel32.net/) pour les images VM préconstruites.