воскресенье, 14 февраля 2016 г.

Firejail - безопасный запуск потенциально уязвимых приложений

В наше неспокойное время пользователей всё больше беспокоит вопрос безопасности своей системы. Очень многие люди в первую очередь переходят на открытое и свободное ПО. Для дополнительной защиты многие применяют различные средства, от запуска браузеров и прочих потенциально уязвимых программ в виртуальных машинах и контейнерах, до создания изолированного окружения и написания политик безопасности. Несомненно, каждый способ хорош по своему, у каждого из них есть достоинства и недостатки. Сегодня я расскажу об одной маленькой, но крайне интересной утилите Firejail.

Firejail запускает приложения в режиме sandbox-изоляции, формируемом при помощи механизма пространств имён (namespaces) и фильтрации системных вызовов (seccomp-bpf) в Linux. Утилита оформлена в виде исполняемого SUID-файла, который может использоваться в качестве прослойки для запуска различных консольных, серверных и графических приложений. Профили изоляции системных вызовов подготовлены для большого числа популярных приложений, в том числе для Firefox, Chromium, VLC и Transmission. После запуска программа и все её дочерние процессы используют отдельные представления ресурсов ядра, таких как сетевой стек, таблица процессов и точки монтирования. Зависимые между собой приложения можно объединять в один общий sandbox. Программа написана на языке Си и может работать в любом дистрибутиве Linux с ядром старше 3.0.

В отличие от средств контейнерной изоляции firejail предельно прост в конфигурации и не требует подготовки системного образа - состав контейнера формируется на лету на основе содержимого текущей ФС и удаляется после завершения работы приложения. При желании, Firejail можно применять и для запуска контейнеров Docker, LXC и OpenVZ. Предоставляются гибкие средства задания правил доступа к файловой системе, можно определять к каким файлами и директориям разрешён или запрещён доступ, подключать для данных временные ФС (tmpfs), ограничивать доступа к файлам или директориям только на чтение, совмещать директории через bind-mount и overlayfs.

Также к программе создаётся простая графическая утилита для настройки, написанная на Qt, в которой можно просто и буквально на лету менять различные правила. Пакеты для различных дистрибутивов можно скачать на этой странице.



В Debian Firejail доступна с выпуска Debian 9 Stretch, который сейчас является тестируемым. Но не беда - я собрал программу и дли Debian 8, в моём репозитории. В Ubuntu 15.10 и 16.04 она доступна в штатных репозиториях. Итак, установка в Debian 8/LMDE 2:

sudo nano /etc/apt/sources.list

Подключаем репозиторий:

deb http://download.opensuse.org/repositories/home:/Sunderland93/Debian_8.0/ /

Скачиваем и устанавливаем ключ репозитория:

wget http://download.opensuse.org/repositories/home:Sunderland93/Debian_8.0/Release.key && sudo apt-key add - < Release.key

Обновляем список пакетов и устанавливаем Firejail:

sudo apt-get update
sudo apt install firejail

Всё. Теперь попробуем запустить, например Firefox, в изолированном контейнере:

firejail --seccomp firefox

В Firejail еще имеется специальный приватный режим. В этом режиме все файлы созданные приложением удаляются сразу-же после его закрытия. Войти в приватный режим очень просто:

firejail --seccomp --private firefox

По умолчанию, Firejail блокирует доступ только к некоторым особо серьёзным директориям (.gnupg, .ssh). Firefox, даже запущенный командой выше, будет иметь доступ ко всему домашнему каталогу. Чтобы заключить Firefox в его отдельном, личном каталоге (дабы не лез куда не просят), сделайте следующее:

Создадим каталог для файла конфигурации и "тюрьму" для Firefox:

mkdir ~/firefox
mkdir ~/.config/firejail -p

Скопируем конфиг:

cp /etc/firejail/firefox.profile ~/.config/firejail

И добавить параметр в этот конфиг:

echo "private ${HOME}/firefox" >> ~/.config/firejail/firefox.profile

Чтобы Firefox запускался по умолчанию в этой песочнице:

sudo su
echo "firejail --seccomp /usr/bin/firefox $@" > /usr/local/bin/firefox
chmod +x /usr/local/bin/firefox

Вот и всё. Такое можно проделывать и с другими приложениями. Информацию об опциях как обычно можно получить используя команду man:

man firejail

Ссылки:

Официальный сайт
Репозиторий исходного кода на GitHub
Репозиторий исходного кода утилиты Firetools на GitHub

Комментариев нет:

Отправить комментарий