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

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

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

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

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

Категории

Все категории
Loading categories
bubblewrap — Низкоуровневый непривилегированный инструмент для песочницы, используемый Flatpak и аналогичными проектами. | Kitploit
Инструменты/GitHubGitHub/containers/bubblewrap
Утилиты общего назначенияБезопасность контейнеровВиртуализация для безопасностиТоп в Виртуализация для безопасности №17
GitHubcontainers/bubblewrap

bubblewrap

Низкоуровневый непривилегированный инструмент для песочницы, используемый Flatpak и аналогичными проектами.

Репозиторий
8.9k391498 дней назадПроверено Kitploit

Популярное

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

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

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

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

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

Bubblewrap

Многие инструменты для работы с контейнерами, такие как systemd-nspawn, docker и т. д., ориентированы на предоставление инфраструктуры для системных администраторов и инструментов оркестрации (например, Kubernetes) для запуска контейнеров.

Эти инструменты не подходят для предоставления непривилегированным пользователям, поскольку превратить такой доступ в полностью привилегированную root-оболочку на хосте тривиально.

Пользовательские пространства имён

В ядре Linux есть функция под названием пользовательские пространства имён, которая позволяет непривилегированным пользователям использовать возможности контейнеров. Bubblewrap использует их для построения песочницы, позволяя любому пользователю использовать этот инструмент.

Исторически bubblewrap также поддерживал setuid-режим для систем, в которых не поддерживались непривилегированные пользовательские пространства имён. Однако эта возможность была удалена.

Изначальный код bubblewrap появился ещё до пользовательских пространств имён — он наследует код от xdg-app helper, который, в свою очередь, отдалённо происходит от linux-user-chroot.

Безопасность системы

Сопровождающие этого инструмента считают, что он, даже при использовании в сочетании с типовым программным обеспечением, установленным в этом дистрибутиве, не позволяет повышать привилегии. Однако он может повысить способность вошедшего в систему пользователя совершать атаки типа «отказ в обслуживании».

В частности, bubblewrap использует PR_SET_NO_NEW_PRIVS для отключения setuid-бинарных файлов, что является традиционным способом выбраться из таких ограничений, как chroot.

Безопасность песочницы

bubblewrap — это инструмент для создания сред песочницы. bubblewrap не является полной, готовой песочницей с определённой политикой безопасности.

Некоторые сценарии использования bubblewrap требуют наличия границы безопасности между песочницей и реальной системой; другие сценарии использования хотят иметь возможность изменять структуру файловой системы для процессов внутри песочницы, но не претендуют на роль границы безопасности. В результате уровень защиты между процессами в песочнице и хост-системой полностью определяется аргументами, переданными bubblewrap.

Какая бы программа ни формировала аргументы командной строки для bubblewrap (часто это более крупный фреймворк, такой как Flatpak, libgnome-desktop, sandwine или специальный скрипт), именно она отвечает за определение собственной модели безопасности и выбор подходящих аргументов командной строки bubblewrap для реализации этой модели безопасности.

Некоторые аспекты безопасности песочницы, требующие особого внимания, описаны в разделе Ограничения ниже.

Пользователи

Эта программа может использоваться совместно всеми инструментами для контейнеров, которые работают без прав root, например:

  • Flatpak
  • rpm-ostree unprivileged
  • bwrap-oci

Мы также хотели бы, чтобы эта возможность была доступна в кластерах Kubernetes/OpenShift. Наличие возможности использовать функции контейнеров непривилегированным пользователям значительно упростило бы интерактивную отладку и подобные сценарии.

Установка

bubblewrap доступен в репозиториях пакетов большинства дистрибутивов Linux и может быть установлен оттуда.

Если вам нужно собрать bubblewrap из исходного кода, вы можете сделать это с помощью meson:

meson _builddir
meson compile -C _builddir
meson test -C _builddir
meson install -C _builddir

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

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

В исходном коде есть более крупный демонстрационный скрипт, но здесь приведена урезанная версия, которая запускает новую оболочку, используя /usr хоста.

bwrap \
    --ro-bind /usr /usr \
    --symlink usr/lib64 /lib64 \
    --proc /proc \
    --dev /dev \
    --unshare-pid \
    --new-session \
    bash

Это неполный пример, но он полезен для иллюстрации. Чаще, чем создавать контейнер с использованием дерева файловой системы хоста, вы хотите использовать chroot. В этом случае, вместо создания символической ссылки lib64 -> usr/lib64 в tmpfs, вы, возможно, уже создали её в целевой корневой файловой системе.

Песочница

Цель bubblewrap — запускать приложение в песочнице, где оно имеет ограниченный доступ к частям операционной системы или пользовательским данным, таким как домашний каталог.

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

Кроме того, вы можете использовать следующие возможности ядра:

Пользовательские пространства имён (CLONE_NEWUSER): Это скрывает от песочницы всё, кроме текущих uid и gid. Вы также можете изменить значение uid/gid в песочнице.

Пространства имён IPC (CLONE_NEWIPC): Песочница получит собственную копию всех различных форм IPC, таких как разделяемая память SysV и семафоры.

Пространства имён PID (CLONE_NEWPID): Песочница не увидит никаких процессов вне песочницы. Кроме того, bubblewrap запустит тривиальный pid1 внутри вашего контейнера для обработки требований по сбору зомби-процессов в песочнице. Это позволяет избежать того, что сейчас известно как проблема Docker pid 1.

Сетевые пространства имён (CLONE_NEWNET): Песочница не увидит сеть. Вместо этого у неё будет собственное сетевое пространство имён только с loopback-устройством.

Пространство имён UTS (CLONE_NEWUTS): Песочница будет иметь собственное имя хоста.

Фильтры seccomp: Вы можете передавать фильтры seccomp, которые ограничивают, какие системные вызовы можно выполнять в песочнице. Для получения дополнительной информации см. Seccomp.

Ограничения

Как отмечалось в разделе Безопасность песочницы выше, уровень защиты между процессами в песочнице и хост-системой полностью определяется аргументами, переданными bubblewrap. Некоторые аспекты, требующие особого внимания, отмечены здесь.

  • Если вы не отфильтровываете команды TIOCSTI с помощью фильтров seccomp, аргумент --new-session необходим для защиты от выполнения команд за пределами песочницы (см. CVE-2017-5226).

  • Всё, что смонтировано в песочницу, потенциально может быть использовано для повышения привилегий. Например, если вы привяжете сокет D-Bus в песочницу, его можно будет использовать для выполнения команд через systemd. Вы можете использовать xdg-dbus-proxy для фильтрации обмена данными D-Bus.

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