Организация управления доступом

В основе этой подсистемы лежит избирательная политика управления доступом, в соответствии с которой регламентируется доступ субъектов к объектам. Защищенные объекты 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; просмотров: 977;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.