Підключення до ізольованих системних середовищ із використанням 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 залишається зразком параноїдальної системи. Як на мене.
Оригінальний пост на SecOps.it Blog • Підключення до ізольованих системних середовищ із використанням Waypipe