Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемКсения Янюшина
1 Обход защитных механизмов в ОС Windows © , Digital Security Алексей Синцов Digital Security CHAOS CONSTRUCTIONS 10
2 #whoami 2 © , Digital Security Обходим защиту в win32 Digital Security: Аудит/Тест на проникновение (ISO/PCI/PA–DSS и бла-бла-бла) Анализ защищенности ERP / ДБО Разработка специализированного «софта» Поиск ошибок и уязвимостей (DSECRG) Поиск путей эксплуатации Журнал XAKEP: Колонка «Обзор Эксплойтов» Статьи на тему разработки эксплойтов Люблю поболтать: РусКрипто 2010 Москва CONFidence 2010 Krakow Hack In The Box 2010 Amsterdam Chaos Construction 2010 СПБ ;)
3 Эволюция 3 © , Digital Security год сложность Сперто у Dino Dai Zovi Обходим защиту в win32 Поиск уязвимостей Разработка эксплойта
4 Типовые проблемы 4 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Обходим защиту в win32
5 Контрмеры 5 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Stack cookies Save unlinking Heap cookies Обходим защиту в win32
6 6 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Stack cookies Save unlinking SEH handler validation SEH chain validation Heap cookies Контрмеры Обходим защиту в win32
7 Ситуация на © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Stack cookies Save unlinking SEH handler validation SEH chain validation Heap cookies DEP ASLR Обходим защиту в win32
8 В нашей программе 78 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Ошибка формата строки Ошибки памяти ( например Use After Free) Stack cookies SEH handler validation DEP ASLR SEH chain validation Обходим защиту в win32
9 Классика жанра - BoF 8989 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Обходим защиту в win32
10 10 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32
11 11 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32
12 12 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32
13 13 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32
14 14 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32
15 15 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Перезаписали метку Классика жанра - BoF Обходим защиту в win32
16 © , Digital Security Обходим 16 Пути обхода: Слабая энтропия / статичные cookie Перезапись cookie в секции.data mov ecx, edx CRASH Перезапись объектов и их указателей (vtable) call [ecx] CRASH Перезапись SEH и создание исключительной ситуации Обходим защиту в win32
17 17 © , Digital Security Стек до переполнения: БуферЧто-тоCRET SEH? Next SEHSEH Код, который будет выполнен, если что-то пошло не так Обходим защиту в win32
18 18 © , Digital Security Стек до переполнения: БуферnsCRET Переполнение: БуферnsCRETseh Перезапись SEH Перезаписали указатель seh Обходим защиту в win32
19 © , Digital Security Захват SEH 19 1.Переполняем буфер 2.Перезаписываем метку 3.Перезаписываем ещё что-то 4.Перезаписываем адрес возврата 5.Проверка метки (целостности) 6.FAIL [6] [7] Переполнение: БуферnsCRETseh 1.Переполняем буфер 2.Перезаписываем метку 3.Перезаписываем SEH 4.Перезаписываем адрес возврата 5.Исключительная ситуация (до возврата) 6.Переход по указателю SEH 7.PROFIT Перезапись RET: Перезапись SEH: Обходим защиту в win32
20 SEH ntdll!FinalExceptionHandler © , Digital Security SEH 20 Next SEHSEH Next SEHSEH Next SEHSEH Next SEHSEH 0xFFFFFFFF обработчик Обходим защиту в win32
21 SEH ntdll!FinalExceptionHandler © , Digital Security SafeSEH 21 NextSEH1 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF обработчик1 обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 SafeSEH table: Цепочка SEH : Обходим защиту в win32
22 SEH ntdll!FinalExceptionHandler © , Digital Security SafeSEH 22 [6] [7] БуферnsCRETseh Evil1Evil2 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF шеллкод обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 Таблица SafeSEH: Такого дескриптора в таблице нету Обходим защиту в win32
23 © , Digital Security Кое-что о SafeSEH 23 Каждый модуль должен поддерживать SafeSEH У каждого такого модуля – своя таблица Обратная совместимость с модулями без SafeSEH APP.EXE APP.DLL KERNEL32.DLL ANOTHER.DLL SafeSEH ON SafeSEH OFF Обходим защиту в win32
24 © , Digital Security Обходим SafeSEH 24 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Обходим защиту в win32
25 © , Digital Security Обходим SafeSEH 25 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Обходим защиту в win32
26 © , Digital Security Обходим SafeSEH 26 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Шеллкод jmp Обходим защиту в win32
27 © , Digital Security SEHOP 2727 NextSEH1 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF обработчик1 обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 SafeSEH table: Цепочка SEH : SEH ntdll!FinalExceptionHandler Обходим защиту в win32
28 SEH ntdll!FinalExceptionHandler © , Digital Security SEHOP 28 [6] [7] БуферnsCRETseh Evil2 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF pop/pop/ret обработчик2 обработчик3 обработчик4 Цепочка нарушена //SafeSEH bypass JMP/CALL Шеллкод Обходим защиту в win32
29 © , Digital Security SEHOP 29 Лень рисовать, поэтому сперто у Stefan Le Berre и Damien Cauquil Обходим защиту в win32
30 © , Digital Security DEP 30 На примере Heap Spray: Доступ RW- Обходим защиту в win32
31 © , Digital Security Обходим DEP – retn2libc 31 Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory Обходим защиту в win32
32 Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 32 Permanent DEP / AlwaysOn Контрмеры: Обходим защиту в win32
33 Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 33 ASLR Permanent DEP / AlwaysOn Контрмеры: Обходим защиту в win32
34 © , Digital Security ASLR 34 KERNEL32.DLL NTDLL.DLL APP2.DLL APP.DLL KERNEL32.DLL NTDLL.DLL APP2.DLL APP.DLL КАРТА ПАМЯТИ ПРОЦЕССА ДО ПЕРЕЗАГРУЗКИ КАРТА ПАМЯТИ ПРОЦЕССА ПОСЛЕ ПЕРЕЗАГРУЗКИ По какому адресу искать VirtualProtect ? Обходим защиту в win32
35 Используем модули без поддержки ASLR static base address – call functions from modules with unknown address Используем уязвимости приводящие к раскрытию на pwn2own взломал IE8 с помощью ДВУХ дырок Перезаписываем только младшие адреса Метод грубой силы PHP 6.0 DEV эксплойт перебирал старшие байты для VirtualProtect (0xXXXXSSSS).XXXX – то что перебиралось, SSSS – константа для определенной версии dll. Spraying (чаще всего для браузеров) javascript Heap Spray java heap spray (DEP автоматически).NET JIT Spray (DEP автоматически) © , Digital Security Обходим ASLR 35 Обходим защиту в win32
36 Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 36 Для всех этих функций нужно подготовить параметры в стеке При этом надо избегать нулевых байтов и иного не-ASCII байтов Ещё 5 копеек: ASLR Permanent DEP / AlwaysOn Контрмеры: bypassed Обходим защиту в win32
37 © , Digital Security Return-Oriented Programming 37 CPU STACKCODE MOV EAX, 0x10 POP EDI MOV [EDI], EAX 0x7C010102: RETN 0x8C010103: POP EDI 0x8C010104: RETN 0x8C x0A0A0A0A 0x8C xFFFFFFF0 0x8C x8C ROPROP 0x8C020105: POP EAX 0x8C020106: RETN 0x8C030107: NEG EAX 0x8C030108: RETN 0x8C040109: MOV [EDI], EAX 0x8C05010B: RETN MOV EAX, 0x10 Переполнение: БуферЧто-тоRETROP «Записать по адресу 0x0A0A0A0A значение 0x10» Обходим защиту в win32
38 © , Digital Security ROP 3838 Можем изменить стековый фрейм CVE STACK MOV EAX, 0x10 ECX=0x0C0C0C0C REGS MOV [EDI], EAX 0x : CALL [ECX+C] 0x F: MOV EAX,[ECX+34] PUSH [ECX+24] CALL [EAX+8] 0x0C0C0C0C 0x070048EF: XCHG EAX, ESP RETN 0x xCCCCCCCC 0x070048EF 0x F MOV EAX, 0x10 0x xCCCCCCCC 0x070048EF 0x F... 0x0C0C0C0C 0x : POP ECX POP ECX MOV [EAX+C],1 POP ESI POP EBX RETN НЕ КОНТРОЛИРУЕМ // +0x34 Обходим защиту в win32
39 © , Digital Security Пример ROP 39 Классический эксплойт для ProSSHD – не работает против Win7 Добавим в него ROP для ASLR/DEP обхода: Модули ProSSHD не поддерживают ASLR В этих модулях есть вызовы VP из системных библиотек (уже с ASLR) Готовим параметры для VP без нулевых байтов Вызываем VP из ASLR модуля по адресу из НЕ ASLR модуля Делаем стек исполняемым Вовремя выпущенная тулза - pvefindaddr.py для ImmDbg Plugin авторства Peter Van Eeckhoutte: !pvefindaddr nonaslr !pvefindaddr rop * Абсолютно бесполезный эксплойт, так как post-auth и привилегии не повышает * Обходим защиту в win32
40 4040 © , Digital Security XCHG EAX, ESP
41 © , Digital Security Итого 4141 ТехнологияОСЭффективность Stack cookies XP/2000 Vista 7/2008 Поддержка при компиляции Энтропия SafeSEH XP/2000 Vista 7/2008 Поддержка при компиляции Все модули процесса SEHOP Vista 7/2008 Поддержка при компиляции В связке с ASLR DEP XP/2000 Vista 7/2008 Permanent DEP В связке с ASLR ASLR Vista 7/2008 Поддержка при компиляции Все модули процесса Обходим защиту в win32
42 4242 © , Digital Security XCHG EAX, ESP
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.