В части защиты компьютерной информации интерес представляет не только системный диск, но и файловые объекты пользователей, к которым может осуществить несанкционированный доступ процесс (в частности виртуальная машина). Защита здесь состоит в том, что для работы с документами с использованием любого подобного процесса можно выделить свой файловый объект для каждого пользователя, например, каталог, куда разрешить доступ пользователю и такому процессу (к другим файловым объектам пользователя доступ данному процессу следует запретить). Например, выделим отдельный каталог для работы Java-машины и соответствующим образом разграничим права доступа процессам. При этом можем быть уверены, что информация пользователя (хранящаяся в других файловых объектах) не будет подвергнута несанкционированному доступу со стороны Java-машины, вне зависимости от того, какие действия она выполняет. Продолжая далее разговор о виртуальной машине, можем сформулировать и решить задачу изоляции среды исполнения скриптов, например, файлов с расширением «.bat». Заметим, что к этим файлам виртуальная машина обращается с запросом на чтение, а не на выполнение. Таким образом, любой пользователь сможет создать в своей папке (в которую ему разрешены запись и чтение) скрипт и запустить его. Рассмотренный выше подход позволяет разграничить права доступа для процессов собственно виртуальной машины – при этом можно разрешить запускать (читать) скрипты только из определенной папки, куда следует запретить доступ на запись пользователям.
Важнейшей задачей являет разграничение доступа для скомпрометированных процессов. Пусть в процессе найдена уязвимость. При этом до тех пор, пока уязвимость не будет устранена разработчиком, система не защищена. Остается лишь ждать обновления от разработчика (а ждать обновления, как показывает опыт, можно несколько месяцев) и надеется, что Ваш компьютер не подвергнется атаке. Используя рассмотренную технологию, можно установить дополнительные разграничения для скомпрометированного процесса, чем в значительной мере снизить последствия атаки на обнаруженную в нем уязвимость. Приведем простой пример. В свое время была обнаружена уязвимость одной СУБД, позволявшая совершить атаку на виртуального пользователя, создаваемого при установке СУБД, от лица которого впоследствии запускалась СУБД. В нашем случае, мы могли бы разрешить доступ к файлам, содержащим таблицы базы данных только процессам СУБД, что сделало бы атаку на данную уязвимость в большой мере не актуальной.
На самом деле, приложений рассматриваемой технологии множество и мы не будем детально их рассматривать (читатель сам, при желании, может найти ей применение для собственных нужд). В работе же мы еще остановимся на одной важной проблеме, разрешение которой возможно с использованием предлагаемой технологии.
Рассмотри возможность противодействия группе атак на сервисы олицетворения - наиболее заметной и существенно прогрессирующей в процентном отношении в последнее время, см. рис.3 – зависимость получена на основании бюллетеней безопасности Microsoft ( http://www.microsoft.com/technet/security ) и архива рассылки NTBugTraq ( http://www.ntbagtraq.com, http://security.nnov.ru)).
Рисунок 3 - Динамика изменения во времени процентной доли атак на сервисы олицетворения
Рассмотрим, какие возможности предоставляет сервис олицетворения, и почему ошибки в приложениях, использующих данный сервис, могут приводить к несанкционированному доступу к информации, за счет расширения привилегий.
Все работающие в системе процессы и потоки выполняются в контексте защиты того пользователя, от имени которого они так или иначе были запущены. Для идентификации контекста защиты процесса или потока используется объект, называемый маркером доступа (access token). В контекст защиты входит информация, описывающая привилегии, учетные записи и группы, сопоставленные с процессом и потоком. В процессе регистрации в системе создается начальный маркер, представляющий пользователя, который входит в систему, и сопоставляет его с процессом оболочки, применяемой для регистрации пользователя. Все программы, запускаемые пользователем, наследуют копию этого маркера. Механизмы защиты в Windows используют маркер, определяя набор действий, разрешенных потоку или процессу.
Маркер может быть основным (идентифицирует контекст защиты процесса) или олицетворяющим (применяется для временного заимствования потоком другого контекста защиты — обычно другого пользователя). Олицетворение (impersonation) предоставляет возможность отдельному потоку выполняться в контексте защиты, отличном от контекста защиты процесса, его запустившего, т.е. действовать от лица другого пользователя. Олицетворение, например, применяется в модели программирования «клиент-сервер». При заимствовании прав сервер временно принимает профиль защиты клиента, «от лица» которого обращается к ресурсу. Тогда сервер может работать с ресурсом от имени клиента, а система защиты проводить проверку его прав доступа. Обычно серверу доступен более широкий круг ресурсов, чем клиенту, и при олицетворении поток теряет часть исходных прав доступа, запустившего его процесса. И, напротив, при олицетворении соответствующий поток может получить дополнительные права.
С учетом существующей статистики уязвимостей данного типа, можем сделать вывод, что решение задачи контроля корректности олицетворения следует возложить на добавочную СЗИ НСД, которая собственными средствами должна осуществлять разграничения прав доступа к сервисам олицетворения. Для выработки подхода к решению данной задачи, прежде всего, определимся с тем, что является субъектом и объектом доступа в рассматриваемой схеме разграничений. И в этом случае нами предлагается, в качестве самостоятельного субъекта доступа рассматривать процесс, которым порождается поток, а в качестве объекта доступа – права доступа (контекст защиты), задаваемые учетной записью пользователя, которые системой защиты предоставляются, либо нет потоку, запросившему олицетворение. Другие возможные варианты - это рассматривать в качестве субъекта поток (но такой механизм будет невозможно настроить), либо пользователя. Задание в качестве субъекта доступа учетной записи пользователя вообще говоря, можно рассматривать лишь как вариант частного решения задачи (при этом все процессы, причем не только прикладные, далее покажем, что данный механизм может применяться и для контроля работы системных процессов, должны подчиняться единым правилам олицетворения). Ввиду того, что каждая программа в общем случае может затребовать собственных разрешений олицетворения для запускаемых ими потоков, именно процесс предлагается рассматривать в качестве субъекта доступа – для которого задаются разграничения. Получаем следующую схему: для процесса, потоки запускаемые которым, используют сервисы олицетворения задаются права олицетворения (соответственно, для всех потоков, порождаемых данным процессом, они одинаковы). Права олицетворения задаются следующей парой параметров: учетная запись пользователя, под которым запущен процесс, включая пользователя «SYSTEM» (процесс в общем случае может запускаться под различными учетными записями); учетная запись пользователя, с контекстом защиты которого разрешается олицетворяться потокам, запускаемым процессом, для которого задаются разграничения.
Важным условием корректности реализации любого механизма, реализующего разграничительную политику доступа к ресурсам, в том числе, и рассматриваемого в работе, является реализация системой защиты разрешительной разграничительной политики («Все, что не разрешено (явно не прописано), то запрещено» - об этом мы подробно поговорим в одной из следующих частей нашей работы), при которой задаются (явно прописываются) разрешенные виды олицетворения. Для упрощения настроек механизма, процессы, как субъекты доступа, могут задаваться не только своими полнопутевыми именами, но и именами папок (тогда заданные разграничения действуют на все процессы, запускаемые из папки, для которой установлены разграничения), либо масками. Интерфейс настройки механизма, реализованный в КСЗИ “Панцирь” для ОС Windows 2000/XP/2003, приведен на рис. 4.
Рисунок 4 - Интерфейс настройки механизма контроля олицетворения, реализованный в КСЗИ “Панцирь” для ОС Windows 2000/XP/2003
Кликните по рисунку для увеличения масштаба
Замечание. В процессе работы системы сервисом олицетворения пользуются не только прикладные, но и системные процессы. Рассматриваемый механизм может эффективно быть использован и с целью контроля олицетворения потоков, запускаемых системными процессами, при этом данный механизм позволяет реализовать и принципиально новые свойства защиты. Например, при авторизации пользователя при входе в систему, потоки, запускаемые процессом winlogon, олицетворяются с учетной записью авторизуемого пользователя. При использовании данного механизма (пример настроек приведен на рис. 4) можно управлять тем, какие пользователи могут входить в систему. Для настроек, представленных на рис. 4, это только пользователи «Administrator» и «User1». Наличие иных учетных записей заведенных в системе, не даст возможности войти под ними в систему.
Таким образом, данным механизмом защиты, основу которого также составляет включение субъекта процесс, как самостоятельного субъекта доступа, могут устанавливаться права доступа на использование сервиса олицетворения для скомпрометированных процессов (к которым снижено доверие, в связи с обнаружением в них уязвимостей), для процессов, запускаемых с правами привилегированных пользователей (компрометация которой может быть критичной) и для системных процессов. В последнем случае появляются новые возможности по управления функционированием системы, в части управления функционированием системных процессов. При этом не будем забывать, что системным процессам мы еще можем разграничивать права доступа к ресурсам, что в совокупности предоставляет весьма широкие возможности по реализации дополнительных свойств защиты.