Подключение к изолированным системным средам с использованием Waypipe
aluminium-tin-foil-hat_exw.jpg
Продолжая предыдущие скучные опусы на тему изоляции окружений, самое время вспомнить про wayland.
Конечно же, это не призыв к действию, а просто примеры и размышления.
Сам я придерживаюсь философии, где центр системы это пользователь, и он в праве настраивать всё так, как он считает нужным, а не так как это навязывается общими тенденциями, или как это реализовано в конкретном дистрибутиве, вместе с этим понимая и принимая все риски и последствия этих действий.
Как говорится, “If you know what you are doing”.
И прежде чем приступить, опять стоит написать, что:
- Да, я понимаю, что это всё очень поверхностно.
- Да, никакие подключения к локальной графической оболочке не допустимы для чего-то опасного, и надо использовать vnc или virt-viewer/spice.
- Непривилегированный LXC надо заменить на Xen / KVM
- И да, я знаю, что из KVM изоляции тоже можно выйти.
- И про Flatpak я тоже знаю.
- И, наконец, да, я знаю о Qubes OS и её архитектуре, можно сказать, с момента её появления, а это 2010 год.
И, несколько упрощая и адаптируя идеи QubesOS под свои повседневные задачи, я предпочитаю в основном использовать или других локальных пользователей, или достаточно легковесные окружения LXC.
И да, в них я запускаю не что-то потенциально опасное, а то, что многие из вас используют непосредственно под своим аккаунтом в системе, например:
- Firefox для повседневного использования и просмотра “чего попало”.
- Несколько проектов использующих пакеты из PyPI, RubyGems.
- Отдельно то, что я собираю из исходников с того же GitHub.
- Сторонние программы element-desktop, Telegram, Zoom.
Что это даёт?
- Смягчения последствий типовых и распространённых атак.
- Возможность настройки индивидуальной среды для каждого набора определённых программ, с отлаженным взаимодействием друг с другом.
- Отсутствие контаминации как системной среды, так и пользовательского окружения.
Вам банально не надо держать все эти директории с бесконечными конфигами в~/.config, или пакетами в~/.local. - Более нативную поддержку специфичного софта, если ему нужна Ubuntu, CentOS или Fedora.
Настройка .desktop файлов для удобного запуска из среды KDE
Ранее, длительное время, я использовал сетевую прозрачность X, но поддержка wayland уже достаточно хорошая и на него можно переходить, концептуально не теряя, и более того улучшая безопасность.
nano /usr/share/applications/firefox.untrusted.desktop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
nano /usr/share/applications/firefox.trusted.desktop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
nano /usr/share/applications/chromium.trusted.desktop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Немного рутины
Здесь я намеренно не хочу детально всё описывать, приведу только комманды и подсказки.
Как вы уже поняли, в примере используются две LXC-виртуалки и три пользователя.
Виртуалки между собой не контактируют, как и пользователи.
Я предпочитаю использовать не просто одного пользователя, скажем, на доверенные задачи, но по одному пользователю на отдельное приложение.
Если, конечно, это не приводит к чрезмерному усложнению файлооборота между разными сущностями.
Далее, вы должны провести подготовительную работу.
Развернуть нужное вам количество LXC/KVM, настроить в них:
- Нужный софт
- Прокинуть нужное оборудование, например GPU, для ускорения hw-отрисовки в firefox
Да, дополнительное оборудование и его драйвера это ещё одна поверхность атаки ¯\_(⊙︿⊙)_/¯ - Настроить iptables/nft, sshd_config, поднять маршрутизацию и сеть
Генерируем ключи ed25519 для ssh
1 2 3 | |
Настроим ssh для вашего пользователя
nano /home/awesome/.ssh/config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Убедитесь, что в /etc/ssh/sshd_config виртуалок есть такие строки:
Сами скрипты /usr/local/bin/ff.sh запуска firefox достаточно примитивны.
Скрипт /usr/local/bin/waypipe-run-chromium.sh запуска chromium через waypipe немного сложнее.
Ещё надо бы вспомнить про звук
Он настроен для пользователей в виртуальных машинах в файле
/home/trusted-chromium/.pulse/client.conf
1 | |
На хосте соответственно
/home/awesome/.config/pipewire/pipewire-pulse.conf.d/50-network.conf
Далее firewall, авторизация и всё такое, что мне лень описывать.
Каждому приложению - свою иконку
Помимо самой настройки wayland, достаточно много времени мне пришлось потратить на поиски способов установки определённых иконок на конкретные окна.
Вот одно из решений.
Это пример для /usr/share/applications/firefox.untrusted.desktop
Добавим немного ‘вижуала’ и удобств
Каждое приложение, в зависимости от его класса можно настроить используя или стили оформления рабочей среды, или, как в случае с лисой - темами оформления (конечно же только By Firefox).
Я использую скрытую боковую панель с часто используемыми приложениями для сети.
Все окна получают корректно установленные иконки.
Логически и визуально всё просто:
- Красный - повседневный серфинг сети, 95% сайтов.
- Синий - разработка, только собственные доверенные сайты / API.
- Зелёный - банкинг, персональная информация.
Если какому-либо сайту не подходит лиса, а такое встречается, то есть соответствующий Chromium / Google Chrome.
Настроим совместимость для X11 приложений
Не только веб-серфинг
Выше приводились примеры использования браузеров из разных изолированных виртуальных машин с подключением к wayland посредством waypipe.
Аналогично, можно запускать разнообразные редаткторы / IDE, специализированные приложения, настраивать уникальные среды взаимодействия определённых версий операционных систем и софта.
Иметь это отдельно от хоста и вашего пользователя. А так же отдельно от других проектов.
И получать вполне удобный доступ к использованию.
Направление тренда
И буквально на днях состоялся релиз Fedora Hummingbird.
Основные цели проекта:
- Сведение количества CVE, присутствующих в каждом поставляемом образе контейнера, к нулю и поддержание этого значения непрерывно.
Хоть быстрая доставка обновлений пакетов, например Python, Go, Node.js, Rust, Ruby, OpenJDK, PostgreSQL, nginx, важна, это всё равно не решает проблемы неправильной организации и отделения сред разработки от чувствительных пользовательских данных.
В этом смысле QubesOS остаётся эталоном параноидальной системы. Как по мне.