Windows. Управление пользователями и правами (UAC, группы, ACL)
Тема управления пользователями и правами — краеугольный камень безопасности ОС. Если ты хочешь стать лучшим в кибербезопасности, ты обязан понимать это не просто на уровне «что делает UAC», а разбираться в архитектуре и внутренних механизмах.
Разберём тему на три главных компонента:
1. Пользователи, группы и идентификаторы
Пользователь
Это учётная запись, представляющая человека или службу в системе.
Каждому пользователю соответствует:
- SID (Security Identifier) — уникальный идентификатор, который никогда не повторяется, даже если удалить и создать пользователя с тем же именем.
- Token (токен безопасности) — создаётся при входе в систему и содержит:
Группы
- Объединяют пользователей с одинаковыми правами.
- Система проверяет группу, а не каждого пользователя по отдельности.
- Примеры:
Важный момент:
- Когда ты назначаешь доступ к ресурсу, ты назначаешь его SID-ам, а не именам.
- Если удалить пользователя и создать нового с тем же именем — доступы не восстановятся.
2. ACL (Access Control List)
ACL — это список, прикреплённый к каждому объекту в ОС (файл, процесс, реестр, сервис и т.п.), описывающий, кто и что может делать с этим объектом.
Виды:
- DACL (Discretionary ACL) — кто имеет доступ и что может делать.
- SACL (System ACL) — кто и какие действия должен вызвать аудиторскую запись.
ACE (Access Control Entry)
Это отдельная строка в DACL, в которой указывается:
- SID (пользователь или группа)
- Access mask (маска доступа) — что можно:
READ,WRITE,DELETE,FULL_CONTROLи т.д. - Тип: разрешение или запрет (Allow / Deny)
Пример:
Файл file.txt, у которого ACL:
pgsqlCopyEdit1. DENY - SID:Users - WRITE 2. ALLOW - SID:Users - READ, WRITE
=> Пользователь в группе Users не сможет писать, даже если дальше есть разрешение.
3. UAC (User Account Control)
Это механизм разграничения полномочий, введённый в Windows Vista.
Что делает:
- При входе пользователь из группы
Administratorsне получает админские права по умолчанию. - Ему выдается ограниченный токен.
- Когда программа требует админ-доступ — появляется UAC-подтверждение. При согласии запускается с полным токеном.
Почему важно:
- Без этого любое приложение, запущенное пользователем-админом, имело бы полный доступ к системе.
- С UAC даже администратор работает в режиме обычного пользователя, пока явно не разрешит повышение.
Типы поведения UAC:
- Secure Desktop — затемнение экрана, ввод только в UAC-окно (защита от симуляции).
- Consent / Credentials Prompt — запрос подтверждения или ввод пароля.
Как всё это связано:
Когда пользователь обращается к ресурсу (файл, реестр, сервис):
- Token пользователя содержит его SID и SID групп.
- Система берёт DACL объекта.
- Сравнивает SID-ы из токена с SID-ами в ACE.
- Выносит решение: разрешить, отказать, аудировать.
Примеры атак и защиты:
Атаки:
- Privilege escalation — эксплойты используют дыры, чтобы получить админ-доступ.
- Token stealing — захват токена другого процесса, чтобы действовать от имени другого пользователя.
- DLL injection + UAC bypass — внедрение DLL и повышение привилегий через уязвимости в UAC/Installer и др.
Защита:
- Разделять пользователей и администраторов
- Не отключать UAC
- Настраивать SACL для аудита критичных объектов
- Минимизировать количество людей в группе
Administrators - Использовать AppLocker и SRP (Software Restriction Policies)
Вопросы
1) Может ли служба быть пользователем?
Да. В Windows службы (services) запускаются от имени определённой учётной записи, то есть «как пользователь».
Служба = процесс, которому нужен доступ к файлам, сети, реестру. Чтобы ОС могла это контролировать, у службы должен быть токен, как у любого пользователя.
Возможные учётные записи для служб:
- Local System (SID:
S-1-5-18) — максимальные права, почти как kernel. - Network Service (SID:
S-1-5-20) — ограниченный доступ + умеет работать с сетью. - Local Service (SID:
S-1-5-19) — минимальные локальные права, ограниченный сетевой доступ. - Можно задать пользовательскую учётную запись вручную.
Служба ≠ пользователь, но она использует пользовательскую среду безопасности, как будто ей «выдали пропуск».
2) Что такое токены в целом?
Токен (security token) — это структура, которую ОС присваивает процессу или потоку, чтобы понять, кто это и что ему можно.
В контексте безопасности (Windows):
В вебе (OAuth, JWT и т.п.):
- Токен = «электронный пропуск», который подтверждает, что пользователь вошёл в систему.
- Например, JSON Web Token (JWT) может включать:
user_id,scope,expires,signature.
Общее: токен = удостоверение личности + список полномочий.
3) Где посмотреть токен и SID?
SID:
- В командной строке: bashCopyEdit
whoami /user whoami /groups - Или через PowerShell: powershellCopyEdit
[System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
Токен:
Токен — это объект ядра, напрямую его не посмотришь просто так, но можно использовать:
4) Что такое аудиторская запись?
Это запись в журнале событий, которую ОС создаёт, когда кто-то пытается получить доступ к объекту с включённым аудитом.
- Файл с настроенной SACL: «логировать любое удаление пользователем X».
- Пользователь X пытается удалить файл → событие в журнале безопасности.
CopyEditПанель управления → Администрирование → Просмотр событий → Журнал безопасности
Аудит нужен для отслеживания попыток доступа, расследований, выявления атак и т.д.
5) Где назначаются Allow и Deny?
В DACL объекта (файла, ключа реестра, сервиса и т.д.). Это можно изменить через:
- GUI: Правый клик по файлу → Свойства → Безопасность → Изменить
- CLI: bashCopyEdit
icacls файл /grant:r Пользователь:(R,W) icacls файл /deny Пользователь:(W) - PowerShell:
Почему может быть отказ:
- Сначала читаются DENY-записи.
- Если
DENY WRITEидёт первой, то доступ будет запрещён, даже если ниже естьALLOW WRITE.
Это механизм приоритета — DENY важнее ALLOW.
6) UAC только добавляет кнопку "запуск от имени администратора"?
Нет. Это целая система разграничения полномочий:
- По умолчанию даже админ работает как обычный пользователь (ограниченный токен).
- Когда нужно что-то важное (например, изменить системный файл) — система запрашивает повышение привилегий.
- Это UAC и делает: вызывает оконный запрос, проверяет политику и запускает с полным токеном.
"Запуск от имени администратора" — это способ вручную инициировать UAC.
7) Что за типы поведения UAC? Что за окно? Что за защита от симуляции?
Типы поведения:
- Secure Desktop (безопасный рабочий стол):
- Когда появляется окно UAC, экран затемняется, и оно становится единственным активным.
- Нельзя кликать по другим окнам.
- Prompt for consent / Prompt for credentials:
Что за защита от симуляции?
Если бы UAC-окно появлялось просто как обычное окно — его можно было бы:
- UAC работает на другом уровне окна (на Secure Desktop)
- Никакие сторонние программы не могут на него воздействовать — даже автокликеры не работают.
Симуляция = автоматический ввод, подделка кликов/действий программно.
8) Где обычный пользователь может столкнуться с UAC-подтверждением?
- Установка программы
- Изменение системных настроек
- Копирование файлов в
C:\Program Files - Запуск
cmd.exeилиregedit.exeс повышенными правами
CopyEditПриложение хочет внести изменения в ваш компьютер. Разрешить? Да / Нет
Если пользователь — не админ, то будет предложено ввести логин/пароль администратора.
9) Что значит "аудировать"?
Аудировать = отслеживать и записывать события, чтобы потом можно было проанализировать:
Это не про запрет, а про фиксацию.
Как Windows управляет доступом
1. Пользователи, группы, SID
Пользователь (User)
— это твоя учётка в Windows. У неё есть имя, пароль, настройки, права и уникальный идентификатор — SID (Security Identifier).
SID — как паспорт. Даже если ты удалишь пользователя и создашь с тем же именем, SID будет другой.
CopyEditS-1-5-21-1234567890-123456789-123456789-1001
Группы (Groups)
Пользователь может входить в одну или несколько групп.
Administrators— админы.Users— обычные пользователи.Guests— гости.Power Users— промежуточные права.
Группа — это контейнер прав. Когда ты в группе Administrators, ты получаешь админ-доступ.
2. Как посмотреть пользователей и группы
Командная строка (cmd):
bashCopyEditnet user
Показывает список всех пользователей.
bashCopyEditnet localgroup
bashCopyEditnet user имя_пользователя
Показывает инфу о конкретной учётке (группы, статус и т.д.).
3. Как Windows решает — разрешить или отказать?
Каждому объекту (файл, папка, служба) соответствует ACL (Access Control List).
Он содержит список правил:
кому (SID или группе) — какие действия разрешены или запрещены.
textCopyEditC:\Users\Ты\Documents\Important.txt → Разрешить: - Тебе (SID твоей учётки): Read, Write → Запретить: - Группе Users: Write
4. Как посмотреть права (ACL) на файл/папку
Способ 1: Через свойства
Способ 2: В командной строке
bashCopyEditicacls "C:\Users\Ты\Documents"
makefileCopyEditТы:(I)(F) Users:(I)(RX)
5. Создаём нового пользователя без прав администратора
- Пуск → Настройки → Учётные записи → Семья и другие пользователи
- Добавить пользователя → Локальная учётная запись
- Назначь обычные права (по умолчанию он не будет админом)
Или через PowerShell:
powershellCopyEditnet user testuser123 myPassword123 /add net localgroup Users testuser123 /add
6. Практика
- Создать нового пользователя
- Посмотреть его группы через
net user имя - Посмотреть
icaclsна любую свою папку - Добавить/запретить доступ этому пользователю через свойства папки
Еще вопросы
📜 Что делают некоторые из групп (коротко):
Обычные пользователи, не могут устанавливать софт без UAC
Гостевые, почти ничего не могут
Для запуска и взаимодействия DCOM-компонентов
Используется в некоторых сценариях с устройствами
Может читать системные логи (без доступа к их содержимому)
Смотреть графики и данные производительности
Получать доступ к компу через удалённые команды
Технические, для задач, сервисов и служб
⚠️ По умолчанию ты состоишь в Users. Если ты админ, то ещё и в Administrators.
Почему Guest уязвим, если у него нет прав?
Да, у Guest очень ограниченные права, но:
- Он по умолчанию не требует пароля — кто угодно может войти.
- Он может быть точкой входа для вредоносов, если доступен извне (локально или через сеть).
- Некоторые уязвимости в старых системах (и даже современных при плохих настройках) эксплуатируют гостевой доступ — как "первую щель", через которую пролезают.
➤ Пример:
Если в папке открыт доступ группе Guests, то гость может прочитать или даже изменить то, что ты не хотел. Это особенно опасно, если ты по ошибке дал разрешения через Everyone, а не ограничил.
🛡️ Поэтому правильная практика в ИБ — отключать Guest вообще.
Что такое PowerShell, чем отличается от cmd, и почему их так много?
Windows PowerShell— основная современная консоль.Developer PowerShell for VS— спец. версия для работы с Visual Studio.PowerShell ISE— "IDE" для PowerShell скриптов, удобна для написания и отладки.(x86)— 32-битные версии (для совместимости со старыми приложениями).
Пример:
powershellCopyEditGet-Process | Where-Object {$_.CPU -gt 10}
— получит процессы, где CPU > 10. Такого в cmd ты просто не сделаешь без скриптов из ада 😄