
Аудитор безопасности конфигурации ядра Linux только для чтения, без агентов (локально и по SSH). Основной фокус: проверки миграции TCP / MPTCP для CVE-2026-98432.
Легкий инструмент аудита безопасности Linux с открытым исходным кодом, написанный на Python.
Аудит локальных и удаленных серверов Linux по SSH без установки агентов или изменения конфигурации системы.
Это аудитор конфигурации и статуса патчей, а не сканер эксплойтов. Он сообщает о настройках ядра и их использовании, связанных с уязвимостью, и сравнивает работающий пакет ядра с исправленной версией от производителя. Он никогда не пытается вызвать уязвимость.
| Возможность | v0.2.0 |
|---|---|
| Python 3.8+, без сторонних зависимостей | ✅ |
| Локальный аудит Linux | ✅ |
| Удаленный аудит по SSH (без агентов) | ✅ |
| Параллельное сканирование нескольких серверов | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| Проверка миграции сокетов TCP-запросов | ✅ |
| Проверка конфигурации и использования MPTCP | ✅ |
| Обнаружение ядра, дистрибутива и ожидающей перезагрузки | ✅ |
| Отчеты в формате JSON / CSV | ✅ |
| Проверка патчей CVE ядра (Ubuntu, Debian, RHEL, Rocky, AlmaLinux, CentOS) | ✅ |
| Автоматические обновления безопасности | ❌ никогда |
| Изменение конфигурации сервера | ❌ никогда |
Контроллер (ваша рабочая станция Mac или Linux) собирает небольшой скрипт POSIX sh
из выбранных проверок и передает его через конвейер в sh -s на каждой целевой машине по
SSH. На целевую машину ничего не копируется и не устанавливается. Скрипт выводит
факты в формате key=value; вся оценка происходит на контроллере, который
рассматривает вывод целевой машины как недоверенный (управляющие символы удаляются, значения усекаются,
инъекция формул CSV нейтрализуется).
Перед запуском проверьте, что именно будет выполняться на ваших серверах:
python3 netviser_cve_audit.py --print-script
Целевые узлы требуют только sh и стандартные инструменты (ss из iproute2, awk,
grep, sed). Python на целевых узлах не требуется.
Контроллер требует Python 3.8+ и OpenSSH (macOS или Linux).
git clone https://github.com/maxigentr/netviser-linux-security-auditor.git
cd netviser-linux-security-auditor
# Audit this Linux machine
python3 netviser_cve_audit.py --local
# Audit a remote server
python3 netviser_cve_audit.py --host [email protected]
# Custom SSH port and key
python3 netviser_cve_audit.py --host [email protected] --port 2290 --identity ~/.ssh/audit_ed25519
# Multiple servers, 10 in parallel
python3 netviser_cve_audit.py --hosts servers.txt --workers 10
# Non-root SSH user with passwordless sudo, for full process and BPF visibility
python3 netviser_cve_audit.py --host admin@web01 --sudo
# Watch MPTCP counters for 60 seconds to see if MPTCP is used right now
python3 netviser_cve_audit.py --hosts servers.txt --sample-interval 60
# Also check whether other kernel CVEs are patched
python3 netviser_cve_audit.py --hosts servers.txt --cve CVE-2024-1086,CVE-2024-26925
Инструмент также можно установить (pip install .) и запускать как netviser-audit
или python3 -m netviser_audit.
Формат файла хостов см. в examples/servers.example.txt.
Порты для отдельных хостов задаются через ssh://user@host:port или
псевдоним в ~/.ssh/config.
| Параметр | Описание |
|---|---|
--local / --host H / --hosts FILE | Что проверять |
--checks IDS | Подмножество проверок через запятую (см. --list-checks); зависимости добавляются автоматически |
--cve IDS | Дополнительно сообщить статус патча ядра для указанных CVE (можно повторять или перечислять через запятую) |
--offline | Не загружать данные рекомендаций производителя |
--advisories FILE | Использовать ранее сохранённые данные рекомендаций; отсутствующие записи всё равно загружаются, если не указан --offline |
--save-advisories FILE | Сохранить использованные данные рекомендаций для офлайн- или повторных запусков |
--sudo | Запускать сборщик с sudo -n (без запроса пароля) |
--sample-interval N | Считывать счётчики MPTCP дважды с интервалом N секунд |
--output PREFIX | Префикс отчёта (по умолчанию netviser_audit → .json, .csv) |
--no-report | Выводить только в терминал |
--fail-on-review | Завершиться с кодом 3 при наличии хотя бы одной находки REVIEW (для CI / cron) |
-v, --verbose | Показывать все находки, а не только REVIEW / UNKNOWN |
SSH-запуски выполняются с BatchMode=yes (только аутентификация по ключу) и
StrictHostKeyChecking=accept-new.
Код завершения: 0 — успех, 1 — не удалось просканировать цель, 2 — ошибка использования,
3 — есть находки для проверки (только с --fail-on-review).
| Id | Что проверяется |
|---|---|
kernel | Дистрибутив, версия ядра, пакет работающего ядра, более новый установленный kernel / требуется перезагрузка |
patch | Статус патча для каждой CVE для пакета работающего ядра по данным рекомендаций производителя |
tcp_migration | net.ipv4.tcp_migrate_req; загруженные BPF-программы sk_reuseport (root + bpftool) |
mptcp | net.mptcp.enabled, path manager, CONFIG_MPTCP, MPTCP-сокеты и процессы, счётчики рукопожатий, использование mptcpize |
cve_2026_98432 | Связанная конфигурация для CVE-2026-98432; её статус патча — patch.CVE-2026-98432 |
Каждая находка имеет статус — OK, INFO, REVIEW или UNKNOWN — и
машиночитаемый вердикт (например, mptcp.usage = IN_USE).
Проверка patch отвечает на один вопрос для каждой CVE: исправлено ли ядро,
работающее прямо сейчас, согласно данным производителя дистрибутива?
dpkg-query / rpm -qf): его имя, точную версию и исходный
пакет. Он также перечисляет идентификаторы CVE, упомянутые в changelog этого пакета и в
загруженных livepatch-модулях (canonical-livepatch, kpatch-patch).~
обрабатываются корректно.| Дистрибутив | Источник рекомендаций |
|---|---|
| Ubuntu | Ubuntu Security API — по релизу и варианту ядра (linux, linux-hwe-*, linux-aws, …) |
| Debian | Данные Debian Security Tracker через OSV |
| RHEL, Rocky Linux, AlmaLinux, CentOS | Red Hat Security Data API — основной поток RHEL |
В эти сервисы отправляются только идентификаторы CVE; никакая информация о ваших хостах
не покидает контроллер. Для изолированных сред запустите один раз с
--save-advisories adv.json, а затем с --offline --advisories adv.json.
| Вердикт | Статус | Значение |
|---|---|---|
PATCHED | OK | Запущенная версия ядра ≥ исправленной версии от вендора |
NOT_AFFECTED | OK | Вендор сообщает, что этот выпуск / ядро не затронуты |
LIVEPATCHED | OK | Загруженный livepatch указывает CVE как исправленную |
VULNERABLE | REVIEW | Исправление выпущено; запущенное ядро старше. Установите его и перезагрузитесь |
FIX_PENDING | REVIEW | Вендор подготовил исправление, но оно ещё не выпущено (Ubuntu) |
FIX_NOT_AVAILABLE | REVIEW | Затронуто, исправление ещё не опубликовано |
WONT_FIX | REVIEW | Вендор не будет исправлять этот выпуск (например, окончание поддержки) |
MENTIONED_IN_CHANGELOG | INFO | Нет вердикта вендора, но changelog запущенного ядра упоминает CVE |
NO_DATA | UNKNOWN | У вендора нет записи для этой CVE, выпуска или варианта ядра |
UNSUPPORTED | UNKNOWN | Нет источника рекомендаций для этого дистрибутива (например, Fedora, SUSE) |
NOT_CHECKED | UNKNOWN | Данные рекомендаций недоступны (--offline, ошибка сети) или пакет ядра неизвестен |