Поддерживаемые типы файлов
PRX-SD определяет типы файлов с помощью определения по сигнатуре (изучение первых байт файла), а не полагаясь на расширения файлов. Это обеспечивает точную идентификацию даже при переименовании файлов или отсутствии расширений.
Матрица типов файлов
Следующая таблица показывает все поддерживаемые типы файлов и применяемые уровни обнаружения:
| Тип файла | Расширения | Магические байты | Хеш | YARA | Эвристика | Рекурсия архивов |
|---|---|---|---|---|---|---|
| PE (Windows) | .exe, .dll, .sys, .scr, .ocx | 4D 5A (MZ) | Да | Да | Да | -- |
| ELF (Linux) | .so, .o, (без расш.) | 7F 45 4C 46 | Да | Да | Да | -- |
| Mach-O (macOS) | .dylib, .bundle, (без расш.) | FE ED FA CE/CF или CE FA ED FE/CF | Да | Да | Да | -- |
| Universal Binary | (без расш.) | CA FE BA BE | Да | Да | Да | -- |
25 50 44 46 (%PDF) | Да | Да | Да | -- | ||
| Office (OLE) | .doc, .xls, .ppt | D0 CF 11 E0 | Да | Да | Да | -- |
| Office (OOXML) | .docx, .xlsx, .pptx | 50 4B 03 04 (ZIP) + [Content_Types].xml | Да | Да | Да | Извлечение |
| ZIP | .zip | 50 4B 03 04 | Да | Да | Ограниченная | Рекурсивно |
| 7-Zip | .7z | 37 7A BC AF 27 1C | Да | Да | Ограниченная | Рекурсивно |
| tar | .tar | 75 73 74 61 72 со смещения 257 | Да | Да | Ограниченная | Рекурсивно |
| gzip | .gz, .tgz | 1F 8B | Да | Да | Ограниченная | Рекурсивно |
| bzip2 | .bz2 | 42 5A 68 (BZh) | Да | Да | Ограниченная | Рекурсивно |
| xz | .xz | FD 37 7A 58 5A 00 | Да | Да | Ограниченная | Рекурсивно |
| RAR | .rar | 52 61 72 21 (Rar!) | Да | Да | Ограниченная | Рекурсивно |
| CAB | .cab | 4D 53 43 46 (MSCF) | Да | Да | Ограниченная | Рекурсивно |
| ISO | .iso | 43 44 30 30 31 со смещения 32769 | Да | Да | Ограниченная | Рекурсивно |
| Shell-скрипт | .sh, .bash | 23 21 (#!) | Да | Да | Паттерн | -- |
| Python | .py, .pyc | Текст / 42 0D 0D 0A | Да | Да | Паттерн | -- |
| JavaScript | .js, .mjs | Определение текста | Да | Да | Паттерн | -- |
| PowerShell | .ps1, .psm1 | Определение текста | Да | Да | Паттерн | -- |
| VBScript | .vbs, .vbe | Определение текста | Да | Да | Паттерн | -- |
| Batch | .bat, .cmd | Определение текста | Да | Да | Паттерн | -- |
| Java | .class, .jar | CA FE BA BE / ZIP | Да | Да | Ограниченная | Рекурсия .jar |
| WebAssembly | .wasm | 00 61 73 6D | Да | Да | Ограниченная | -- |
| DEX (Android) | .dex | 64 65 78 0A (dex\n) | Да | Да | Ограниченная | -- |
| APK (Android) | .apk | ZIP + AndroidManifest.xml | Да | Да | Ограниченная | Рекурсивно |
Легенда уровней обнаружения
| Уровень | Значение |
|---|---|
| Хеш | Хеш SHA-256/MD5 проверяется по базе данных сигнатур |
| YARA | Полный набор правил YARA применяется к содержимому файла |
| Эвристика: Да | Полный эвристический анализ с учётом типа файла (см. Эвристику) |
| Эвристика: Ограниченная | Только базовые проверки энтропии и структуры |
| Эвристика: Паттерн | Текстовое сопоставление паттернов для подозрительных команд и обфускации |
| Рекурсия архивов | Содержимое извлекается и каждый файл сканируется индивидуально |
Определение по сигнатуре
PRX-SD читает первые 8192 байт каждого файла для определения его типа. Этот подход надёжнее, чем определение по расширению:
File: invoice.pdf.exe
Extension suggests: PDF
Magic bytes: 4D 5A → PE executable
PRX-SD identifies: PE (correct)Несоответствие расширения
Когда расширение файла не совпадает с определённым по сигнатуре типом, PRX-SD добавляет примечание в отчёт о сканировании. Несоответствия расширений — распространённый приём социальной инженерии (например, photo.jpg.exe).
Приоритет определения по сигнатуре
Когда несколько сигнатур могут совпадать (например, магические байты ZIP для .zip и .docx), PRX-SD использует более глубокую проверку:
- Читает магические байты со смещения 0
- Если неоднозначно (например, ZIP), инспектирует внутреннюю структуру
- Для форматов на основе ZIP проверяет наличие
[Content_Types].xml(OOXML),META-INF/MANIFEST.MF(JAR),AndroidManifest.xml(APK) - Возвращается к универсальному типу контейнера
Рекурсивное сканирование архивов
Когда PRX-SD встречает архив (ZIP, 7z, tar, gzip, RAR и т.д.), он извлекает содержимое во временный каталог и сканирует каждый файл индивидуально через полный конвейер обнаружения.
Глубина рекурсии
| Настройка | По умолчанию | Описание |
|---|---|---|
max_archive_depth | 5 | Максимальное количество уровней вложенности архивов |
max_archive_files | 10 000 | Максимальное количество файлов для извлечения из одного архива |
max_archive_size_mb | 500 | Максимальный общий размер извлечённых данных перед остановкой |
Эти ограничения предотвращают исчерпание ресурсов от zip-бомб и глубоко вложенных архивов.
# ~/.config/prx-sd/config.toml
[scanning]
max_archive_depth = 5
max_archive_files = 10000
max_archive_size_mb = 500Zip-бомбы
PRX-SD обнаруживает zip-бомбы (архивы с экстремальным коэффициентом сжатия) и останавливает извлечение до чрезмерного потребления дискового пространства или памяти. Обнаружение zip-бомбы отображается как SUSPICIOUS в результатах сканирования.
Защищённые паролем архивы
PRX-SD не может извлекать защищённые паролем архивы. Они отображаются как skipped в результатах сканирования с примечанием о шифровании. Сам файл архива по-прежнему проверяется по базам данных хешей и YARA.
Обнаружение скриптов
Для текстовых файлов скриптов (шелл, Python, JavaScript, PowerShell, VBScript, batch) PRX-SD применяет эвристику на основе паттернов:
| Паттерн | Баллы | Описание |
|---|---|---|
| Обфусцированные строки | 10-20 | Команды в кодировке base64, чрезмерная конкатенация строк |
| Скачивание + выполнение | 15-25 | curl/wget с передачей в bash/sh, Invoke-WebRequest + Invoke-Expression |
| Обратный шелл | 20-30 | Известные паттерны обратного шелла (/dev/tcp, nc -e, bash -i) |
| Доступ к учётным данным | 10-15 | Чтение /etc/shadow, хранилищ учётных данных браузера, keychain |
| Механизмы persistence | 10-15 | Добавление cron-заданий, сервисов systemd, ключей реестра |
Неподдерживаемые файлы
Файлы, не соответствующие ни одному известному сигнатуре, всё равно проверяются по базам данных хешей и YARA. Эвристический анализ не применяется к неизвестным типам файлов. Распространённые примеры:
- Необработанные двоичные данные
- Проприетарные форматы без публичных сигнатур
- Зашифрованные файлы (если контейнерный формат не распознан)
Такие файлы отображаются как type: unknown в отчётах о сканировании и получают только сканирование по хешам + YARA.
Следующие шаги
- Эвристический анализ — детальные эвристические проверки по типу файла
- Правила YARA — правила, нацеленные на специфические структуры форматов файлов
- Сканирование файлов и каталогов — сканирование файлов на практике
- Обзор движка обнаружения — как все уровни работают вместе