
Кроссплатформенная Linux-песочница
Detux — это песочница, разработанная для анализа сетевого трафика вредоносных программ Linux и сбора индикаторов компрометации (IOC). Для эмуляции Linux (Debian) под различные архитектуры ЦП используется гипервизор QEMU.
В настоящее время поддерживаются следующие ЦП:
Используйте живую версию сейчас: http://detux.org
Этот релиз Detux содержит скрипт для выполнения бинарного файла/скрипта Linux в указанной архитектуре ЦП. Не волнуйтесь, если вы не знаете платформу — в скрипте есть модуль Magic, который автоматически определяет архитектуру ЦП. x86 — версия ЦП по умолчанию; её можно изменить в конфигурационном файле.
Этот релиз предоставляет отчёт об анализе в формате DICT, который легко адаптировать для вставки в базы данных NoSQL.
Приведён пример скрипта, демонстрирующего использование библиотеки песочницы.
- Статический анализ
-- Основные строки, извлечённые из бинарного файла
-- Информация об ELF, полученная командами readelf
-- Файл report.py можно изменить, добавив сторонние команды для анализа бинарного файла и включения результатов в DICT.
- Динамический анализ
-- Захваченные pcap-файлы обрабатываются с помощью DPKT для извлечения IOC и читаемой информации из пакетов.
Системные пакеты
Библиотеки Python (желательно использовать виртуальное окружение)
Пожалуйста, убедитесь, что перечисленные выше требования выполнены перед использованием Detux. Некоторые зависимости могут отличаться в зависимости от ОС.
- NIC1 : Этот интерфейс предназначен для доступа к хосту
- NIC2 : Интерфейс, объединённый мостом с виртуальными машинами песочницы QEMU. Можно перенаправлять трафик с этого интерфейса на WHONIX, REMNUX или специальный шлюз для фильтрации/разрешения доступа в интернет для виртуальных машин песочницы.
Особая благодарность Aurel, который загрузил предварительно собранные образы QEMU Debian VM для всех возможных архитектур ЦП. Образы ВМ находятся по адресу: https://people.debian.org/~aurel32/qemu/; по той же ссылке приведены примеры команд для запуска образов ВМ.
Вы можете использовать следующий скрипт для автоматической загрузки образов ВМ в папку "qemu" 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 использует SSH для связи с ВМ, поэтому для работы сети на ВМ требуется следующая настройка. Если перечисленные бинарные файлы находятся в тех же путях, вы можете добавить следующие строки в /etc/sudoers (только если вы не root):
Cmnd_Alias QEMU_CMD = /usr/bin/qemu-*, /sbin/ip, /sbin/ifconfig, /sbin/brctl
<ваше имя пользователя Detux> ALL = (ALL) NOPASSWD: QEMU_CMD
Измените пути к бинарным файлам, если они отличаются.
Добавьте следующую конфигурацию в /etc/qemu-ifup (предварительно сделайте резервную копию, если уже есть):
#! /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
Если eth0 — интерфейс, с которым вы хотите объединить мостом ваши ВМ, вы можете удалить конфигурации для eth0 и использовать следующие настройки в /etc/network/interfaces:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_maxwait 0
Вы также можете указать статический адрес, который использовался для eth0.
Перейдите в папку, в которой находятся образы ВМ для каждого образа QEMU, например для ARM:
<ваша папка detux>/qemu/arm/1/
Для каждого образа следуйте инструкциям по загрузке ВМ, приведённым на "https://people.debian.org/~aurel32/", чтобы запустить ВМ. Однако, если вы не root, вам придётся использовать sudo.
Команды для загрузки ВМ (замените на желаемый MAC):
#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 требует предварительно настроенный снимок ВМ с IP-адресами и настроенным SSH.
(qemu)
(qemu) savevm init
(qemu) q
-- Повторите шаги 1 для всех ВМ.
Чтобы непривилегированный пользователь мог захватывать пакеты, Dumpcap нужны права захвата (https://wiki.wireshark.org/CaptureSetup/CapturePrivileges).
Следующая команда может это обеспечить:
sudo groupadd -g wireshark
sudo usermod -a -G wireshark <ваше имя пользователя>
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
Имейте в виду, что для применения прав может потребоваться выйти и снова войти в систему или перезагрузить хост. Если вы не можете захватывать пакеты или получаете ошибки, связанные с dumpcap, проверьте, правильно ли установлены права для вашего пользователя и правильный ли путь к dumpcap.
Файл detux.cfg в главной директории необходимо настроить. Каждый раздел ВМ должен быть настроен с правильными сетевыми параметрами и учётными данными SSH. Вы можете выбрать root-пользователя или обычного пользователя в зависимости от потребности.
Библиотека Detux, расположенная в каталоге "core", может использоваться для ваших нужд анализа. Репозиторий содержит файл "detux.py", который анализирует заданный бинарный файл, сохраняет pcap в папку pcap и записывает вывод JSON в указанный путь.
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)
Пример:
python detux.py --sample test_script/example_binary1 --report reports/example_report1.json
Спасибо Aurélien Jarno (@aurel32) (https://www.aurel32.net/) за предварительно собранные образы ВМ.