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

Post on 16-Jun-2015

149 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сплайсинг

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

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

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))

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

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

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

суммами

PeachPeach

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

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>

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

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

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

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

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

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

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

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

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

• PIN• SAGE• american fuzzy lop• Valgrind

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

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

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

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

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

In-memory fuzzingIn-memory fuzzing

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

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

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

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

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

• Everybody fuzz

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

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

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

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

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

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

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

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

AvalancheAvalanche

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

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

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

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

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

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

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

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

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

top related