Обход защитных механизмов в ОС Windows © 20022010, Digital Security Алексей Синцов Digital Security CHAOS CONSTRUCTIONS 10.

Презентация:



Advertisements
Похожие презентации
Типовые расчёты Растворы
Advertisements


Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Школьная форма Презентация для родительского собрания.

Michael Jackson
Маршрутный лист «Числа до 100» ? ? ?
О СИТУАЦИИ НА РЫНКЕ ТРУДА И РЕАЛИЗАЦИИ РЕГИОНАЛЬНЫХ ПРОГРАММ ПО СНИЖЕНИЮ НАПРЯЖЕННОСТИ НА РЫНКЕ ТРУДА СУБЪЕКТОВ СЕВЕРО-КАВКАЗСКОГО ФЕДЕРАЛЬНОГО ОКРУГА.
Ф. Т. Алескеров, Л. Г. Егорова НИУ ВШЭ VI Московская международная конференция по исследованию операций (ORM2010) Москва, октября 2010 Так ли уж.

Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Непараметрические критерии согласия Критерии Купера и Ватсона Тел
Тренировочное тестирование-2008 Ответы к заданиям КИМ Часть I.
1 Трудные случаи таблицы умножения и деления 2 Приношу свои извинения, но придётся начать заново!
1. Определить последовательность проезда перекрестка
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
ЗРИТЕЛЬНЫЕ ИЛЛЮЗИИ ОПТИЧЕСКИЕ ОБМАНЫ 1. Зрительная иллюзия – не соответствующее действительности представление видимого явления или предмета из-за особенностей.
Транксрипт:

Обход защитных механизмов в ОС Windows © , Digital Security Алексей Синцов Digital Security CHAOS CONSTRUCTIONS 10

#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 © , Digital Security год сложность Сперто у Dino Dai Zovi Обходим защиту в win32 Поиск уязвимостей Разработка эксплойта

Типовые проблемы 4 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Обходим защиту в win32

Контрмеры 5 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Flink Куча Ошибка формата строки RET SEH Стек Куча Ошибки памяти ( например Use After Free) Bad pointer Куча Stack cookies Save unlinking Heap cookies Обходим защиту в win32

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

Ситуация на © , 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

В нашей программе 78 © , Digital Security ОшибкаВлияние Нагрузка Переполнение буфера в стеке RET SEH Стек Куча Переполнение буфера в куче Ошибка формата строки Ошибки памяти ( например Use After Free) Stack cookies SEH handler validation DEP ASLR SEH chain validation Обходим защиту в win32

Классика жанра - BoF 8989 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Обходим защиту в win32

10 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32

11 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32

12 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32

13 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32

14 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Классика жанра - BoF Обходим защиту в win32

15 © , Digital Security Стек до переполнения: БуферЧто-тоCRET Переполнение: БуферЧто-тоCRET Перезаписали метку Классика жанра - BoF Обходим защиту в win32

© , Digital Security Обходим 16 Пути обхода: Слабая энтропия / статичные cookie Перезапись cookie в секции.data mov ecx, edx CRASH Перезапись объектов и их указателей (vtable) call [ecx] CRASH Перезапись SEH и создание исключительной ситуации Обходим защиту в win32

17 © , Digital Security Стек до переполнения: БуферЧто-тоCRET SEH? Next SEHSEH Код, который будет выполнен, если что-то пошло не так Обходим защиту в win32

18 © , Digital Security Стек до переполнения: БуферnsCRET Переполнение: БуферnsCRETseh Перезапись SEH Перезаписали указатель seh Обходим защиту в win32

© , 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

SEH ntdll!FinalExceptionHandler © , Digital Security SEH 20 Next SEHSEH Next SEHSEH Next SEHSEH Next SEHSEH 0xFFFFFFFF обработчик Обходим защиту в win32

SEH ntdll!FinalExceptionHandler © , Digital Security SafeSEH 21 NextSEH1 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF обработчик1 обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 SafeSEH table: Цепочка SEH : Обходим защиту в win32

SEH ntdll!FinalExceptionHandler © , Digital Security SafeSEH 22 [6] [7] БуферnsCRETseh Evil1Evil2 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF шеллкод обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 Таблица SafeSEH: Такого дескриптора в таблице нету Обходим защиту в win32

© , Digital Security Кое-что о SafeSEH 23 Каждый модуль должен поддерживать SafeSEH У каждого такого модуля – своя таблица Обратная совместимость с модулями без SafeSEH APP.EXE APP.DLL KERNEL32.DLL ANOTHER.DLL SafeSEH ON SafeSEH OFF Обходим защиту в win32

© , Digital Security Обходим SafeSEH 24 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Обходим защиту в win32

© , Digital Security Обходим SafeSEH 25 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Обходим защиту в win32

© , Digital Security Обходим SafeSEH 26 [6] [7] БуферnsCRETseh // Стек // Модуль с поддержкой // SafeSEH pop reg retn //.text секция // модуля без поддержки // SafeSEH Шеллкод jmp Обходим защиту в win32

© , Digital Security SEHOP 2727 NextSEH1 NextSEH2 NextSEH3 NextSEH4 0xFFFFFFFF обработчик1 обработчик2 обработчик3 обработчик4 SEH1 SEH2 SEH3 SEH4 SafeSEH table: Цепочка SEH : SEH ntdll!FinalExceptionHandler Обходим защиту в win32

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

© , Digital Security SEHOP 29 Лень рисовать, поэтому сперто у Stefan Le Berre и Damien Cauquil Обходим защиту в win32

© , Digital Security DEP 30 На примере Heap Spray: Доступ RW- Обходим защиту в win32

© , Digital Security Обходим DEP – retn2libc 31 Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory Обходим защиту в win32

Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 32 Permanent DEP / AlwaysOn Контрмеры: Обходим защиту в win32

Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 33 ASLR Permanent DEP / AlwaysOn Контрмеры: Обходим защиту в win32

© , Digital Security ASLR 34 KERNEL32.DLL NTDLL.DLL APP2.DLL APP.DLL KERNEL32.DLL NTDLL.DLL APP2.DLL APP.DLL КАРТА ПАМЯТИ ПРОЦЕССА ДО ПЕРЕЗАГРУЗКИ КАРТА ПАМЯТИ ПРОЦЕССА ПОСЛЕ ПЕРЕЗАГРУЗКИ По какому адресу искать VirtualProtect ? Обходим защиту в win32

Используем модули без поддержки 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

Используем код отключения DEP: NtSetinformationProcess SetProcessDEPPolicy Работаем с исполняемой памятью: VirtualAlloc and memcpy VirtualProtect Копируем шеллкод в исполняемый поток: WriteProcessMemory © , Digital Security DEP bypass – retn2libc 36 Для всех этих функций нужно подготовить параметры в стеке При этом надо избегать нулевых байтов и иного не-ASCII байтов Ещё 5 копеек: ASLR Permanent DEP / AlwaysOn Контрмеры: bypassed Обходим защиту в win32

© , 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

© , 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

© , 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

4040 © , Digital Security XCHG EAX, ESP

© , 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

4242 © , Digital Security XCHG EAX, ESP