51

Методы поиска уязвимостей

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Методы поиска уязвимостей
Page 2: Методы поиска уязвимостей

0x0x11 .классификация .классификация методовметодов

Page 3: Методы поиска уязвимостей

Классификация методовКлассификация методов

• Белый ящик• Черный/серый ящик

• Динамические• Статические

• Ручные• Полуавтоматические

Page 4: Методы поиска уязвимостей

Классификация методовКлассификация методов

•Встраивание бэкдора

Page 5: Методы поиска уязвимостей

0x0x22 .белый ящик.белый ящик

Page 6: Методы поиска уязвимостей

Экспертный анализ исходного Экспертный анализ исходного кодакода

char str[10];scanf(“%s”, str);

Page 7: Методы поиска уязвимостей

Реверс-инжинирингРеверс-инжиниринг

Анализ дизассемблированого кода

Page 8: Методы поиска уязвимостей

Автоматический анализАвтоматический анализ

•Предупреждения компилятора•lint•Cppcheck•CodeSecure•…

Page 9: Методы поиска уязвимостей

0x0x33 .черный ящик.черный ящик

Page 10: Методы поиска уязвимостей

Применим кПрименим к

• ПО с закрытым исходным кодом• Сетевым приложениям• Драйверам• Интерфейсам (RPC, ActiveX)• …

Page 11: Методы поиска уязвимостей

СтратегияСтратегия

•Давать всякие штуки на вход•Смотреть, что получается на выходе•Смотреть, что происходит с приложением в

процессе•Похоже на тестирование

Page 12: Методы поиска уязвимостей

Анализ хорошо известных Анализ хорошо известных слабых местслабых мест

• SQL Injection: sqlmap, HackBar, …•XSS: XSS Me, …• …

Page 13: Методы поиска уязвимостей

0x0x44 .фаззинг.фаззинг

Page 14: Методы поиска уязвимостей

ФаззингФаззинг

«Взлохмачивание» входных данныхПодача на вход испорченных, случайных или

мутированных по определенным правилам данных

Page 15: Методы поиска уязвимостей

ФаззингФаззинг

Page 16: Методы поиска уязвимостей

Этапы фаззингаЭтапы фаззинга

•Анализ приложения, разработка или выбор фаззера• Генерация данных•Обработка результатов

Page 17: Методы поиска уязвимостей

Хороший фаззингХороший фаззинг

•Обеспечивает покрытие кода приложения•Регистрирует все аномалии в поведении

программы•Дешевый

Page 18: Методы поиска уязвимостей

Покрытие кодаПокрытие кода

•Покрытие операторов•Покрытие условий•Покрытие путей

Page 19: Методы поиска уязвимостей

Регистрация поведенияРегистрация поведения

•Выходные данные•Падения•Исключения•Содержание памяти

Page 20: Методы поиска уязвимостей

Генерация данныхГенерация данных

•По шаблонам•На основе имеющихся данных

Page 21: Методы поиска уязвимостей

Регистрация поведения Регистрация поведения программыпрограммы

•Выходные данные•Отладчик•Инструментирование кода

Page 22: Методы поиска уязвимостей

0x0x55 .генерация по .генерация по образцуобразцу

Page 23: Методы поиска уязвимостей

Генерация по образцуГенерация по образцу

•Один или несколько примеров входных данных•Мутатор, который делает новые файлы на базе

примеров с помощью рандомизации, смешивания и т.п.

Page 24: Методы поиска уязвимостей

МетодыМетоды

• Переворачивание битов • Переворачивание байтов• Арифметические операции• Подстановка волшебных числа, например, 0,1,-

1,MAXINT, MININT• Перемешивание, дублирование, вырезание, …• Сплайсинг двух и более файлов

Page 25: Методы поиска уязвимостей

Сплайсинг

Page 26: Методы поиска уязвимостей

ЭффективностьЭффективность

Фаззер: afl, цель: jpeg• Переворачивание битов: 70-80 путей• Переворачивание байтов: 30 путей• Арифметические операции: 5 путей• Подстановка волшебных чисел: 10 путей• Перемешивание, …: 100 путей• Сплайсинг двух и более файлов: 40 путей

Page 27: Методы поиска уязвимостей

