Zer0Kernel AV — экспериментальный сервис для статического анализа подозрительных файлов, скриптов, исполняемых программ, документов Microsoft Office и архивов.
Сервис доступен по адресу:
Главный принцип работы:
Загруженный файл исследуется как набор данных, но не запускается как программа.
Zer0Kernel AV не открывает EXE через Wine, не выполняет загруженные PHP-, Bash- или PowerShell-скрипты и не разрешает образцу самостоятельно обращаться в Интернет.
---
## Для чего нужен Zer0Kernel AV
Сервис предназначен для первичного исследования файлов, происхождение или назначение которых вызывает вопросы.
Например, с его помощью можно проверить:
- неизвестный EXE, DLL, SYS или SCR;
- PHP-плагин или дополнение для сайта;
- подозрительный PHP-файл на сервере;
- PowerShell-, Bash-, Python- или JavaScript-скрипт;
- BAT/CMD-файл;
- документ Microsoft Office с макросами;
- ZIP-архив с программой или исходным кодом;
- архив плагина XenForo, WordPress или другого веб-приложения;
- файл, найденный во время расследования инцидента;
- вложение из электронной почты;
- скрипт установки, скачанный с неизвестного сайта;
- набор файлов, в котором могут находиться веб-шеллы, загрузчики или обфусцированный код.
Zer0Kernel AV особенно полезен в тех случаях, когда файл ещё рано запускать даже в тестовой системе, но необходимо быстро понять:
- из чего он состоит;
- какие действия он потенциально может выполнять;
- присутствуют ли подозрительные функции;
- имеются ли URL, IP-адреса, домены, пути или ключи реестра;
- используется ли обфускация;
- есть ли макросы;
- содержит ли архив вложенные EXE, PHP, Bash или PowerShell-файлы;
- какие элементы требуют ручного анализа.
# Важное предупреждение
Статический анализ не доказывает, что файл является вредоносным. Обнаруженные признаки требуют проверки специалистом.
Наличие функции
unserialize() в PHP, eval() в JavaScript, сетевого API в EXE или высокой энтропии PE-секции само по себе не означает, что перед нами вредоносная программа.Многие легитимные приложения используют потенциально опасные возможности:
- установщики запускают процессы;
- отладчики работают с памятью других процессов;
- плагины десериализуют данные;
- браузерные библиотеки используют динамический JavaScript;
- обновляторы скачивают файлы;
- системные программы изменяют реестр;
- защитное ПО применяет API, похожие на техники внедрения кода.
---
# Как устроен анализ
Общая последовательность выглядит так:
Код:
Пользователь загружает файл
↓
FastAPI принимает файл и проверяет размер
↓
Файл получает случайный идентификатор задания
↓
Определяется тип файла
↓
Задание помещается в очередь Redis/RQ
↓
Изолированный analyzer-worker выполняет статический анализ
↓
При необходимости архив безопасно распаковывается
↓
Каждый вложенный файл анализируется отдельно
↓
Находки объединяются и рассчитывается оценка риска
↓
Формируется технический JSON-отчёт
↓
Zer0Kernel формирует русскоязычное заключение
↓
Исходный файл и распакованные данные удаляются
↓
Отчёт доступен 24 часа
Анализ выполняется отдельным Docker-контейнером. Контейнер не имеет доступа к основной файловой системе сервера и не получает Docker Socket.
---
# Какие файлы поддерживаются
| Категория | Примеры |
|---|---|
| PowerShell |
.ps1, .psm1, .psd1 || Bash и Shell |
.sh, .bash, .zsh || Python |
.py, .pyw || JavaScript |
.js, .mjs, .cjs || PHP |
.php, .phtml || BAT/CMD |
.bat, .cmd || VBA |
.vba, .bas || PE |
.exe, .dll, .sys, .scr, .cpl, .ocx || Microsoft Office |
.doc, .docm, .docx, .xls, .xlsm, .xlsx, .xlsb, .ppt, .pptm, .pptx, .rtf || Архивы |
.zip, .tar, .tar.gz, .tgz, .gz, .bz2, .xz || Прочие текстовые файлы | конфигурации, исходный код, неизвестные текстовые форматы |
| Прочие бинарные файлы | базовые хеши, строки, YARA и IOC |
Тип файла определяется не только по расширению.
Например:
- PE определяется по заголовку
MZ; - старый формат Microsoft Office определяется по OLE-сигнатуре;
- ZIP и TAR дополнительно проверяются средствами архивных библиотек;
- неизвестный файл проверяется на наличие текстового содержимого.
payload.exe в document.txt не обязательно скроет реальный тип файла.---
# Ограничения размеров
Для защиты сервера от слишком больших файлов и архивных бомб используются лимиты.
| Объект | Максимальный размер |
|---|---:|
| Скрипт или текстовый файл | 2 МБ |
| PE-файл | 20 МБ |
| Документ Microsoft Office | 20 МБ |
| Загружаемый архив | 20 МБ |
| Один файл после распаковки | 20 МБ |
| Все распакованные данные | 100 МБ |
| Количество файлов в архивном дереве | 500 |
| Вложенность архивов | 3 уровня |
| Коэффициент сжатия одного элемента | не более 100:1 |
| Хранение отчёта | 24 часа |
Если файл превышает лимит, он получает статус
skipped, а причина отображается в отчёте.Если достигнут предел вложенности архива, анализ получает статус
partial.---
# Что проверяется у каждого файла
Независимо от типа файла Zer0Kernel AV выполняет несколько базовых операций.
## 1. Расчёт хешей
Для каждого файла рассчитываются:
- MD5;
- SHA-1;
- SHA-256.
- сравнения файлов;
- поиска повторно загруженных образцов;
- проверки целостности;
- сопоставления с другими отчётами;
- ручного поиска в репутационных системах.
---
## 2. Извлечение строк
Из бинарных и исполняемых файлов извлекаются:
- ASCII-строки;
- UTF-16LE-строки.
Строки могут содержать:
- URL;
- домены;
- IP-адреса;
- команды;
- пути к файлам;
- имена процессов;
- ключи реестра;
- User-Agent;
- имена служб;
- названия Scheduled Tasks;
- сообщения об ошибках;
- внутренние имена функций;
- сведения о конфигурации программы.
---
## 3. Поиск IOC
IOC — это индикаторы, которые могут быть полезны при расследовании.
Zer0Kernel AV извлекает:
- HTTP- и HTTPS-ссылки;
- IPv4-адреса;
- доменные имена;
- адреса электронной почты;
- MD5;
- SHA-1;
- SHA-256;
- Windows-пути;
- ключи реестра.
Код:
https://example.org/update.bin
192.0.2.10
C:\Users\Public\update.exe
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Важно понимать, что IOC извлекаются синтаксически.
Сервис не утверждает, что каждый найденный URL или домен является вредоносным. В коде могут встречаться:
- обычные CDN;
- адреса документации;
- тестовые домены;
- ссылки на GitHub;
- имена библиотек;
- строки, лишь похожие на домены.
---
## 4. YARA
Для файлов запускается проверка YARA-правилами.
В базовой конфигурации присутствуют правила для обнаружения:
- PowerShell-цепочки «загрузка и динамическое выполнение»;
- PHP-конструкций вида
eval(base64_decode(...)); - одновременного использования нескольких Windows LOLBins.
Код:
Invoke-WebRequest
Invoke-Expression
может быть отмечено как подозрительная PowerShell-цепочка.
YARA-совпадение добавляется в отчёт как отдельная находка с:
- категорией;
- уровнем риска;
- уверенностью;
- названием правила;
- описанием.
---
## 5. Безопасное декодирование Base64
В текстовых файлах ищутся длинные последовательности, похожие на Base64.
Сервис пытается декодировать их как:
- UTF-8;
- UTF-16LE;
- Latin-1.
Он не передаётся в:
Код:
eval()
exec()
compile()
и не запускается.
Установлены ограничения:
- количество кандидатов;
- максимальная длина закодированной строки;
- максимальный размер результата;
- проверка доли печатных символов.
---
# Анализ PowerShell
Для PowerShell проверяются конструкции, часто встречающиеся в загрузчиках, административных скриптах и вредоносном коде.
Обнаруживаются:
Invoke-Expression;- сокращение
IEX; Invoke-WebRequest;iwr;DownloadString;Net.WebClient;-EncodedCommand;FromBase64String;Add-MpPreference;Set-MpPreference;- создание Scheduled Tasks;
- загрузка .NET-сборок через
Reflection.Assembly::Load; - сочетание сетевой загрузки и выполнения кода.
Код:
загрузка данных
↓
декодирование
↓
динамическое выполнение
Но даже такая цепочка требует проверки: подобные конструкции могут использоваться и в легитимных скриптах развёртывания.
---
# Расширенный анализ Bash и Shell
Bash-анализатор проверяет не только отдельные слова, но и некоторые сочетания действий.
## Загрузка и немедленное выполнение
Проверяются конструкции вида:
Bash:
curl ... | bash
wget ... | sh
bash <(curl ...)
bash -c "$(curl ...)"
eval "$(wget ...)"
Также проверяется декодирование с передачей результата в оболочку:
Код:
Base64 → shell
Hex → shell
OpenSSL decode → shell
Такие цепочки считаются значительно опаснее, чем простое присутствие
curl или wget.---
## Работа с
/tmp и /dev/shmПроверяется:
- загрузка файлов в
/tmp; - загрузка в
/dev/shm; - создание скрытых файлов вроде
/tmp/.update; - установка права на выполнение;
- запуск файла из временного каталога.
Код:
загрузка в /tmp или /dev/shm
↓
chmod +x
↓
запуск
создаётся отдельная корреляционная находка высокого риска.
---
## Reverse shell
Проверяются признаки обратных оболочек через:
/dev/tcp;/dev/udp;bash -i;nc;ncat;netcat;socat EXEC;- FIFO и netcat;
- Python one-liner;
- Perl one-liner;
- PHP one-liner.
---
## SSH persistence
Обнаруживаются операции с:
Код:
~/.ssh/authorized_keys
/root/.ssh/authorized_keys
/home/*/.ssh/authorized_keys
Особенно важный признак:
Код:
SSH-ключ → запись в authorized_keys
Также проверяются обращения к:
- SSH private keys;
.ssh/config;id_rsa;id_ed25519.
## Cron, systemd и автозапуск
Проверяются:
crontab;/etc/crontab;/etc/cron.d;/var/spool/cron;- systemd service units;
systemctl enable;daemon-reload;/etc/rc.local;/etc/init.d;.bashrc;.profile;.zshrc;/etc/profile.d;- задания через
at.
---
## Очистка следов
Проверяются:
Bash:
history -c
unset HISTFILE
HISTFILE=/dev/null
set +o history
Также обнаруживаются:
- удаление файлов в
/var/log; - обнуление журналов;
truncate -s 0;- запись
/dev/nullв журнал; journalctl --vacuum-*;- удаление
.bash_history; - удаление
.zsh_history.
## Отключение защиты
Анализатор отмечает:
- остановку
auditd; - остановку
rsyslog; - отключение firewall;
ufw disable;iptables -F;nft flush ruleset;setenforce 0;- остановку ClamAV;
- остановку Falco;
- остановку osquery;
- отключение некоторых endpoint-агентов.
## Поиск учётных данных
Проверяются обращения к:
Код:
/etc/shadow
/etc/gshadow
~/.ssh/id_rsa
~/.ssh/id_ed25519
.aws/credentials
.config/gcloud/credentials
.kube/config
.docker/config.json
.bash_history
.mysql_history
Также отмечается поиск файлов:
Код:
id_rsa
.env
credentials
wallet.dat
Login Data
Если в одном скрипте присутствуют поиск учётных данных и команда отправки файла, формируется корреляция возможной эксфильтрации.
---
## Повышение привилегий и разрушительные команды
Проверяются:
- изменение
/etc/sudoers; - установка SUID;
setcap cap_setuid;setcap cap_setgid;- рекурсивное удаление системных каталогов;
mkfs;- запись через
ddнепосредственно на диск; - fork bomb.
## Майнеры и эксфильтрация
Проверяются:
- XMRig;
- cpuminer;
- minerd;
- Stratum URL;
- загрузка файлов через
curl; - передача архивов в сетевую утилиту;
- упаковка данных перед отправкой.
Bash:
curl https://example.org/install \
| bash
Обычные неисполняемые комментарии стараются исключаться из проверки.
---
# Анализ Python
Для Python проверяются:
os.system;os.popen;subprocess.Popen;subprocess.run;subprocess.call;subprocess.check_output;marshal.loads;pickle.loads;socket.socket;ctypes;winreg;keyring.
- запуска системных команд;
- создания процессов;
- работы с сокетами;
- загрузки сериализованных данных;
- доступа к Windows API;
- обращения к реестру и хранилищам учётных данных.
# Анализ JavaScript
Для JavaScript проверяются:
eval;Function;child_process;child_process.exec;child_process.spawn;fetch;XMLHttpRequest;WebSocket;ActiveXObject;WScript.Shell;document.cookie.
Например:
JavaScript:
fetch("/api/data")
является обычной конструкцией веб-приложения.
А сочетание:
JavaScript:
require("child_process")
child_process.exec(...)
уже требует более внимательного анализа.
Минифицированный JavaScript сам по себе не считается доказательством вредоносности.
---
# Расширенный анализ PHP
PHP-анализатор предназначен в том числе для поиска:
- веб-шеллов;
- загрузчиков;
- обфусцированного PHP;
- небезопасной десериализации;
- выполнения пользовательских команд;
- опасной загрузки файлов;
- динамического подключения кода.
---
## Выполнение команд и кода
Проверяются:
PHP:
eval()
assert()
system()
exec()
shell_exec()
passthru()
popen()
proc_open()
pcntl_exec()
Также проверяется оператор обратных кавычек PHP:
PHP:
$output = `id`;
Необходимо учитывать, что обратные кавычки внутри SQL-запросов могут быть обычным экранированием имён таблиц и столбцов. Поэтому найденный фрагмент всегда нужно проверять вручную.
---
## Обфускация
Обнаруживаются:
PHP:
base64_decode()
gzinflate()
gzuncompress()
gzdecode()
str_rot13()
hex2bin()
convert_uudecode()
pack()
Особенно опасны цепочки:
PHP:
eval(base64_decode(...));
PHP:
eval(gzinflate(base64_decode(...)));
PHP:
assert(gzuncompress(...));
Также проверяются:
- длинные последовательности
chr(); - крупные Base64-литералы;
- длинные
\xNN-последовательности; - очень длинные строки исходного кода;
- variable functions;
- variable variables;
- динамические callbacks;
create_function;call_user_func;call_user_func_array.
## Небезопасная десериализация
Проверяется:
PHP:
unserialize(...)
Само наличие
unserialize() не означает выполнение произвольного кода.Реальный риск зависит от:
- происхождения данных;
- доступных PHP-классов;
- наличия magic methods;
- проверки целостности;
- версии приложения;
- возможности пользователя управлять сериализованной строкой.
Код:
$_POST / $_GET / $_COOKIE
↓
переменная
↓
unserialize()
---
## Облегчённый taint-анализ
Zer0Kernel AV отслеживает простое движение пользовательских данных.
Источники:
PHP:
$_GET
$_POST
$_REQUEST
$_COOKIE
$_FILES
$_SERVER
$GLOBALS
php://input
filter_input()
getenv()
Опасные точки назначения:
Код:
eval / assert
system / exec / shell_exec
include / require
unserialize
file_put_contents
move_uploaded_file
SQL query
curl
file_get_contents
socket
динамический callback
Например:
PHP:
<?php
$cmd = $_POST['cmd'];
$copy = trim($cmd);
system($copy);
Анализатор построит упрощённую цепочку:
Код:
POST
↓
$cmd
↓
$copy
↓
system()
И отметит возможный канал удалённого выполнения команд.
Это не полноценный межпроцедурный PHP-анализатор. Он может пропускать:
- сложные массивы;
- объекты;
- reflection;
- данные между несколькими файлами;
- динамически создаваемые имена;
- код, формируемый во время выполнения.
## Подключение файлов и PHP streams
Проверяются:
PHP:
include
include_once
require
require_once
Особое внимание уделяется схемам:
Код:
http://
https://
ftp://
data://
php://
phar://
Например, динамический
include через пользовательский параметр может указывать на Local File Inclusion или Remote File Inclusion.---
## Запись файлов и persistence
Проверяются:
PHP:
file_put_contents()
fwrite()
fputs()
copy()
rename()
chmod()
touch()
unlink()
move_uploaded_file()
Также ищутся ссылки на:
Код:
.user.ini
.htaccess
auto_prepend_file
authorized_keys
/etc/cron
/var/spool/cron
Это помогает обнаруживать PHP-код, способный изменять конфигурацию сайта или закрепляться в системе.
---
## Другие PHP-признаки
Проверяются:
- обработка
$_FILES; - сетевые функции;
curl;fsockopen;stream_socket_client;- подавление ошибок через
@; - отключение вывода ошибок;
unlink(__FILE__);extract($_POST);set_time_limit(0);ignore_user_abort(true).
Если в одном файле одновременно обнаруживаются:
Код:
сеть
+
запись файла
+
выполнение
создаётся отдельная находка возможной цепочки:
Код:
download → write → execute
---
# Анализ BAT и CMD
Проверяются:
- PowerShell с
-EncodedCommand; certutil;bitsadmin;mshta;rundll32;regsvr32;- создание Scheduled Task;
- создание Windows Service;
- удаление теневых копий через
vssadmin.
---
# Анализ документов Microsoft Office
Для документов Office используется статический анализ макросов.
Поддерживаются старые OLE-документы и современные Office-контейнеры.
Проверяется:
- наличие VBA-макросов;
- список модулей;
- исходный код макросов;
- автоматически запускаемые процедуры;
- подозрительные функции;
- IOC;
- распространённые способы обфускации.
Код:
AutoOpen
Document_Open
Workbook_Open
Shell
CreateObject
GetObject
WScript.Shell
URLDownloadToFile
Макросы не запускаются.
---
# Анализ EXE, DLL, SYS и других PE-файлов
PE-анализ состоит из нескольких уровней.
---
## Уровень 1: структура PE через pefile
Из файла извлекаются:
- архитектура;
- timestamp из заголовка;
- точка входа;
- Image Base;
- subsystem;
- imphash;
- секции;
- виртуальные размеры;
- физические размеры;
- характеристики секций;
- энтропия;
- импортируемые DLL;
- импортируемые функции;
- предупреждения PE-парсера.
## Подозрительные импорты
Отмечаются API, связанные с потенциально опасными возможностями.
Например:
Код:
CreateRemoteThread
WriteProcessMemory
VirtualAllocEx
WinExec
ShellExecuteA
ShellExecuteW
URLDownloadToFileA
URLDownloadToFileW
InternetOpenUrlA
InternetOpenUrlW
RegSetValueExA
RegSetValueExW
IsDebuggerPresent
CheckRemoteDebuggerPresent
Комбинация:
Код:
VirtualAllocEx
↓
WriteProcessMemory
↓
CreateRemoteThread
может быть связана с внедрением кода в другой процесс.
Но наличие импорта ещё не доказывает вызов функции. Эти API могут использовать:
- отладчики;
- EDR;
- инструменты администрирования;
- редакторы памяти;
- установщики;
- защитное ПО.
---
## Энтропия секций
Для каждой секции PE рассчитывается энтропия.
Высокая энтропия крупной секции может указывать на:
- упаковщик;
- сжатие;
- шифрование;
- обфускацию;
- встроенный архив;
- зашифрованную конфигурацию.
Код:
энтропия не ниже 7.2
размер не меньше 4096 байт
Это эвристика. Сжатые изображения и другие легитимные ресурсы тоже могут иметь высокую энтропию.
---
## Уровень 2: capa
capa анализирует машинный код и пытается определить потенциальные возможности программы.Он способен находить признаки:
- создания процессов;
- загрузки кода;
- process injection;
- shellcode;
- process hollowing;
- сетевого взаимодействия;
- HTTP, DNS и сокетов;
- создания служб;
- Scheduled Tasks;
- persistence;
- доступа к учётным данным;
- keylogging;
- anti-debug;
- anti-VM;
- упаковки;
- обфускации;
- системной разведки;
- разрушительных действий.
В отчёт сохраняются:
- название правила capa;
- namespace;
- описание;
- количество совпадений;
- адреса совпадений;
- ATT&CK-метаданные;
- MBC-метаданные.
100/100, результаты capa дополнительно группируются.Например, множество сетевых capa-правил может сформировать одну оценочную технику:
Код:
capa_network_capabilities
Полный список capabilities остаётся в техническом отчёте.
---
## Уровень 3: FLOSS
FLOSS предназначен для извлечения строк, которые могут отсутствовать среди обычных ASCII- и UTF-16-строк.
В текущей конфигурации Zer0Kernel AV использует FLOSS для поиска:
- decoded strings — строк, восстановленных функциями декодирования;
- stack strings — строк, собираемых на стеке.
Режим
tight strings может быть отключён для уменьшения времени анализа.FLOSS способен восстановить, например:
Код:
powershell.exe -EncodedCommand ...
https://example.org/gate
Software\Microsoft\Windows\CurrentVersion\Run
schtasks /create ...
vssadmin delete shadows ...
Восстановленные строки повторно проверяются на:
- URL;
- сетевые индикаторы;
- PowerShell;
- CMD;
- LOLBins;
- process injection API;
- persistence;
- доступ к браузерным данным;
- удаление теневых копий;
- разрушительные команды.
- больших PE;
- упакованных программах;
- файлах с большим количеством функций;
- повреждённых образцах.
---
# Как анализируются архивы
Архив распаковывается в отдельный временный каталог.
После распаковки каждый файл проходит повторное определение типа:
Код:
plugin.zip
├── addon.json
├── install.php
├── src/
│ ├── Service.php
│ └── Listener.php
├── js/
│ └── library.min.js
└── tools/
└── helper.exe
В этом примере:
- PHP-файлы пройдут PHP-анализ;
- JavaScript пройдёт JavaScript-анализ;
- EXE пройдёт
pefile, capa и FLOSS; - JSON и неизвестные тексты пройдут базовый анализ;
- вложенный архив будет распакован рекурсивно.
## Защита при распаковке
Проверяются:
- пути с
../; - абсолютные пути;
- UNC-пути;
- Windows drive paths;
- NUL-байты;
- символические ссылки;
- hard links;
- размер каждого файла;
- общий распакованный объём;
- количество элементов;
- степень вложенности;
- коэффициент сжатия.
Код:
/etc/cron.d/
или:
Код:
/root/.ssh/authorized_keys
через путь вида:
Код:
../../../../root/.ssh/authorized_keys
---
## Неподдерживаемые и зашифрованные архивы
В текущей версии:
- ZIP распаковывается;
- TAR распаковывается;
- TAR.GZ и TGZ распаковываются;
- GZ распаковывается;
- BZ2 распаковывается;
- XZ распаковывается;
- 7z распознаётся, но не распаковывается;
- RAR распознаётся, но не распаковывается;
- зашифрованные элементы ZIP пропускаются.
---
# Как рассчитывается оценка риска
Оценка риска рассчитывается обычным программным кодом.
Локальная нейросеть не назначает баллы и не может произвольно изменить итоговую оценку.
Каждая находка имеет уровень:
| Уровень | Вес |
|---|---:|
| Low | 2 |
| Medium | 7 |
| High | 15 |
| Critical | 25 |
---
## Повторные находки не суммируются бесконечно
Оценка строится по уникальной комбинации:
Код:
категория + техника
Если одна и та же техника найдена в 100 строках, для расчёта используется её максимальный уровень, а не сумма всех 100 совпадений.
Это защищает от ситуации, когда библиотека с большим количеством одинаковых вызовов автоматически получает
100/100.---
## Дополнительные корреляции
К основной сумме добавляются баллы за опасные сочетания категорий.
### Сеть и выполнение
Код:
network + execution = +15
Пример:
Код:
скачивание файла
+
запуск процесса
### Выполнение и persistence
Код:
execution + persistence = +15
Пример:
Код:
выполнение команды
+
создание Scheduled Task
### Доступ к учётным данным
Код:
credential_access = +20
### Разрушительная активность
Код:
destructive_activity = +20
Максимальная итоговая оценка ограничена:
Код:
100/100
---
## Пример расчёта
Предположим, в скрипте обнаружены:
| Находка | Баллы |
|---|---:|
| Загрузка данных — Medium | 7 |
| Выполнение команды — High | 15 |
| Создание cron-задачи — High | 15 |
| Сочетание network + execution | 15 |
| Сочетание execution + persistence | 15 |
| Итого | 67 |
Итог:
Код:
67/100
Это означает высокий приоритет для ручной проверки, но не вероятность вредоносности в 67%.
---
## Как отображается оценка
Интерфейс использует три диапазона:
| Оценка | Отображение |
|---|---|
| 0–29 | низкий уровень |
| 30–59 | средний уровень |
| 60–100 | высокий уровень |
Эти диапазоны нужны для сортировки и первичного триажа.
---
# Почему легитимный плагин может получить 58/100
Оценка
58/100 не означает:Файл вредоносный с вероятностью 58%.
Например, обычный плагин может одновременно содержать:
unserialize()в PHP;- сетевые функции;
- минифицированный JavaScript;
- динамические callbacks;
- работу с файлами;
- внешние CDN-ссылки;
- код установки и удаления;
- SQL-запросы;
- обработку пользовательского ввода.
Поэтому результат следует читать так:
В архиве обнаружено несколько технически опасных примитивов. Необходимо проверить, как именно они используются.
Особенно важно смотреть не только на балл, но и на:
- источник находки;
- уровень уверенности;
- строку кода;
- доказательство;
- описание;
- сочетание нескольких действий.
# Источники находок
В отчёте можно встретить разные значения источника.
| Источник | Значение |
|---|---|
|
yara | совпадение с YARA-правилом ||
heuristic | регулярная эвристическая проверка ||
correlation | сочетание нескольких признаков ||
php_taint | движение пользовательских данных к опасной функции ||
pe_import | импорт Windows API ||
pe_structure | структурная аномалия PE ||
capa | возможность, найденная capa ||
floss | строка или группа строк, восстановленная FLOSS ||
olevba | результат анализа VBA-макросов |---
# Уровень опасности и уверенность — разные параметры
У находки есть два независимых свойства.
## Severity
Потенциальная серьёзность действия:
Код:
low
medium
high
critical
## Confidence
Насколько уверенно статический анализатор интерпретировал признак:
Код:
low
medium
high
Например:
Код:
CreateRemoteThread
может иметь высокий потенциальный риск, но низкую уверенность, потому что наличие импорта не доказывает фактическое внедрение кода.
---
# Какую роль выполняет Zer0Kernel
После технического анализа готовый отчёт передаётся локальной модели Zer0Kernel.
Модель не получает исходный EXE, PHP, Bash или архив.
Она получает сокращённый JSON, содержащий:
- общую оценку;
- основные находки;
- наиболее рискованные файлы;
- IOC;
- результаты capa;
- результаты FLOSS;
- сведения PHP-анализатора;
- ограничения статического анализа.
- краткий вердикт;
- уровень уверенности;
- понятное русскоязычное описание;
- подтверждённые признаки;
- возможные действия;
- IOC;
- рекомендации;
- ограничения анализа.
## Zer0Kernel не рассчитывает оценку
Оценка риска уже рассчитана до обращения к модели.
Схема:
Код:
Статические анализаторы
↓
Детерминированный расчёт риска
↓
Готовый JSON
↓
Zer0Kernel объясняет результат
Это важно, потому что языковая модель может:
- неправильно понять контекст;
- переоценить обычную функцию;
- принять имя JavaScript-объекта за домен;
- спутать SQL-кавычки с выполнением команд;
- сделать слишком уверенный вывод.
Основным источником считаются технические находки и фрагменты кода.
---
# Что происходит с загруженными файлами
При загрузке создаётся временный каталог задания:
Код:
/var/lib/zkav/jobs/<случайный-job-id>/
Файл сохраняется под нейтральным внутренним именем:
Код:
sample.bin
Пользовательское имя используется только для отображения в отчёте.
Каталог создаётся с ограниченными правами, а сам файл недоступен другим обычным пользователям системы.
---
## Удаление после анализа
После окончания статического анализа выполняется удаление всего рабочего каталога задания.
Удаляются:
- исходный файл;
- распакованные архивы;
- вложенные файлы;
- временные данные анализатора.
finally.---
## Аварийная очистка
Отдельный контейнер
janitor проверяет временные каталоги каждые пять минут.Если каталог остался после:
- аварийного завершения worker;
- перезапуска контейнера;
- системной ошибки;
- незавершённого задания,
В текущей конфигурации резервная очистка удаляет зависшие каталоги старше двух часов, если они не помечены как активно анализируемые.
---
# Как хранятся отчёты
Технический отчёт хранится в Redis.
Для каждого задания создаются:
Код:
zkav:job:<job-id>:meta
zkav:job:<job-id>:report
Для отчёта устанавливается TTL:
Код:
86400 секунд
То есть:
Код:
24 часа
После истечения TTL Redis автоматически удаляет отчёт и метаданные.
Также пользователь может нажать:
Код:
Удалить отчёт
и удалить данные раньше.
---
## Защита доступа к отчёту
Для каждого задания создаётся случайный токен доступа.
В Redis хранится не сам токен, а его SHA-256-хеш.
Получить отчёт без правильного токена невозможно через обычный API.
Это не заменяет полноценную пользовательскую авторизацию, но защищает отчёт от простого перебора UUID.
---
## Важное уточнение об удалении
Удаление из Redis и Docker Volume является логическим удалением.
Оно не гарантирует криптографическое стирание каждого физического блока диска.
Копии данных теоретически могут временно оставаться:
- в свободных блоках файловой системы;
- в Redis AOF до его перезаписи;
- в снапшотах сервера;
- в резервных копиях провайдера.
---
# Изоляция анализатора
Основные компоненты работают в отдельных Docker-контейнерах.
Код:
API
↓
Redis
↓
Analyzer worker
↓
Технический отчёт
Redis
↓
Zer0Kernel enrichment worker
↓
Русскоязычное заключение
---
## Analyzer worker
Контейнер анализатора:
- не имеет доступа в Интернет;
- не монтирует
/сервера; - не видит
/root; - не видит
/etcхоста; - не видит
/var/www; - не получает
/var/run/docker.sock; - работает с read-only root filesystem;
- использует
cap_drop: ALL; - использует
no-new-privileges; - ограничен по CPU, RAM и количеству процессов;
- использует отдельный временный
tmpfs; - не запускает исследуемые PE и скрипты.
## Zer0Kernel enrichment worker
Контейнер Zer0Kernel:
- не монтирует каталог с загруженными файлами;
- не может прочитать исходный образец;
- получает только JSON;
- подключается к локальному vLLM;
- не отправляет файл во внешние нейросети.
## Остаточный риск
Docker-контейнеры используют общее ядро Linux.
Теоретически абсолютную защиту невозможно гарантировать из-за:
- уязвимостей ядра;
- container escape;
- уязвимостей Docker или runc;
- уязвимостей самих парсеров;
- специально повреждённых PE или Office-документов.
---
# Преимущества Zer0Kernel AV
## 1. Файл не запускается
Главное преимущество статического анализа — исследование файла без нормального исполнения его кода.
Это значительно безопаснее, чем открывать неизвестный EXE или запускать подозрительный скрипт на рабочем компьютере.
---
## 2. Локальная обработка
Исходные файлы не отправляются:
- в VirusTotal;
- в публичные облачные песочницы;
- во внешние AI API;
- сторонним поставщикам репутационных сервисов.
- закрытого исходного кода;
- коммерческого плагина;
- внутреннего скрипта;
- конфигурации компании;
- ещё не опубликованного программного обеспечения.
## 3. Многослойный анализ
Один инструмент редко даёт полную картину.
Zer0Kernel AV объединяет:
Код:
YARA
+ строки
+ IOC
+ эвристики
+ PHP taint-анализ
+ oletools
+ pefile
+ capa
+ FLOSS
+ корреляции
+ локальное AI-заключение
Это позволяет увидеть файл с разных сторон.
---
## 4. Рекурсивный анализ архивов
Сервис проверяет не только сам ZIP, но и его содержимое.
Например, в архиве с плагином можно отдельно увидеть:
- PHP-файлы;
- JavaScript;
- вложенные архивы;
- неизвестные бинарные файлы;
- EXE или DLL;
- макросы Office.
## 5. Объяснимый результат
Отчёт показывает:
- какой файл вызвал находку;
- какая техника обнаружена;
- уровень опасности;
- уверенность;
- источник;
- строку;
- фрагмент доказательства.
Код:
Threat detected
без объяснения причины.
---
## 6. Оценка не зависит от языковой модели
Риск рассчитывается детерминированно.
Даже если Zer0Kernel временно недоступен, технический отчёт и оценка сохраняются.
---
## 7. Временное хранение
Исходный файл удаляется после анализа, а отчёт автоматически исчезает через 24 часа.
---
## 8. Подходит для первичного триажа
Zer0Kernel AV позволяет быстро решить:
- файл можно изучать дальше;
- файл требует отдельной виртуальной машины;
- необходимо проверить конкретную функцию;
- следует искать оригинальную версию;
- нужно сравнить SHA-256;
- необходимо провести динамический анализ;
- файл выглядит обычным, но содержит потенциально опасные возможности.
# Ограничения сервиса
Zer0Kernel AV не является заменой:
- полноценного антивируса;
- EDR;
- динамической песочницы;
- ручного реверс-инжиниринга;
- аудита исходного кода специалистом;
- VirusTotal;
- репутационных баз;
- анализа сетевого поведения.
- созданные процессы;
- сетевые соединения;
- изменения реестра;
- созданные файлы;
- обращения к командному серверу;
- действия в памяти после запуска;
- поведение в зависимости от окружения;
- anti-sandbox поведение;
- полезную нагрузку, получаемую только из Интернета.
## Возможны ложные срабатывания
Особенно часто они возникают на:
- фреймворках;
- минифицированном JavaScript;
- установщиках;
- административных утилитах;
- обновляторах;
- плагинах сайтов;
- отладчиках;
- защитных программах;
- коде миграции базы данных;
- легитимной сериализации.
## Возможны пропуски
Статический анализ может пропустить:
- полностью зашифрованную полезную нагрузку;
- динамически вычисляемые API;
- API hashing;
- код, загружаемый из сети;
- сложную обфускацию;
- неизвестный упаковщик;
- полиморфный код;
- поведение, активируемое только на определённой машине;
- код внутри зашифрованного архива;
- shell-команды, формируемые в runtime.
## Нет полноценной проверки цифровой подписи
Текущая версия извлекает PE-структуру, но не выполняет полноценную проверку:
- Authenticode;
- цепочки сертификатов;
- отзыва сертификата;
- репутации издателя.
---
# Как правильно читать отчёт
Рекомендуемый порядок:
1. Посмотреть общую оценку риска.
2. Проверить число файлов в архиве.
3. Найти файлы с наибольшей индивидуальной оценкой.
4. Открыть критические и высокие находки.
5. Посмотреть источник находки.
6. Проверить строку и доказательство.
7. Изучить IOC.
8. Прочитать заключение Zer0Kernel.
9. Сравнить SHA-256 с официальным источником.
10. При необходимости провести ручной или динамический анализ.
---
# Когда файл требует особого внимания
Особенно внимательно следует исследовать файл, если одновременно присутствуют:
Код:
загрузка данных
+
выполнение
+
persistence
или:
Код:
доступ к учётным данным
+
упаковка
+
передача данных в сеть
или:
Код:
обфускация
+
декодирование
+
eval/exec
или:
Код:
process injection
+
anti-debug
+
сетевое взаимодействие
Одно совпадение может быть случайным. Несколько связанных действий значительно важнее.
---
# Можно ли считать Zer0Kernel AV антивирусом
В привычном смысле — нет.
Сервис:
- не работает в реальном времени;
- не контролирует процессы;
- не блокирует запуск;
- не проверяет каждую запись на диск;
- не имеет драйвера;
- не заменяет Microsoft Defender или EDR;
- не имеет огромной коммерческой базы сигнатур.
статическим анализатором угроз
или:
сервисом первичного анализа подозрительных файлов
Название
AV используется как короткое и понятное обозначение проекта.---
# Итог
Zer0Kernel AV объединяет классические инструменты статического анализа и локальную нейросеть.
Сервис позволяет:
- безопасно принять подозрительный файл;
- определить его тип;
- проверить хеши;
- извлечь строки;
- найти IOC;
- обнаружить обфускацию;
- исследовать PHP и Bash;
- извлечь VBA-макросы;
- разобрать PE;
- определить возможности через capa;
- восстановить скрытые строки через FLOSS;
- рекурсивно проверить архив;
- рассчитать понятную оценку риска;
- получить русскоязычное заключение;
- удалить исходные данные после анализа.
При этом главный принцип остаётся неизменным:
Zer0Kernel AV помогает понять, что находится внутри файла, но окончательное решение всегда должен принимать человек.
Сервис:
Последнее редактирование:
