Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Защищенная операционная система Qubes для настольных компьютеров: дополнительные механизмы безопасности

Оригинал: Secure Desktops with Qubes: Extra Protection
Автор: Kyle Rankin
Дата публикации: 15 декабря 2016 г.
Перевод: А.Панин
Дата перевода: 23 декабря 2016 г.

Данная статья является четвертой статьей из серии статей об операционной системе Qubes, являющейся по своей сути ориентированным на максимальную безопасность дистрибутивом Linux, который разделяет стандартные для настольного компьютера задачи по отдельным виртуальным машинам. В предыдущих статьях я уже рассказал о возможностях операционной системы Qubes, подробно описал процесс ее установки, а также осветил нюансы организации своего рабочего процесса при использовании множества виртуальных машин приложений данной операционной системы. Если вы не читали данные статьи ранее, я рекомендую вам ознакомиться с ними перед тем, как продолжать читать эту статью. В этой статье я расскажу о нескольких сложных механизмах защиты пользовательских данных, реализованных в Qubes, таких, как split-GPG и usbVM, а также о затрону вопрос выбора виртуальных машин, в рамках которых будут открываться гиперссылки.

split-GPG

На мой взгляд, один из недостатков классической настольной Linux-системы заключается в небезопасности хранения файла ключа GPG для шифрования сообщений электронной почты на рабочем столе или в любом другом доступном месте. Разумеется, мой ключ защищен с помощью пароля, но меня все же беспокоит перспектива компрометации моего компьютера с последующим похищением файла ключа и подбором пароля к нему злоумышленником.

Вы можете использовать множество различных техник для защиты ключей GPG, включая такие методы, как хранение мастер-ключа в отдельной отсоединенной системе с использованием подчиненных ключей. Qubes позволяет использовать достаточно неординарный подход к хранению ключа GPG, заключающийся в использовании механизма split-GPG, который выступает в роли аппаратного модуля безопасности для бедных. Благодаря существованию механизма split-GPG вы можете хранить свой ключ GPG в рамках виртуальной машины приложений с высокой степенью доверия, а именно, виртуальной машины для менеджеров паролей, создаваемой Qubes по умолчанию. Эта виртуальная машина вообще не имеет доступа к сетевой карте и предназначена исключительно для хранения таких важных файлов, как файлы ключей GPG. В момент, когда приложение хочет получить доступ к ключу GPG для шифрования или расшифровки файла оно вызывает сценарий-обертку для утилиты GPG из стандартного набора шаблонов Qubes вместо самой утилиты GPG. Этот сценарий просит предоставить ему возможность доступа к содержимому файла ключа GPG из виртуальной машины для менеджеров паролей на ограниченное время (это означает, что злоумышленнику не удастся подделать запрос от виртуальной машины для менеджеров паролей) и, в том случае, если вы дадите ему такое разрешение, отправляет переданные данные (то есть, данные, которые следует зашифровать или расшифровать) в виртуальную машину для менеджеров паролей. Далее в рамках этой виртуальной машины осуществляется непосредственная обработка данных, по окончании которой результирующие данные возвращаются в виртуальную машину приложения. Таким образом ключ не покидает виртуальную машину менеджеров паролей и ни при каких обстоятельствах не попадает в виртуальные машины приложений.

Механизм split-GPG относительно прост в настройке, причем главной сложностью является его зависимость от сценария-обертки, так как ввиду использования последнего требуется изменение настроек всех работающих с ключами GPG приложений, заключающееся в указании пути к сценарию с именем qubes-gpg-client или qubes-gpg-client-wrapper (первый сценарий работает в командной оболочке и использует переменные окружения, в то время, как второй предназначен для использования совместно с программами, которые не сохраняют переменные окружения, такими, как клиенты электронной почты). Разработчики Qubes разместили на веб-сайте проекта отличную документацию механизма split-GPG, в которой присутствуют схемы, детальные описания принципов работы и ограничений данного механизма, а также советы по его использованию с примерами конфигурации таких приложений, как Thunderbird и Mutt.

Первый этап процесса настройки рассматриваемого механизма заключается в установке пакета qubes-gpg-split в рамках виртуальных машин приложений (вы можете использовать стандартным менеджер пакетов программного обеспечения для его установки), а также пакета qubes-gpg-split-dom0 в рамках виртуальной машины dom0 (если он не установлен, вы можете выполнить команду sudo qubes-dom0-update qubes-gpg-split-dom0 в терминале, запущенном в рамках этой виртуальной машины).

После окончания процесса установки необходимого программного обеспечения вам придется переместить свою связку ключей GPG в виртуальную машину приложений, которую вы желаете использовать в качестве виртуальной машины менеджеров паролей. Я рекомендую использовать созданную по умолчанию виртуальную машину менеджеров паролей во всех случаях за исключением тех, когда для этой цели требуется использовать другую виртуальную машину приложений. Выполните какие-либо команды GPG с помощью терминала в рамках виртуальной машины менеджеров паролей (такие, как gpg -K) для того, чтобы убедиться в в корректности установки ключей.

Теперь вы можете использовать split-GPG, но для начала вам все же придется установить в качестве значения переменной окружения QUBES_GPG_DOMAIN имя виртуальной машины приложений, в которой хранится ваш ключ GPG, после чего вы сможете исполнять сценарий qubes-gpg-client для доступа к ключам из этой виртуальной машины с аргументами, которые вы обычно передавали утилите GPG. Для работы таких приложений, как клиенты электронной почты, которые не всегда сохраняют переменные окружения, вам придется использовать вместо него сценарий qubes-gpg-client-wrapper. Этот сценарий читает содержимое файла /rw/config/gpg-split-domain для определения имени виртуальной машины приложений, в которой следует искать ключи, поэтому вы должны убедиться в том, что этот файл содержит имя вашей виртуальной машины для менеджеров паролей, а если это не так, то добавить его в этот файл с помощью следующей команды:

$ sudo bash -c 'echo vault > /rw/config/gpg-split-domain'

И это все, что нужно для безопасной работы с ключами GPG. Одним из не затронутых выше аспектов использования рассматриваемого механизма является импорт ключей из виртуальной машины приложений в виртуальную машину менеджеров паролей. Если вы хотите безопасно импортировать ключи, вам придется воспользоваться другим сценарием из комплекта поставки Qubes, выводящим надежный запрос перед импортом каждого из ключей. Для импорта ключа достаточно воспользоваться следующей последовательностью команд:

$ export QUBES_GPG_DOMAIN=vault
$ qubes-gpg-import-key somekey.asc

Этой информации должно быть вполне достаточно для начала работы с механизмом split-GPG, но если вам нужны примеры файлов конфигурации таких приложений, как Thunderbird, Mutt и Git, я рекомендую посетить страницу документации проекта Qubes, посвященную split-GPG.

USB VM

Одним из основных векторов компрометации персональных компьютеров являются порты USB. Вы без труда найдете в сети Интернет огромное количество историй, связанных с компрометацией оборудования организаций (включая государственные организации) путем подключения непроверенного устройства к порту USB. Существуют даже некоммерческие проекты устройств, таких, как устройство USB Rubber Ducky, выглядящее как обычный флеш-накопитель, но функционирующее, в том числе, как устройство ввода с интерфейсом USB с поддержкой языка сценариев для программирования генератора нажатий клавиш на атакуемой машине (с возможностью указания периода ожидания после передачи компьютеру информации о накопителе).

Ввиду того, что на сегодняшний день практически каждый человек имеет возможность создать вредоносное устройство с интерфейсом USB, вам наверняка захочется защитить свою систему от негативного воздействия подобных устройств. Даже установленная операционная система Qubes находится в зоне риска, так как по умолчанию виртуальная машина dom0 используется для работы с USB-контроллерами, поэтому в том случае, если вы по ошибке подключите к компьютеру вредоносное устройство с интерфейсом USB, оно вполне сможет скомпрометировать всю систему. К счастью, разработчики Qubes предлагают контрмеру, заключающуюся в создании специальной отдельной виртуальной машины для работы со всем устройствами с интерфейсом USB. После активации этой виртуальной машины в случае подключения злоумышленником вредоносного устройства с интерфейсом USB к вашему компьютеру в момент вашего отсутствия (или вами по ошибке), будет скомпрометирована лишь система в рамках виртуальной машины USB VM.

