hasher: технология виртуализации для безопасного выполнения приложений

Dmitry V. Levin, 2005

Abstract:

Рассматривается одно из относительно новых применений hasher'а как инструмента быстрого развёртывания среды для изолированного выполнения приложений. Приводятся примеры ситуаций, в которых такое применение оказывается востребованным.

Изолированное выполнение приложений.

Разнообразные популярные средства виртуализации, в том числе виртуальные машины (такие как VMware и QEMU), модифицированные ядра Linux (такие как Linux Virtual Server и Virtuozzo) и User Mode Linux, можно рассматривать как различные формы изолированного выполнения приложений. Эти средства отличаются друг от друга предоставляемыми возможностями, потребляемыми ресурсами, сложностью реализации и удобством в использовании для решения тех или иных задач. Оказывается, что hasher, который разрабатывался первоначально для сборки пакетов, тоже можно рассматривать как средство виртуализации, удобное для решения некоторых классов задач, связанных с изолированным выполнением приложений.

Основы архитектуры hasher'а.

hasher базируется на принципе создания новой среды выполнения для каждой задачи.

В основе архитектуры hasher'а лежит трёхпользовательская модель: вызывающий непривилегированный пользователь (C) и два непривилегированных вспомогательных псевдопользователя; первый (R) играет роль root в порождаемой среде выполнения (далее псевдоroot), второй (U) - обычного пользователя, выполняющего программы (далее псевдосборщик).

Архитектура hasher'а призвана исключить атаки вида U->R, U->C, R->C, а также все виды атак на root.

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

Более подробное описание архитектуры hasher'а можно найти в статье hasher: технология безопасной сборки дистрибутива.

Предоставляемые возможности

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

Наряду с созданием среды выполнения, hasher обеспечивает и удаление этой среды по окончании работы.

С помощью hasher'а можно в любой момент обеспечить завершение всех процессов, работающих в среде выполнения.

Процессу, запускаемому в среде выполнения, могут быть установлены ограничения на используемые ресурсы, поддерживаемые ядром Linux, а также ограничения на объём выходных данных, время простоя и общее время работы. В сочетании с дисковыми квотами и правилами iptables, которые можно установить для вспомогательных пользователей, эти ограничения позволяют полностью контролировать программы, запускаемые в среде выполнения.

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

Средствами hasher'а для запускаемого процесса специально создаётся и предоставляется управляющий терминал вне зависимости от того, смонтирован ли /dev/pts в среду выполнения или нет.

Кроме того, средствами hasher'а для запускаемого процесса может быть специально создан и предоставлен канал для X11 forwarding (как trusted, так и untrusted) вне зависимости от того, какие ограничения для вспомогательных пользователей установлены правилами iptables.

В каждый момент времени может быть создано и использоваться произвольное число сред выполнения, каждая со своей парой предварительно созданных вспомогательных пользователей.

Требуемые ресурсы

Для создания среды выполнения hasher'у требуется репозиторий пакетов, совместимый с Sisyphus, на базе которого и будет порождаться среда выполнения.

За исключением времени, затрачиваемого на формирование среды выполнения, и пространства файловой системы, используемого для кэширования этой среды, у hasher'а практически нет накладных расходов на выполнение приложений.

Из других средств виртуализации такими показателями обладают только модифицированные ядра Linux.

Работоспособность hasher'а проверена на ядрах Linux 2.2.x, 2.4.x и 2.6.x. Для монтирования файловых систем средствами hasher'а требуется ядро Linux не старее 2.4.x.

Сложность реализации

hasher реализован с помощью shell-скриптов общим объёмом менее 75Кб, и вспомогательной программы, написанной на C, объёмом исходного кода менее 75Кб, из которых объём кода, выполняемого с правами root, составляет менее 50Кб.

Таким образом, hasher является самым `легким' (и, как следствие, потенциально самым безопасным) средством виртуализации с перечисленными выше возможностями.

Примеры использования

Вот наиболее очевидные примеры использования hasher'а в качестве средства изолированного выполнения приложений:

Тестирование программ в эталонной среде.

Свойство hasher'а создавать среду выполнения удобно использовать для того, чтобы тестировать программы в предсказуемом и легко воспроизводимом окружении.

Отладка программ.

Непривилегированные программы удобно отлаживать в изолированной среде, создаваемой hasher'ом, особенно когда отладка в хост-системе невозможна по тем или иным причинам.

Запуск приложений, требующих изолированной среды выполнения по соображениям безопасности.

Если политика безопасности не допускает установки программы (со всем, что ей необходимо для работы) в хост-систему, то запуск такой программы в среде, создаваемой hasher'ом, может быть приемлемым решением.

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

В случае, когда источник данных, с которыми предстоит работать, не вызывает доверия, а на обрабатывающее эти данные ПО нельзя положиться в полной мере, обработка таких данных в среде, создаваемой hasher'ом, может быть приемлемым решением.

Bibliography

Dmitry V. Levin, hasher: технология безопасной сборки дистрибутива, тезисы докладов 1-ой международной конференции разработчиков свободных программ на Протве, 2004.