Termux – мощная терминальная среда для Android, позволяющая запускать полноценный Linux‑пользовательский стек. Одним из самых гибких средств изоляции процессов в Linux являются LXC‑контейнеры. В этой статье мы рассмотрим, как развернуть LXC в Termux и применить набор техник hardening, чтобы получить надёжную площадку для тестирования уязвимостей, анализа поведения вредоносного ПО и безопасной разработки.
Требования
- Устройство Android ≥ 8.0 (API 26) с установленным
Termuxиз Google Play или F-Droid. - Доступ к
root(не обязателен, но упрощает настройку сетевых namespace). - Свободное место ≥ 1 ГБ для образов контейнеров.
- Подключённый к Интернету для загрузки пакетов.
Установка Termux и подготовка среды
pkg update && pkg upgrade -y
pkg install proot-distro unzip tar wget git -y
Для работы LXC потребуется установить пользовательскую подсистему proot, которая эмулирует root‑привилегии без реального доступа к ядру.
Установка LXC в Termux
Мы будем использовать готовый дистрибутив Ubuntu 20.04, который легко развернуть через proot-distro.
proot-distro install ubuntu-20.04
После установки запустим окружение:
proot-distro login ubuntu-20.04
Внутри Ubuntu необходимо установить сам пакет lxc и зависимости.
apt update && apt install -y lxc uidmap dbus-user-session
Для корректной работы пользовательских namespace проверим, что в ядре Android включён параметр kernel.unprivileged_userns_clone=1. Если нет, его можно включить (только на рут‑устройства):
sysctl -w kernel.unprivileged_userns_clone=1
Создание и базовая настройка LXC‑контейнера
Создадим простой контейнер на основе шаблона ubuntu:
lxc-create -t download -n testbox -- -d ubuntu -r focal -a amd64
Запустим его в фоновом режиме:
lxc-start -n testbox -d
Получим консоль:
lxc-attach -n testbox
Внутри контейнера можно установить любые инструменты, необходимые для тестов, например curl, git или python3.
Настройка сети для изолированного тестирования
По умолчанию LXC использует bridge‑интерфейс lxcbr0. Для полной изоляции рекомендуется создать отдельный виртуальный bridge и привязать к нему только нужный контейнер.
# На хосте (в Termux) создаём bridge
ip link add name lxc_test_br type bridge
ip addr add 10.200.0.1/24 dev lxc_test_br
ip link set lxc_test_br up
Затем в конфигурации контейнера /var/lib/lxc/testbox/config указываем:
lxc.net.0.type = veth
lxc.net.0.link = lxc_test_br
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
Перезапустим контейнер, чтобы изменения вступили в силу.
Hardening LXC‑контейнеров
Ниже перечислены основные техники усиления безопасности, которые можно применить в среде Termux.
1. Ограничение пользовательских namespace
Запретим создание новых пользовательских ID внутри контейнера, задав в конфиге:
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536
Это маппит UID/GID контейнера в диапазон 100000‑165535 хоста, изолируя их от реальных пользователей.
2. Снижение привилегий через capabilities
Убираем все лишние capabilities, оставив только необходимые для тестов:
lxc.cap.drop = sys_rawio sys_admin sys_module sys_time mac_admin mac_override
lxc.cap.keep = net_bind_service net_raw
3. Применение seccomp‑фильтра
Для ограничения системных вызовов используем готовый профиль default и добавляем исключения только для нужных утилит:
lxc.seccomp.profile = /etc/lxc/seccomp/default.seccomp
При необходимости создать кастомный профиль, скопировать шаблон /usr/share/lxc/config/common.seccomp и отредактировать.
4. AppArmor (если поддерживается ядром Android)
В большинстве Android‑устройств AppArmor включён. Привяжем к контейнеру профиль lxc-container-default:
lxc.apparmor.profile = lxc-container-default
Для более строгой изоляции можно написать собственный профиль, ограничив доступ к /dev, /proc и сетевым ресурсам.
5. Ограничение файловой системы
Запретим запись в критические каталоги хоста через mount‑опции:
lxc.mount.entry = /proc proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry = /sys sys sysfs ro,nosuid,nodev,noexec,relatime 0 0
lxc.mount.auto = cgroup:mixed
Для read‑only корневой файловой системы контейнера добавьте:
lxc.rootfs.options = ro
6. Ограничение доступа к ресурсам (cgroups)
Установим лимиты CPU и памяти, чтобы контейнер не мог выйти за рамки выделенных ресурсов:
lxc.cgroup2.cpu.max = 50000 100000 # 50% от одного ядра
lxc.cgroup2.memory.max = 256M
Автоматизация развертывания
Для повторяемости можно собрать Bash‑скрипт, который создаёт контейнер, применяет все hardening‑настройки и запускает его в фоне. Ниже минимальный пример:
#!/usr/bin/env bash
set -e
NAME="hardbox"
TEMPLATE="download"
DIST="ubuntu"
RELEASE="focal"
ARCH="amd64"
# Создание контейнера
lxc-create -t $TEMPLATE -n $NAME -- -d $DIST -r $RELEASE -a $ARCH
# Применяем hardening‑конфиги
cat >> /var/lib/lxc/$NAME/config <<EOF
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536
lxc.cap.drop = sys_rawio sys_admin sys_module sys_time mac_admin mac_override
lxc.cap.keep = net_bind_service net_raw
lxc.seccomp.profile = /etc/lxc/seccomp/default.seccomp
lxc.apparmor.profile = lxc-container-default
lxc.rootfs.options = ro
lxc.cgroup2.cpu.max = 50000 100000
lxc.cgroup2.memory.max = 256M
EOF
# Запуск
lxc-start -n $NAME -d
echo "Контейнер $NAME запущен и защищён"
Скрипт можно разместить в /data/data/com.termux/files/home и запускать по мере необходимости.
Мониторинг и аудит
Для контроля состояния контейнеров используем встроенные утилиты LXC:
lxc-info -n testbox
lxc-ls --fancy
Логи хранятся в /var/log/lxc/. Для более детального аудита можно подключить auditd внутри контейнера и отправлять события в syslog Termux.
Заключение
Развёртывание LXC‑контейнеров в Termux открывает широкие возможности для безопасного и изолированного тестирования прямо на мобильном устройстве. Применяя перечисленные техники hardening – namespaces, capabilities, seccomp, AppArmor и cgroup‑лимиты – вы получаете надёжную «песочницу», способную противостоять попыткам выхода из изоляции.
Если вам требуется профессиональная поддержка в области мобильной безопасности, настройка инфраструктуры тестирования или аудит вашего окружения, команда RybinskLab готова помочь. Мы предоставляем услуги по развертыванию контейнерных решений, проведению penetration‑тестов и обучению персонала. Свяжитесь с нами, чтобы вывести ваш процесс тестирования на новый уровень.