В настоящей лекции будут рассмотрены вопросы аутентификации пользователя, системного аудита, защиты от
Согласно п.1 политики безопасности для доступа к компьютеру пользователь должен пройти процедуру аутентификации. Эта процедура инициируется комбинацией клавиш "ctrl+alt+del". Данная комбинация клавиш, известная как
Процедурой аутентификации пользователя в системе управляет программа, WinLogon, представляющая собой начальную интерактивную процедуру, которая отображает начальный диалог с пользователем на экране. Процесс WinLogon активно взаимодействует с библиотекой GINA (Graphic Identification aNd Authentication - графической библиотекой идентификации и аутентификации). Библиотека GINA является заменяемым компонентом, интерфейс с ней хорошо документирован, поэтому иногда в приложениях, реализующих защиту, присутствует версия GINA, отличная от оригинальной. Получив имя и пароль пользователя от GINA, WinLogon вызывает модуль Lsass для аутентификации этого пользователя. В случае успешного входа в систему Winlogon извлекает из реестра профиль пользователя и определяет тип запускаемой оболочки.
Комбинация
В процессе аутентификации вызывается системная функция LogonUser (см. MSDN), которая исходя из имени пользователя, его пароля и имени рабочей станции или домена возвращает указатель на маркер доступа пользователя. Маркер впоследствии передается всем
Задание
Рекомендуется осуществить ввод комбинации клавиш "ctrl-alt-del" в разных ситуациях и инициировать одно из перечисленных выше действий.
Напишите программу, которая создает новую учетную запись при помощи функции NetUserAdd, а затем назначает ему право входа в систему SeInteractiveLogonRight путем вызова функции LsaAddAccountRights. В случае успешной реализации сделайте попытку
В качестве сложного задания рекомендуется написать программу, которая имитирует процедуру входа в систему, то есть получает новый маркер доступа при помощи функции , .
Даже самая лучшая система защиты рано или поздно будет взломана, поэтому обнаружение попыток вторжения является важнейшей задачей системы защиты. Основным инструментом выявления вторжений является запись данных аудита. Отдельные действия пользователей протоколируются, а полученный протокол используется для выявления вторжений.
Аудит, таким образом, заключается в регистрации специальных данных о различных типах событий, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы. К числу таких событий обычно причисляют следующие:
Событие аудита в ОС Windows может быть сгенерировано пользовательским приложением, диспетчером объектов или другим кодом режима ядра. Чтобы инициировать фиксацию событий, связанных с доступом к объекту, необходимо сформировать в дескрипторе безопасности этого объекта список
Для управления файлом журнала безопасности, а также для просмотра и изменения
Задание. Организовать аудит доступа к файлу с помощью инструментальных средств ОС Windows
Для того чтобы заставить систему отслеживать события, связанные с доступом к конкретному файлу, необходимо сделать следующее.
(рис 15.1) Диалоговое окно "Локальные параметры политики безопасности\ Политика аудита" административной консоли панели управления
(рис 15.2) Диалоговое окно установки событий, подлежащих аудиту для конкретного файлаКак уже говорилось, список SetSecurityInfo, которая является обратной по отношению к уже знакомой нам функции GetSecurutyInfo и содержит тот же набор параметров. Поскольку речь идет об аудите, то параметр SecurityInfo, который специфицирует компонент дескриптора защиты, подлежащий изменению, должен включать значение SACL_SECURITY_INFORMATION.
Согласно п.4 политики безопасности, ОС должна защищать объекты от повторного использования. Перед выделением новому пользователю все объекты, включая память и файлы, должны быть проинициализированы. Контроль повторного использования объекта предназначен для предотвращения попыток незаконного получения конфиденциальной информации, остатки которой могли сохраниться в некоторых объектах, ранее использовавшихся и освобожденных другим пользователем.
Безопасность повторного применения должна гарантироваться для областей оперативной памяти (в частности, для буферов с образами экрана, расшифрованными паролями и т.п.), для дисковых блоков и магнитных носителей в целом. Очистка должна производиться путем записи маскирующей информации в объект при его освобождении (перераспределении).
В ОС Windows гарантируется
Что касается повторного использования содержимого файлов, то ясно, что у обычного злоумышленника практически отсутствуют механизмы получения информации, хранимой в дисковых блоках удаленных файлов. Выделение новых дисковых блоков осуществляется только для операций записи на диск данных с предварительно обнуленных страниц памяти. Разумеется, при наличии административных прав и физического доступа к компьютеру можно осуществить взлом системы защиты, но в подобных ситуациях для получения конфиденциальной информации существуют более простые способы.
В соответствии с политикой безопасности операционная система должна защищать себя от внешнего влияния или навязывания, такого, как модификация загруженной системы или системных файлов, хранимых на диске. Чтобы удовлетворить требованиям политики безопасности, в ОС Windows встроены средства
Согласно документации, мониторингу и защите подлежат все поставляемые в составе ОС файлы с расширениями sys, dll, exe и %systemroot%\system32\dllcache, на который указывает одна из записей в реестре. Если размер места, выделенного для этого каталога, не достаточен, то в нем сохраняются копии не всех системных файлов. В тех случаях, когда делается попытка удаления системного файла и при этом его не оказывается в каталоге dllcache, система пытается восстановить его с установочного компакт-диска ОС Windows или из сетевых ресурсов.
Кроме того, администратор системы с помощью утилиты Sfc.exe (
Windows\system32, например, Как уже говорилось, наиболее важной характеристикой субъекта является маркер доступа. Обычно маркер создается при интерактивном входе пользователя в систему и хранит сведения о контексте пользователя. Вначале маркер связывается с процессом-оболочкой Windows Explorer, а затем все процессы, порожденные пользователем во время сеанса работы, получают дубликат данного маркера. Важно понимать, что самостоятельно создать маркер пользовательское приложение не может. Это может сделать только служба Lsass.
Ранее были рассмотрены характеристики маркера как одного из ключевых звеньев в системе контроля доступа. В настоящем разделе описаны возможности более тонкой настройки контекста пользователя при помощи функций, ориентированных на работу с маркером доступа в соответствии с принципом минимума привилегий. Принцип минимальных привилегий рекомендует выполнение всех операций с минимальными привилегиями, необходимыми для достижения результата. Это позволяет уменьшить потери от попыток намеренного ущерба и избежать случайных потерь данных. Например, пользователю не рекомендуется регистрироваться в качестве администратора системы без необходимости. (В крайнем случае, можно прибегнуть к услугам штатной утилиты runas, которая позволяет запускать приложения от имени другой учетной записи.)
Для безопасной работы в духе принципа минимума привилегий ОС Windows поддерживает механизмы создания маркеров с ограниченными привилегиями и заимствования маркера. Первый позволяет изъять из маркера определенные привилегии, наличие которых при выполнении данной операции не нужно, а второй разрешает запускать приложения от имени другой учетной записи. API системы позволяет влиять на перечень действующих привилегий маркера, дублировать маркер, чтобы его мог заимствовать другой процесс, решать проблемы перевоплощения и создания ограниченных маркеров
В предыдущих лекциях описаны привилегии пользователя (раздел "ролевой доступ") и основные функции для считывания информации из маркера ( OpenProcessToken, GetTokenInformation ) в разделе "субъекты". Для получения списка привилегий из маркера при помощи функции GetTokenInformation нужно для параметра TokenInformationClass, выбрать значение TokenPrivileges. Ранее мы уже получали перечень привилегий учетной записи. Перечень привилегий, входящих в состав маркера, существенно шире, поскольку включает в себя привилегии пользователя и привилегии групп, в состав которых входит пользователь.
В качестве примера рассмотрим программу, задача которой - получение перечня привилегий пользователя и его групп из маркера доступа данного процесса.
#include <windows.h>
#include <stdio.h>
#pragma hdrstop
void main()
{
HANDLE hToken;
LUID setcbnameValue;
TOKEN_PRIVILEGES tkp;
DWORD errcod;
LPVOID lpMsgBuf;
LPCTSTR msgptr;
UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
UCHAR ucPrivilegeName[500];
UCHAR ucDisplayName[500];
DWORD dwLangId;
UINT i;
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken ) )
{
puts( "OpenProcessToken" );
return;
}
GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
sizeof InfoBuffer, dwInfoBufferSize);
printf( "Account privileges: \n\n" );
for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
{
dwPrivilegeNameSize = sizeof ucPrivilegeName;
dwDisplayNameSize = sizeof ucDisplayName;
LookupPrivilegeName( NULL, ptgPrivileges->Privileges[i].Luid,
(char *)ucPrivilegeName, dwPrivilegeNameSize );
LookupPrivilegeDisplayName( NULL, (char *)ucPrivilegeName,
(char *)ucDisplayName, dwDisplayNameSize, dwLangId );
printf( "%s (%s)\n", ucPrivilegeName, ucDisplayName);
}
}
Задача приведенной программы - получить описатель текущего процесса при помощи функции OpenProcessToken и применить функцию GetTokenInformation для извлечения из него списка привилегий. Функция LookupPrivilegeName позволяет получить программное имя привилегии по ее локальному идентификатору (Luid), а функция LookupPrivilegeDisplayName преобразует программное имя привилегии в дружественное имя.
Большую часть информации в маркере менять нельзя. Например, нельзя ни добавить, ни удалить привилегию. Согласно , , возможность добавления привилегий в маркер представляла бы собой "глубокий подкоп под систему защиты Windows". Последнее означает, что изменение привилегий субъекта - прерогатива подсистемы локальной авторизации (
Таким образом, сформировать список привилегий в маркере нельзя, зато их можно отключать и включать.
Для включения и отключения определенных привилегий служит функция AdjustTokenPrivileges.
В ОС Windows имеются интересные возможности выполнения кода с маркером, отличным от маркера данного процесса. Это, например, существенно для серверов, которые должны выступать от имени и с привилегиями клиентов. Одна из таких возможностей - запуск нового процесса с указанным маркером при помощи функции CreateProcessAsUser. Эта функция является аналогом функции CreateProcess за исключением параметра hToken, который указывает на маркер, определяющий контекст пользователя нового процесса.
Другой способ выполнить код с заимствованным маркером - осуществить перевоплощение (impersonation). Перевоплощение означает, что один из потоков процесса функционирует с маркером, отличным от маркера текущего процесса. В частности, клиентский поток может передать свой маркер доступа серверному потоку, чтобы сервер мог получить доступ к защищенным файлам и другим объектам от имени клиента. Впоследствии поток может вернуться в нормальное состояние, то есть использовать маркер процесса.
Windows не позволяет серверам выступать в роли клиентов без их ведома. Чтобы избежать этого, клиентский процесс может ограничить уровень имперсонации. Поэтому для участия в перевоплощении маркер должен иметь соответствующий уровень перевоплощения. Этот уровень определяется параметром маркера TokenImpersonationLevel и может быть запрошен функцией GetTokenInformation. Для процесса перевоплощения важно, чтобы этот параметр имел значение не ниже SecurityImpersonation, что означает возможность имперсонации на локальной машине. Значение SecurityDelegation позволяет серверному процессу выступать от имени клиента, как на локальном, так и на удаленном компьютере. Последнее значение имеет отношение к делегированию, которое является естественным развитием перевоплощения, но работает только при наличии домена и функционировании активного каталога. По умолчанию устанавливается уровень SecurityImpersonation.
Маркер перевоплощения обычно создают путем дублирования существующего маркера и придания ему нужных прав доступа и уровня имперсонации. Это можно сделать при помощи функции DuplicateTokenEx.
Собственно перевоплощение осуществляется при помощи функции ImpersonateLoggedOnUser. Чтобы вернуться в исходное состояние, поток должен вызвать функцию RevertToSelf.
Важно также не забывать, что когда перевоплощенный поток осуществляет доступ к объекту, то остальные потоки процесса, даже не перевоплощенные, также имеют к нему доступ. Подобные ситуации требуют тщательного анализа, поскольку здесь могут возникать трудно отслеживаемые ошибки.
В качестве "сложного" упражнения рекомендуется написать программу, задача которой - создать маркер доступа с нужным уровнем перевоплощения для указанной учетной записи и передать его текущему процессу. Затем для контроля нужно вывести на экран основные характеристики этого (уже ставшего текущим) маркера, например, перечень привилегий, после чего вернуть значение текущего маркера к исходному и извлечь из него привилегии еще раз.
В ОС Windows имеются и другие возможности настройки контекста пользователя в соответствии со сложными требованиями защиты с учетом принципа минимума привилегий. В качестве примера можно упомянуть схему контроля доступа при помощи маркеров, называемых ограниченными. Ограниченные маркеры создаются функцией CreateRestrictedToken. В этот маркер в момент его создания можно внести следующие изменения: удалить привилегии, отключить некоторые SID-идентификаторы и добавить "ограниченные" SID'ы учетных записей. Последние просто добавляют ряд новых проверок к уже существующим при организации доступа к объекту. Ограниченные маркеры удобны, когда приложение подменяет клиента при выполнении кода, способного нанести ущерб системе.
В соответствии с политикой безопасности в системе реализованы: аутентификация пользователей, аудит и защита от
В настоящей лекции будут рассмотрены вопросы аутентификации пользователя, системного аудита, защиты от
Согласно п.1 политики безопасности для доступа к компьютеру пользователь должен пройти процедуру аутентификации. Эта процедура инициируется комбинацией клавиш "ctrl+alt+del". Данная комбинация клавиш, известная как
Процедурой аутентификации пользователя в системе управляет программа, WinLogon, представляющая собой начальную интерактивную процедуру, которая отображает начальный диалог с пользователем на экране. Процесс WinLogon активно взаимодействует с библиотекой GINA (Graphic Identification aNd Authentication - графической библиотекой идентификации и аутентификации). Библиотека GINA является заменяемым компонентом, интерфейс с ней хорошо документирован, поэтому иногда в приложениях, реализующих защиту, присутствует версия GINA, отличная от оригинальной. Получив имя и пароль пользователя от GINA, WinLogon вызывает модуль Lsass для аутентификации этого пользователя. В случае успешного входа в систему Winlogon извлекает из реестра профиль пользователя и определяет тип запускаемой оболочки.
Комбинация
В процессе аутентификации вызывается системная функция LogonUser (см. MSDN), которая исходя из имени пользователя, его пароля и имени рабочей станции или домена возвращает указатель на маркер доступа пользователя. Маркер впоследствии передается всем
Задание
Рекомендуется осуществить ввод комбинации клавиш "ctrl-alt-del" в разных ситуациях и инициировать одно из перечисленных выше действий.
Напишите программу, которая создает новую учетную запись при помощи функции NetUserAdd, а затем назначает ему право входа в систему SeInteractiveLogonRight путем вызова функции LsaAddAccountRights. В случае успешной реализации сделайте попытку
В качестве сложного задания рекомендуется написать программу, которая имитирует процедуру входа в систему, то есть получает новый маркер доступа при помощи функции , .
Даже самая лучшая система защиты рано или поздно будет взломана, поэтому обнаружение попыток вторжения является важнейшей задачей системы защиты. Основным инструментом выявления вторжений является запись данных аудита. Отдельные действия пользователей протоколируются, а полученный протокол используется для выявления вторжений.
Аудит, таким образом, заключается в регистрации специальных данных о различных типах событий, происходящих в системе и так или иначе влияющих на состояние безопасности компьютерной системы. К числу таких событий обычно причисляют следующие:
Событие аудита в ОС Windows может быть сгенерировано пользовательским приложением, диспетчером объектов или другим кодом режима ядра. Чтобы инициировать фиксацию событий, связанных с доступом к объекту, необходимо сформировать в дескрипторе безопасности этого объекта список
Для управления файлом журнала безопасности, а также для просмотра и изменения
Задание. Организовать аудит доступа к файлу с помощью инструментальных средств ОС Windows
Для того чтобы заставить систему отслеживать события, связанные с доступом к конкретному файлу, необходимо сделать следующее.
(рис 15.1) Диалоговое окно "Локальные параметры политики безопасности\ Политика аудита" административной консоли панели управления
(рис 15.2) Диалоговое окно установки событий, подлежащих аудиту для конкретного файлаКак уже говорилось, список SetSecurityInfo, которая является обратной по отношению к уже знакомой нам функции GetSecurutyInfo и содержит тот же набор параметров. Поскольку речь идет об аудите, то параметр SecurityInfo, который специфицирует компонент дескриптора защиты, подлежащий изменению, должен включать значение SACL_SECURITY_INFORMATION.
Согласно п.4 политики безопасности, ОС должна защищать объекты от повторного использования. Перед выделением новому пользователю все объекты, включая память и файлы, должны быть проинициализированы. Контроль повторного использования объекта предназначен для предотвращения попыток незаконного получения конфиденциальной информации, остатки которой могли сохраниться в некоторых объектах, ранее использовавшихся и освобожденных другим пользователем.
Безопасность повторного применения должна гарантироваться для областей оперативной памяти (в частности, для буферов с образами экрана, расшифрованными паролями и т.п.), для дисковых блоков и магнитных носителей в целом. Очистка должна производиться путем записи маскирующей информации в объект при его освобождении (перераспределении).
В ОС Windows гарантируется
Что касается повторного использования содержимого файлов, то ясно, что у обычного злоумышленника практически отсутствуют механизмы получения информации, хранимой в дисковых блоках удаленных файлов. Выделение новых дисковых блоков осуществляется только для операций записи на диск данных с предварительно обнуленных страниц памяти. Разумеется, при наличии административных прав и физического доступа к компьютеру можно осуществить взлом системы защиты, но в подобных ситуациях для получения конфиденциальной информации существуют более простые способы.
В соответствии с политикой безопасности операционная система должна защищать себя от внешнего влияния или навязывания, такого, как модификация загруженной системы или системных файлов, хранимых на диске. Чтобы удовлетворить требованиям политики безопасности, в ОС Windows встроены средства
Согласно документации, мониторингу и защите подлежат все поставляемые в составе ОС файлы с расширениями sys, dll, exe и %systemroot%\system32\dllcache, на который указывает одна из записей в реестре. Если размер места, выделенного для этого каталога, не достаточен, то в нем сохраняются копии не всех системных файлов. В тех случаях, когда делается попытка удаления системного файла и при этом его не оказывается в каталоге dllcache, система пытается восстановить его с установочного компакт-диска ОС Windows или из сетевых ресурсов.
Кроме того, администратор системы с помощью утилиты Sfc.exe (
Windows\system32, например, Как уже говорилось, наиболее важной характеристикой субъекта является маркер доступа. Обычно маркер создается при интерактивном входе пользователя в систему и хранит сведения о контексте пользователя. Вначале маркер связывается с процессом-оболочкой Windows Explorer, а затем все процессы, порожденные пользователем во время сеанса работы, получают дубликат данного маркера. Важно понимать, что самостоятельно создать маркер пользовательское приложение не может. Это может сделать только служба Lsass.
Ранее были рассмотрены характеристики маркера как одного из ключевых звеньев в системе контроля доступа. В настоящем разделе описаны возможности более тонкой настройки контекста пользователя при помощи функций, ориентированных на работу с маркером доступа в соответствии с принципом минимума привилегий. Принцип минимальных привилегий рекомендует выполнение всех операций с минимальными привилегиями, необходимыми для достижения результата. Это позволяет уменьшить потери от попыток намеренного ущерба и избежать случайных потерь данных. Например, пользователю не рекомендуется регистрироваться в качестве администратора системы без необходимости. (В крайнем случае, можно прибегнуть к услугам штатной утилиты runas, которая позволяет запускать приложения от имени другой учетной записи.)
Для безопасной работы в духе принципа минимума привилегий ОС Windows поддерживает механизмы создания маркеров с ограниченными привилегиями и заимствования маркера. Первый позволяет изъять из маркера определенные привилегии, наличие которых при выполнении данной операции не нужно, а второй разрешает запускать приложения от имени другой учетной записи. API системы позволяет влиять на перечень действующих привилегий маркера, дублировать маркер, чтобы его мог заимствовать другой процесс, решать проблемы перевоплощения и создания ограниченных маркеров
В предыдущих лекциях описаны привилегии пользователя (раздел "ролевой доступ") и основные функции для считывания информации из маркера ( OpenProcessToken, GetTokenInformation ) в разделе "субъекты". Для получения списка привилегий из маркера при помощи функции GetTokenInformation нужно для параметра TokenInformationClass, выбрать значение TokenPrivileges. Ранее мы уже получали перечень привилегий учетной записи. Перечень привилегий, входящих в состав маркера, существенно шире, поскольку включает в себя привилегии пользователя и привилегии групп, в состав которых входит пользователь.
В качестве примера рассмотрим программу, задача которой - получение перечня привилегий пользователя и его групп из маркера доступа данного процесса.
#include <windows.h>
#include <stdio.h>
#pragma hdrstop
void main()
{
HANDLE hToken;
LUID setcbnameValue;
TOKEN_PRIVILEGES tkp;
DWORD errcod;
LPVOID lpMsgBuf;
LPCTSTR msgptr;
UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
UCHAR ucPrivilegeName[500];
UCHAR ucDisplayName[500];
DWORD dwLangId;
UINT i;
if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken ) )
{
puts( "OpenProcessToken" );
return;
}
GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
sizeof InfoBuffer, dwInfoBufferSize);
printf( "Account privileges: \n\n" );
for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
{
dwPrivilegeNameSize = sizeof ucPrivilegeName;
dwDisplayNameSize = sizeof ucDisplayName;
LookupPrivilegeName( NULL, ptgPrivileges->Privileges[i].Luid,
(char *)ucPrivilegeName, dwPrivilegeNameSize );
LookupPrivilegeDisplayName( NULL, (char *)ucPrivilegeName,
(char *)ucDisplayName, dwDisplayNameSize, dwLangId );
printf( "%s (%s)\n", ucPrivilegeName, ucDisplayName);
}
}
Задача приведенной программы - получить описатель текущего процесса при помощи функции OpenProcessToken и применить функцию GetTokenInformation для извлечения из него списка привилегий. Функция LookupPrivilegeName позволяет получить программное имя привилегии по ее локальному идентификатору (Luid), а функция LookupPrivilegeDisplayName преобразует программное имя привилегии в дружественное имя.
Большую часть информации в маркере менять нельзя. Например, нельзя ни добавить, ни удалить привилегию. Согласно , , возможность добавления привилегий в маркер представляла бы собой "глубокий подкоп под систему защиты Windows". Последнее означает, что изменение привилегий субъекта - прерогатива подсистемы локальной авторизации (
Таким образом, сформировать список привилегий в маркере нельзя, зато их можно отключать и включать.
Для включения и отключения определенных привилегий служит функция AdjustTokenPrivileges.
В ОС Windows имеются интересные возможности выполнения кода с маркером, отличным от маркера данного процесса. Это, например, существенно для серверов, которые должны выступать от имени и с привилегиями клиентов. Одна из таких возможностей - запуск нового процесса с указанным маркером при помощи функции CreateProcessAsUser. Эта функция является аналогом функции CreateProcess за исключением параметра hToken, который указывает на маркер, определяющий контекст пользователя нового процесса.
Другой способ выполнить код с заимствованным маркером - осуществить перевоплощение (impersonation). Перевоплощение означает, что один из потоков процесса функционирует с маркером, отличным от маркера текущего процесса. В частности, клиентский поток может передать свой маркер доступа серверному потоку, чтобы сервер мог получить доступ к защищенным файлам и другим объектам от имени клиента. Впоследствии поток может вернуться в нормальное состояние, то есть использовать маркер процесса.
Windows не позволяет серверам выступать в роли клиентов без их ведома. Чтобы избежать этого, клиентский процесс может ограничить уровень имперсонации. Поэтому для участия в перевоплощении маркер должен иметь соответствующий уровень перевоплощения. Этот уровень определяется параметром маркера TokenImpersonationLevel и может быть запрошен функцией GetTokenInformation. Для процесса перевоплощения важно, чтобы этот параметр имел значение не ниже SecurityImpersonation, что означает возможность имперсонации на локальной машине. Значение SecurityDelegation позволяет серверному процессу выступать от имени клиента, как на локальном, так и на удаленном компьютере. Последнее значение имеет отношение к делегированию, которое является естественным развитием перевоплощения, но работает только при наличии домена и функционировании активного каталога. По умолчанию устанавливается уровень SecurityImpersonation.
Маркер перевоплощения обычно создают путем дублирования существующего маркера и придания ему нужных прав доступа и уровня имперсонации. Это можно сделать при помощи функции DuplicateTokenEx.
Собственно перевоплощение осуществляется при помощи функции ImpersonateLoggedOnUser. Чтобы вернуться в исходное состояние, поток должен вызвать функцию RevertToSelf.
Важно также не забывать, что когда перевоплощенный поток осуществляет доступ к объекту, то остальные потоки процесса, даже не перевоплощенные, также имеют к нему доступ. Подобные ситуации требуют тщательного анализа, поскольку здесь могут возникать трудно отслеживаемые ошибки.
В качестве "сложного" упражнения рекомендуется написать программу, задача которой - создать маркер доступа с нужным уровнем перевоплощения для указанной учетной записи и передать его текущему процессу. Затем для контроля нужно вывести на экран основные характеристики этого (уже ставшего текущим) маркера, например, перечень привилегий, после чего вернуть значение текущего маркера к исходному и извлечь из него привилегии еще раз.
В ОС Windows имеются и другие возможности настройки контекста пользователя в соответствии со сложными требованиями защиты с учетом принципа минимума привилегий. В качестве примера можно упомянуть схему контроля доступа при помощи маркеров, называемых ограниченными. Ограниченные маркеры создаются функцией CreateRestrictedToken. В этот маркер в момент его создания можно внести следующие изменения: удалить привилегии, отключить некоторые SID-идентификаторы и добавить "ограниченные" SID'ы учетных записей. Последние просто добавляют ряд новых проверок к уже существующим при организации доступа к объекту. Ограниченные маркеры удобны, когда приложение подменяет клиента при выполнении кода, способного нанести ущерб системе.
В соответствии с политикой безопасности в системе реализованы: аутентификация пользователей, аудит и защита от
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.