
La sandbox Linux multipiattaforma
Detux è una sandbox sviluppata per l'analisi del traffico dei malware Linux e la cattura degli IOC tramite tale analisi. L'hypervisor QEMU viene utilizzato per emulare Linux (Debian) per varie architetture CPU.
Attualmente sono supportate le seguenti CPU:
Usa ora la versione Live: http://detux.org
Questa versione di Detux contiene lo script per eseguire un binario/script Linux in una specifica architettura CPU. Non preoccuparti se non conosci la piattaforma, è nello script; il pacchetto Magic aiuta a rilevare l'architettura CPU in modo automatico. x86 è la versione CPU predefinita, ma può essere modificata in una diversa nel file di configurazione.
Questa versione fornisce il report di analisi in formato DICT, facilmente personalizzabile per essere inserito in database NOSQL.
È stato fornito uno script di esempio che dimostra l'uso della libreria della sandbox.
- Analisi Statica
-- Stringhe di base estratte dal binario
-- Informazioni ELF generate dai comandi readelf
-- report.py può essere modificato per aggiungere ulteriori comandi di terze parti per analizzare il binario e aggiungere il risultato al DICT.
- Analisi Dinamica
-- I pcap catturati vengono analizzati con DPKT per estrarre gli IOC e informazioni leggibili dai pacchetti.
Pacchetti di sistema
Librerie Python (preferibile usare un ambiente virtuale)
Assicurati che i requisiti sopra elencati siano soddisfatti prima di usare Detux. Alcune dipendenze possono variare da sistema operativo a sistema operativo.
- NIC1: Questa interfaccia è per l'accesso all'Host
- NIC2: Interfaccia bridge con le VM sandbox QEMU. È possibile reindirizzare il traffico dall'interfaccia verso WHONIX o REMNUX o un Gateway personalizzato per filtrare/consentire l'accesso a Internet per le VM sandbox.
Un ringraziamento speciale ad aurel che ha caricato immagini VM QEMU Debian pre-costruite per tutte le possibili architetture CPU. Le immagini VM si trovano su: https://people.debian.org/~aurel32/qemu/, lo stesso link contiene esempi di comandi per avviare le immagini VM.
Puoi usare il seguente script per scaricare automaticamente le immagini VM nella cartella "qemu" di 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 usa SSH per comunicare con le VM, quindi è attualmente necessario che le VM abbiano capacità di rete. Considerando che i binari elencati si trovano nello stesso percorso, puoi aggiungere le seguenti righe a /etc/sudoers (solo se sei un utente non root):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<il tuo nome utente detux qui> ALL = (ALL) NOPASSWD: QEMU_CMD
Modifica i percorsi dei binari se differiscono per te.
Aggiungi la seguente configurazione a /etc/qemu-ifup, fai un backup dell'originale se ne hai già uno:
#! /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
Supponendo che eth0 sia l'interfaccia a cui vuoi collegare le tue VM in bridge, puoi rimuovere le configurazioni per eth0 e usare le seguenti in /etc/network/interfaces:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
Puoi anche specificare un indirizzo statico che usavi per eth0.
Spostati nella cartella in cui si trovano le immagini VM per ciascuna immagine QEMU, ad esempio per ARM:
<la tua cartella detux>/qemu/arm/1/
Per ogni immagine, segui le istruzioni di avvio della VM fornite su "https://people.debian.org/~aurel32/", per avviare la VM. Tuttavia, se sei un utente non root, dovrai usare sudo.
Comandi per l'avvio delle VM (Sostituisci con il MAC desiderato):
#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 richiede uno snapshot VM preconfigurato con indirizzi IP e configurazione SSH.
(qemu)
(qemu) savevm init
(qemu) q
-- Ripeti dal passo 1 per tutte le VM
Affinché un utente non root possa catturare pacchetti, Dumpcap necessita di privilegi di cattura. (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
Il seguente comando potrebbe abilitare la stessa cosa per te:
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <il tuo nome utente>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
Tieni presente che potresti dover effettuare il logout e il login di nuovo o riavviare l'host per applicare i permessi. Se non riesci a catturare pacchetti o ottieni errori relativi a dumpcap, devi verificare che i permessi per i tuoi utenti siano impostati correttamente e che il percorso di dumpcap sia giusto.
Il file detux.cfg nella directory principale deve essere configurato. Ogni sezione VM deve essere configurata con i corretti parametri di rete e credenziali SSH. Puoi scegliere un utente root/non-root a seconda delle tue esigenze.
La libreria Detux situata nella directory "core" può essere utilizzata per adattarla alle tue esigenze di analisi. Il repository contiene "detux.py" che analizza il binario fornito e salva il pcap nella cartella pcap e scrive l'output JSON in un percorso file specificato.
usage: detux.py [-h] --sample SAMPLE [--cpu {x86,x86-64,arm,mips,mipsel}]
[--int {python,perl,sh,bash}] --report REPORT
optional arguments:
-h, --help mostra questo messaggio di aiuto ed esce
--sample SAMPLE Percorso del campione (default: None)
--cpu {x86,x86-64,arm,mips,mipsel}
Tipo di CPU (default: auto)
--int {python,perl,sh,bash}
Tipo di architettura (default: None)
--report REPORT Percorso di output del report JSON (default: None)
Esempio:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
Grazie ad Aurélien Jarno (@aurel32) (https://www.aurel32.net/) per le immagini VM pre-costruite.