|
Изоляция процессов с повышенными правами
Windows Vista устанавливает
ограждение вокруг процессов с повышенными правами, чтобы защитить их
от вредоносной программы, работающей на том же компьютере с правами
обычного пользователя. Без такого барьера вредоносная программа
может управлять административным приложением, отправляя ему
фальшивый синтезированный ввод мышью и оконный ввод через оконные
сообщения. Стандартная модель безопасности Windows не даст
вредоносной программе, работающей в процессе с правами обычного
пользователя, работать от имени другого пользователя в процессе с
повышенными правами. Однако она не может запретить вредоносной
программе, работающей под версией обычных прав административного
пользователя, запуск процессов пользователя с повышенными правами,
внедрение в них кода и запуск потоков его выполнения.
Защита Windows Vista против
оконных сообщений называется изоляцией привилегий интерфейса
пользователя (UIPI). Он основан на новом механизме целостности
Windows, который Windows Vista использует также как ограждение
вокруг процессов с повышенными правами. В этой новой модели
безопасности все процессы и объекты имеют уровни целостности, а
политика целостности объекта может ограничить доступ, который иначе
был бы предоставлен процессу моделью безопасности Windows
“Управление доступом на уровне пользователей” (DAC).
Уровни целостности (IL)
представлены идентификаторами безопасности (SID), которые
представляют также пользователей и группы, уровень которых
закодирован в относительном идентификаторе (RID) идентификатора SID.
На рис. 14 показаны отображаемое имя, SID и
шестнадцатеричная версия RID идентификатора SID для четырех основных
IL.
Рис 14 Основные уровни целостности
Название
SID
RID
Низкий обязательный уровень |
S-1-16-4096 |
0x1000 |
Средний обязательный уровень |
S-1-16-8192 |
0x2000 |
Высокий обязательный уровень |
S-1-16-12288 |
0x3000 |
Обязательный уровень системы |
S-1-16-16384 |
0x4000 |
В шестнадцатеричных числах видны промежутки размером 0x1000
между каждым уровнем, что допускает создание промежуточных уровней
для использования приложениями со специальными возможностями
интерфейса пользователя и будущего развития.
На рис. 15 перечислены политики IL объектов и типы
доступа, которые они ограничивают, и их соответствие общим типам
доступа, определенным для объекта.
Рис 15 Политики уровней целостности
Политика
Результат действия
Нет записи |
Процесс с более низким IL не может изменить объект с более высоким IL |
Нет чтения |
Процесс с более низким IL не может считать данные из объекта с более высоким IL |
Нет запуска |
Процесс с более низким IL не может запустить объект с более высоким IL |
|
|
Например, политика “Нет записи”
предотвращает получение процессом с более низким IL любого доступа,
представляемого типом GENERIC_WRITE. По умолчанию для большинства
объектов, включая файлы и параметры реестра, применяется политика
“Нет записи”, которая запрещает процессу доступ для записи к
объектам, имеющим более высокий IL, даже если список управления
доступом на уровне пользователей (DACL) объекта предоставляет
пользователю такой доступ. Другая политика применяется только к
объектам-потокам и объектам-процессам. Эта политика, “Нет записи”
плюс “Нет чтения”, запрещает процессу с более низким IL встраивать
код и считывать данные — например пароли — из процесса, имеющего
более высокий IL.
Windows назначает каждому
процессу IL, помещая его в маркер вместе с кодами SID групп, к
которым относится пользователь, выполняющий процесс. На рис. 16 показаны примеры процессов, которым
назначены разные IL.
Рис 16 Примеры назначения процессам уровней целостности
Уровень целостности
Примеры процессов
Низкий обязательный уровень |
Internet Explorer защищенного режима и процессы, им |
Средний обязательный уровень |
Процессы обычного пользователя и процессы ААМ без повышенных прав |
Высокий обязательный уровень |
Процессы, работающие с административными правами |
Обязательный уровень системы |
Процессы Local System, Local Service и Network Service |
Процессы обычно наследуют IL своего родителя,
но процесс может также запустить процесс с другим IL, как это делает
служба AIS, когда запускает процесс с повышенными правами. Уровни
целостности процесса можно просмотреть с помощью встроенной
служебной программы Whoami, указав параметр /all, или с помощью
программ Process Explorer или AccessChk (обе от Sysinternals).
Обозреватель процессов может отображать коды IL процесса наряду со
столбцом “Уровень целостности”.
Каждый защищаемый объект
обладает IL, который может быть явным или неявным. Процессы, потоки
и маркеры всегда имеют явно назначенный IL, который обычно совпадает
с IL, сохраненным в маркере соответствующего процесса. Большинство
объектов не имеет явного IL, поэтому к ним по умолчанию применяется
средний (Medium) уровень целостности. Уровень IL, отличный от
среднего, имеют только объекты, создаваемые процессом, работающим с
низким (Low) IL. Такие объекты также имеют низкий IL. Просмотреть IL
файлов можно с помощью встроенного средства iCacls
(%SystemRoot%\System32\iCacls.exe), а IL файлов, параметров реестра,
служб и процессов — с помощью служебной программы Sysinternals
AccessChk. Нарис. 17 показано, что IL
каталога, к которому должен иметь доступ обозреватель Internet
Explorer в защищенном режиме — Low.
Рис.
17 IL каталога “Избранное”
пользователя в окне программы AccessChk
Если у объекта есть явный IL,
он хранится в записи управления доступом (ACE) нового типа,
представленного в Windows Vista, — Label ACE, в списке управления
системным доступом (SACL) дескриптора безопасности объекта (см.
рис. 18). SID в ACE соответствует IL
объекта, а с помощью флагов ACE кодируется политика целостности
объекта. До Windows Vista в SACL хранились только ACE-записи аудита,
которые требуют привилегии “Управление аудитом и журналом
безопасности” (SeSecurityPrivilege), но для чтения записей типа
Label ACE необходим только доступ “Разрешение на чтение”
(READ_CONTROL). Чтобы процесс мог изменить IL объекта, он должен
иметь доступ “Смена владельца” (WRITE_OWNER) к объекту и IL, равный
или более высокий, чем у объекта. При этом процесс может установить
IL, только равный его собственному IL или ниже. Новая привилегия
“Изменение метки объекта” (SeRelabelPrivilege) дает процессу
возможность изменить IL любого объекта, к которому процесс имеет
доступ, и даже установить IL выше собственного IL процесса. Однако
по умолчанию эта привилегия не назначается никакой учетной
записи.
Рис. 18 Запись Label ACE объекта
Когда процесс пытается
открыть объект, то перед тем как функция ядра SeAccessCheck выполнит
стандартную проверку DACL Windows, происходит проверка целостности.
Согласно применяемым по умолчанию политикам целостности, процесс
может открыть объект для записи только если выполняются два условия:
его IL равен или выше, чем IL объекта, и DACL предоставляет процессу
необходимые типы доступа. Например, процесс с низким IL не сможет
открыть процесс со средним IL для записи, даже если DACL
предоставляет процессу такое право.
Применяемая по умолчанию
политика целостности позволяет процессам открыть любой объект — за
исключением объектов-процессов и объектов-потоков — для чтения, если
DACL объекта предоставляет им такой доступ. Это означает, что
процесс, работающий с низким IL, может открыть любые файлы,
доступные для учетной записи пользователя, под которой он работает.
С помощью IL-уровней обозреватель Internet Explorer защищенного
режима предотвращает блокировку изменения параметров учетной записи
пользователя вредоносной программой, но не может помешать ей читать
документы пользователя.
Объекты-процессы и
объекты-потоки — исключения, поскольку их политика целостности
содержит также компонент “Нет чтения”. Это означает, что IL процесса
должен быть равен или выше, чем IL процесса или потока, который
данному процессу необходимо открыть, а DACL должен предоставить ему
доступ требуемых типов. На рис. 19
предполагается, что DACL-списки разрешают необходимый доступ. Здесь
показаны варианты доступа процессов, работающих со средним и низким
IL, к другим процессам и объектам.
Рис. 19 Доступ к объектам и процессам
Подсистема сообщений Windows
также использует уровни целостности для реализации UIPI, препятствуя
отправлению процессом всех сообщений, кроме нескольких
информационных оконных сообщений, в окна, принадлежащие процессу с
более высоким IL. Это позволяет предотвратить ввод в окна процессов
с повышенными правами процессами обычных пользователей и разрушение
процесса с повышенными правами отправкой ему неправильно
сформированных сообщений, вызывающих переполнение внутреннего
буфера. Процессы могут разрешать прохождение дополнительных
сообщений сквозь защиту, вызывая API-функцию
ChangeWindowMessageFilter. UIPI-изоляция также блокирует доступ к
окнам процессов с более высоким IL с тем, чтобы, например, процесс
обычного пользователя не мог захватить нажатия клавиш пользователем
в административных приложениях.
Повышения прав и рубежи безопасности
Важно понимать, что повышения
прав UAC — это дополнительные удобства, а не новые рубежи
безопасности. Рубеж безопасности — когда некоторая политика
безопасности диктует, что может проходить через некоторую границу, а
что не может. Учетные записи пользователей — это пример рубежей
безопасности в Windows, поскольку один пользователь не может
обратиться к данным, принадлежащим другому пользователю, не имея на
то разрешения пользователя-владельца.
Поскольку повышения прав не
устанавливают рубежей безопасности, нет никакой гарантии, что
вредоносная программа, работающая в системе с правами обычного
пользователя, не сможет нарушить безопасность процесса с повышенными
правами и получить административные права. Например, в диалоговых
окнах повышения только определяется исполняемый файл, права которого
будут повышены; в них ничего не говорится о том, что этот файл будет
делать при выполнении. Исполняемый файл может обрабатывать аргументы
командной строки, загружать DLL-библиотеки, открывать файлы данных и
взаимодействовать с другими процессами. Любая из этих операций
потенциально может позволить вредоносной программе нарушить
безопасность процесса с повышенными правами и, таким образом,
получить административные права.
Игра в песочнице с низким IL
Internet Explorer защищенного режима работает с
низким IL, чтобы создать барьер против вредоносных программ, которые
могут инфицировать его процесс. Это препятствует изменению
вредоносной программой параметров учетной записи пользователя и
установке ею себя в размещениях автозапуска. Поиграть в этой
песочнице, запуская произвольные процессы с низким IL, можно с
помощью служебной программы PsExec от Sysinternals с ключом -l. На
рис. Б показано, что командная строка с низким IL не может создать
файл во временном каталоге пользователя, которому присвоен средний
IL, но может это сделать во временном каталоге обозревателя Internet
Explorer, который имеет низкий IL.
Рис.
Б Командная строка может создавать
файлы только в размещении с таким же IL
Процессы ААМ с повышенными
правами особенно восприимчивы к нарушениям безопасности, поскольку
они работают под той же учетной записью пользователя, что и
ААМ-процессы пользователя со стандартными правами, и совместно
используют профиль пользователя. Многие приложения считывают
параметры и загружают расширения, зарегистрированные в профиле
пользователя, создавая возможности для повышения прав вредоносной
программы. Например, при работе в общих управляющих диалоговых окнах
загружаются расширения оболочки, настроенные в разделе пользователя
в реестре (в ветви HKEY_CURRENT_USER). Вредоносная программа может
добавить себя в качестве расширения и затем загрузиться в любой
процесс с повышенными правами, который использует эти диалоговые
окна.
Очевидно, из-за их
общедоступного состояния под угрозу могут быть поставлены даже
процессы, повышенные от учетных записей обычного пользователя. Все
процессы, работающие в сеансе входа в систему, совместно используют
внутреннее пространство имен, в котором Windows хранит такие
объекты, как события, мьютексы, семафоры и общую память. Если
вредоносная программа знает, что процесс с повышенными правами при
запуске будет пытаться открыть и прочитать определенный объект общей
памяти, она может создать объект, содержимое которого вызовет
переполнение буфера, и затем ввести код в процесс с повышенными
правами. Этот тип атаки относительно сложен, но в случае его
реализации OTS-повышения перестают быть рубежом безопасности.
Практический результат
введения повышений — удобство для пользователей, которые, по
умолчанию работая с правами обычного пользователя, получают доступ к
административным правам. Пользователям, которые хотят иметь гарантии
безопасности, придется несколько поступиться этим удобством.
Выполняя ежедневные задачи как обычные пользователи, с помощью
функции быстрого переключения пользователей (FUS) они могут
переходить на выделенную учетную запись администратора для
выполнения административных операций. С другой стороны,
пользователи, склонные пожертвовать безопасностью в пользу удобства,
могут отключить UAC в системе в диалоговом окне “Учетные записи
пользователя” панели управления. Но следует помнить, что при этом
также отключается защищенный режим для Internet Explorer.
Заключение
Работа в качестве обычного
пользователя обеспечивает многочисленные преимущества, включая
защиту системы от случайного или преднамеренного повреждения и
защиту от несанкционированного доступа данных и целостности
пользователей, совместно использующих систему. Результатом различных
изменений и применения технологий UAC будут радикальные перемены в
модели использования Windows. С приходом Windows Vista пользователи
Windows впервые могут выполнять большинство ежедневных задач и
запускать большинство программ, используя права обычного
пользователя, а многие корпорации теперь смогут шире развертывать
учетные записи обычных пользователей.
Конец статьи
|
|