Продвинутый фаззинг: Хитрые трюки поиска уязвимостей. Мы уже много говорили о том, как написать эксплойт, обойти разные технологии от Microsoft, которые мешают нам эксплуатировать ту или иную дыру. Но сегодня мы будем говорить про то, как искать эти самые дыры. На страницах журнала ты уже не раз встречал термин «фаззинг».
Кроме того, мы неоднократно раскрывали суть и значение этой техники. Сегодня мы рассмотрим более прогрессивные виды фаззинга. Напомню, что этим модным термином принято называть метод тестирования ПО, при котором входные данные (данные могут быть в файле, в сетевом пакете) формируются специально- случайным образом, то есть, фактически, стресс- тест. Если в результате обработки таких данных произошла ошибка, и процесс аварийно завершил свою работу, то можно говорить о том, что процесс фаззинга нашел «что- то».
МАСАЛОВИЧ Андрей Игоревич Консорциум «Инфорус» E-mail: am@inforus >>. Комплект: Avalanche 2.5 + руководство по экспресс-аудиту. SiteSputnik, Avalanche 2.5 Р”Р
Дальше это «что- то» анализирует человек и делает вывод о том, что найденное состояние процесса при данном наборе входных данных можно использовать со злым умыслом, то есть исполнить произвольный код. Сами данные могут генерироваться по известному формату, то есть если нам известна спецификация формата, мы можем заранее подготовить кучу входных данных, которые соответствуют формату (структура файла, сетевой протокол на транспортном уровне), но содержат «случайные значения». Например, нам известно, что в какой- то части формата данных идет длина, под которую выделено два байта, а затем содержимое указанной длины: +- -- -+- -- -- -- -+. На том же примере: +- -- -+- -- -- -- -+.
Если мы говорим об известном формате, то исследователь подготавливает описание этого формата (что может быть очень трудоемко), по которому могут генерироваться данные. Далее, чем больше вариантов будет создано, тем больше вероятность, что мы что- то найдем. В случае, если мы используем мутирующие алгоритмы, важно иметь большое количество «образцов», которые мы будем мутировать и «подсовывать» исследуемому процессу. Очевидно, что мутация – более «дешевое» средство, а генерация – более «полное».
Avalanche – возьмите под свой контроль отважного лыжника и спустите его со склона горы. Скачать игру Avalanche.
У обоих подходов есть свои преимущества и недостатки и, очевидно, что можно как- то усилить эффект (скорость и/или полноту) фаззинга, тем самым повысив показатели падений процесса. Из количества «падений» затем выбираются уникальные, то есть если при трех наборах данных процесс упал по одной и той же «причине», это считается одним уникальным падением. Чем больше число уникальных падений, тем эффективнее фаззер.
More profit. Казалось бы, простая технология, но исследователи хотят найти большее количество уникальных и эксплуатируемых состояний процесса, поэтому они придумывают новые финтифлюшки и алгоритмы. Так, уже в 2. 00.
Шаун Эмблитон (Shawn Embleton), Шерри Спаркс (Sherri Sparks) и Райн Каннингхэм (Ryan Cunningham) задались вопросами увеличения производительности. Они справедливо отметили преимущества фаззинга, но и показали его недостатки (отсутствие метрик, неопределенное время фаззинга и т. Строил граф (бинарным анализом), от функции получения входных данных, до, например, опасной API (strcpy) и генерировал новые входные данные, смотря при этом, как обходится граф и идет ли он до цели. Задача – откинуть заранее тупиковые наборы данных, которые не приведут к нужному пути. При этом используется генетический алгоритм для генерации новых сэмплов (учитываются предыдущие пробеги и их результат). Так или иначе, ребята, родившие эти идеи и реализовавшие свой проект, уже работают в АНБ : ).
Более подробно с их идеями можешь ознакомиться на blackhat. BH- US- 0. 6- Embleton.
В директории установки Avalanche 2.5 в папке database вы найдете SQL скрипт avalanche.sql создающий базу данных програм. Конкурентная разведка в Интернете. Avalanche 2.5 персональная версия. Avalanche 2.5 для малых фирм- 10 лицензий, установка, обучение, базовая настройка.
Файл Avalanche 0.8a бесплатно размещен на Uptodown. Пользователи, скачавшие Avalanche, также скачивали. На этой странице Вы можете бесплатно скачать песню Avalanch в формате mp3, а также слушать ее онлайн. Зарегистрированные пользователи получают возможность скачивать программы с более высокой.
In- Memory Fuzzing. Вернемся к ситуации, когда входной формат разбирать очень лень. Как проводить фаззинг без знания формата и без игры в мутацию существующих данных?
Ответ оказался прост – фаззить прямо в процессе. То есть, программа – это набор функций, при получении выходных данных эти функции вызываются, так или иначе обрабатывая входные данные, поэтому можно организовать вызов этих функций напрямую с заранее сгенерированными данными.
Таким образом можно сэкономить время на разборе формата и подготовке данных согласно этому формату. Кроме того, это может повысить и скорость самого процесса поиска дыр; так, например, мы обходим ограничения, которые могут быть в программе (например, при сетевом фаззинге мы ограничены скоростью обработки подключения, количеству одновременно разрешенных соединений и т.
А если будем перебирать данные уже в самом процессе, обойдя accept, recv, то сможем сразу фаззить нужные нам функции. Поможет нам в этом релиз от Corelan. Security Team, который можно скачать отсюда – redmine. На самом деле этого не достаточно, еще нужны Pydasm (therning.
Paimei (openrce. org/downloads/details/2. Pai. Mei). Естественно, нужен интерпретатор Питона и Immunity Debuger (debugger. Кстати, с дистрибом дебагера идет и Питон, так что качать интерпретатор отдельно не надо) c плагином pvefindaddr. Как ты уже понял, все будет не так просто, все это шаманство еще надо собрать в следующей последовательности: Ставим Иммунити Дебагер с Питоном; Качаем pvefindaddr, кидаем в папку Py. Command в (директории дебагера); Качаем и инсталим pydasm для Питона 2. Качаем Пай. Мэй, распаковываем, идем в папку installers, запускаем установщик; Удаляем из папки питона Пей.
Меевский pydasm – Python. Libsite- packagespydbgpydasm. Теперь Py. Dbg готов к работе с Питоном 2. После этого можно пробовать что- нибудь фаззить. Но для начала надо понять, что именно, а точнее, какие функции процесса работают непосредственно с данными.
Напишем простую программку, которая берет из файла параметры через символ- разделитель и копирует в память. Программа будет брать три параметра, каждый из которых обрабатывается отдельной функцией. Уязвимость будет во второй функции – переполнение буфера. Тогда- то нам и поможет работа прямо в памяти. Подготовим входные параметры в файле input. Наша уязвимая программа (vuln. ОК. Начнем искать ошибку в программе с помощью фаззинга.
Первым делом получим список функций модуля. Это может сделать pvefindadr. Аттачимся дебагером к процессу, выбираем наш плагин и задаем «functions - o - m vuln.
После этого в папке дебагера появится файл functions. В этом файле будет полный список адресов функций нашей программы. Берем этот файлик и копируем рядом с Trace. Делаем деаттач дебагером, после чего запускаем Trace. Ищем в списке наш vuln. В качестве данных – «func».
После этого повторяем чтение файла в приложении. Трейсер отловит те функции из functions. Кроме того, он запомнит и точку выхода (RET), а также сдвиг в стеке до параметра (запомни, что первый параметр, как правило – ESP+4, второй, если есть – ESP+8). Сохранит он все это в текстовых файлах new. После этого по CTRL+C выходим из трейсера, и можно начинать фаззить : ). Прежде всего выберем из flow. Формат файла получается таким: 0x.
ESP+4. 0x. 00. 40. ESP+4. 0x. 00. 40. ESP+4. Запускаем фаззер In. Mеmory. Fuzzer. py и опять повторяем аттач к vuln. Выполнив еще несколько раз чтение входных данных, фаззер каждый раз, как встретит функцию из списка, начнет прямо в памяти менять входной параметр и смотреть, дошла ли она до точки выхода (адреса возврата) или свалилась в исключительную ситуацию (падение). В случае падения создается папка «crashbin» куда скидывается инфа о падении.
В итоге прогона видим, что мы перезаписали адрес возврата во второй функции (см. Конечно, данный экземпляр фаззера (In. Memory. Fuzz) несовершенен, но это лишь начало – в любом случае ресерчер делает фаззер для себя сам, используя существующие проекты и наработки в соответствии с задачами, которые он решает. Приятно, что фаззер может делать выводы об ошибке – на скриншоте видно, что во второй функции (0.
На глаз видно, что это реализация strcpy – побайтовое копирование строки, пока не встретится нулевой байт. Падение произошло, когда был достигнут конец стека. В этом случае управление перейдет на обработчик в исключительной ситуации (фаззер отметил, что десркиптор захвачен нами, так как сравнил значение указателя с данными, которыми он подменял параметр уязвимой функции). Кстати, таким образом мы обойдем и защиту от переполнения буфера (vuln. GS), ведь security cookie проверяется непосредственно перед выходом из функции, а мы перехватили управление задолго до этого, в процессе копирования строки.
Статистика сэмплов при фаззинге. Для сложного формата файла: мутирующим фаззером – из 3*1.
Для простых форматов файлов: мутирующим фаззером – из 1*1. Пример простого фаззинга можно найти на http: //sites. Там продемонстрировано, как с помощью очень простых мутирующих фаззеров добиться очень хороших результатов. Теперь рассмотрим виды фаззеров, с помощью которых можно добиться практического успеха. Начнем со «стариков».
Sulley и peach. Это очень мощные фаззеры с возможностью описывать протокол для фаззинга. Например, для фаззинга FTP нужен конфиг в 3. Для более сложных протоколов конфиг будет огромным, и его составление будет очень трудоемким. Очень актуальное решение предлагает проект hotfuzz (hotfuzz.
Схема его работы на первый взгляд громоздкая, но на самом деле очень простая. Hotfuzz основан на peach и является его оберткой.
Устанавливается без проблем – все модули идут в одном пакете. Его главная особенность состоит в том, что описание протокола, который нужно фаззить, делается не вручную, составляя конфигурационный файл, а с использованием специальной библиотеки tm. Эта библиотека, используя дамп трафика, формирует дерево – структуру, описывающую протокол. И нам необходимо лишь выбрать поля, которые мы хотим фаззить, и! Это существенно упрощает работу – не нужно тратить много времени на составление конфигурационного файла, как это делалось при эксплуатации peach (демонстрационное видео смотри на DVD).
Важно помнить! Для анализа падений приложения можно использовать разные средства. Чтобы автоматизировать этот процесс, я, например, использую winappdbg. Я написал простой скрипт, который дергает тестированное приложение в среде winappdbg и в автоматическом режиме может определить эксплуатируемость уязвимости. Самые умные: avalanche и klee.
Рассмотрим avalanche (http: //code.