WARNING
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный информацией из этой статьи.
В Windows все активные сущности, которые могут быть аутентифицированы операционной системой (пользователи или группы), называются участниками безопасности (security principals). Все участники безопасности имеют уникальный идентификатор переменной длины — Security ID (SID). Выглядит SID, например, так:
S-1-5-21-1687231434-1254558764-1544283289-1004
Структура SID — S-R-IA-SA-RID
, где:
S
— литеральный префикс, указывает на то, что идентификатор является SID (это просто конвенция наименования);R
— однобайтное значение версии или ревизии (revision) SID. Пока существует только версия 1;IA
— источник выдачи (issuing authority), шестибайтное значение. Указывает, в чьей области ответственности был выдан SID (буквально authority значит «орган власти»). Почти всегда имеет значение 5 (SECURITY_NT_AUTHORITY
), за исключением well-known SID, о которых мы поговорим чуть позже. Например,1
означаетSECURITY_WORLD_SID_AUTHORITY
и относится к well-known-группе Everybody;SA
— уполномоченный центр (sub-authority). Уникальное (в рамках IA) значение, состоит из четырех частей: 4-байтного числа, указывающего, кем был выдан идентификатор (контроллером домена или локальным компьютером), и 12-байтного значения, которое делится на три части и идентифицирует конкретный объект, выдавший идентификатор. Смысл этого поля в том, что при наличии нескольких доменов в лесу объекты в разных доменах будут иметь уникальный SA;RID
— относительный идентификатор (Relative-ID), 4-байтное значение, служит для разделения объектов внутри домена. Для встроенных учетных записей RID всегда будет один и тот же (например, для учетной записи администратора RID = 500).
Если быть более точным, то существует SID машины (machine SID) и SID домена (domain SID). А сам SID представляет собой базовый идентификатор (S, R, IA, SA) + RID.
Также есть стандартные так называемые well-known SID для пользователей и групп. Они имеют один и тот же SID на любых системах (например, группа Everyone или пользователь System).
WWW
Поизучать SID можно с помощью утилиты PsGetsid.exe из пакета Sysinternals. А почитать о структуре SID более подробно можно, например, в этих публикациях:
Также при администрировании можно допустить небольшой недочет, связанный с дубликацией сидов. Иногда он влияет на безопасность или функциональность (например, когда ОС развертывают, просто копируя диск). Об этом можно почитать подробнее в статье Марка Руссиновича, еще одной статье и в VMware knowledge base.
SID, в свою очередь, входит в так называемый маркер доступа — программный объект (структура в ядре Windows), который закрепляется за сессией (logon session) участников безопасности после авторизации. За выдачу маркера, как и за аутентификацию, отвечает LSASS (local security authority subsystem).
Помимо всего прочего, в маркер включены SID пользователя и его групп, а также механизм привилегий на совершение каких-либо действий (например, привилегия на отладку debug, которая, кстати, используется в mimikatz для получения доступа к системным процессам).
После того как удаляется последний ассоциированный с сессией токен, LSASS удаляет и саму сессию — таким образом завершается сеанс пользователя. Можно поподробнее изучить структуру маркера доступа в отладчике ядра (kernel debugger) с помощью команды dt_TOKEN
. Вообще, если не получается нагуглить подробности о внутреннем устройстве Windows, можно изучить структуру самому с помощью средств отладки. Подробности представлены в документации Microsoft. С привилегиями может быть, например, связана такая вещь, как bypass traverse checking.
WWW
Маркеры доступа тоже могут иметь проблемы с безопасностью. Вот несколько ссылок для более подробного изучения:
- Интересная исследовательская работа Брайана Александера
- Блог по пентесту и редтиму ired.team
- Выступление Андреа Пьерини с конференции Hack in Paris
- Статья Windows Privilege Abuse: Auditing, Detection, and Defense (Palantir Security)
В свою очередь, для «пассивных» объектов, которые предназначены для предоставления к ним доступа извне (их называют securable objects), используется SD — security descriptor. Это дескриптор для управления доступом к данным объектам (например, процесс может иметь SD или SD может быть привязан к файлу в NTFS). У SD тоже, кстати, бывают проблемы с безопасностью.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»