Как обнаружить вредоносный файл во вложенных архивах: инструменты, методы и безопасный порядок анализа

Вложенные архивы — классический способ доставки вредоносного кода, который позволяет обойти базовые фильтры почтовых шлюзов, веб-прокси и антивирусных сканеров. Сканер проверяет внешний контейнер, видит «чистый» ZIP или RAR и пропускает письмо, а внутри — ещё три слоя архивов и исполняемый файл, который сработает только при полной распаковке. Задача аналитика — развернуть эту «матрешку» до конечного полезного груза, не запустив его и не заразив рабочую станцию.

Главный принцип: никогда не распаковывайте подозрительный архив на основной системе. Любой анализ проводится в изолированной среде — виртуальной машине без сети, в песочнице или на выделенном стенде. В статье описаны инструменты для ручного и автоматического разбора цепочек, типичные уловки злоумышленников и порядок действий, который позволяет найти угрозу и сохранить доказательную базу.

Содержание
  1. Почему вложенные архивы создают проблему для стандартных средств защиты
  2. Базовый набор инструментов для ручного разбора
  3. Универсальные распаковщики
  4. Специализированные утилиты для глубокого анализа
  5. Инструменты для работы с паролями
  6. Пошаговый алгоритм ручного анализа цепочки архивов
  7. Пример скрипта для рекурсивной распаковки (bash, требует 7z, file, coreutils)
  8. Автоматизированные фреймворки для массовой обработки
  9. Типичные техники обхода и как их нейтрализовать
  10. 1. Пароль-защита с паролем в теле письма / на картинке
  11. 2. Чередование форматов и повреждение заголовков
  12. 3. Архив-бомба (Zip bomb / Decompression bomb)
  13. 4. Альтернативные потоки данных (ADS) и расширенные атрибуты
  14. 5. Полиглот-файлы (файл одновременно валидный как архив и как изображение/PDF)
  15. Работа с паролями: когда стоит подбирать, а когда — нет
  16. Безопасность аналитика: чек-лист перед началом работы
  17. Типичные ошибки и как их избежать
  18. Сценарии принятия решений: «Если — то»
  19. Практический следующий шаг после нахождения угрозы
  20. Часто задаваемые вопросы

Почему вложенные архивы создают проблему для стандартных средств защиты

Большинство корпоративных антивирусов и почтовых шлюзов имеют лимит глубины рекурсивной распаковки — обычно 2–3 уровня. Это сделано намеренно: глубокая рекурсия потребляет ресурсы CPU и RAM, а специально сформированные архивы (zip-бомбы, вложения с перекрывающимися заголовками) могут вызвать отказ в обслуживании сканера. Злоумышленники знают эти лимиты и специально создают цепочки из 4–6 уровней, часто чередуя форматы: ZIP → RAR → 7Z → TAR → GZIP → исполняемый файл.

