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

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

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

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

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

Категории

Все категории
Loading categories
bpfjailer — Основанный на eBPF LSM мандатный контроль доступа и изолятор | Kitploit
Инструменты/GitHubGitHub/facebookincubator/bpfjailer
Аутентификация и авторизацияОборонительные ИнструментыПовышение привилегийБезопасность контейнеровАудит конфигурацииКонтроль доступа к сети
GitHubfacebookincubator/bpfjailer

bpfjailer

Основанный на eBPF LSM мандатный контроль доступа и изолятор

Репозиторий
8981121 день назадПроверено Kitploit

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться

BpfJailer

Мандатный контроль доступа для Linux на основе eBPF.

Этот проект представляет собой полную переработку закрытого исходного кода BpfJailer и является полностью экспериментальным. Он использует новые возможности, такие как bpf arena, которые были недоступны, когда создавался внутренний BpfJailer. Ожидаются проблемы, и они не подлежат выплатам за ошибки и не рассматриваются как находки в области безопасности. После надлежащей оценки он заменит внутреннюю закрытую версию.

BpfJailer использует программы eBPF LSM для помещения процессов в тюрьмы, называемые подами, каждая из которых привязана к роли из политики TOML. Под наследуется через fork и exec. Дополнительные возможности политики:

  • Подписанные бинарники — исполняемые бинарники должны включать fs-verity и подпись из именованного набора сертификатов.
  • kill и ptrace — целевые роли/поды, которым можно посылать сигналы или к которым можно подключаться.
  • bpf — карты и программы eBPF каких ролей роль может открывать, или может ли она вообще вызывать bpf(2).
  • keyring — в связки ключей fs-verity каких ролей роль может добавлять сертификаты, или может ли она вообще записывать в связки ключей.
  • Пути файловой системы — доступ на чтение и запись к путям файловой системы.
  • Исполняемый код — какие пути могут быть исполнены или использованы как dll.
  • Загрузка в ядро — загрузка модулей ядра и kexec.
  • IPC — очереди сообщений System V и POSIX и разделяемая память с учётом владельца, а также шаблоны имён с раскрытием переменных для объектов POSIX.
  • Unix-сокеты — политика для путевых и абстрактных имён при bind, connect и назначениях датаграмм.
  • Монтирования — правила для точек назначения и типов файловых систем.

Отказы и события жизненного цикла записываются в закреплённые кольцевые буферы. bpfjlog выводит удобочитаемую диагностику BPF и структурированные события и отслеживает кольцевые буферы при живой замене политики.

Бинарник может заявить роль через xattr user.bpfj.policy.exec и зачисляется в неё во время exec. Запущенные процессы также могут быть зачислены напрямую, а непривилегированный процесс может зачислить себя через bpfjsrv/bpfjclient.

Компоненты

КаталогБинарникНазначение
bpfj/Основная библиотека и программы BPF: jailer, enforcers, парсер политики, C++-хелперы libbpf.
ctl/bpfjctlУниверсальный инструмент для подключения, перезагрузки, инспекции и отключения jailer, а также для зачисления процессов.
cmd/bpfjcmdbpfjctl со своими аргументами и, опционально, своей политикой, скомпилированными внутрь. Он игнорирует argv, поэтому может быть статически слинкован и подписан через fs-verity как единое целое.
srv/bpfjsrvАктивируемый через сокет сервер, который зачисляет непривилегированных вызывающих в роли, которые это разрешают.
client/bpfjclientМинимальный клиент для bpfjsrv, без зависимости от libbpf или инструментальной цепочки BPF.
log/bpfjlogПотребитель закреплённых кольцевых буферов диагностики и структурированных событий.
tests/bpfjtestНабор тестов.

