
Die Multiplattform-Linux-Sandbox
Detux ist eine Sandbox, die entwickelt wurde, um den Datenverkehr von Linux-Schadsoftware zu analysieren und dabei die IOCs zu erfassen. Der QEMU-Hypervisor wird verwendet, um Linux (Debian) für verschiedene CPU-Architekturen zu emulieren.
Die folgenden CPUs werden derzeit unterstützt:
Nutzen Sie die Live-Version jetzt: http://detux.org
Diese Version von Detux enthält das Skript zum Ausführen eines Linux-Binärprogramms/-Skripts in einer bestimmten CPU-Architektur. Keine Sorge, falls Sie die Plattform nicht kennen – sie ist im Skript enthalten. Das Magic-Paket hilft dabei, die CPU-Architektur automatisch zu erkennen. x86 ist die Standard-CPU-Version, die in der Konfigurationsdatei auf eine andere umgestellt werden kann.
Diese Version gibt den Analysebericht im DICT-Format aus, der leicht angepasst werden kann, um in NOSQL-Datenbanken eingefügt zu werden.
Ein Beispielskript wird bereitgestellt, das die Verwendung der Sandbox-Bibliothek demonstriert.
- Statische Analyse
-- Aus dem Binärprogramm extrahierte Basis-Strings
-- ELF-Informationen, die durch readelf-Befehle generiert wurden
-- report.py kann modifiziert werden, um weitere Drittanbieter-Befehle zur Analyse des Binärprogramms hinzuzufügen und das Ergebnis zum DICT hinzuzufügen.
- Dynamische Analyse
-- Die erfassten PCAPs werden mit DPKT geparst, um die IOCs und lesbare Informationen aus den Paketen zu extrahieren.
Systempakete
Python-Bibliotheken (vorzugsweise virtuelle Umgebung verwenden)
Bitte stellen Sie sicher, dass die oben genannten Anforderungen vor der Verwendung von Detux erfüllt sind. Einige Abhängigkeiten können je nach Betriebssystem variieren.
- NIC1 : Dieses Interface dient dem Zugriff auf den Host
- NIC2 : Mit den QEMU-Sandbox-VMs gebrücktes Interface. Man kann den Verkehr vom Interface zu WHONIX oder REMNUX oder einem benutzerdefinierten Gateway umleiten, um den Internetzugriff für die sandboxierten VMs zu filtern/zu erlauben.
Besonderer Dank gilt aurel, der vorgefertigte QEMU-Debian-VM-Images für alle möglichen CPU-Architekturen hochgeladen hat. Die VM-Images befinden sich unter: https://people.debian.org/~aurel32/qemu/, derselbe Link enthält die Befehlsbeispiele zum Starten der VM-Images.
Sie können das folgende Skript verwenden, um die VM-Images automatisch in den Ordner "qemu" von Detux herunterzuladen.
#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 verwendet SSH zur Kommunikation mit den VMs, daher wird dies derzeit benötigt, damit die VMs Netzwerkfähigkeit haben. Angenommen, die aufgeführten Binärprogramme befinden sich im selben Pfad, können Sie die folgenden Zeilen zu /etc/sudoers hinzufügen (nur wenn Sie kein Root-Benutzer sind):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<your detux username here> ALL = (ALL) NOPASSWD: QEMU_CMD
Ändern Sie die Pfade zu den Binärprogrammen, falls diese bei Ihnen abweichen.
Fügen Sie die folgende Konfiguration zu /etc/qemu-ifup hinzu, sichern Sie das Original, falls Sie bereits eines haben:
#! /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
Angenommen, eth0 ist das Interface, mit dem Ihre VMs gebrückt werden sollen, können Sie die Konfigurationen für eth0 entfernen und die folgenden Konfigurationen in /etc/network/interfaces verwenden:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
Sie können auch eine statische Adresse angeben, die Sie für eth0 verwendet haben.
Navigieren Sie zu dem Ordner, in dem sich Ihre VM-Images für jedes QEMU-Image befinden, z.B. für ARM:
<your detux folder>/qemu/arm/1/
Folgen Sie für jedes Image den VM-Startanweisungen unter "https://people.debian.org/~aurel32/", um die VM zu starten. Wenn Sie jedoch kein Root-Benutzer sind, müssen Sie sudo verwenden.
Befehle zum Starten der VMs (Ersetzen Sie durch die gewünschte MAC-Adresse):
#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 erfordert einen vorkonfigurierten VM-Snapshot mit IP-Adressen und SSH-Einrichtung.
(qemu)
(qemu) savevm init
(qemu) q
-- Wiederholen Sie ab Schritt 1 für alle VMs
Damit ein Nicht-Root-Benutzer Pakete erfassen kann, benötigt Dumpcap Aufnahmeberechtigungen. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
Der folgende Befehl kann dies für Sie ermöglichen:
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
Beachten Sie, dass Sie sich möglicherweise ab- und wieder anmelden oder den Host neu starten müssen, um die Berechtigungen anzuwenden. Wenn Sie keine Pakete erfassen können oder Fehler im Zusammenhang mit dumpcap erhalten, müssen Sie prüfen, ob die Berechtigungen für Ihre Benutzer korrekt gesetzt sind und der dumpcap-Pfad stimmt.
Die Datei detux.cfg im Hauptverzeichnis muss konfiguriert werden. Jeder VM-Abschnitt muss mit den korrekten Netzwerkparametern und SSH-Anmeldedaten konfiguriert werden. Sie können je nach Bedarf einen Root- oder Nicht-Root-Benutzer wählen.
Die Detux-Bibliothek im Verzeichnis "core" kann je nach Analysebedarf verwendet werden. Das Repository enthält "detux.py", das das angegebene Binärprogramm analysiert, die PCAP im pcap-Ordner speichert und die JSON-Ausgabe an einen angegebenen Dateipfad schreibt.
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)
Beispiel:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
Dank an Aurélien Jarno (@aurel32) (https://www.aurel32.net/) für die vorgebauten VM-Images.