Дополнительные сложности:

  • Парольная защита — внутренние архивы зашифрованы, пароль передаётся в теле письма или на отдельной картинке, автоматический сканер его не видит.
  • Использование нестандартных форматов — ACE, ARJ, LZH, ISO, VHD, IMG, которые не все сканеры умеют открывать.
  • Манипуляция заголовками — изменение магических байтов, повреждение структуры каталога, чтобы стандартный распаковщик выдавал ошибку, а специализированный (например, 7-Zip) всё равно извлекал содержимое.
  • Альтернативные потоки данных (ADS) в NTFS-архивах или скрытые файлы macOS (__MACOSX, .DS_Store), в которых может лежать полезная нагрузка.
  • Базовый набор инструментов для ручного разбора

    Для разовой проверки достаточно консольных утилит, которые есть в любом Linux-дистрибутиве или доступны для Windows. Работайте в изолированной ВМ с отключенной сетью и общими папками.

    Универсальные распаковщики

    • 7-Zip (7z, 7za, 7zr) — понимает больше 30 форматов, включая ZIP, RAR, 7Z, TAR, GZIP, BZIP2, XZ, ISO, VHD, WIM, CAB, ARJ, LZH, CHM, MSI, NSIS, RPM, DEB. Ключ -t* заставляет определять формат по содержимому, а не по расширению. Поддерживает рекурсивное извлечение: 7z x archive.zip -ooutput -r.
    • unar / lsar (из пакета The Unarchiver) — хорош для старых и экзотических форматов (StuffIt, LZH, ARJ), корректно обрабатывает кодировки имён файлов.
    • dtrx (do the right extraction) — обёртка, которая сама определяет тип, запрашивает пароль при необходимости и распаковывает всё в одну папку с сохранением структуры.

    Специализированные утилиты для глубокого анализа

    • binwalk — ищет встроенные файлы и файловые системы внутри бинарных блобов (прошивки, образы дисков, контейнеры). Полезен, если архив встроен в исполняемый файл или образ диска.
    • foremost / scalpel — файловые караверы (carvers), восстанавливают файлы по сигнатурам (magic bytes) даже если файловая система повреждена или отсутствует.
    • peepdf / pdfparser — если внешний контейнер — PDF с вложенными файлами (EmbeddedFiles).
    • olevba / oledump — анализ OLE-контейнеров (DOC, XLS, PPT, MSG) с макросами и вложенными объектами.

    Инструменты для работы с паролями

    • John the Ripper (JtR) с модулем zip2john, rar2john, 7z2john — извлекает хеш пароля из архива для офлайн-подбора.
    • hashcat — GPU-ускоренный перебор, поддерживает режимы для ZIP (PKZIP), RAR5, 7z. Требует извлечённого хеша.
    • fcrackzip — быстрый перебор для классических ZIP (legacy encryption), бесполезен для AES-256.

    Важно: подбор пароля имеет смысл только если политика позволяет и есть основания полагать, что пароль слабый (короткий, словарный). Сильный AES-256 пароль не подобрать за разумное время.

    Пошаговый алгоритм ручного анализа цепочки архивов

    1. Подготовка среды. Запустите изолированную ВМ (VirtualBox, VMware, KVM). Отключите сеть, общие папки, буфер обмена. Сделайте снапшот чистой системы.
    2. Фиксация исходного состояния. Вычислите хеши (SHA-256, SHA-1, MD5) исходного файла: sha256sum sample.zip > hashes.txt. Сохраните вывод file sample.zip и 7z l sample.zip — это ваша отправная точка.
    3. Первичная распаковка без исполнения. Используйте 7z x sample.zip -o/lvl1 -y. Флаг -y отвечает «Да» на все запросы (перезапись, пароль). Если запрашивает пароль — прервите (Ctrl+C), перейдите к извлечению хеша пароля.
    4. Рекурсивный обход. Напишите простой скрипт (bash / PowerShell), который в цикле находит все архивы в текущей папке, распаковывает их в подпапку lvlN, удаляет сам архив после успешной распаковки и повторяет, пока не останется ни одного архива. Пример логики см. ниже.
    5. Классификация конечных файлов. После полной распаковки запустите file * (Linux) или TrID (Windows) по всем файлам. Отберите исполняемые (PE32, PE64, ELF, Mach-O), скрипты (PS1, VBS, JS, BAT, SH, PY), документы с макросами, ярлыки (.lnk, .url), библиотеки (.dll, .so).
    6. Статический анализ подозрительных файлов. Загрузите их в VirusTotal (через API или веб-интерфейс, если политика позволяет), проверьте строки (strings), импортную таблицу (peframe, die, pestudio), наличие упаковщиков (UPX, VMProtect, Themida).
    7. Динамический анализ (при необходимости). Если статика не даёт ясности — запустите подозрительный файл в песочнице (CAPE, Cuckoo, ANY.RUN, Hybrid Analysis) с включенным мониторингом сети, файловой системы, реестра, процессов.
    8. Документирование цепочки. Сохраните дерево каталогов (tree /f или find . -type f | sort), хеши всех извлечённых файлов, скриншоты результатов песочницы. Это понадобится для отчёта и IOC.

    Пример скрипта для рекурсивной распаковки (bash, требует 7z, file, coreutils)

    #!/usr/bin/env bash
    set -euo pipefail
    ROOT=»$(pwd)»
    LEVEL=1
    while true; do
    ARCHIVES=( $(find «$ROOT» -maxdepth 1 -type f \( -iname «*.zip» -o -iname «*.rar» -o -iname «*.7z» -o -iname «*.tar» -o -iname «*.gz» -o -iname «*.bz2» -o -iname «*.xz» -o -iname «*.iso» -o -iname «*.cab» -o -iname «*.arj» -o -iname «*.lzh» \) ) )
    [ ${#ARCHIVES[@]} -eq 0 ] && break
    for arc in «${ARCHIVES[@]}»; do
    echo «[+] Level $LEVEL: unpacking $arc»
    7z x «$arc» -o»${arc}_unpacked» -y 2>&1 | tail -5
    mv «${arc}_unpacked»/* «$ROOT»/ 2>/dev/null || true
    rm -rf «${arc}_unpacked»
    mv «$arc» «$arc.done»
    done
    ((LEVEL++))
    [ $LEVEL -gt 10 ] && { echo «Too many levels, aborting»; break; }
    done
    echo «Done. Remaining files:»
    find «$ROOT» -type f ! -name «*.done» | sort

    Скрипт не идеален: не обрабатывает пароли, не сохраняет структуру путей, но для быстрой разведки подходит. Для продакшн-обработки лучше использовать готовые фреймворки (см. ниже).

    Автоматизированные фреймворки для массовой обработки

    Если нужно проверять десятки вложений в день, ручной подход не масштабируется. Существуют открытые и коммерческие решения, которые делают рекурсивную распаковку, статический анализ и обогащение IOC в пайплайне.

    Инструмент Тип Ключевые возможности Ограничения
    Viper Фреймворк управления образцами (Python) Хранилище с дедупликацией, модули рекурсивной распаковки, интеграция с VT, YARA, Cuckoo, MISP. Веб-UI и CLI. Разработка замедлилась, требует настройки БД (MongoDB/Redis).
    Assemblyline (CCCS) Пайплайн обработки файлов (Python, Redis, RabbitMQ) Масштабируемая очередь, десятки сервисов: распаковка (unarchive), статика (peframe, oletools), динамика (CAPE), YARA, VT. REST API. Сложное развёртывание (Docker Swarm/K8s), высокие требования к ресурсам.
    IRMA (Quarkslab) Асинхронный сканер (Python, Celery, Redis) Модульная архитектура, плагины для ClamAV, VT, YARA, песочниц. Хорош для интеграции в SIEM/SOAR. Менее активное сообщество, документация местами устарела.
    Malware Bazaar / Malpedia (abuse.ch) Публичные репозитории с API Готовые IOC, YARA-правила, хеши семейств. Не сканирует сам, но обогащает результаты. Только справочные данные, нет собственного движка распаковки.
    Commercial Sandboxes (ANY.RUN, Hybrid Analysis, Joe Sandbox, VMRay) SaaS / On-premise Полный цикл: распаковка, динамика, MITRE ATT&CK теги, отчёты, API. Поддержка паролей, эвристика обхода анти-песочницы. Стоимость, зависимость от внешнего провайдера (для SaaS), лимиты приватности.

    Выбор зависит от масштаба: для SOC среднего размера — Assemblyline или IRMA; для разовых инцидентов — Viper + локальная песочница CAPE; для высоконагруженных шлюзов — коммерческие решения с SLA.

    Типичные техники обхода и как их нейтрализовать

    Злоумышленники не ограничиваются глубиной вложения. Ниже — частые приёмы и контрмеры.

    1. Пароль-защита с паролем в теле письма / на картинке

    Архив зашифрован, пароль — «123456» или «invoice2024», написан в теле письма или на скриншоте. Автоматика не видит контекст.

    Контрмера: на этапе пре-фильтрации извлекайте текст письма (HTML/Plain) и OCR вложений-картинок (Tesseract). Ищите паттерны: «password:», «пароль:», «pwd:», 4–12 символов. Скормите найденные кандидаты в модуль распаковки. Если пароль не найден — помечайте как «требует ручного разбора» и отправляйте в песочницу с эмуляцией пользователя (ввод пароля).

    2. Чередование форматов и повреждение заголовков

    ZIP → RAR → 7Z → TAR → GZIP. Внутренний ZIP имеет изменённые магические байты (не PK\\x03\\x04, а XX\\x03\\x04), стандартный unzip падает, 7-Zip открывает.

    Контрмера: используйте только 7-Zip (или libarchive/bsdtar) как основной распаковщик. Настройте сканер на игнорирование расширения и определение типа по содержимому (file -b, 7z l -t*). Логируйте ошибки распаковки — они часто индикатор умышленного повреждения.

    3. Архив-бомба (Zip bomb / Decompression bomb)

    Небольшой файл (42.zip — 42 КБ) распаковывается в петабайты за счёт вложенных архивов с высокой степенью сжатия одинаковых данных.

    Контрмера: жесткие лимиты: максимальный размер распакованных данных (например, 100 МБ на файл, 500 МБ суммарно), максимальное количество файлов (10 000), максимальная глубина (10). 7-Zip поддерживает -mx=0 (без сжатия) для тестов, но лучше — квоты на уровне контейнера (cgroups memory/disk) или песочницы.

    4. Альтернативные потоки данных (ADS) и расширенные атрибуты

    В ZIP/NTFS можно спрятать файл в потоке :malware.exe. Стандартный 7z l не показывает ADS.

    Контрмера: используйте 7z l -slt (show technical information) или специализированные инструменты (adsview, streams из Sysinternals). В Linux — getfattr -d -m — для xattr.

    5. Полиглот-файлы (файл одновременно валидный как архив и как изображение/PDF)

    Файл начинается с заголовка JPEG, а в конце — ZIP-центральный каталог. Браузер показывает картинку, архиватор — извлекает содержимое.

    Контрмера: проверяйте файл несколькими способами: file (libmagic), binwalk -e, 7z l. Если результаты расходятся — признак полиглота. Блокируйте файлы с расхождением MIME-типов на шлюзе.

    Работа с паролями: когда стоит подбирать, а когда — нет

    Парольная защита — самый частый стопор. Алгоритм действий:

    1. Проверьте, не указан ли пароль в письме, имени файла (archive_pass123.zip), в README.txt внутри внешнего архива.
    2. Попробуйте пустой пароль и стандартные словари (rockyou.txt, top-10000) через 7z x -p» и 7z x -p@wordlist.txt (7-Zip 23.01+ поддерживает чтение паролей из файла).
    3. Если архив использует слабое шифрование (ZIP Legacy / ZipCrypto) — извлеките хеш zip2john и прогните John / Hashcat на CPU/GPU. Обычно 5–30 минут на слабый пароль.
    4. Если шифрование AES-256 (RAR5, 7z, ZIP AES) — подбор реальен только для очень слабых паролей (<8 символов, только цифры/слова). Оцените риск: время аналитика vs вероятность успеха. Часто быстрее отправить в песочницу с эмуляцией ввода пароля из найденных кандидатов.
    5. Документируйте: «Архив зашифрован AES-256, пароль не найден, автоматическая распаковка невозможна. Требуется ручной ввод или запрос у отправителя».

    Безопасность аналитика: чек-лист перед началом работы

    • ВМ изолирована: нет сети (Host-only или Internal), общие папки отключены, буфер обмена — двунаправленно выключен.
    • Снапшот чистой системы сделан и проверен (можно откатиться за 30 секунд).
    • На ВМ установлены только инструменты анализа, нет личных данных, ключей SSH, доступа к корпоративным ресурсам.
    • Файл передан в ВМ через read-only общий диск или загрузку в песочницу, а не через drag-and-drop.
    • Включен мониторинг процесса (Procmon, Sysmon, auditd) — если файл случайно запустится, вы увидите последствия.
    • После анализа — полный реверт к снапшоту, диск ВМ зашифрован или уничтожается.

    Типичные ошибки и как их избежать

    • Распаковка на хосте «на секунду» — достаточно одного двойного клика по .exe внутри архива, если ассоциации файлов сбиты или включен автозапуск. Решение: только изолированная ВМ, запрет автозапуска, показ расширений.
    • Игнорирование ошибок распаковки — «7z: Cannot open file as archive» может означать повреждение или полиглот. Решение: логируйте ошибки, прогоняйте binwalk и file.
    • Пропуск скрытых файлов и ADS — в Windows dir /r, в Linux ls -la + getfattr. Решение: включайте в скрипт проверку альтернативных потоков.
    • Использование онлайн-песочниц для конфиденциальных данных — загрузка в ANY.RUN / VT отправляет файл третьей стороне. Решение: для чувствительных инцидентов — только on-premise песочницы (CAPE, Cuckoo, VMRay On-Prem).
    • Отсутствие хешей исходника — без SHA-256 исходного файла нельзя коррелировать с TI-фидами, делиться IOC, подтвердить цепочку поставки. Решение: считать хеши первым действием.

    Сценарии принятия решений: «Если — то»

    Ситуация Действие
    Архив > 5 уровней вложения, нет пароля Автоматически распаковать до конца (скрипт/Assemblyline), проверить конечные файлы YARA/VT.
    Внутренний архив запрашивает пароль, пароль найден в теле письма Автоматически передать пароль модулю распаковки, продолжить рекурсию.
    Пароль не найден, шифрование AES-256 (7z/RAR5) Пометить как «требует ручного разбора», не тратить ресурсы на брутфорс. Отправить в песочницу с эмуляцией ввода известных паролей организации.
    Обнаружен исполняемый файл без цифровой подписи, с упаковщиком (UPX/VMProtect) Распаковать упаковщик (upx -d / скрипт), загрузить в песочницу, собрать IOC (IP, домены, мьютексы, ключи реестра).
    Файл — полиглот (валидный JPEG и ZIP одновременно) Блокировать на шлюзе по политике «MIME-тип не соответствует расширению/содержимому». Извлечь полезную нагрузку для анализа.
    Распаковка превышает квоты диска/памяти (zip-бомба) Прервать процесс, пометить как DoS-вектор, не анализировать содержимое. Добавить сигнатуру в блок-лист шлюза.

    Практический следующий шаг после нахождения угрозы

    Когда вредоносный файл идентифицирован (хеш, поведение, IOC), работа не заканчивается:

    1. Добавьте хеш (SHA-256) в блок-лист прокси/почтового шлюза/EDR.
    2. Сформируйте IOC-пакет: хеши всех файлов цепочки, IP/C2 домены из песочницы, мьютексы, путиdropped-файлов, MITRE ATT&CK техники (T1036.005, T1204.002, T1566.001).
    3. Проверьте логи прокси/файрвола/EDR за последние 30 дней на наличие этих IOC — был ли уже инцидент?
    4. Если файл пришёл по почте — извлеките заголовки (Received, Message-ID, SPF/DKIM/DMARC), IP отправителя, домены в теле. Проверьте на репутацию.
    5. Обновите правила YARA / Sigma / Snort для обнаружения вариаций этой цепочки.
    6. Проведите краткий разбор с командой: вектор доставки, уязвимость процесса (почему прошло?), меры по усилению (увеличить глубину рекурсии, включить проверку паролей из контекста, добавить полиглот-детектор).

    Часто задаваемые вопросы

    Можно ли использовать Windows Explorer для просмотра содержимого архива?

    Только если вы уверены, что в архиве нет эксплойта для парсера Shell (CVE-2023-36884 и подобные). Безопаснее — 7z l или file в ВМ.

    Какой максимальный уровень вложенности стоит настраивать на шлюзе?

    8–10 уровней покрывает 99% реальных атак и не создаёт нагрузку. Глубже — скорее zip-бомба или мусор.

    Стоит ли распаковывать ISO/IMG/VHD образы дисков?

    Да, они часто используются для доставки вредоносных скриптов/исполняемых файлов без триггера «исполняемый файл в архиве». 7-Zip и libarchive их открывают. Ограничьте максимальный размер распакованного образа (например, 2 ГБ).

    Как автоматизировать извлечение паролей из текста писем?
    Регулярные выражения на этапе MTA / почтового шлюза: (?i)(password|пароль|pwd|pass)[:\\s]+([\\w!@#$%^&*()-+=]{4,20}). Результаты кладите в очередь распаковщика как кандидаты.

    Нужно ли сканировать архивы ClamAV перед ручным анализом?
    ClamAV даёт быстрый фильтр известных сигнатур, но не находит нулевые дни и не распаковывает глубокие цепочки. Используйте как pre-filter: если ClamAV нашёл — блокируйте сразу, если нет — отправляйте на глубокий анализ.

    Материал носит информационный характер и описывает общие принципы технического анализа подозрительных файлов. Работа с потенциально вредоносным кодом требует строгого соблюдения изоляции, политик безопасности организации и, при необходимости, координации с инцидент-респонс командой и правоохранительными органами. Автор не несет ответственности за последствия неправильного применения описанных методов.

    Главный вывод: обнаружение угрозы во вложенных архивах — задача не для одного сканера, а для комбинации жестких квот на шлюзе, рекурсивной распаковки с поддержкой паролей из контекста, статического анализа конечных файлов и динамической проверки в изолированной среде. Начните с внедрения лимитов глубины и размера, добавьте модуль извлечения паролей из писем, настройте автоматическую отправку «нераспаковываемых» объектов в песочницу — это покроет 90% векторов доставки через архивы.

PEFile.ru