Организация управления доступом
В основе этой подсистемы лежит избирательная политика управления доступом, в соответствии с которой регламентируется доступ субъектов к объектам. Защищенные объекты Windows NT подразделяются на:
• файлы и каталоги на NTFS-разделах;
• объекты пользователя (окна, ресурсы приложений и т.д.);
• объекты ядра ОС;
• объекты реестра;
• частные (private) объекты. Частные объекты создаются и обрабатываются прикладными программами (СУБД, электронными таблицами и т.д.) и служат для реализации в прикладных программах собственного механизма разграничения доступа. Частными объектами являются, например, защищенные поля таблиц Microsoft Access.
С каждым объектом системы связаны возможные выполняемые операции и типы доступа к экземплярам объекта, а также атрибуты безопасности объекта.
Атрибуты безопасности каждого защищаемого объекта задаются в специальной структуре - так называемом дескрипторе безопасности (security descriptor). Он связан с объектом и содержит информацию о владельце и группе владельцев объекта, а также списки управления доступом к данному объекту (Access Control List, ACL).
Дескриптор безопасности включает в себя всю информацию о владельце объекта и правах доступа пользователей к объекту. Он может содержать идентификатор безопасности (SID, см. ниже) владельца объекта, идентификатор безопасности его первичной группы и список управления доступом (ACL), разъясняющий права различных пользователей и групп пользователей по доступу к данному защищаемому объекту.
Список управления доступом к объекту состоит из элементов управления доступом (Access Control Entry, АСЕ). Каждый защищенный объект может иметь два списка управления доступом: пользовательский и системный.
Пользовательский список управляется владельцем объекта и определяет права доступа конкретных пользователей и групп к объекту. Когда этот список имеется у объекта, но не содержит ни одного элемента управления доступом, считается, что доступ к объекту запрещен. Однако если избирательный список у объекта отсутствует, это означает отсутствие защиты у объекта (доступ к объекту разрешен в любой форме).
С объектом может быть также связан и системный список управления доступом, контролируемый исключительно администратором. Системный список управления доступом предназначен для указания на необходимость регистрации любых попыток получения пользователями доступа к защищаемому объекту.
Администратор или владелец объекта может назначать полномочия, разрешающие или запрещающие определенным пользователям и группам получать требуемый тип доступа к конкретным объектам.
В Windows NT пользователи и группы идентифицируются так называемыми идентификаторами безопасности (security identifiers, SID). Идентификатор безопасности - это структура переменной длины, уникально идентифицирующая пользователя или группу. Эти идентификаторы хранятся в базе данных системы защиты, и любое приложение может их использовать посредством функций Win32 API. Идентификаторы безопасности используются для указания:
• владельца объекта и группы в дескрипторе защиты объекта;
• получателя разрешений на доступ в элементах (АСЕ) списка управления доступом (ACL) к объекту;
• пользователя и всех групп, в которые он входит, в так называемом маркере доступа (access token) процесса (пользователя).
Для выполнения некоторых операций пользователю могут быть присвоены специальные привилегии. Содержащаяся в маркере доступа дополнительная информация о привилегиях пользователя (процесса) используется для усиления избирательного (реализованного на основе ACL) контроля доступа. Диспетчер доступа использует значения привилегий процессов для управления их доступом к системным ресурсам, таким как системное время, признак активизации отладочного режима, признак принадлежности к ядру системы защиты (trusted computer base) и т.п.
При входе в систему каждый пользователь проходит процедуры идентификации и аутентификации. В случае успешного прохождения процедуры аутентификации каждому пользователю присваивается специальная метка - маркер доступа, содержащий идентификатор этого пользователя, идентификаторы всех групп, в которые входит данный пользователь, а также иную информацию.
Поскольку ОС Windows NT поддерживает работу в режиме «клиент-сервер», то в архитектуре ее подсистемы защиты имеется два класса субъектов:
• простой субъект. Это процесс, которому присвоен контекст безопасности при входе соответствующего пользователя в систему по logon. Такой процесс не реализует функции защищенного сервера, который может иметь других субъектов в качестве своих клиентов;
• серверный субъект. Это процесс, запущенный как защищенный сервер (как подсистема Win32) и обслуживающий других субъектов в качестве клиентов. В связи с этим серверный субъект обычно имеет контекст безопасности того клиента, от имени которого он действует.
Windows NT позволяет одному потоку получать атрибуты безопасности другого процесса при помощи механизма представления (impersonation). Например, рабочий поток сервера обычно представляет процесс клиента (использует маркер доступа клиента) для получения разрешений на доступ к объектам, к которым начальный (управляющий) поток сервера доступа не имеет.
Хотя ОС этого типа имеет достаточно развитую систему обеспечения информационной безопасности, все равно существуют потенциальные уязвимости, приводящие к успешному проведению атак на Windows NT.
Имеет смысл в рамках документированных возможностей системы провести детальный анализ стратегий нападения, которые мог бы реализовать
потенциальный нарушитель, являющийся к тому же зарегистрированным пользователем в ОС. В этом случае злоумышленник в состоянии запустить любой процесс, заставить стартовать любой драйвер или редактировать базу реестра только на правах непривилегированного пользователя системы Windows NT.
Для определения потенциальных возможностей нарушителя рассмотрим механизмы Win32 API для Windows NT, позволяющие реализовать НСД. Хотя приложения в ОС Windows NT имеют свое виртуальное пространство памяти, доступ в которое ограничен со стороны других прикладных процессов, тем не менее в существующей версии Win32 API имеется целый ряд механизмов^ позволяющих одному процессу получить доступ в виртуальную память, используемую другим процессом.
Итак, к этим возможностям относятся:
• наличие функций, позволяющих получать доступ на чтение и запись в память другого процесса (WriteProcessMemory и ReadProcessMemory);
• наличие функций, получающих контекст выполнения какого-либо пользовательского процесса (GetThread Context и SetThread Context), что позволяет одному процессу получить значения системных регистров другого, в том числе и регистра указателя стека; подобная особенность может позволить модифицировать стек процесса другим процессом;
• наличие механизма ловушек (hook), при помощи которых один процесс может реализовать перехват сообщений другого процесса;
• существует также способ запуска внешней процедуры в адресном пространстве другого процесса и использование процедуры удаленного запуска потока (Create RemoteThread) с последующей модификацией области стека и загрузки необходимой DLL;
• программа нарушителя обладает способностью передавать в драйвер режима ядра команды вызова процедур. Драйвер верхнего уровня, как правило, выполняется в контексте вызываемого процесса, поэтому прикладному процессу для работы в режиме ядра достаточно передать вызываемому драйверу просто адрес вызываемой процедуры. Таким образом обеспечивается доступ из прикладного процесса ко всем ресурсам системы;
• особенностью ОС Windows NT является отсутствие механизмов предотвращения выхода за пределы локального стека потока, что может привести к проведению атак типа «переполнение буфера» (buffer overflow).
Использование тех или иных документированных возможностей API Windows NT для «взлома» штатных средств защиты данной ОС зависит от уровня привилегий, полученных пользовательским процессом при регистрации. Можно выделить следующие группы привилегий (по убыванию уровня):
• права администратора, включающие полный контроль операционной системы;
• право перезапуска операционной системы и совокупность прав для установки драйвера режима ядра;
• право редактирования базы реестра;
• право запуска прикладной программы.
На сегодняшний день для пользователей, склонных к неправомерным поступкам, существует ряд потенциальных возможностей получать дополнительные привилегии, например:
• программа нарушителя обнаруживает адрес функции Win32 API OpenProcess, изменяет ее код так, чтобы результат выполнения был всегда положительным. Затем с помощью функции DebugActiveProcess один из системных процессов, работающих от имени ОС, в режиме отладки создает в его рамках поток, который вносит текущего пользователя в группу Administrator;
• использование ошибки в процедуре NetAddAtom (ntosk.rnl.exe) или функции 4346 (win32k.sys). Указанные ошибки позволяют изменить переменные или код ядра ОС и получить рядовому пользователю права администратора системы;
• перехват графика внутри сети и использование того факта, что после аутентификации пользователя в домене Windows NT в пакете Net-LogonSamLogon, передаваемом контроллером домена компьютеру, сведения о группах, членом которых является пользователь, передаются в открытом виде. Установив в сети proxy-сервер, злоумышленник может заменить SID некоторой глобальной группы на SID группы Do-mainAdmins, после чего на локальном компьютере получит права члена группы DomainAdmins.
Таким образом, потенциальный нарушитель может получать практически неограниченные полномочия в ОС. Это позволит ему запускать не только прикладные программы в контексте любого зарегистрированного пользователя системы, реализующие вышеперечисленные стратегии использования особенностей Win32 API, но также устанавливать фильтр драйвера хранения ключей или фильтр файловой системы. Такие фильтры позволяют перехватывать или ключи, или открытую информацию.
Например, получая привилегии редактирования базы реестра можно включить нежелательную динамически подключаемую библиотеку (DLL) в список AppInit_DLLs. Он содержит множество DLL, которые отображаются при старте ОС на адресное пространство каждого процесса, использующего библиотеку User32.DLL, то есть фактически для каждой запускаемой программы, представляющей собой GUI-приложение.
Кроме документированных возможностей, предоставляемых нарушителю интерфейсом Win32 API, существует целый ряд уязвимостей, которые подразделяются на следующие категории:
• вызванные ошибками или недоработками в ПО Windows NT;
• вызванные особенностью функционирования Windows NT;
• вызванные некорректной настройкой Windows NT.
Таким образом, кроме корректной настройки ОС Windows NT и использования Service Pack для устранения ошибок при работе данной ОС, необходимо применение дополнительных средств защиты.
Дата добавления: 2015-09-07; просмотров: 1035;