SELinux-SandBox — практика (1)

Posted: 2014-08-04 in IT, Security
Метки:, ,

Всем привет.

В этой заметке я снова начну знатно расчёсывать паранойю. Почти два года назад я писал, почему имеет смысл изолировать потенциально опасные приложения и как это делать, где и что гуглить. Через некоторые время я написал ещё заметку, как запускать обновлёный скайп версии 4.2 в защищенном SELinux-окружении и фиксить возможные проблемы.

Если вам интересно — читаем далее.

Теперь же настало время подвести некоторые итоги.

* Не так давно Skype для Linux обновился до версии 4.3. На оф.сайте он доступен для скачивания из личного кабинета (туда зайти можно со своим скайповским логином) в виде пакетов DEB и RPM. Как обычно, обещают исправление множества багов, поддержку последних версий PulseAudio и прочее.
Для федоры мимнимальная версия — 16-я, и если скайпа 4.3 ещё нет в репозитории, то скачиваем дистриб, вводим: yum update ./skype-4.3.0.37-fedora.i586.rpm и пакетный менеджер при этом совершенно штатно обновит скайп с 4.2 до 4.3. Данная версия никаких изменений в политике SELinux не требует, скайп 4.3 работает в рамках тех же политик, что и скайп 4.2.

* Опасения насчет его «шпиёнской» деятельности не просто подтвердились, а подтвердились в самом наихудшем сценарии — согласно сведениям от Эдварда Сноудена, Микрософт не смогла отказаться от вежливых предложений со стороны АНБ, а текущие его версии практически полностью ушли от децентрализованной архитектуры, так что все чаты и голосовые сессии скайпа теперь идут только через датацентры микрософта, с доверием к которым всё очень печально. Так что никакие чувствительные данные передавать там открытым текстом не стоит.

* Слежка оказалась нифига не выборочной, а очень даже массовой. ВНЕЗАПНО оказалось, что системные администраторы, даже управляющие не самыми крупными системами, оказались в прицеле внимания АНБ.

По официальной информации, TURMOIL использовалась для выслеживания террористов, однако под ее действие также попадали и системные администраторы. Об этом свидетельствует комментарий во внутренней системе АНБ: «Я охочусь на системных администраторов».

Слежка за деятельностью системных администраторов полезна в рамках проведения вредоносных атак на маршрутизаторы крупных производителей и VPN. Известно, что АНБ разработало две вредоносные программы — HAMMERCHANT и HAMMERSTEIN, предназначенные для заражения маршрутизаторов и прослушивания VoIP-трафика, а также кражи ключей шифрования для расшифровки защищенных VPN-соединений в реальном времени.

Это просто прекрасно… Одно дело — предполагать и чесать самолюбие и паранойю, а совем другое — получить явное подтверждение, которое, мягко скажем, напрягает.

Надо понимать, что АНБ — это весьма и весьма искусный противник. Бюджет этой службы (занимающейся только разведкой, и не ведущих никаких силовых операций!) превышает совокупные бюджеты большинства стран мира, так что вывод можно сделать следующий — против целевой и направленной атаки шансов нет почти что совсем. Во всяком случае, адекватные контр-меры потребуют каких-то совершенно невероятных усилий. За то время, что наши отечественные спецслужбы ловили «экстремистов», гонялись за «Мейн Кампфом» и пытались навести у себя внутри порядок, АНБ успело весьма продвинуться в атаках именно на ИТ-системы.

Однако из тех же документов Сноудена видно, что для нецелевых атак, применяемых массово, АНБ не чурается использовать те же самые классические обкатанные техники, используемые обычными сетевыми злоумышленниками.
И вот тут есть определенная возможность сделать свои системы менее уязвимымми.

Если вы всё ещё не напугались, и по-прежнему наивно полагаете, что «вы никому не интересны», и «вам ничего скрывать», то вы, на мой взгляд, не заслуживаете сострадания в случае ущерба вашим данным, и не имеете морального права сетовать на нарушение вашей приватности и защищенности.

Я же буду исходить из того, что вам очень даже не пофиг.
Ну а поскольку заметка всё-таки про скайп и его изоляцию от основной системы, а не про Сноудена, то я немного расскажу про свои изыскания.

Поскольку помимо скайпа могут быть и другие приложения, уязвимые к атакам, то становится актуальным вопрос быстрого разворачивания большого количества подобных песочниц.
Будем считать, что прошлые мои заметки вы прочитали, поставили себе нормальную систему с setenforcing = 1 (а не виндовс-7-хоме с авастом 😀 :D), и установили пакеты sandbox, policycoreutils, lxde-common и openbox.

Одна из проблем, с которой я столкнулся. заключается в том, что внутри песочниц копится мусор. Так, случайно щелкнув по ссылке, пришедшей по скайпу, вы откроете браузер, который неизбежно оставит следы внутри песочницы.

Поэтому я подготовил минимальный набор конфигов для быстрого разворачивания песочниц, содержащий в том числе скрипт для запуска песочницы и подчистки данных внутри неё как до, так и после завершения сеанса работы.
Скачать архивчик (~ 6 Кб) можно вот отсюда:
http://file.qip.ru/arch/pTRkqHEp/SELinux_sandbox_Minimal_lxsession.html
Внутри архива вот такая структура конфигов:

