Fisher
Местный
- Регистрация
- 2 Апр 2017
- Сообщения
- 264
- Реакции
- 766
Как создать защищенную ОС с нуля? Взять memory safe язык программирования, написать на нем высокоуровневые части ядра, поверх него положить концепцию замкнутых песочниц и единый канал связи между песочницами и ОС, а все сетевое взаимодействие наладить через некую разновидность VPN. Как сделать защищенной уже существующую ОС? Попробовать прилепить все это к ней и постараться ничего не сломать по пути.
Дисклеймер
Честно говоря, изначально Subgraph OS не произвела на меня никакого впечатления. Очередной проект, ставящий своей целью разместить пользовательский софт в песочницах и таким образом достигнуть каких-то непонятных уровней защищенности ОС. Нет, ребята, в Qubes OS все это уже реализовано, причем на самом низком уровне, на уровне гипервизора Xen, да еще и с изоляцией сетевого стека и слоя работы с накопителями. Однако, следя за развитием проекта, я начал замечать движение в правильную сторону. Песочницы оказались далеко не так просты, как представлялось, а система обрела множество других правильных черт, в том числе ядро с включенными патчами PaX/Grsecurity и прокси-слой, который пропускает трафик приложений через Tor, анонимизируя его источник.
В целом операционка начала обретать черты из коробки защищенной системы, которую гипотетический пользователь может поставить и просто юзать, не вникая в детали того, как это все работает. А это уже тянет если не на премию, то как минимум одну статью в одном русскоязычном журнале. Тем более Сноуден уже высказался, почему нельзя мне?
Где взять?
Subgraph OS до сих пор находится в стадии активной разработки, поэтому для загрузки доступна только alpha-версия. Скачать ее можно с официальной страницы, размер ISO-образа 1,4 Гбайт, для установки пригоден практически любой комп с не менее чем 2 Гбайт оперативки, в том числе виртуальная машина на базе VirtualBox или VMware.
Устанавливается все это дело с помощью обычного инсталлятора Debian, а в качестве рабочего стола выступает немодифицированный GNOME 3. Конечно же, имеется набор предустановленных приложений: плеер VLC, офисный пакет LibreOffice, почтовый клиент IceDove и другие, плюс стандартные репозитории, из которых можно ставить любой софт с помощью apt-get.
Так что внешне и по уровню user experience операционка практически ничем не отличается от типичного дистрибутива Linux. Но в самой основе системы есть множество различий
Стандартный инсталлятор Debian
Песочницы
Ключевая идея Subgraph OS — запуск пользовательских приложений в изолированных песочницах. Для этого задействована подсистема
В своей основе Oz очень сильно напоминает
В целом запуск приложения в Subgraph OS выглядит примерно так:
Цитата
• Юзер кликает на иконку приложения или запускает его с помощью командной строки.
• Управление получает Oz, так как настоящий исполняемый файл приложения находится в каталоге /usr/bin-oz/, а тот, что запускает юзер, — это всего лишь симлинк на /bin/oz.
• Oz получает имя приложения, читая первый аргумент (он всегда содержит имя исполняемого файла), и через сокет отдает демону oz-daemon команду запустить приложение.
• Демон читает профиль приложения, в котором указано, что ему разрешено/запрещено, какие файлы домашнего каталога доступны и так далее.
• Демон создает каталог /srv/oz/rootfs/, подключает к нему каталоги /bin, /lib, /lib64, /usr и /etc основной системы, создает другие необходимые каталоги: /var, /tmp, /mnt и так далее, создает минимальный набор нужных для работы приложения файлов-устройств в /dev, подключает другие приложения файлы и каталоги, далее выполняет chroot в этот каталог и создает новые пространства имен, запирающие приложение в песочницу.
• Демон выделяет для песочницы новый виртуальный сетевой интерфейс и подключает его к виртуальному свитчу, подсоединенному к внешнему сетевому интерфейсу машины.
• Далее демон запускает внутри песочницы oz-init, который запускает Xpra и использует seccomp-bpf для настройки запрета/разрешения на выполнение системных вызовов.
• Oz-init запускает приложение из каталога /usr/bin-oz/.
Все это очень похоже на то, что мы делали в статье про
Запуск приложения
Если запущенное в песочнице приложение будет скомпрометировано, оно не сможет ни выбраться из песочницы, ни навредить основной системе — хоть каталоги системы и подключаются внутрь песочницы, они недоступны для записи. Информация также останется в сохранности, так как взломщик/малварь сможет добраться разве что до конфигов приложения и различных кешей. Более того, тот же просмотрщик PDF (Evince) не может открыть любой документ, вместо этого он получит доступ только к файлу, для просмотра которого был запущен (юзер кликнул на документ в проводнике).
Oz размещает апплет в трее, с помощью которого в песочницу можно закинуть нужные файлы
В общем, вполне очевидная и простая, но хорошая архитектура. Проблема только в том, что в данный момент Subgraph OS использует Oz для запуска всего восемнадцати приложений, в число которых входят защищенный мессенджер CoyIM, почтовый клиент IceDove (Mozilla Thunderbird), офисный пакет OpenOffice, IRC-клиент HexChat, VLC и Tor Browser (для сравнения: в том же Firejail есть настройки для запуска почти сотни различных приложений). Остальные работают без всяких песочниц.
Восемнадцать профилей Oz из коробки
Дисклеймер
Честно говоря, изначально Subgraph OS не произвела на меня никакого впечатления. Очередной проект, ставящий своей целью разместить пользовательский софт в песочницах и таким образом достигнуть каких-то непонятных уровней защищенности ОС. Нет, ребята, в Qubes OS все это уже реализовано, причем на самом низком уровне, на уровне гипервизора Xen, да еще и с изоляцией сетевого стека и слоя работы с накопителями. Однако, следя за развитием проекта, я начал замечать движение в правильную сторону. Песочницы оказались далеко не так просты, как представлялось, а система обрела множество других правильных черт, в том числе ядро с включенными патчами PaX/Grsecurity и прокси-слой, который пропускает трафик приложений через Tor, анонимизируя его источник.
В целом операционка начала обретать черты из коробки защищенной системы, которую гипотетический пользователь может поставить и просто юзать, не вникая в детали того, как это все работает. А это уже тянет если не на премию, то как минимум одну статью в одном русскоязычном журнале. Тем более Сноуден уже высказался, почему нельзя мне?
Где взять?
Subgraph OS до сих пор находится в стадии активной разработки, поэтому для загрузки доступна только alpha-версия. Скачать ее можно с официальной страницы, размер ISO-образа 1,4 Гбайт, для установки пригоден практически любой комп с не менее чем 2 Гбайт оперативки, в том числе виртуальная машина на базе VirtualBox или VMware.
Устанавливается все это дело с помощью обычного инсталлятора Debian, а в качестве рабочего стола выступает немодифицированный GNOME 3. Конечно же, имеется набор предустановленных приложений: плеер VLC, офисный пакет LibreOffice, почтовый клиент IceDove и другие, плюс стандартные репозитории, из которых можно ставить любой софт с помощью apt-get.
Так что внешне и по уровню user experience операционка практически ничем не отличается от типичного дистрибутива Linux. Но в самой основе системы есть множество различий