radamsaradamsa

 $ echo "1 + (2 + (3 + 4))" | radamsa --seed 12 -n 4

 1 + (2 + (2 + (3 + 4?)

 1 + (2 + (3 +?4))

 18446744073709551615 + 4)))

 1 + (2 + (3 + 170141183460469231731687303715884105727))

Page 28: Методы поиска уязвимостей

0x0x66 .генерация по .генерация по шаблонамшаблонам

Page 29: Методы поиска уязвимостей

Генерация по шаблонамГенерация по шаблонам

•Ограниченное описание грамматики и семантики входных данных• Генерация входных данных на основе описания•Сложно, но более эффективно•Необходима для форматов с контрольными

суммами

Page 30: Методы поиска уязвимостей

PeachPeach

•XML-описание данных и связей между ними• Генерация входных данных на основе описания

Page 31: Методы поиска уязвимостей

PeachPeach

<DataModel name="HttpRequest">

<Block name="RequestLine">

<String name="Method"/>

<String value=" " type="char"/>

<String name="RequestUri"/>

<String value=" "/>

<String name="HttpVersion"/>

<String value="\r\n"/>

</Block>

...

</DataModel>

Page 32: Методы поиска уязвимостей

0x0x77 .анализ поведения.анализ поведения

Page 33: Методы поиска уязвимостей

Выходные данныеВыходные данные

• 500 Internal server error• Данные таблицы USERS• …

Page 34: Методы поиска уязвимостей

ОтладчикОтладчик

• windbg• Исключения• Crash dump• !exploitable• …

Page 35: Методы поиска уязвимостей

Инструментирование машинного Инструментирование машинного кодакода

• Встраивание своих инструкций в программу• Анализ пути выполнения• Образы памяти (стека)• In-memory fuzzing• …

Page 36: Методы поиска уязвимостей

0x0x8 .инструментирование8 .инструментирование

Page 37: Методы поиска уязвимостей

УтилитыУтилиты

• PIN• SAGE• american fuzzy lop• Valgrind

Page 38: Методы поиска уязвимостей

Анализ пути выполненияАнализ пути выполнения

•Позволяет оценить эффективность фаззинга

Page 39: Методы поиска уязвимостей

Сохранение образов памятиСохранение образов памяти

•Позволяет обнаружить перезапись стека•Позволяет обнаружить перезапись исполнимых

кусков памяти

Page 40: Методы поиска уязвимостей

In-memory fuzzingIn-memory fuzzing

•Юнит-тесты по живому•Позволяет сильно удешевить фаззинг

Page 41: Методы поиска уязвимостей

00x9 x9 .проблемы.проблемы

Page 42: Методы поиска уязвимостей

РазработчикиРазработчики

•Используют юнит-тесты•Используют фаззеры

Page 43: Методы поиска уязвимостей

КонкурентыКонкуренты

• Everybody fuzz

Page 44: Методы поиска уязвимостей

00x9 x9 .решения.решения

Page 45: Методы поиска уязвимостей

Фаззить старый кодФаззить старый код

•OLE•COM•Части ядра•Старые форматы•Старые библиотеки

Page 46: Методы поиска уязвимостей

Фаззить редкий кодФаззить редкий код

• Редкие объекты word• Редкие функции• Редкие программы

Page 47: Методы поиска уязвимостей

Фаззить по-умномуФаззить по-умному

•Анализ путей выполнения•Анализ связи входных данных и параметров

функций•Анализ предикатов пути

Page 48: Методы поиска уязвимостей

AvalancheAvalanche

•И. К. Исаев, Д. В. Сидоров, ИСП РАН•Анализ и определение граничных значений во

входных файлах

Page 49: Методы поиска уязвимостей

00xA xA .что дальше.что дальше

Page 50: Методы поиска уязвимостей

ЛекцииЛекции

•Инструментарий для фаззинга•Инструментарий программиста вообще•Другие темы практической ИБ•Приглашенные гости

Page 51: Методы поиска уязвимостей

ПрактикаПрактика

• Фаззинг тренировочных файлов с помощью radamsa• Эксплуатация тренировочных файлов• Повторение известной уязвимости с помощью Peach• Анализ ранее неизвестной ошибки на возможность

эксплуатации (у нас одна есть!)• Фаззинг серьезных приложений (Word, Reader) с помощью

Peach• Анализ найденных ошибок