.
├── se_home                    # виртуализованный домашний каталог
│   ├── .config
│   │   ├── libfm
│   │   │   └── libfm.conf     # настройки файлового менеджера
│   │   ├── lxpanel
│   │   │   └── LXDE
│   │   │       ├── config     # пути запуска базовых утилит
│   │   │       └── panels
│   │   │           └── panel  # OpenBox-панель
│   │   ├── lxsession
│   │   │   └── LXDE
│   │   │       └── autostart  # автозапуск в restricted
│   │   └── pcmanfm
│   │       └── LXDE
│   │           └── pcmanfm.conf # рабочий стол
│   ├── Desktop
│   │   ├── Clipboard.txt        # буфер обмена
│   │   ├── fedora-xterm.desktop # ярлык консоли
│   │   └── start.sh             # стартовый скрипт
│   └── .xscreensaver            # отключение скринсейвера
├── se_tmp                       # виртуализованный /tmp
└── _start_sandbox.sh            # подготовка песочницы (контекст, разрешение экрана)

Для использования — просто распакуйте архив конфигов в какой-нибудь каталог,
подправьте _start_sandbox.sh (там можно указать, какие файлы оставлять, какие удалять), сделайте его исполнимым и запустите. Скрипт _start_sandbox.sh почистит каталоги и запустит песочницу. Дальше уже в защищенном окружении запустится lxsession, и сработают внутренние скрипты автозапуска autostart — start.sh , которые запустят опенбокс ещё раз (он иногда не стартует сразу) и выставят параметры клавиатуры. Туда же можно прописать загрузку других необходимых программ — скайпа, фуррифокса и прочего.

Скрипт _start_sandbox.sh сам определяет, откуда он запущен, и чистит рядом расположенные ./se_home и ./se_tmp.

* Важный момент — SELinux-тип. Для скайпа, почтового или чат-клиента подходит тип sandbox_net_t, под которым можно устанавливать почти любые сетевые соединения. Для браузера достаточен тип sandbox_web_t — он более ограничен в плане сетевых возможностей, там разрешен только HTTP.

* Песочниц можно сделать много. На диске пустая песочница занимает считанные килобайты, в памяти — мегабайт 20-30. Это ничтожно мало в сравнении с полноценными ВМ.

* Учитывая, сколь сложны современные браузеры, их изоляция — дело нужное, особенно если в их настройках разрешены JavaScript и тем более — чрезвычайно уязвимые плагины типа Oracle Java, Adobe Flash или Adobe PDF.

* К сожалению, графические приложения, использующие аппаратное 3D-ускорение, невозможно использовать внтури песочницы — легковесный графический сервер Xephyr весьма глухо отделен от основной системы политиками SELinux. Так что игры пока что изолировать можно только через winprefix.

* Опера просто так не стартует в песочнице, в отличие от файерфокса и конкверора. Хром не проверял — я ему не доверяю изначально.

* Чат-клиент pidgin — прекрасно работает. Особенно хорошо, что при использовании ОТР-плагина ключи оказываются также внутри песочницы.

* Почтовый клиент Thunderbird. Работает без проблем, но надо что-то придумать с pgp-ключами. Если PGP не интегрииована в клент — то изолировать крайне советую. Если же стоит криптоплагин — то либо не изолировать приложение, либо втащить копию ключей внутрь песочницы. Тут есть где поиграться.

* Изоляция торрент-клиента — может быть затруднена, если файловое хранилище вне песочницы. Но я работаю над этим =)

* Обычные Win32-приложения можно подвергнуть двойной изоляции — сперва в Wine-Prefix, а его уже — в SELinux-sandbox 😀 😀 Именно так я запускаю RAdmin-Viewer =)

* Для каждой песочницы без проблем можно задать как свой уровень политик, так и свои правила очистки мусора.

* Несмотря на то, что _изнутри_ песочницы невозможно получить доступ к каталогам /mnt и /media (то есть для изолированного приложения никаких флешек, двд-приводов и файловых контейнеров не существует), сами файлы песочницы можно разместить на криптоконтейнере, смонтированном в /media/. После запуска домашний каталог песочницы будет подменен (/media/disk/sandboxes/sand1/se_home —> /home/user), а контекст безопасности будет выставлен правильно.

Есть определенная ирония: SELinux, разработанный АНБ для своих внутренних нужд, был тщательно проверен, признан вполне годным и сейчас используется как компонент защиты от самих злодеев, хотя у Столлмана есть сомнения в таком подходе 😀

SELinux sandboxes

SELinux sandboxes

Почти два года использования не выявили каких-либо серьезных проблем. Я рекомендую всем, кому приходится работать с множеством ключей и паролей, использовать selinux-sandbox для изоляции наиболее критичных сетевых приложений и приложений, активно обрабатывающих данные сторонних лиц.

Да, это поначалу ДИКО неудобно. Впрочем, наивно было бы ожидать, что попасть в зал управления ядерным реактором будет также просто, как и на базарную площадь. Я за то, чтобы проникновение в вашу систему было бы настолько же сложнее проникновения в среднестатистическое рабочее место.

К сожалению, очень мало кто так параноит с изоляцией приложений, хотя именно эта технология сейчас востребована как воздух — что на виндовс, что на десктопном линуксе, что на андроиде. Скажем, именно такой подход — единственная мера, способная снизить ущерб в случае запуска вредоносного ransomware.

P.S. Скрипт запуска можно переделать так, чтобы при каждом запуске окружение заново разворачивалось из заведомо чистого архива — это всего две-три команды в _start_sandbox.sh, функция clean().

Обсуждение закрыто.