Конечно же, после того, как все ваши устройства с интерфейсом USB будут связаны с одной виртуальной машиной, у вас наверняка возникнет вопрос: "Как работать с этими устройствами в рамках других виртуальных машин приложений?". Для работы с устройствами ввода, такими, как клавиатуры и мыши, Qubes предоставляет прокси-сервер ввода, позволяющий пробрасывать устройства ввода в остальные виртуальные машины машины приложений после подключения каждого из устройств в случае согласия пользователя. В случае подключения к компьютеру накопителя с интерфейсом USB, он отображается лишь в рассматриваемой виртуальной машине, но вы можете воспользоваться менеджером виртуальных машин Qubes для его проброса в произвольную виртуальную машину приложений путем выбора интересующей виртуальной машины из списка, нажатия правой кнопки мыши и выбора устройства из меню подключения/отключения блочных устройств (также вам придется самостоятельно отключать его, так как Xen не осуществляет отслеживание состояния блочных устройств в подобных конфигурациях).

Если вы хотите активировать виртуальную машину для устройств с интерфейсом USB, вам стоит выбрать виртуальную машину sys-usb USB VM в процессе установки, а точнее, на этапе формирования списка загружаемых виртуальных машин. Если же вы хотите активировать ее после установки системы, вы можете воспользоваться следующей последовательностью команд на уровне виртуальной машины dom0 (в Qubes 3.1 или более новой версии):

$ qubesctl top.enable qvm.sys-usb
$ qubesctl state.highstate

Эти команды задействуют сценарий автоматизации Salt от команды разработчиков Qubes, предназначенный для корректной конфигурации виртуальной машины для устройств USB sys-usb. Разумеется, если вы хотите выполнить все необходимые действия вручную, вы также можете создать собственную системную виртуальную машину (sysVM) (я рекомендую не предоставлять ей доступа к сетевой карте, если у вас будет такая возможность), после чего вы сможете воспользоваться менеджером виртуальных машин Qubes для перехода к настройкам созданной виртуальной машины, выбора и постановки в соответствие ей всех контроллеров USB.

Теперь стоит упомянуть о причине, по которой виртуальная машина для устройств USB sys-usb не активирована по умолчанию в установщике системы. Несмотря на то, что в настольных компьютерах все еще встречаются порты PS/2, а во многих ноутбуках интерфейс PS/2 используется для подключения клавиатуры и мыши, в некоторых новых ноутбуках (таких, как современные модели MacBook) для подключения клавиатуры используется интерфейс USB. Поэтому в случае установки системы на такой ноутбук вы можете столкнуться с ситуацией, когда управление компьютером и вход в систему будут попросту невозможны, ведь клавиатура с интерфейсом USB будет ассоциирована с виртуальной машиной для устройств USB на этапе загрузки. Еще один побочный эффект заключается в том, что несмотря на наличие служб для проброса устройств ввода и блочных устройств в другие виртуальные машины приложений, любые устройства с интерфейсом USB других типов (такие, как веб-камеры или сетевые карты) смогут использоваться лишь приложениями, запущенными в рамках виртуальной машины для устройств USB. Наконец, виртуальная машина для устройств USB может работать нестабильно при использовании определенных аппаратных устройств, не в полной мере поддерживаемых Qubes.

По умолчанию прокси-сервер для устройств ввода из состава Qubes позволяет осуществлять проброс лишь мышей (и то лишь при условии согласия пользователя). Клавиатуры не могут использоваться по умолчанию ввиду дополнительных рисков, связанных с подключением вредоносных устройств ввода, маскирующихся под клавиатуры, возможностью передачи вводимых с клавиатур данных (таких, как пароли) в другие виртуальные машины приложений, а также возможностью генерации событий нажатий произвольных клавиш. Если вы готовы смириться с данными рисками, вы можете организовать дополнительный уровень защиты системы, активировав механизм запросов перед пробросом произвольных клавиатур с интерфейсом USB. Для этого следует открыть терминал на уровне виртуальной машины dom0 и добавить следующую строку в файл /etc/qubes-rpc/policy/qubes.InputKeyboard:

sys-usb dom0 ask

В данном случае я использовал имя виртуальной машины sys-usb и если вы используете виртуальную машину с другим именем для работы с вашими USB-устройствами, вам придется изменить его.

