Linux-песочницы для безопасности: знакомимся с Syd
Syd: песочница для Linux на уровне системных вызовов
Принцип минимальных привилегий — один из самых рабочих инструментов в арсенале безопасника. Суть проста: давай приложению ровно столько прав, сколько нужно для работы, и ни битом больше. Проблема в том, что реализовать это на практике всегда было больно — сложные конфиги, вмешательство в код. Именно здесь в игру вступает Syd.
Syd — это инструмент для изоляции приложений в Linux. Работает на уровне системных вызовов, перехватывая и фильтруя взаимодействие с ядром. Представь себе швейцара при дверях: одни вызовы пропускает, другие блокирует, третьи записывает в лог.
Категории изоляции
Syd раскладывает свои возможности по полочкам — категориям. Каждая отвечает за свой тип взаимодействия с системой. Такой модульный подход позволяет наращивать защиту постепенно, не ломая приложение.
Контроль путей. Категории walk, stat и readlink управляют навигацией по файловой системе и доступом к метаданным. walk заслуживает отдельного внимания — она ограничивает обход путей при их нормализации. Значит, попытки пробраться через .. в скрытые директории будут заблокированы. Идея позаимствована у системного вызова unveil(2) из OpenBSD.
Операции с файлами. Здесь Syd показывает настоящую хирургическую точность. read фильтрует чтение файлов и расширенных атрибутов. write отвечает за модификации. Нужно разрешить создание, но запретить удаление? Без проблем. Отдельные категории create, delete и rename дают контроль над всем жизненным циклом файлов.
Контроль исполнения. Пожалуй, самая важная категория — exec. Управляет запуском бинарников и загрузкой динамических библиотек. Syd проверяет не только сам исполняемый файл, но и пути к линкуемым библиотекам, а также отслеживает файлы, отображаемые в память с флагом исполнения. Это серьёзно осложняет жизнь тем, кто пытается использовать динамическую загрузку для повышения привилегий. В последних версиях появилась интеграция с SegvGuard — если бинарник падает несколько раз подряд, исполнение автоматически блокируется. Повторяющиеся краши — классический признак эксплуатации уязвимости.
Доступ к устройствам. Категория ioctl — отдельная история для разработчиков, работающих с GPU, контейнерами или виртуализацией. Можно открыть доступ к интерфейсам GPU, PTY, DRM и KVM, при этом заблокировав опасные операции с устройствами. Свежие версии умеют декодировать ioctl независимо от архитектуры — вместо загадочных числовых кодов указываете имена устройств.
Почему это важно сегодня
В мире контейнеров изоляция — не паранойя, а практическая необходимость. Скомпрометированное приложение не должно тянуть за собой хост или соседние контейнеры. Syd создаёт именно те границы, которые делают это возможным.
Что меня зацепило в дизайне Syd — философия эшелонированной обороны. Вместо одной точки отказа тут работает несколько механизмов одновременно. Скрытие путей дополняет фильтрацию stat. Проверки исполнения включают и статическое связывание, и динамическую загрузку в рантайме. Даже если атакующий обойдёт один контроль, остальные продолжат работать.
С чего начать
Обычно Syd настраивается через файл политики. Указываете, какие категории включить и какие паттерны доступа разрешить или запретить. Рекомендую начинать с широких разрешений, а потом постепенно сужать. Смотрите в логи — какие операции отклонены, разбирайтесь, легитимны ли они, и корректируйте правила.
Главное — понимать, что это итеративный процесс. Настроил и забыл не получится. Приложение меняется — политика тоже должна.
Для тех, кто работает с чувствительными данными, принимает входные данные от пользователей или просто хочет спать спокойно — Syd предлагает интересное сочетание детального контроля и вменяемого порога входа. Отрадно видеть инструмент, который относится к принципу минимальных привилегий серьёзно, но не превращает его в головную боль.
Используете песочницы в своих проектах? Какие подходы оказались полезными? Расскажите в комментариях.