Field note

Безопасный анализ малвари в Docker: руководство сисадмина

Author: Mahmoud Ouf min read

⚠️ Важно: Docker — НЕ граница безопасности как VM. Для продвинутой малвари используйте нормальную VM со снапшотами. Docker подходит для первичной триажи и менее сложных образцов.

Краткое резюме

Docker-контейнеры для анализа малвари: изоляция (namespaces), одноразовость (--rm), воспроизводимость, лимиты ресурсов, сетевая изоляция.

Лаб-сетап:

  • Сеть: docker network create --driver bridge --internal --subnet 172.28.0.0/16 malware-net (--internal критичен).
  • Образ: FROM ubuntu:22.04 + strace/ltrace/gdb/radare2/file/binutils/hexedit/tcpdump/python3 + pip pefile yara-python capstone + юзер analyst + /samples /output.
  • Запуск с ограничениями: docker run --network malware-net --cap-drop ALL --security-opt no-new-privileges:true --security-opt seccomp=default --read-only --tmpfs /tmp:rw,noexec,nosuid,size=100m --memory 512m --cpus 1 --pids-limit 100 -v samples:/samples:ro и разбор флагов.

Воркфлоу:

  • Статика: file, strings, rabin2 -H, readelf -S, извлечение IOC (grep -E http, IP).
  • Динамика: отдельный контейнер --network none, strace -f, ltrace, inotifywait, tcpdump -i any -w traffic.pcap.
  • Автоматизация: analyze.sh (file/hashes/strings/headers/sections/IOCs по strings.txt).
  • Кейс loader.bin (иллюстративный, 198.51.100.0/24, example.com): fingerprint (ELF 64-bit stripped no section header), энтропия .upx0 7.94 (encrypted 2nd stage), статика hxxp://update-cdn[.]example.com/gate.php + /tmp/.cache/.sysd, gdb break *0x...; x/12i $pc (xor (%rsi),%al; loop), x/s base64 2nd stage, поведение strace -e network,execve (socket → connect 198.51.100.23:8443 → execve /tmp/.cache/.sysd), YARA Suspected_XOR_Loader ($xor_loop { 30 06 48 ff c6 48 ff c7 e2 f7 }), сеть tcpdump -r traffic.pcap (47 байт каждые 60с — beacon), цепочка static→entropy→strings→decode→beacon→signature→pcap.
  • Очистка: docker stop, rmi, system prune -af --volumes, best practices (never --privileged, always --network none/internal, drop caps, read-only, лимиты, non-root, --rm), когда Docker не подходит (kernel exploits, гипервизор, APT → вложенные VM air-gapped).

🇷🇺 Перевод в процессе — выше краткое резюме. Полный материал с Dockerfile, командами и кейсом loader.bin: English version. Команды Docker, пути и сигнатуры YARA оставлены на английском.