Требования

  • Linux 6.16 или новее с включённым BPF LSM (CONFIG_BPF_LSM=y и bpf в загрузочном параметре lsm=). BpfJailer тестируется только на 6.16+, и более старые ядра не поддерживаются.
  • clang 22 или новее для генерации кода BPF, bpftool и компилятор C++20. clang 20 и 21 не генерируют addr_space_cast для __builtin_memcpy из памяти arena, поэтому верификатор отвергает создаваемый ими jailer.
  • Ядро со встроенным btrfs, CONFIG_BTRFS_FS=y, а не модулем. Программы BPF читают типы inode btrfs из vmlinux.h, который Makefile генерирует из BTF работающего ядра.
  • libbpf
  • protobuf-lite и protoc, которые Debian и Ubuntu поставляют как libprotobuf-dev и protobuf-compiler.
  • Копия репозитория libarena, которая предоставляет спин-блокировку arena, используемую программами BPF.
  • Для подписанных сборок: openssl, fsverity и setfattr, а также статические архивы, перечисленные в Makefile (STATIC=1).

Задайте LIBBPF_CFLAGS / LIBBPF_LIBS, если pkg-config не находит libbpf. Указывайте LIBARENA на копию репозитория libarena при каждой сборке:

Сборка

Каждая команда make ниже также требует LIBARENA (см. раздел Requirements), заданную в командной строке или экспортированную в окружение.

make                # build/bpfjctl
make STATIC=1       # bpfjctl with no shared object dependencies
make client         # build/bpfjclient, no BPF toolchain needed
make log            # build/bpfjlog
make signing-key    # generate a development signing key and certificate
make signed SIGNING_KEY=... SIGNING_CERT=...   # static, fs-verity signed bpfjctl
make srv  SIGNING_KEY=... SIGNING_CERT=...     # static, signed bpfjsrv
make cmd  SIGNING_KEY=... SIGNING_CERT=... \
     CMD_ARGS="replace-compiled" CMD_POLICY=policy.toml CMD_ROLE=bpfjailer
make clean

Весь вывод помещается в build/. Задайте BUILD=, чтобы собирать в другом месте, например make BUILD=build-asan SANITIZE=address,undefined.

Тестирование

make test

Тесты должны запускаться от имени root, поскольку каждый из них создаёт пространство имён монтирования и монтирует bpffs. make test собирает от имени вызывающего пользователя и запускает только тестовый бинарник под sudo.

По умолчанию тесты выполняются последовательно, поскольку одновременное отсоединение BPF LSM может вызвать панику на затронутых ядрах. Используйте make test TEST_ARGS=Suite.Test для отдельного случая и включайте -j N или BPFJTEST_JOBS=N только внутри одноразовой виртуальной машины.

Использование

sudo bpfjctl check  policy.toml          # parse a policy and report what it holds
sudo bpfjctl attach policy.toml          # load and pin the jailer
sudo bpfjctl replace policy.toml         # reload without releasing jailed tasks
sudo bpfjctl wrap ROLE POD_ID -- CMD    # run CMD in a new pod
sudo bpfjctl enroll ROLE POD_ID PID [NAME=VALUE...] # enroll with variables
sudo bpfjctl show PID                    # pods a process is in
sudo bpfjctl list                        # every pod and its processes
sudo bpfjctl detach                      # unpin and unload

Программы по умолчанию закреплены в /sys/fs/bpf/bpfj-pins. Используйте --bpffs-path и --pin-dir, чтобы изменить это. Они остаются загруженными до тех пор, пока не выполнится detach.

bpfjctl wrap без --drop-cap и с не-root --uid оставляет команду способной удалить себя из песочницы. См. bpfjctl wrap --help.

Запустите sudo build/bpfjlog, пока джейлер подключён, чтобы наблюдать за ним. Диагностика BPF записывается в stderr, а структурированные события — в stdout. Логгер автоматически переподключается, когда replace подставляет новый набор закреплённых карт.

replace загружает полный второй джейлер рядом с активным, переносит членство в поде, переменные и отслеживаемое владение ресурсами, а затем атомарно заменяет деревья закреплений. Оба дерева остаются подключёнными во время передачи, форки и регистрация координируются с миграцией, а изменения владения журналируются и воспроизводятся. Замена завершается отказом, если сохранённые версии макета несовместимы или состояние не может быть безопасно скопировано.

Политика

base-role = "floor"           # optional: enroll every process on the host
vars = ["vm_uuid"]            # known variable names

[certs]
corp-ca = "MIIDXTCCAkWgAwIBAgIJAK..." # PEM or base64 DER certificate

[roles.floor]
any = true                    # open tracking-only base role
Скачать инструмент