Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
NetworkSandboxEngine — Детерминированная сетевая песочница для тестирования правил nftables. Использует эфемерные сетевые пространства имён Linux (netns) и Scapy для безопасной проверки логики межсетевого экрана. | Kitploit
Инструменты/GitHubGitHub/onyks-os/networksandboxengine
Оборонительные ИнструментыСниффинг и анализ пакетовСкриптинг и автоматизацияАудит конфигурацииСетевая безопасностьDevSecOps
GitHubonyks-os/networksandboxengine

NetworkSandboxEngine

Детерминированная сетевая песочница для тестирования правил nftables. Использует эфемерные сетевые пространства имён Linux (netns) и Scapy для безопасной проверки логики межсетевого экрана.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
РепозиторийСайт
6533 дней назадЕщё не проверено
Поделиться

Network Sandbox Engine

Движок для Linux для детерминированного тестирования межсетевого экрана nftables внутри изолированных сетевых пространств имён.

Linux Python CI Status Documentation PyPI License

Зачем NSE? • Контракт оракула • Проверки на уровне сети • Возможности • Требования • Установка • Быстрый старт • Как это работает • Структура проекта

Зачем NSE?

Тестирование наборов правил межсетевого экрана на работающей системе Linux сопряжено со значительными рисками: некорректные правила могут разорвать сеансы управления по SSH, допустить утечку трафика в открытом виде во время тестирования или оставить на хосте активные «осиротевшие» таблицы межсетевого экрана.

Network Sandbox Engine (NSE) предоставляет безопасный и воспроизводимый стенд для тестирования. Он создаёт эфемерные сетевые пространства имён Linux, соединяет виртуальные пары ethernet, компилирует наборы правил nftables и внедряет синтетические пакеты уровня 2 и уровня 3 с помощью Scapy. Вся обработка происходит внутри пространства имён песочницы: состояние межсетевого экрана хоста никогда не изменяется.

Ключевые архитектурные свойства:

  • Нулевое изменение хоста: наборы правил загружаются исключительно в эфемерные пространства имён песочницы (nse_<uuid>) и полностью удаляются при завершении работы.
  • Самопроверяющийся оракул: каждый запуск внедряет канареечный пакет перед тестовыми пакетами и ещё раз после них, и сообщает результат только в том случае, если трассировка ядра была получена для обоих. См. Контракт оракула.
  • Двойной стек и топологии: нативная поддержка трафика IPv4 и IPv6, а также многосетевые топологии Gateway для проверки наборов правил маршрутизатора, NAT и пересылки.
  • Малая, поддающаяся аудиту поверхность: один пакет, без веб-сервера, без JavaScript. nse/ — это около 1200 операторов при 98% покрытии тестами.

Требуются права root

NSE создаёт сетевые пространства имён, загружает наборы правил nftables и читает события трассировки ядра, поэтому работает от имени root. Он не открывает сокет, порт или RPC-эндпоинт какого-либо рода — это библиотека и CLI, которые вы вызываете, и он обладает привилегиями только на время выполнения.

Версия 2.1.0 удалила веб-интерфейс на FastAPI/Svelte, который поставлялся в более ранних выпусках. Этот интерфейс работал в процессе от имени root начиная с версии 2.0.0, что представляло собой большую поверхность атаки для инструмента тестирования; код остаётся в истории git под тегом v2.0.0, если он вам нужен.


Контракт оракула

Тест межсетевого экрана — это негативное утверждение — «этот пакет не прошёл» — а негативное утверждение ничего не стоит, если не известно, что инструмент работает. Монитор трассировки, который так и не подключился к ядру, и межсетевой экран, который заблокировал всё, дают побайтово идентичный вывод.

Поэтому NSE отказывается сообщать вердикт, который он не может показать как измеренный:

ГарантияМеханизм
Монитор был подключён до первого тестового пакетаВнедряется канарейка готовности и повторно внедряется до тех пор, пока не будет зафиксирован её трассировочный след в ядре. Нет наблюдения — нет запуска.
Монитор был всё ещё подключён после последнегоПосле внедрения запускается канарейка живости. Если она пропущена, поток вердиктов объявляется усечённым.
Парсер понял то, что сообщило ядроСтроки трассировки, не совпавшие ни с одним шаблоном, подсчитываются, и любое значение больше нуля является ошибкой, а не отладочным логом.
Монитор не завершился молчаЦикл чтения фиксирует причину своего завершения — чистая остановка, неожиданный EOF, тайм-аут или сбой — и приемлема только чистая остановка.
Отсутствующий вердикт — не успехCLI-раннер завершается с ошибкой, когда число наблюдаемых вердиктов отличается от ожидаемого, в любую сторону.

Канареечные пакеты исключаются из результатов по trace id, поэтому они никогда не появляются в вашем потоке вердиктов.

Набор тестов доказывает это, а не утверждает: make test-blind заставляет парсер не понимать ничего, и сборка завершается с ошибкой, если раннер не завершается с ненулевым кодом. Эта задача выполняется в CI при каждом push.


Проверки на уровне сетевого трафика

nft monitor trace сообщает о том, что решил набор правил. Он не может сообщить о том, что покинуло интерфейс, на котором набор правил никогда не сопоставлялся, — а это именно тот вопрос, который на самом деле задаёт утверждение об отсутствии утечек. PCAPAsserter покрывает это: обёртка над AsyncSniffer, которая захватывает трафик на указанном интерфейсе и возвращает кадры, чтобы тест мог утверждать, что стимул не породил ни одного.

from nse import PCAPAsserter

asserter = PCAPAsserter(iface="veth-host")
await asserter.start()
# ... send the stimulus ...
leaked = await asserter.stop()
assert not leaked, leaked

Действует то же правило, что и для trace oracle, и его должен обеспечивать вызывающий код: сниффер, который так и не подключился, и межсетевой экран, заблокировавший всё, оба возвращают пустой список. Захватите стимул один раз при очищенном наборе правил и требуйте, чтобы кадр был увиден, прежде чем утверждать его отсутствие.

Фильтр по умолчанию подавляет шум link-local и ничего больше. DEFAULT_FILTER исключает ARP и типы ICMPv6 133-137 — Neighbour Discovery, которые несут hop limit 255 и не могут достичь удалённого наблюдателя. Всё остальное захватывается, включая ICMPv6 echo на глобально маршрутизируемый адрес. Аргумент filter объединяется с этим значением по умолчанию; replace_default_filter=True использует только ваш. Этот обходной путь существует потому, что фильтр компилируется в BPF и вычисляется в ядре: пакет, который он исключает, никогда не достигает пространства пользователя, поэтому ни один потребитель не может восстановить его ниже по потоку. До версии 2.1.2 значение по умолчанию читалось как not arp and not icmp6, что отбрасывало и маршрутизируемый ICMPv6 — см. issue #14.


Возможности

Скачать инструмент