Подробнее о ACL/ACE можно почитать на портале Microsoft или на сайте ntfs.com. Также в этом может участвовать механизм Mandatory Integrity Control, который проверяет доступ к объекту по уровню надежности того, кто этот доступ запрашивает.
Кстати, повышение привилегий за счет DACL было использовано в прошлогодней уязвимости CVE-2019-0841. Криво выпущенный патч — знакомые грабли. Также в 2018 году была уязвимость CVE-2018-1036, связанная с обходом разрешений.
Помимо привилегий, есть еще один способ контролировать действия пользователя, требующие прав администратора. Для этого был создан хорошо известный UAC(User Access Control). Идеала, разумеется, не бывает, поэтому вот несколько старых ссылок для дальнейшего изучения методик обхода UAC.
Аутентификация и авторизация
Как уже упоминалось, за аутентификацию отвечает LSASS. На деле, конечно, все выглядит сложнее. Ниже приведена схема механизма аутентификации для старых версий Windows.
Вкратце это работает так: в LSASS поступают аутентификационные данные (пароль, биометрия и прочее), затем Windows производит авторизацию. Хеш от аутентификационных данных кладется в SAM, а пользовательскому процессу назначается маркер доступа. Известная проблема состоит в том, что можно сохраненные хеши сдампить (например, при помощи всем известного mimikatz) и провести атаку pass-the-hash.
В Windows 10 добавили Credential Guard (вместе с ним, кстати, появился новый процесс — Lsalso.exe). Этот механизм должен был защитить, в частности, от использования mimikatz. Но на каждого хитреца найдется свой мудрец.
Прежде всего, Credential Guard — опциональная функция, которая может быть отключена. Так как Credential Guard основан на механизме Virtual Secure Mode (VSM), который, в свою очередь, базируется на механизмах виртуализации CPU, то не стоит забывать и об аппаратных уязвимостях, позволяющих обойти Credential Guard.
Ну и напоследок нужно помнить, что введенный пароль преодолевает некоторый путь перед тем, как будет сохранен в компьютере для последующей авторизации. Это значит, что его можно получить с помощью кейлоггера или кастомного SSP (security support provider). Последнее возможно с помощью mimikatz — пример есть в недавней статье. Помимо mimikatz, перехватить пароль помогут Empire, SharpSploit или PowerSploit, в которых, по сути, используется интегрированный mimikatz. Альтернативой в PowerSploit могут быть следующие команды:
Import-Module .\PowerSploit.psm1
Install-SSP -Path .\mimilib.dll
Естественно, обойти системы безопасности Windows позволят и методы социальной инженерии. Например, можно через msf и msfvenom получить реверс-шелл, с помощью его загрузить на целевую систему специальный исполняемый файл для имитации окна авторизации, а потом запустить его из шелла. На экране пользователя отобразится окно, как при входе в систему, — при этом инструмент проверяет, правильный ли пароль введен.
Кстати, есть старый трюк для обхода окна авторизации, который на удивление может сработать и в Windows 10. Суть этого способа в том, что нужно заменить программу sethc.exe на cmd.exe простым переименованием, а затем вызвать sethc.exe, пять раз нажав клавишу Shift. После этого можно сменить пароль пользователя. Еще в Windows 10 существует возможность сделать примерно следующее:
1. Вставить загрузочный USB, перезагрузить компьютер, затем нажать Shift + F10, чтобы открыть cmd.exe.
2. Ввести команду move D:\windows\Sstem32\utilman.exe D:\windows\system32\utilman.exe.bak.
3. Для маскировки cmd под utilman ввести команду copy D:\windows\system32\cmd.exe D:\windows\System32\utilman.exe.
4. Перезагрузить компьютер без загрузочного USB.
5. После загрузки нажать «Специальные возможности» (рядом с кнопкой выключения питания в окне авторизации).
6. Для создания нового пользователя ввести команду net user youruser /add.
7. Для добавления нового пользователя в группы администраторов использовать команду net localgroup administrators youruser /add.
Можно добиться подобного эффекта, если у тебя уже есть доступ к системе с правами редактирования реестра. В этом случае нужно в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ добавить раздел utilman.exe, в котором прописать ключ с типом String Value и значением в виде пути до нужной программы. Эта программа будет запускаться при попытке открыть окно специальных возможностей.
От этого опять-таки спасает шифрование диска. Для запрета смены пароля определенного юзера можно использовать учетную запись Microsoft вместо локальной. Также можно отключить для всех юзеров права на выполнение utilman.exe и sethc.exe. Ну и дополнительно включить Secure Boot и поставить пароль на BIOS/UEFI. Кстати, этот трюк показывался в сериале Mr.Robot в третьей серии четвертого сезона.
Также для байпаса окна авторизации есть старый, но по-прежнему рабочий инструмент (с поддержкой Windows 10) под названием kon-boot. Правда, работает он с некоторыми ограничениями (например, не поддерживается включенный secure boot). Чтобы защититься от него, нужно включить в системе функции, которые инструмент не поддерживает.
Постэксплуатация
Часто бывает так, что эксплуатация уязвимости ведет к получению доступа, например, к учетной записи веб-сервера, а не к учетной записи администратора. Пути тут два: повышать привилегии и искать интересную информацию, к которой есть доступ. Если речь идет о доменном компьютере, то также можно почерпнуть полезные сведения из недавней статьи, посвященной сбору информации в домене. Для поиска интересностей в скомпрометированной системе есть множество скриптов, например winPEAS, Seatbelt, Powerless, Privesc, Sherlock, JAWS, Watson и SharpUp.
Но стоит учесть, что такие скрипты «шумные». Тем более программы, требующие .NET, могут и не сработать, если в системе настроен белый список ПО.
Заключение
Безопасность зависит не только от недочетов в логике, но и от программных ошибок, вплоть до бинарных уязвимостей в ядре.
Появление новых механизмов защиты и способов обхода этих механизмов — бесконечный цикл.