ݺߣ

ݺߣShare a Scribd company logo
Методы поиска уязвимостей в программах
00xx11 ..ккллаассссииффииккаацциияя 
ммееттооддоовв
ККллаассссииффииккаацциияя ммееттооддоовв 
• Белый ящик 
• Черный/серый ящик 
• Динамические 
• Статические 
• Ручные 
• Полуавтоматические
ККллаассссииффииккаацциияя ммееттооддоовв 
• Встраивание бэкдора
00xx22 ..ббееллыыйй яящщиикк
ЭЭккссппееррттнныыйй ааннааллиизз ииссххооддннооггоо 
ккооддаа 
char str[10]; 
scanf(“%s”, str);
РРееввееррсс--ииннжжииннииррииннгг 
Анализ дизассемблированого 
кода
ААввттооммааттииччеессккиийй ааннааллиизз 
•Предупреждения компилятора 
•lint 
•Cppcheck 
•CodeSecure 
•…
00xx33 ..ччееррнныыйй яящщиикк
ППррииммеенниимм кк 
• ПО с закрытым исходным кодом 
• Сетевым приложениям 
• Драйверам 
• Интерфейсам (RPC, ActiveX) 
• …
ССттррааттееггиияя 
•Давать всякие штуки на вход 
•Смотреть, что получается на выходе 
•Смотреть, что происходит с приложением в 
процессе 
•Похоже на тестирование
ААннааллиизз ххоорроошшоо ииззввеессттнныыхх 
ссллааббыыхх ммеесстт 
• SQL Injection: sqlmap, HackBar, … 
• XSS: XSS Me, … 
• …
00xx44 ..ффааззззииннгг
ФФааззззииннгг 
«Взлохмачивание» входных данных 
Подача на вход испорченных, случайных или 
мутированных по определенным правилам 
данных
ФФааззззииннгг
ЭЭттааппыы ффааззззииннггаа 
• Анализ приложения, разработка или выбор 
фаззера 
• Генерация данных 
•Обработка результатов
ХХоорроошшиийй ффааззззииннгг 
•Обеспечивает покрытие кода приложения 
• Регистрирует все аномалии в поведении 
программы 
•Дешевый
ППооккррыыттииее ккооддаа 
•Покрытие операторов 
•Покрытие условий 
•Покрытие путей
РРееггииссттрраацциияя ппооввееддеенниияя 
• Выходные данные 
•Падения 
•Исключения 
• Содержание памяти
ГГееннеерраацциияя ддаанннныыхх 
•По шаблонам 
•На основе имеющихся данных
РРееггииссттрраацциияя ппооввееддеенниияя 
ппррооггррааммммыы 
• Выходные данные 
•Отладчик 
•Инструментирование кода
00xx55 ..ггееннеерраацциияя ппоо 
ооббррааззццуу
ГГееннеерраацциияя ппоо ооббррааззццуу 
•Один или несколько примеров входных данных 
•Мутатор, который делает новые файлы на базе 
примеров с помощью рандомизации, смешивания 
и т.п.
ММееттооддыы 
• Переворачивание битов 
• Переворачивание байтов 
• Арифметические операции 
• Подстановка волшебных числа, например, 0,1,- 
1,MAXINT, MININT 
• Перемешивание, дублирование, вырезание, … 
• Сплайсинг двух и более файлов
Сплайсинг
ЭЭффффееккттииввннооссттьь 
Фаззер: afl, цель: jpeg 
• Переворачивание битов: 70-80 путей 
• Переворачивание байтов: 30 путей 
• Арифметические операции: 5 путей 
• Подстановка волшебных чисел: 10 путей 
• Перемешивание, …: 100 путей 
• Сплайсинг двух и более файлов: 40 путей
rraaddaammssaa 
$ 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))
00xx66 ..ггееннеерраацциияя ппоо 
шшааббллооннаамм
ГГееннеерраацциияя ппоо шшааббллооннаамм 
•Ограниченное описание грамматики и семантики 
входных данных 
• Генерация входных данных на основе описания 
• Сложно, но более эффективно 
•Необходима для форматов с контрольными 
суммами
PPeeaacchh 
•XML-описание данных и связей между ними 
• Генерация входных данных на основе описания
PPeeaacchh 
<DataModel name="HttpRequest"> 
<Block name="RequestLine"> 
<String name="Method"/> 
<String value=" " type="char"/> 
<String name="RequestUri"/> 
<String value=" "/> 
<String name="HttpVersion"/> 
<String value="rn"/> 
</Block> 
... 
</DataModel>
00xx77 ..ааннааллиизз ппооввееддеенниияя
ВВыыххоодднныыее ддаанннныыее 
• 500 Internal server error 
• Данные таблицы USERS 
• …
ООттллааддччиикк 
• windbg 
• Исключения 
• Crash dump 
• !exploitable 
• …
ИИннссттррууммееннттииррооввааннииее ммаашшииннннооггоо 
ккооддаа 
• Встраивание своих инструкций в программу 
• Анализ пути выполнения 
• Образы памяти (стека) 
• In-memory fuzzing 
• …
00xx88 ..ииннссттррууммееннттииррооввааннииее
УУттииллииттыы 
• PIN 
• SAGE 
• american fuzzy lop 
• Valgrind
ААннааллиизз ппууттии ввыыппооллннеенниияя 
•Позволяет оценить эффективность фаззинга
ССооххррааннееннииее ооббррааззоовв ппааммяяттии 
•Позволяет обнаружить перезапись стека 
•Позволяет обнаружить перезапись исполнимых 
кусков памяти
IInn--mmeemmoorryy ffuuzzzziinngg 
•Юнит-тесты по живому 
•Позволяет сильно удешевить фаззинг
00xx99 ..ппррооббллееммыы
РРааззррааббооттччииккии 
•Используют юнит-тесты 
•Используют фаззеры
ККооннккууррееннттыы 
• Everybody fuzz
00xx99 ..рреешшеенниияя
ФФааззззииттьь ссттааррыыйй ккоодд 
•OLE 
• COM 
• Части ядра 
• Старые форматы 
• Старые библиотеки
ФФааззззииттьь ррееддккиийй ккоодд 
• Редкие объекты word 
• Редкие функции 
• Редкие программы
ФФааззззииттьь ппоо--ууммннооммуу 
• Анализ путей выполнения 
• Анализ связи входных данных и параметров 
функций 
• Анализ предикатов пути
AAvvaallaanncchhee 
•И. К. Исаев, Д. В. Сидоров, ИСП РАН 
• Анализ и определение граничных значений во 
входных файлах
00xxAA ..ччттоо ддааллььшшее
ЛЛееккццииии 
•Инструментарий для фаззинга 
•Инструментарий программиста вообще 
•Другие темы практической ИБ 
•Приглашенные гости
ППррааккттииккаа 
• Фаззинг тренировочных файлов с помощью radamsa 
• Эксплуатация тренировочных файлов 
• Повторение известной уязвимости с помощью Peach 
• Анализ ранее неизвестной ошибки на возможность 
эксплуатации (у нас одна есть!) 
• Фаззинг серьезных приложений (Word, Reader) с помощью 
Peach 
• Анализ найденных ошибок

More Related Content

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