Cybersecurity
May 29

Windows. Управление пользователями и правами (UAC, группы, ACL)

Тема управления пользователями и правами — краеугольный камень безопасности ОС. Если ты хочешь стать лучшим в кибербезопасности, ты обязан понимать это не просто на уровне «что делает UAC», а разбираться в архитектуре и внутренних механизмах.

Разберём тему на три главных компонента:


1. Пользователи, группы и идентификаторы


Пользователь

Это учётная запись, представляющая человека или службу в системе.
Каждому пользователю соответствует:

  • SID (Security Identifier) — уникальный идентификатор, который никогда не повторяется, даже если удалить и создать пользователя с тем же именем.
  • Token (токен безопасности) — создаётся при входе в систему и содержит:
    • SID пользователя
    • SID всех групп, в которые входит пользователь
    • Привилегии (SeDebugPrivilege и др.)
    • Маркер UAC (о нём дальше)
    • Идентификаторы владельца объектов

Группы

  • Объединяют пользователей с одинаковыми правами.
  • Система проверяет группу, а не каждого пользователя по отдельности.
  • Примеры:
    • Administrators — администраторы
    • Users — обычные пользователи
    • Guests, Power Users, Backup Operators и т.д.

Важный момент:

  • Когда ты назначаешь доступ к ресурсу, ты назначаешь его 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)

Порядок обработки:

  1. Сначала идут DENY записи — они блокируют даже если ниже есть ALLOW.
  2. Потом проверяются ALLOW.

Пример:
Файл 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 — запрос подтверждения или ввод пароля.

Как всё это связано:

Когда пользователь обращается к ресурсу (файл, реестр, сервис):

  1. Token пользователя содержит его SID и SID групп.
  2. Система берёт DACL объекта.
  3. Сравнивает SID-ы из токена с SID-ами в ACE.
  4. Выносит решение: разрешить, отказать, аудировать.

Примеры атак и защиты:

Атаки:

  • 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):

  • Это объект, содержащий:
    • SID пользователя
    • SID всех групп, в которые он входит
    • Привилегии
    • Тип токена: ограниченный / полный
    • Флаг админа, UAC-маркер и др.

В вебе (OAuth, JWT и т.п.):

  • Токен = «электронный пропуск», который подтверждает, что пользователь вошёл в систему.
  • Например, JSON Web Token (JWT) может включать: user_id, scope, expires, signature.
Общее: токен = удостоверение личности + список полномочий.

3) Где посмотреть токен и SID?

SID:

  • В командной строке: bashCopyEditwhoami /user whoami /groups
  • Или через PowerShell: powershellCopyEdit[System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value

Токен:

Токен — это объект ядра, напрямую его не посмотришь просто так, но можно использовать:

  • Process Explorer от Sysinternals:
    • Выбираешь процесс
    • Правый клик → Properties → Security
    • Там будет список SID-ов и привилегий
  • Или через Process Hacker

4) Что такое аудиторская запись?

Это запись в журнале событий, которую ОС создаёт, когда кто-то пытается получить доступ к объекту с включённым аудитом.

Пример:

  • Файл с настроенной SACL: «логировать любое удаление пользователем X».
  • Пользователь X пытается удалить файл → событие в журнале безопасности.

Смотрится в:

CopyEditПанель управления → Администрирование → Просмотр событий → Журнал безопасности
Аудит нужен для отслеживания попыток доступа, расследований, выявления атак и т.д.

5) Где назначаются Allow и Deny?

В DACL объекта (файла, ключа реестра, сервиса и т.д.). Это можно изменить через:

  • GUI: Правый клик по файлу → Свойства → Безопасность → Изменить
  • CLI: bashCopyEditicacls файл /grant:r Пользователь:(R,W) icacls файл /deny Пользователь:(W)
  • PowerShell:
    • Модуль Set-Acl, Get-Acl

Почему может быть отказ:

  • Сначала читаются 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 будет другой.

Пример 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: Через свойства

  1. Правый клик → Свойства → Безопасность
  2. Видишь список пользователей и групп
  3. Можно изменить разрешения

Способ 2: В командной строке

bashCopyEditicacls "C:\Users\Ты\Documents"

Пример вывода:

makefileCopyEditТы:(I)(F)
Users:(I)(RX)
  • (F) — полный доступ (Full)
  • (RX) — чтение и выполнение (Read & Execute)

5. Создаём нового пользователя без прав администратора

  1. Пуск → Настройки → Учётные записи → Семья и другие пользователи
  2. Добавить пользователя → Локальная учётная запись
  3. Назначь обычные права (по умолчанию он не будет админом)

Или через PowerShell:

powershellCopyEditnet user testuser123 myPassword123 /add
net localgroup Users testuser123 /add

6. Практика

Попробуй:

  • Создать нового пользователя
  • Посмотреть его группы через net user имя
  • Посмотреть icacls на любую свою папку
  • Добавить/запретить доступ этому пользователю через свойства папки

Еще вопросы

📜 Что делают некоторые из групп (коротко):

Administrators

Полный контроль над системой

Users

Обычные пользователи, не могут устанавливать софт без UAC

Guests

Гостевые, почти ничего не могут

Distributed COM Users

Для запуска и взаимодействия DCOM-компонентов

Device Owners

Используется в некоторых сценариях с устройствами

Event Log Readers

Может читать системные логи (без доступа к их содержимому)

Hyper-V Administrators

Доступ к виртуальным машинам

Performance Monitor Users

Смотреть графики и данные производительности

Remote Management Users

Получать доступ к компу через удалённые команды

IIS_IUSRS

Для веб-сервера IIS

System Managed Accounts

Технические, для задач, сервисов и служб

⚠️ По умолчанию ты состоишь в 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 ты просто не сделаешь без скриптов из ада 😄


🔧 Коротко:

  • Для простых задач — cmd сойдёт.
  • Для админки, ИБ, автоматизации и крутых скриптов — только PowerShell.