Вложенные архивы — классический способ доставки вредоносного кода, который позволяет обойти базовые фильтры почтовых шлюзов, веб-прокси и антивирусных сканеров. Сканер проверяет внешний контейнер, видит «чистый» ZIP или RAR и пропускает письмо, а внутри — ещё три слоя архивов и исполняемый файл, который сработает только при полной распаковке. Задача аналитика — развернуть эту «матрешку» до конечного полезного груза, не запустив его и не заразив рабочую станцию.
Главный принцип: никогда не распаковывайте подозрительный архив на основной системе. Любой анализ проводится в изолированной среде — виртуальной машине без сети, в песочнице или на выделенном стенде. В статье описаны инструменты для ручного и автоматического разбора цепочек, типичные уловки злоумышленников и порядок действий, который позволяет найти угрозу и сохранить доказательную базу.
- Почему вложенные архивы создают проблему для стандартных средств защиты
- Базовый набор инструментов для ручного разбора
- Универсальные распаковщики
- Специализированные утилиты для глубокого анализа
- Инструменты для работы с паролями
- Пошаговый алгоритм ручного анализа цепочки архивов
- Пример скрипта для рекурсивной распаковки (bash, требует 7z, file, coreutils)
- Автоматизированные фреймворки для массовой обработки
- Типичные техники обхода и как их нейтрализовать
- 1. Пароль-защита с паролем в теле письма / на картинке
- 2. Чередование форматов и повреждение заголовков
- 3. Архив-бомба (Zip bomb / Decompression bomb)
- 4. Альтернативные потоки данных (ADS) и расширенные атрибуты
- 5. Полиглот-файлы (файл одновременно валидный как архив и как изображение/PDF)
- Работа с паролями: когда стоит подбирать, а когда — нет
- Безопасность аналитика: чек-лист перед началом работы
- Типичные ошибки и как их избежать
- Сценарии принятия решений: «Если — то»
- Практический следующий шаг после нахождения угрозы
- Часто задаваемые вопросы
Почему вложенные архивы создают проблему для стандартных средств защиты
Большинство корпоративных антивирусов и почтовых шлюзов имеют лимит глубины рекурсивной распаковки — обычно 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), в которых может лежать полезная нагрузка.
- 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.
- Подготовка среды. Запустите изолированную ВМ (VirtualBox, VMware, KVM). Отключите сеть, общие папки, буфер обмена. Сделайте снапшот чистой системы.
- Фиксация исходного состояния. Вычислите хеши (SHA-256, SHA-1, MD5) исходного файла: sha256sum sample.zip > hashes.txt. Сохраните вывод file sample.zip и 7z l sample.zip — это ваша отправная точка.
- Первичная распаковка без исполнения. Используйте 7z x sample.zip -o/lvl1 -y. Флаг -y отвечает «Да» на все запросы (перезапись, пароль). Если запрашивает пароль — прервите (Ctrl+C), перейдите к извлечению хеша пароля.
- Рекурсивный обход. Напишите простой скрипт (bash / PowerShell), который в цикле находит все архивы в текущей папке, распаковывает их в подпапку lvlN, удаляет сам архив после успешной распаковки и повторяет, пока не останется ни одного архива. Пример логики см. ниже.
- Классификация конечных файлов. После полной распаковки запустите file * (Linux) или TrID (Windows) по всем файлам. Отберите исполняемые (PE32, PE64, ELF, Mach-O), скрипты (PS1, VBS, JS, BAT, SH, PY), документы с макросами, ярлыки (.lnk, .url), библиотеки (.dll, .so).
- Статический анализ подозрительных файлов. Загрузите их в VirusTotal (через API или веб-интерфейс, если политика позволяет), проверьте строки (strings), импортную таблицу (peframe, die, pestudio), наличие упаковщиков (UPX, VMProtect, Themida).
- Динамический анализ (при необходимости). Если статика не даёт ясности — запустите подозрительный файл в песочнице (CAPE, Cuckoo, ANY.RUN, Hybrid Analysis) с включенным мониторингом сети, файловой системы, реестра, процессов.
- Документирование цепочки. Сохраните дерево каталогов (tree /f или find . -type f | sort), хеши всех извлечённых файлов, скриншоты результатов песочницы. Это понадобится для отчёта и IOC.
- Проверьте, не указан ли пароль в письме, имени файла (archive_pass123.zip), в README.txt внутри внешнего архива.
- Попробуйте пустой пароль и стандартные словари (rockyou.txt, top-10000) через 7z x -p» и 7z x -p@wordlist.txt (7-Zip 23.01+ поддерживает чтение паролей из файла).
- Если архив использует слабое шифрование (ZIP Legacy / ZipCrypto) — извлеките хеш zip2john и прогните John / Hashcat на CPU/GPU. Обычно 5–30 минут на слабый пароль.
- Если шифрование AES-256 (RAR5, 7z, ZIP AES) — подбор реальен только для очень слабых паролей (<8 символов, только цифры/слова). Оцените риск: время аналитика vs вероятность успеха. Часто быстрее отправить в песочницу с эмуляцией ввода пароля из найденных кандидатов.
- Документируйте: «Архив зашифрован 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, подтвердить цепочку поставки. Решение: считать хеши первым действием.
- Добавьте хеш (SHA-256) в блок-лист прокси/почтового шлюза/EDR.
- Сформируйте IOC-пакет: хеши всех файлов цепочки, IP/C2 домены из песочницы, мьютексы, путиdropped-файлов, MITRE ATT&CK техники (T1036.005, T1204.002, T1566.001).
- Проверьте логи прокси/файрвола/EDR за последние 30 дней на наличие этих IOC — был ли уже инцидент?
- Если файл пришёл по почте — извлеките заголовки (Received, Message-ID, SPF/DKIM/DMARC), IP отправителя, домены в теле. Проверьте на репутацию.
- Обновите правила YARA / Sigma / Snort для обнаружения вариаций этой цепочки.
- Проведите краткий разбор с командой: вектор доставки, уязвимость процесса (почему прошло?), меры по усилению (увеличить глубину рекурсии, включить проверку паролей из контекста, добавить полиглот-детектор).
Базовый набор инструментов для ручного разбора
Для разовой проверки достаточно консольных утилит, которые есть в любом Linux-дистрибутиве или доступны для Windows. Работайте в изолированной ВМ с отключенной сетью и общими папками.
Универсальные распаковщики
Специализированные утилиты для глубокого анализа
Инструменты для работы с паролями
Важно: подбор пароля имеет смысл только если политика позволяет и есть основания полагать, что пароль слабый (короткий, словарный). Сильный AES-256 пароль не подобрать за разумное время.
Пошаговый алгоритм ручного анализа цепочки архивов
Пример скрипта для рекурсивной распаковки (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-типов на шлюзе.
Работа с паролями: когда стоит подбирать, а когда — нет
Парольная защита — самый частый стопор. Алгоритм действий:
Безопасность аналитика: чек-лист перед началом работы
Типичные ошибки и как их избежать
Сценарии принятия решений: «Если — то»
| Ситуация | Действие |
|---|---|
| Архив > 5 уровней вложения, нет пароля | Автоматически распаковать до конца (скрипт/Assemblyline), проверить конечные файлы YARA/VT. |
| Внутренний архив запрашивает пароль, пароль найден в теле письма | Автоматически передать пароль модулю распаковки, продолжить рекурсию. |
| Пароль не найден, шифрование AES-256 (7z/RAR5) | Пометить как «требует ручного разбора», не тратить ресурсы на брутфорс. Отправить в песочницу с эмуляцией ввода известных паролей организации. |
| Обнаружен исполняемый файл без цифровой подписи, с упаковщиком (UPX/VMProtect) | Распаковать упаковщик (upx -d / скрипт), загрузить в песочницу, собрать IOC (IP, домены, мьютексы, ключи реестра). |
| Файл — полиглот (валидный JPEG и ZIP одновременно) | Блокировать на шлюзе по политике «MIME-тип не соответствует расширению/содержимому». Извлечь полезную нагрузку для анализа. |
| Распаковка превышает квоты диска/памяти (zip-бомба) | Прервать процесс, пометить как DoS-вектор, не анализировать содержимое. Добавить сигнатуру в блок-лист шлюза. |
Практический следующий шаг после нахождения угрозы
Когда вредоносный файл идентифицирован (хеш, поведение, IOC), работа не заканчивается:
Часто задаваемые вопросы
Можно ли использовать 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% векторов доставки через архивы.
