Источник: https://github.com/AnaktaCTF/CTF/blob/main — Misc/Организация управляемого доступа в ОС Windows.md
Права и привилегии
Операционная система контролирует множество действий пользователей, например, вход в систему, включение/выключение компьютера, изменение системного времени, загрузка драйверов и т. д.
Для управления такими действиями, не связанными с доступом к конкретным объектам, система использует два механизма:
[!tip] Право учетной записи (account right)
Разрешение или запрет на определенный вид входа в систему. Их бывает несколько: локальный, сетевой, пакетный, вход в качестве службы и другие
[!tip] Привилегия (privilege)
Разрешение или запрет определенных действий в системе, например, включение/выключение компьютера или загрузка драйверов
Список всех привилегий в системе можно посмотреть в оснастке MMC "Локальная политика безопасности" (Local Security Policy), раздел "Локальные политики" – "Назначение прав пользователей" (Local Policies – User Rights Assignment).
В UNIX управление привилегиями выглядит несколько иначе. В файловой системе существует разделение привилегий на RWX – read (чтение), write (запись), execute (исполнение). Сам доступ также разделяется на три блока:
- владелец;
- пользователи из группы владельца;
- остальные.
Организация управляемого доступа к объектам Windows
В Windows учётная запись задаётся в виде SID. В целях удобства, каждому SID соответствует псевдоним (alias), который мы как раз и видим как пользователи.
[!tip] [[SID]] (Security Identifier)
Структура данных переменной длины, которая идентифицирует учётную запись пользователя.
Принцип организации управляемого безопасного доступа к объектам выглядит следующим образом. У каждого пользователя в системе имеется свой маркер доступа (access token), в котором указан уникальный идентификатор пользователя SID. Процессы, создаваемые пользователем, наследуют его маркер. Помните в блоке про PE и процессы мы говорили о том, что процесс содержит в себе информацию о том с какими привилегиями он исполняется и от чьего имени? Вот это оно.
С другой стороны, все объекты в системе имеют структуру данных, которая называется дескриптор защиты (security descriptor). В эту структуру входит список SID пользователей, которые могут (или не могут) получить доступ к объекту, а также вид доступа (например, только чтение, чтение и запись или полный доступ и т.д.). Структура данных, соответствующая дескриптору защиты, включает следующие основные поля:
- Owner – SID владельца;
- Dacl – список управления избирательным доступом (Разрешения);
- Sacl – системный список управления доступом.
Список управления избирательным доступом (DACL, Discretionary Access-Control List) определяет пользователей, которые могут получать доступ к объекту, а также указывает тип доступа. В системном списке управления доступом (SACL, System Access-control List) перечислены пользователи и операции, которые должны учитываться в журнале аудита безопасности (security audit log).
При попытке доступа процесса к объекту идентификатор из маркера доступа процесса сравнивается с идентификаторами, содержащимися в дескрипторе защиты объекта, и на основании результатов сравнения доступ разрешается или запрещается.
Схема доступа к объекту Windows