В случае использования виртуальной машины для устройств USB вы можете столкнуться с серьезной сложностью при организация видеоконференций. Так как практически любая веб-камера представляется системе как устройство USB, а на данный момент не существует работающего механизма для проброса устройств USB таких типов в другие виртуальные машины приложений, вам придется запускать использующие веб-камеру приложения исключительно из виртуальной машины для устройств USB. Но в этом случае возникнет дополнительная сложность, заключающаяся в том, что системная виртуальная машина типа sys-usb не имеет доступа к сети, причем из-за ее типа вы не сможете самостоятельно поставить ей в соответствие сетевую карту для организации доступа к сетевым ресурсам. Поэтому в том случае, если вам понадобится организовать видеоконференцию в системе с виртуальной машиной для устройств USB, вам придется заменить существующую виртуальную машину для устройств USB типа sys-usb на новую виртуальную машину типа appVM или proxyVM для организации доступа к сетевым ресурсам. После этого вы сможете установить и использовать приложение для видеоконференций из данной виртуальной машины.

Основной недостаток описанного подхода заключается в том, что виртуальная машина для устройств USB обычно рассматривается как ненадежная виртуальная машина, такая же, как и системная виртуальная машина типа sys-net, а приложение для видеоконференций должно быть надежным, так как для входа практически в любую видеоконференцию требуются имя пользователя и пароль. Обоснован ли данный риск - решать только вам на основе вашей модели угроз. Надеюсь, что в будущем в Xen (и в Qubes) будет реализован новый механизм проброса устройств USB, который позволит работать с веб-камерами также, как с устройствами ввода и накопителями данных.

Обработчики гиперссылок

Последнее усовершенствование вашего рабочего окружения Qubes, которое способно не только повысить безопасность системы, но и упростить ее использование, заключается в задействовании инструментов Qubes с интерфейсом командной строки для открытия гиперссылок в различных виртуальных машинах приложений. Обычно данный прием используется для открытия вложений, принятых с помощью клиента электронной почты, в одноразовых виртуальных машинах (примеры настройки нескольких клиентов электронной почты, таких, как Mutt, рассматриваются в официальной документации проекта Qubes). В дополнение я обычно устанавливаю обработчики гиперссылок для ненадежных виртуальных машин общего назначения, не предназначенных для запуска веб-браузера. В ненадежных виртуальных машинах не хранятся какие-либо персональные файлы или другие ценные ресурсы, при этом я также не ввожу паролей при работе с ними. Таким образом, я могу уничтожить и снова создать каждую из таких виртуальных машин при первой необходимости.

Вам придется установить стандартный обработчик гиперссылок в каждой из виртуальных машин приложений. Для этой цели я обычно открываю редактор ссылок виртуальной машины приложений (для его открытия достаточно выбрать элемент "add more shortcuts..." в меню виртуальной машины) и добавляю программу Preferred Applications в список ссылок данной виртуальной машины. Это та же программа, которая используется в обычных дистрибутивах Linux для выбора в качестве используемого по умолчанию веб-браузера Firefox или Chrome. После добавления ссылки я запускаю упомянутую программу, нахожу раздел для установки используемого по умолчанию веб-браузера (Рисунок 1), выбираю вариант Other и ввожу собственную команду в соответствующее поле ввода:

qvm-open-in-vm untrusted "%s"

Изменение стандартного обработчика гиперссылок

Рисунок 1. Изменение стандартного обработчика гиперссылок

После сохранения команды переходы по гиперссылкам из текущей виртуальной машины приложений (например, присланным через чат) будут сопровождаться запросами от ненадежной виртуальной машины с предложениями открыть гиперссылки в ней. Вы можете либо каждый раз соглашаться с предложениями, либо один раз нажать кнопку "Yes to All" для того, чтобы разрешить открывать все гиперссылки в ненадежной виртуальной машине без подтверждений. Я использую аналогичный подход для открытия гиперссылок из моего менеджера паролей KeePassX в виртуальной машине для веб-серфинга вместо ненадежной виртуальной машины; для этого достаточно перейти к настройкам KeePassX и установить соответствующий обработчик гиперссылок. Если вы хотите открывать гиперссылки в одноразовых виртуальных машинах, вы можете просто заменить приведенную выше команду на команду:

qvm-open-in-dvm "%s"

Несмотря на то, что по умолчанию Qubes является достаточно безопасной системой, описанные дополнительные настройки позволяют повысить уровень защиты ваших данных, причем каждая из них сама по себе является примером использования принципа разделения задач для изоляции данных и защиты компьютера. Это последняя статья, которую я планировал посвятить операционной системе Qubes; однако, скорее всего, в будущем я вернусь к этой теме и напишу более подробные руководства по использованию отдельных функций Qubes.