Из этой статьи вы узнаете, что такое маркеры доступа, и из чего они состоят. А также я покажу, как запустить программу с изменённым маркером доступа.
Теория
Маркер доступа — это специальный объект, который описывает, какими правами обладает процесс или поток. Маркер доступа включает в себя идентификатор пользователя и его привилегии, связанные с процессом или потоком. Когда пользователь входит в систему, система аутентифицирует его, например запрашивает пароль. Если пароль верный, то система создает маркер доступа. Вследствие чего, каждый процесс, выполняемый от имени этого пользователя, имеет копию этого маркера доступа.
Маркеры доступа затем используются монитором безопасности SRM (про него было написано здесь). Основываясь на маркерах доступа монитор решает какие объекты и к чему имеют доступ.
Маркер доступа включает в себя:
- SID пользователя;
- SID всех групп в которые входит пользователь;
- массив привилегий, при этом привилегии бывают разные, например выключать компьютер, или сменить владельца у объекта;
- уровень целостности;
- ID сеанса;
- состояние UAC.
Когда пользователь входит в систему, его первый процесс получает маркер доступа. Поскольку по умолчанию дочерние процессы наследуют маркер своего создателя, все процессы в сеансе пользователя запускаются с одним и тем же маркером. Но маркер приложения может слегка измениться, например при запуске приложения от имени администратора. При таком запуске изменяется уровень целостности и соответственно маркер доступа.
К вашему сведению, поля маркера после его создания не могут быть изменены, так как находятся в системной памяти ядра.
Практика
Системная утилита Runas умеет запускать процессы от имени других пользователей. И соответственно с другими маркерами доступа.
С помощью следующей команды, вы можете запустить приложение “Блокнот” от имени какого-нибудь другого пользователя:
>runas.exe /user:domaintestuser notepad.exe Введите пароль для domaintestuser: Попытка запуска notepad.exe от имени пользователя "domaintestuser" ...
А теперь, давайте запустим две командные строки, одну от имени администратора а другую обычно. И посмотрим на их маркеры доступа в Process Explorer. Для этого откроем свойства запущенных процессов и перейдем на вкладку “Security“:
Слева обычный процесс, справа запущенный от имени администратора. Обратите внимание что второй процесс имеет больше привилегий.
Вернуться к оглавлению
Сводка
Имя статьи
Маркеры доступа
Описание
Из этой статьи вы узнаете, что такое маркеры доступа, и из чего он состоит. А также я покажу, как запустить программу с изменённым маркером доступа
Аннотация: Требования к безопасности. Организация управляемого доступа к объектам. Права и привилегии.
Требования к безопасности
Требования к безопасности компьютерных систем определяются на основе международных стандартов по оценке защищенности. В настоящее время основным таким стандартом является ISO/IEC 15408 Common Criteria for Information Technology Security Evaluation (Общие критерии оценки безопасности информационных технологий), сокращенно Common Criteria (Общие критерии)1http://www.commoncriteriaportal.org. В этом стандарте определены семь уровней безопасности – от EAL1 (минимальная оценка безопасности) до EAL7, причем требования к высшим уровням EAL5–EAL7 устанавливаются каждой страной индивидуально. Большинство современных операционных систем (в том числе семейство клиентских и серверных систем Microsoft: от Windows 2000 до Windows 7 и Windows Server 2008) сертифицировано на уровень EAL4+ (плюс означает Flaw Remediation – исправление ошибок, постоянный выпуск обновлений)2Полный список сертифицированных продуктов см. http://www.commoncriteriaportal.org/products.
Основными требованиями к безопасности являются следующие3Эти требования были описаны в стандарте Министерства обороны США Trusted Computer System Evaluation Criteria (TCSEC) – критерии оценки доверенных компьютерных систем (1985 год), который известен как «Оранжевая книга». Система Windows NT3.5 SP3 получила сертификат уровня C2 этого стандарта (см. подробнее [Руссинович и др., 2008, стр. 510]).
1. Обязательная идентификация и аутентификация.
До выполнения любых действий пользователь должен представиться системе (идентификация) и подтвердить, что он является тем, кем представился (аутентификация). Обычно реализуется посредством ввода уникального имени пользователя и пароля.
В Windows за идентификацию и аутентификация пользователей отвечают процессы Winlogon.exe и Lsass.exe.
2. Управляемый доступ к объектам.
Пользователь-владелец объекта должен иметь возможность предоставлять доступ к объекту определенным пользователям и/или группам пользователей.
Безопасный доступ реализуется в Windows компонентом Security Reference Monitor (SRM, монитор контроля безопасности) исполнительной системы Ntoskrnl.exe.
3. Аудит.
Система должна уметь отслеживать и записывать все события, связанные с доступом к объектам.
В Windows аудит поддерживается SRM и Lsass.exe.
4. Защита при повторном использовании объектов.
Если область памяти выделялась какому-либо пользователю, а затем была освобождена, то при последующем выделении этой области все данные в ней (даже зашифрованные) должны быть стерты.
В Windows освобожденная память очищается системным потоком обнуления страниц, работающим во время простоя системы (с нулевым приоритетом).
Далее в лекции будет рассмотрена организация управляемого доступа к объектам в SRM, а также права и привилегии пользователей.
Организация управляемого доступа к объектам
Принцип организации доступа
Принцип организации управляемого безопасного доступа к объектам выглядит следующим образом. У каждого пользователя в системе имеется свой маркер доступа (access token), в котором указан уникальный идентификатор пользователя. Процессы, создаваемые пользователем, наследуют его маркер.
С другой стороны, все объекты в системе имеют структуру данных, которая называется дескриптор защиты (security descriptor). В эту структуру входит список идентификаторов пользователей, которые могут (или не могут) получить доступ к объекту, а также вид доступа (только чтение, чтение и запись, полный доступ и т.д.).
При попытке доступа процесса к объекту идентификатор из маркера доступа процесса сравнивается с идентификаторами, содержащимися в дескрипторе защиты объекта, и на основании результатов сравнения доступ разрешается или запрещается.
Рассмотрим структуры данных и функции, отвечающие за реализацию этого принципа в ядре Windows.
Идентификаторы защиты
Для однозначного определения пользователя в системе используются идентификаторы защиты (SID – Security Identifier). Кроме пользователей, SID имеется у групп пользователей, компьютеров, доменов4Домен (в Windows) – группа компьютеров, управляемых централизованно, информация о которых хранится в общей базе данных (Active Directory) и членов доменов.
SID генерируется системой случайным образом так, что вероятность совпадения SID у разных пользователей близка к нулю.
В WRK структура SID описывается в файле publicsdkincntseapi.h (строка 251). SID состоит из следующих частей:
- номер версии – поле Revision (1 байт);
- код агента идентификатора (identifier authority) – поле IdentifierAuthority (6 байт);
- коды субагентов (subauthority values) – поле SubAuthority (от 1 до 15 кодов по 4 байта каждый). Количество кодов субагентов хранится в поле SubAuthorityCount.
В текстовом виде SID записывается следующим образом:
Рис.
13.1.
Текстовое представление SID
На рис.13.1 последний код субагента называется относительным идентификатором (relative identifier, RID), поскольку все учетные записи пользователей на компьютере могут иметь одинаковые коды, кроме RID. RID, который равен 500, обозначает локального администратора.
Существует множество предопределенных SID (см., WRK, файл publicsdkincntseapi.h, строки 296–568 и, например, статью базы знаний Microsoft – http://support.microsoft.com/kb/243330).
Маркер доступа
Идентификаторы безопасности пользователей хранятся в маркерах доступа (access token). Во время входа пользователя в систему процесс Lsass.exe создает для него маркер доступа, который назначается первому пользовательскому процессу UserInit.exe, остальные процессы, запущенные пользователем, наследуют этот маркер (рис.13.2). Маркер доступа процесса хранится в поле Token структуры EPROCESS (см. лекцию 6 «Процессы и потоки»).
Маркер доступа представлен структурой TOKEN, описанной в файле basentossetokenp.h (строка 235) и имеющей следующие основные поля:
- TokenId – идентификатор маркера;
- UserAndGroups – SID учетной записи пользователя и групп, в которые данная учетная запись входит. При проверке возможности доступа пользователя к определенному ресурсу, например, файлу на диске NTFS, система проверяет, входит ли SID учетной записи в список доступа файла.
- Privileges – список привилегий.
- DefaultDacl – список управления избирательным доступом по умолчанию (DACL, Discretionary Access-Control List). При создании процессом объектов, из маркера доступа процесса извлекается данное поле и помещается в атрибуты безопасности вновь созданного объекта.
Рис.
13.2.
Создание и наследование маркера доступа
Маркер доступа
(Access token) —
программный объект ОС класса Microsoft
Windows, содержит информацию по безопасности
сеанса и идентифицирует пользователя,
группу пользователей и пользовательские
привилегии. Маркер доступа — это
объект, инкапсулирующий дескриптор
безопасности процесса. Прилагаемый к
процессу, дескриптор безопасности
идентифицирует собственника объекта.
Пока маркер используется для представления
только информации по безопасности, он
технически свободен по своему содержанию
и может содержать любые данные. Маркер
доступа используется Windows, когда процесс
пытается взаимодействовать с объектами,
дескрипторы безопасности которых
требуют контроль доступа. Маркер доступа
представлен системным объектом типа
Token
. Маркер доступа генерируется сервисом
входа в систему, когда пользователь
регистрируется и его подлинность успешно
установлена, определяя права пользователя
в дескрипторе безопасности, заключенном
в маркер. Маркер прилагается к каждому
процессу, созданному сессией пользователя
(процессы, собственником которых является
пользователь). Когда бы такой процесс
ни запрашивал любой ресурс, доступ к
которому контролируется, Windows смотрит
в дескрипторе безопасности в маркере
доступа, имеет ли пользователь, владелец
данного процесса, право доступа к данным,
и, если да, какие операции (чтение,
запись/изменение) ему дозволены. Если
операция дозволена в контексте данного
пользователя, Windows позволяет процессу
её продолжать, если нет, то отказывает
в доступе.
Составляющие маркера доступа:
-
идентификатор;
-
идентификатор
ассоциированной сессии входа в систему.
Сессия обслуживается сервисом
идентификации и заполняется
идентификационными пакетами с коллекцией
всей информации (мандат), сообщенной
пользователем во время входа в систему.
Мандат используется для доступа к
удаленным системам без необходимости
переидентифицировать клиента,
предусматривающий, что все вовлеченные
системы делятся информацией по
идентификации. -
идентификатор
пользователя. Это поле наиболее важное
и защищено от записи. -
идентификатор
групп, частью который является
пользователь. ограничивающие
идентификаторы группы (поле не
обязательно). -
привилегии, т.е.
специальные возможности пользователя.
Большинство привилегий по умолчинию
отключены, чтобы исключить возможные
повреждения от плохо защищённых
программ.
Олицетворение
— это возможность, которая позволяет
выполнять действия от имени другого
пользователя. Олицетворение полезно в
таких сценариях, как «отложенные»
операции, то есть когда соответствующий
рабочий процесс уже завершен. Например,
может потребоваться обновить что-либо
асинхронно от имени пользователя, хотя
тот уже долгое время не пользовался
данным вебсайтом.
Подсистема
локальной авторизации (Local Security Authority,
LSA) – гарантирует, что пользователь
имеет разрешение на доступ в систему.
Этот компонент — центральный для системы
защиты Windows NT. Он порождает маркеры
доступа, управляет локальной политикой
безопасности и предоставляет интерактивным
пользователям аутентификационные
услуги. LSA также контролирует политику
аудита
и ведет журнал, в котором сохраняются
сообщения, порождаемые диспетчером
доступа.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Ограничение доступа, права пользователей… Эти слова звучат сладкой музыкой для любого системного администратора, который заботится о безопасности сети, равно как и для пользователя, который следит за конфиденциальностью своей информации. К счастью, в операционных системах Windows NT и Windows 2000 реализованы специальные средства, позволяющие решать многие проблемы защиты информации.
Какие же механизмы включаются, когда мы выбираем пункт меню «Безопасность» из диалогового окна свойств файла? В данной статье я постараюсь ответить на этот вопрос. В качестве примера возьмем технологии получения списка логических дисковых разделов, локальных разделяемых ресурсов, а также рассмотрим две удобные утилиты, одна из которых входит в поставку NT, а вторая — в Resource Kit.
В операционной системe NT существует понятие «защищенный объект» (securable object). Это объект, доступ к которому контролируется и ограничивается операционной системой. В семействе операционных систем производства Microsoft лишь NT и Windows 2000 обеспечивают подобный сервис. К таким объектам относятся: файлы и каталоги файловой системы NTFS; каналы (pipes); процессы и потоки (Process and threads); файлы, спроецированные в память (mapped files); маркеры доступа (access tokens); объекты управления окнами (Window-management objects); разделы реестра (registry keys); службы Win32 (services); принтеры (Printers); разделенные сетевые ресурсы (Network shares); объекты синхронизации процессов (Interprocess synchronization objects — events, mutexes, semaphores, waitable timers); задачи (Job objects).
В модели ограничения доступа Win32 существует два базовых понятия:
Access tokens — маркеры доступа (МД), содержащие информацию о пользователе;
Security descriptors — описатели защиты, содержащие информацию о правах тех или иных учетных записей на доступ к объекту.
При регистрации пользователя в системе после успешной проверки имени и пароля создается маркер доступа. Для каждого процесса, выполняемого далее в контексте этого пользователя, создается копия МД. Маркер доступа содержит множество идентификаторов защиты (security identifiers, SID), определяющих учетные записи пользователя и тех групп, в которые он входит. Кроме того, МД содержит список привилегий (privilege) — прав на доступ к тем или иным объектам, предоставляемых той или иной учетной записи. С помощью этой информации операционная система определяет возможности доступа пользователя к ресурсам.
При создании защищенного объекта ОС присваивает ему описатель защиты (security descriptor, SD) — той защиты, которая имеется у пользователя, создающего объект, или же той, что задана по умолчанию. Приложения Win32 могут использовать функции API как для получения, так и для изменения информации о доступе к объектам.
Security descriptor содержит информацию о владельце объекта, а также может включать следующие списки контроля доступа Access-Contol List (ACL):
Discretionary access-control list (DACL) — разграничительные списки контроля доступа, в которых содержатся пользователи и группы с соответствующими правами на доступ к объекту;
System access-control list (SACL) — системные списки контроля доступа, которые определяют, как осуществляется аудит попыток доступа к объекту.
Список контроля доступа содержит список записей контроля доступа (access-control entries, ACEs). Каждая запись содержит набор битовых флагов и идентификатор SID попечителя (trustee) — пользователя или группы, к которой эти права применены.
Остановимся на упомянутых объектах более подробно.
Security Descriptor
Эти объекты содержат информацию о безопасности, соотнесенную с тем или иным защищенным объектом. Физически этот объект представляет собой структуру SECURITY_DESCRIPTOR, описанную в файле Windows.h:
typedef struct _SECURITY_DESCRIPTOR { BYTE Revision; BYTE Sbz1; SECURITY_DESCRIPTOR_CONTROL Control; PSID Owner; PSID Group; PACL Sacl; PACL Dacl; } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
Структура SECURITY_DESCRIPTOR используется для доступа к информации о безопасности объектов. Но изменять поля непосредственно в данной структуре невозможно. Для этого необходимо использовать специальные функции (например, SetSecurityDescriptorOwner(…)). Кроме того, Win32 API предоставляет интерфейс для создания и инициализации описателя SD для новых объектов.
Access token
Access token (маркер доступа) — это объект операционной системы, который описывает контекст ограничения доступа к процессу или потоку. Он содержит привилегии, соответствующие учетной записи пользователя, ассоциированного с процессом или потоком. Маркер доступа создается после успешной идентификации пользователя в системе. После этого каждый процесс, который так или иначе запускается данным пользователем, сопровождается копией его маркера.
Идентификатор защиты SID
Уникальный параметр переменной длины, определяющий учетную запись (account) и хранящийся в базе данных системы безопасности Windows NT, — вот что такое SID. В начале каждого сеанса, как только пользователь идентифицирован в системе, его SID извлекается из БД и помещается в маркер доступа. Далее это значение используется операционной системой при всех действиях пользователя с защищенными объектами.
Существует несколько стандартных SID, применяемых для учетных записей:
NULL — S-1-0-0 — SID группы, в которую не входят пользователи. Используется лишь тогда, когда SID неизвестен;
World — S-1-1-0 — группа, включающая в себя всех пользователей;
Local — S-1-2-0 — пользователи, имеющие непосредственный, физический доступ к системе;
Creator Owner ID — S-1-3-0 — SID, которым заменяется SID пользователя, создавшего объект. Этот SID используется для унаследованных записей ACE (см. ниже);
Creator Group ID — S-1-3-1 — значение, заменяющее SID основной группы, к которой принадлежит пользователь, создавший объект. Этот SID, как и предыдущий, используется для унаследованных записей ACE.
Список управления доступом ACL
ACL представлен структурой, описанной в Windows.h:
typedef struct _ACL { BYTE AclRevision; BYTE Sbz1; WORD AclSize; WORD AceCount; WORD Sbz2; } ACL;
Для Windows NT версий 3.5, 3.51, 4.0 определено максимальное число записей управления доступом, задаваемых списком управления доступом (см. статью Q166348 в базе знаний Microsoft). Оно равно 1820.
Запись управления доступом ACE
Система ограничения доступа Windows NT/2000 использует несколько типов записей ACE, которые перечислены в Таблице 1, содержащей, кроме того, и названия соответствующих этим типам структур данных.
Вполне вероятно, что в следующих версиях операционной системы появятся новые типы ACE, да и из приведенных в Таблице 1 некоторые поддерживаются только Windows 2000. Для того чтобы унифицировать процедуру анализа структур ACE, разработчики включили во все структуры _ACE одинаковую последовательность полей, которая отображается в структуре ACE_HEADER:
typedef struct _ACE_HEADER { BYTE AceType; BYTE AceFlags; WORD AceSize; } ACE_HEADER; typedef ACE_HEADER *PACE_HEADER;
Первое поле AceType определяет тип структуры. Очевидно, что указатель на любую структуру _ACE можно преобразовать в указатель на ACE_HEAER, получить тип ACE, после чего этот указатель преобразовать в указатель на соответствующую полученному типу структуру данных. Замечу, что такой прием широко используется в различных API продуктов Microsoft.
Теперь мы имеем общее представление о том, как устроена система безопасности объектов Windows NT. Попробуем применить эти сведения на практике и написать небольшую программу. В качестве примера используется программа, позволяющая выбрать один или несколько разделов диска, которые будут отсканированы, после чего на основе собранной информации будет создан командный файл, устанавливающий права на объекты выбранного раздела. В сценарий также включается список локальных разделяемых ресурсов с правами доступа к ним. После запуска сценария создаются разделяемые ресурсы, восстанавливаются права доступа к ним и параметры безопасности для объектов файловой системы. Ниже я расскажу лишь о ключевых моментах проекта, относящихся, впрочем, не только к API системы безопасности. Полный текст программы можно найти на http://members.xoom.com/alex_ep/NTSec/sec.zip, а соответствующий дистрибутив, в который входят дополнительные модули и файл справки — на сайте http://members.xoom.com/alex_ep/NTSec/RTPermScan.zip.
Список разделов дисковых устройств
На Листинге 1 показано, как получить список логических дисков. Для этого используется функция Win-API NetServerDiskEnum. Ее первый параметр определяет сетевое имя компьютера, список накопителей которого нас интересует. Если этот параметр NULL, то берется локальный компьютер. Список дисковых накопителей возвращается в параметре lpBuf. Он имеет вид последовательности из 3 байт. Каждая последовательность содержит букву — символ диска, двоеточие и разделитель NULL. Количество прочитанных накопителей возвращается в параметре dwReded, а общее количество дисков — в dwTotal. После обработки буфер lpBuf необходимо освободить вызовом функции NetApi-BufferFree(lpBuf).
В коде Листинга 1 вызывается написанная мной функция GetParti-tionTypeEx. Она получает параметры дискового накопителя, возвращает наименование файловой системы, на нем установленной, и проверяет, поддерживает ли файловая система контроль ограничения доступа (cм. Листинг 2).
В Win32 API для получения информации о дисковом разделе используется функция
BOOL GetVolumeInformation( LPCTSTR lpRootPathName, LPTSTR lpVolumeNameBuf-fer, ВWORD nVolumeNameSize, LPDWORD lpVolumeSerialNumber, LPDWORD lpMaximumComponent-Length, LPDWORD lpFileSystem-Flags, LPTSTR lpFileSystemName- Buffer, DWORD nFileSystem-NameSize ).
Ее параметры описаны в Таблице 2. Чуть подробнее рассмотрим параметр lpFileSystemFlags. Это набор битовых флагов. Среди прочих определен флаг FS_PERSISTENT_ACLS. Наличие этого флага означает, что папки и файлы раздела являются охраняемыми объектами. Перед тем как получать списки ACE для того или иного объекта, неплохо убедиться, что файловая система их поддерживает. Теперь мы знаем, как это делается.
Более подробное описание данной функции можно найти в MSDN по адресу: http://msdn.microsoft.com/library/psdk/winbase/fsys_6wfi.htm.
Список записей управления доступом для защищенных объектов
Итак, несложная операция просмотра всех объектов файловой системы и выяснения их свойств завершена. Пора обратиться к основному вопросу статьи — созданию механизма получения списков пользовательских прав на доступ к объектам. Как я уже отмечал выше, информация о правах доступа к объекту передается через DACL. Здесь рассматриваются лишь именованные объекты операционной системы, но функции работы с объектами, не имеющими уникального символьного идентификатора, например с потоками, ничем не отличаются от описанных ниже.
Чтобы получить структуру ACL для именованного объекта, нужно задействовать функцию GetNmedSe-curityInfo. Среди прочих значений она возвращает указатели на DACL и SACL. Нас интересует первый из них. Теперь у нас есть вся информация для создания списка ACE. Функция GetAce позволяет пройти по всему списку заголовков ACE_HEADER, соответствующих ACL. Этой функции передаются три параметра. Первый — указатель на ACL, второй — порядковый номер ACE, указатель на который возвращается в третьем параметре (cм. Листинг 3).
Список разделяемых ресурсов и прав для них
Последний вопрос, который я хочу подробно рассмотреть, касается получения списка локальных ресурсов общего доступа (shares) и прав доступа к ним. Процедура получения прав на объекты идентична описанной процедуре получения прав на доступ к файловым объектам. Поэтому реализующий ее код включен в код процедуры, представленной в Листинге 4, и отдельно не обсуждается. Это характерно для API системы безопасности, которая предоставляет обобщенный интерфейс ко всем защищенным объектам. Действительно, с точки зрения системы ограничения доступа Windows разделяемый ресурс — такой же именованный объект, как, например, и файл. Поэтому алгоритмы работы с ними одни и те же.
Список разделяемых ресурсов предоставляется функцией
Win32 API NET_API_STATUS NetShareEnum( LPWSTR servername, DWORD level, LPBYTE * bufptr, DWORD prefmaxlen, DWORD entriesread, LPDWORD totalentries, LPDWORD resume_handle )
возвращающей в параметре bufptr указатель на массив структур, который нужно освободить вызовом функции NetBufferFree. Подробное описание этой функции можно найти по адресу: http://msdn.microsoft.com/library/psdk/network/ntlmapi2_4l2l.htm.
Для получения SD ресурса используется функция
NET_API_STATUS NetShareGetInfo( LPWSTR servername, LPWSTR netname, DWORD level, LPBYTE *bufptr ),
описание которой находится по адресу: http://msdn.microsoft.com/library/psdk/network/ntlmapi2_18bz.htm. В параметре level передается необходимый уровень детализации информации. В соответствии с этим параметром в параметре bufptr возвращается указатель на ту или иную структуру. Уровню детализации 502 соответствует структура SHARE_INFO_502, описанная в файле Lmshare.h:
typedef struct _SHARE_INFO_502 { LPWSTR shi502_netname; DWORD shi502_type; LPWSTR shi502_remark; DWORD shi502_permissions; DWORD shi502_max_uses; DWORD shi502_current_uses; LPWSTR shi502_path; LPWSTR shi502_passwd; DWORD shi502_reserved; PSECURITY_DESCRIPTOR shi502_security_descriptor; } SHARE_INFO_502, *PSHARE_INFO_502, *LPSHARE_INFO_502;
Для получения списка ACE используется поле shi502_security_descriptor, содержащее необходимый Security Descriptor.
Восстановление параметров безопасности
Результатом работы утилиты, которую можно загрузить по указанному адресу, является командный файл. Прекрасно, скажете вы, а что дальше? Вообще говоря, наш файл состоит из двух частей: в первой создаются и устанавливаются права доступа к разделяемым файлам и каталогам, а во второй выясняются параметры безопасности для объектов файловой системы. Для работы с разделяемыми ресурсами из командной строки в Microsoft WindowsNT (R) Resource Kit есть небольшая программа — RMTSHARE.EXE. Сценарий создан с использованием этой программы.
Параметры команды такие:
Rmtshare.exe serversharename=drive:path [/USERS:number | /UNLIMITED] [/REMARK:"text"] [/GRANT [user[:perm][ /GRANT user[:perm]]]] [/REMOVE user]
Для просмотра и установки параметров доступа к объектам NTFS используется утилита cacls.exe, входящая в WinNT.
Cacls.exe filename [/T][/E][/C][/G user:perm][/R user [...]][/P user:perm [...]] [/D user [...]]
Filename — без других параметров выводит на экран список пользователей и их прав на доступ к объекту Filename.
/T — изменяет список записей управления доступом к объекту, а если это папка, то ко всем вложенным папкам.
/E — заменяет список записей управления доступом.
/C — позволяет продолжить работу в случае ошибки отказа в доступе.
/G user:perm — устанавливает для пользователя, определяемого параметром user, права на доступ к объекту, определяемые параметром perm:
N — нет; R — чтение; W — запись; C — изменение; F — полный контроль.
/R user — удаляет для указанного пользователя права на доступ к объекту.
/P user:perm — изменяет для указанного в параметре user пользователя права на доступ к объекту, которые описываются параметром perm и могут быть следующими:
N — нет; R — чтение; W — запись; C — изменение; F — полный контроль.
/D user — запрещает применять пользователю доступ к указанному объекту.
Утилита позволяет применять маски, например *.*, в именах файлов и папок, а также указывать в одной команде несколько пользователей. В Knowledge Base описан метод использования утилиты cacls.exe для изменения прав доступа не только пользователей, но и групп к объектам файловой системы. В этом случае синтаксис сохраняется, но имена групп берутся в кавычки (Q162786).
Active Directory и доступ к информации о безопасности
В Windows 2000 реализована новая служба качественно меняющая, кроме всего прочего, и механизмы работы с объектами файловой системы. Это Active Directory. Программный интерфейс к ней называется Active Directory Service Interfaces (ADSI). ADSI представляет собой набор COM-объектов, обеспечивающий программный интерфейс к функциям службы Active Directory. Базовые объекты системы безопасности (ACL, SID, ACE и т. д.) в ADSI те же, что и описанные выше. Существенные изменения коснулись лишь механизмов манипуляции с ними. Подробнее об ADSI я планирую рассказать в следующей статье.
Александр ЭПШТЕЙН — разработчик коммерческого и свободно распространяемого ПО для Windows и UNIX. Начальник отдела разработки ПО компании «КиберПлат.КОМ». С ним можно связаться по адресу: alex_ep@hotmail.com.
Дескрипторы
безопасности в Windows.
Дескрипторы
безопасности используются в Windows
для защиты и аудита ресурсов. Дескриптор
безопасности содержит владельца,
основную группу, дискреционный список
контроля доступа и системный список
контроля доступа.
Владелец
и основная группа.
Поля
владельца и основной группы содержат
идентификаторы безопасности. Владелец
— это принципал безопасности, владеющий
объектом. Владелец ресурса располагает
полным доступом к объекту, включая
возможность добавления и удаления
разрешений доступа в дескрипторе
безопасности.
Основная
группа содержится в дескрипторе
безопасности лишь для обеспечения
совместимости с подсистемой POSIX.
Система Windows не использует
эту часть дескриптора безопасности,
если не применяются утилиты, которые
оперируют с POSIX. По умолчанию
принципал безопасности, создавший
объект, записывает в дескриптор
безопасности свою основную группу.
Основной группой Windows по
умолчанию является группа Domain
Users.
Основная
группа подразумевает членство в группе.
При входе пользователя операционная
система вставляет SID этой
группы в маркер пользователя. Атрибут
memberOf
не перечисляет основную группу, а лишь
включает явно назначенное членство в
группах.
Дискреционные
и системные списки контроля доступа.
Списки
контроля доступа ACL состоят
из двух частей. Первая часть списка
контроля доступа представляет именованные
контрольные флаги. Эти параметры
контролируют применение разрешений в
списке ACL и правил
наследования. Вторая часть списка
контроля доступа представляет собственно
сам список. Этот список контроля доступа
содержит одну или несколько записей
управления доступом АСЕ. Флаги управления
доступом определяют, каким образом
Windows применяет записи
управления доступом внутри списка ACL.
Изначально Windows использует
защищенные и автоматические флаги.
Защищенные флаги запрещают модификацию
списка контроля доступа путем наследования.
Этот флаг является эквивалентом флажка
Allow inheritable
permissions from
parent to
propagate to this
object (Разрешение наследуемых
разрешений доступа). Флаг автоматически
разрешает записям управления доступом
в списках ACL наследовать
разрешения доступа от родительских
объектов дочерним.
Записи
управления доступом.
Списки
управления доступом содержат одну или
несколько записей контроля доступа. В
Windows записи управления
доступом разбиты на два типа: Allow
(Разрешить) и Deny (Запретить).
Каждый тип АСЕ располагает объектом
подтипа и необъектными подтипами. Записи
управления доступом Allow
и Deny назначают уровень
доступа, обеспечиваемый подсистемой
авторизации на основе права, запрашиваемого
принципалом безопасности. Записи
управления доступом к объектам являются
исключающими для объектов в AD
DS, поскольку они обеспечивают
дополнительные поля для наследования
объектов. Для большинства остальных
ресурсов, как, например, ресурсов файловой
системы и реестра, Windows
использует необъектные записи управления
доступом. Необъектные записи АСЕ
обеспечивают наследование контейнеров,
то есть объект в контейнере наследует
запись контроля доступом контейнера.
Этот принцип аналогичен наследованию
разрешений доступа файлами от родительских
папок. Каждый тип записи управления
доступом располагает полем Rights
и полем Trustee. Поля с правами
обычно заполняются предварительно
определенными числами, представляющими
действия, которые может выполнять
принципал безопасности. Рассмотрим
пример с пользователем, запрашивающим
чтение или запись файла. В этом случае
чтение и запись являются двумя отдельными
правами доступа. Поле доверия Trustee
представляет идентификатор безопасности,
разрешающий или запрещающий указанное
право. В качестве примера можно привести
пользователя или группу, которой
разрешено либо запрещено выполнять
действие, указанное в поле Right.
Маркеры доступа.
Связующим
звеном между SID-идентификатором
принципала безопасности и списком ACL
является маркер доступа. Когда Windows
выполняет проверку подлинности
пользователя с помощью Kerberos,
пользователю в процессе входа на
локальном компьютере присваивается
маркер доступа. Этот маркер включает
основной SID пользователя,
SID-идентификаторы всех
групп, которым принадлежит пользователь,
а также привилегии и права пользователя.
Примечание.
Маркер доступа также может включать в
атрибуте SIDHistory
дополнительные SID-идентификаторы.
Эти SID-идентификаторы
могут заполняться при перемещении
учетных записей пользователей из одного
домена в другой.Маркер доступа используется
подсистемой безопасности каждый раз
при попытке пользователя получить
доступ к ресурсу. Когда пользователь
пытается получить доступ к локальному
ресурсу, этот маркер предоставляется
клиентской рабочей станцией всем потокам
и приложениям, которые запрашивают
данные безопасности перед разрешением
доступа к ресурсу. Этот маркер доступа
никогда не передается по сети на другие
компьютеры. Вместо этого на каждом
сервере, где пользователь пытается
получить доступ к ресурсу, создается
локальный маркер доступа. Например,
когда пользователь пытается получить
доступ к почтовому ящику на сервере, то
на этом сервере создается маркер доступа.
В данном случае подсистема безопасности
на сервере будет сравнивать
SID-идентификаторы в маркере
доступа с разрешениями, предоставленными
в ACL-списке почтового
ящика. Если предоставленные для SID
разрешения позволяют доступ, пользователь
сможет открыть почтовый ящик.
Проверка
подлинности.
Для работы процессов
подсистемы безопасности, включая
использование SID и ACL,
нужно обеспечить способ получения
пользователями доступа к сети. По сути,
пользователи должны иметь возможность
указывать свои данные для извлечения
маркера доступа из контроллера домена.
Этот процесс называется проверкой
подлинности.
Проверка
подлинности выполняется в исходном
клиентском входе на компьютер, являющийся
членом домена AD DS.
Шаги проверки подлинности зависят от
операционной системы, с помощью которой
клиент входит в сеть.
В
случае успешной проверки подлинности
пользователю предоставляется доступ
в сеть. Если пользователь вошел в домен
и все необходимые ему ресурсы находятся
в одном лесе, пользователю только один
раз будет предложено пройти проверку
подлинности. Пока пользователь остается
в системе, все разрешения, получаемые
им в сети, основаны на начальной проверке
подлинности. Хотя учетная запись
пользователя проходит проверку
подлинности каждый раз при получении
пользователем доступа к ресурсам на
сервере, где пользователь не проходил
проверку подлинности, эта аутентификация
прозрачна для пользователя.
В компьютерных системах маркер доступасодержит учетные данные безопасности для сеанс входа в систему и идентифицирует пользователя, группы пользователей, привилегии пользователя и, в некоторых случаях, конкретное приложение. Обычно вас могут попросить ввести токен доступа (например, 40 случайных символов), а не обычный пароль (поэтому он должен храниться в секрете, как и пароль).
Содержание
- 1 Обзор
- 2 Типы токенов
- 3 Содержание токена
- 4 Ссылки
Обзор
Маркер доступа — это объект инкапсулирующий идентификатор безопасности процесса или потока. Маркер используется для принятия решений по безопасности и для хранения защищенной от взлома информации о некотором системном объекте. Хотя токен обычно используется для представления только информации о безопасности, он может содержать дополнительные данные в произвольной форме, которые можно прикрепить во время создания токена. Токены можно дублировать без особых привилегий, например, для создания нового токена с более низкими уровнями прав доступа, чтобы ограничить доступ запущенного приложения. Маркер доступа используется Windows, когда процесс или поток пытается взаимодействовать с объектами, имеющими дескрипторы безопасности (защищаемые объекты). В Windows маркер доступа представлен системным объектом типа Token
.
Маркер доступа генерируется службой logon, когда пользователь входит в систему. и учетные данные, предоставленные пользователем, аутентифицируются в базе данных аутентификации. База данных аутентификации содержит учетные данные, необходимые для создания начального токена для сеанса входа в систему, включая его идентификатор пользователя, идентификатор основной группы, все другие группы, частью которых он является, и другую информацию. Маркер прикрепляется к начальному процессу, созданному в пользовательском сеансе, и наследуется последующими процессами, созданными начальным процессом. Каждый раз, когда такой процесс открывает дескриптор любого ресурса, для которого включен контроль доступа, Windows согласовывает данные в дескрипторе безопасности целевого объекта с содержимым текущего действующего токена доступа. Результат этой оценки проверки доступа является показателем того, разрешен ли какой-либо доступ, и если да, то какие операции (чтение, запись / изменение и т. Д.) Разрешено выполнять вызывающему приложению.
Типы токенов
Доступны два типа токенов:
- Первичный токен
- Первичные токены могут быть связаны только с процессами и они представляют собой объект безопасности процесса. Создание первичных токенов и их связь с процессами являются привилегированными операциями, требующими двух разных привилегий в названии разделения привилегий — в типичном сценарии служба аутентификации создает токен, а служба входа в систему связывает его с пользовательская оболочка операционной системы. Процессы изначально наследуют копию первичного токена родительского процесса.
- Токен олицетворения
- Олицетворение — это концепция безопасности, реализованная в Windows NT, которая позволяет серверному приложению временно «быть» клиентом с точки зрения доступ к охраняемым объектам. Олицетворение имеет четыре возможных уровня: анонимный, предоставление серверу доступа анонимного / неопознанного пользователя, идентификация, разрешение серверу проверять личность клиента, но не использование этой идентичности для доступа к объектам, олицетворение, разрешение серверу действовать от имени клиента, и делегирование, то же самое, что и олицетворение, но расширенное на удаленные системы, к которым подключается сервер (посредством сохранения учетных данных). Клиент может выбрать максимальный уровень олицетворения (если есть), доступный серверу, в качестве параметра подключения. Делегирование и олицетворение являются привилегированными операциями (олицетворение изначально не было, но историческая небрежность в реализации клиентских API не смогла ограничить уровень по умолчанию до «идентификации», что позволило непривилегированному серверу олицетворять нежелательного привилегированного клиента, Это). Маркеры олицетворения могут быть связаны только с потоками, и они представляют собой объект безопасности клиентского процесса. Токены олицетворения обычно создаются и связываются с текущим потоком неявно с помощью механизмов IPC, таких как DCE RPC, DDE и именованные каналы.
Содержание токена
Маркер состоит из различных полей, включая:
- идентификатор.
- идентификатор связанного сеанса входа в систему. Сеанс поддерживается службой аутентификации и заполняется пакетами аутентификации с набором всей информации (учетные данные ), предоставленной пользователем при входе в систему. Учетные данные используются для доступа к удаленным системам без необходимости пользователь для повторной аутентификации (единый вход ), при условии, что все задействованные системы совместно используют центр аутентификации (например, сервер билетов Kerberos )
- пользователь идентификатор. Это самое важное поле и оно строго предназначено только для чтения.
- идентификаторы групп, в которые входит пользователь (точнее, субъект). Идентификаторы групп нельзя удалить, но их можно отключить или сделать «только для запрета». Не более одной из групп обозначается как идентификатор сеанса, изменчивая группа, представляющая сеанс входа в систему, разрешающая доступ к изменчивым объектам, связанным с сеансом, таким как дисплей.
- идентификаторы ограничивающих групп (необязательно). Этот дополнительный набор групп не предоставляет дополнительный доступ, но еще больше ограничивает его: доступ к объекту разрешен, только если он разрешен также одной из этих групп. Ограничивающие группы не могут быть удалены или отключены. Группы ограничения являются недавним дополнением, и они используются при реализации песочниц.
- привилегий, то есть специальных возможностей, которыми обладает пользователь. Большинство привилегий по умолчанию отключено, чтобы предотвратить повреждение программ, не заботящихся о безопасности. Начиная с Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003, права доступа могут быть окончательно удалены из токена путем вызова
AdjustTokenPrivileges ()
с атрибутомSE_PRIVILEGE_REMOVED
. - владелец по умолчанию, основная группа и ACL для объектов, созданных субъектом, связанным с токеном.