Стандартный инсталлятор Debian
Песочницы
Ключевая идея Subgraph OS — запуск пользовательских приложений в изолированных песочницах. Для этого задействована подсистема
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
, состоящая из демона (системного сервиса), получающего запросы на создание sandbox’ов, X-сервера Xpra и набора специальных утилит.В своей основе Oz очень сильно напоминает
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
, о котором мы уже рассказывали в статье
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
. Для изоляции приложений Oz применяет
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
, дополнительно ограничивая доступные приложению системные вызовы с помощью механизма seccomp-bpf. Общение приложения с графической подсистемой осуществляется с помощью виртуального X-сервера
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
, который запускается внутри каждой песочницы. X-сервер основной системы подключается к Xpra и выводит картинку приложения на экран. Это очень важный момент, так как стандартный метод запуска графических приложений в песочницах — это прокидывание сокета X-сервера /tmp/.X11-unix/X0 в саму песочницу, что открывает запущенному в песочнице приложению возможность не только выводить картинку на экран и обрабатывать события устройств ввода, но и получать доступ к любому окну любого другого приложения и перехватывать любые клавиши. Xpra решает эту проблему.В целом запуск приложения в Subgraph OS выглядит примерно так:
Цитата
• Юзер кликает на иконку приложения или запускает его с помощью командной строки.
• Управление получает Oz, так как настоящий исполняемый файл приложения находится в каталоге /usr/bin-oz/, а тот, что запускает юзер, — это всего лишь симлинк на /bin/oz.
• Oz получает имя приложения, читая первый аргумент (он всегда содержит имя исполняемого файла), и через сокет отдает демону oz-daemon команду запустить приложение.
• Демон читает профиль приложения, в котором указано, что ему разрешено/запрещено, какие файлы домашнего каталога доступны и так далее.
• Демон создает каталог /srv/oz/rootfs/, подключает к нему каталоги /bin, /lib, /lib64, /usr и /etc основной системы, создает другие необходимые каталоги: /var, /tmp, /mnt и так далее, создает минимальный набор нужных для работы приложения файлов-устройств в /dev, подключает другие приложения файлы и каталоги, далее выполняет chroot в этот каталог и создает новые пространства имен, запирающие приложение в песочницу.
• Демон выделяет для песочницы новый виртуальный сетевой интерфейс и подключает его к виртуальному свитчу, подсоединенному к внешнему сетевому интерфейсу машины.
• Далее демон запускает внутри песочницы oz-init, который запускает Xpra и использует seccomp-bpf для настройки запрета/разрешения на выполнение системных вызовов.
• Oz-init запускает приложение из каталога /usr/bin-oz/.
Все это очень похоже на то, что мы делали в статье про
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
, с тем исключением, что вместо создания окружения исполнения для приложения с нуля (то есть прямого копирования нужных для его работы файлов в песочницу) Oz просто «пробрасывает» все файлы основной системы в песочницу с помощью bind() (системный вызов, позволяющий подключить один каталог к другому). Плюс, конечно же, те самые seccomp-bpf и Xpra.
Запуск приложения
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
Если запущенное в песочнице приложение будет скомпрометировано, оно не сможет ни выбраться из песочницы, ни навредить основной системе — хоть каталоги системы и подключаются внутрь песочницы, они недоступны для записи. Информация также останется в сохранности, так как взломщик/малварь сможет добраться разве что до конфигов приложения и различных кешей. Более того, тот же просмотрщик PDF (Evince) не может открыть любой документ, вместо этого он получит доступ только к файлу, для просмотра которого был запущен (юзер кликнул на документ в проводнике).

Oz размещает апплет в трее, с помощью которого в песочницу можно закинуть нужные файлы
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
В общем, вполне очевидная и простая, но хорошая архитектура. Проблема только в том, что в данный момент Subgraph OS использует Oz для запуска всего восемнадцати приложений, в число которых входят защищенный мессенджер CoyIM, почтовый клиент IceDove (Mozilla Thunderbird), офисный пакет OpenOffice, IRC-клиент HexChat, VLC и Tor Browser (для сравнения: в том же Firejail есть настройки для запуска почти сотни различных приложений). Остальные работают без всяких песочниц.

Восемнадцать профилей Oz из коробки
У Вас недостаточно прав для просмотра ссылки. Войдите или зарегистрируйтесь.
.