Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Основы поиска уязвимостей в сетевом ПО
 
В очередной раз читал раздел "Уязвимости" и опять меня начал мучать вопрос
А как сии уязвимости ищут в сетевом ПО?

Squid
"Уязвимость существует из-за ошибки при обработке специально сформированного номера версии HTTP. Удаленный клиент может с помощью специально сформированного запроса вызвать отказ в обслуживании приложения."

Или так же свеженькая уязвимости в qip....
"Уязвимость существует из-за ошибки при обработке ICQ сообщений. Удаленный пользователь может с помощью специально сформированного ICQ сообщения в RTF формате заставить приложение потреблять все доступные ресурсы процессора."

Типичноe описание уязвимости..
Более менее ясно с open source посидел с полгода надо кодом авось что-нибуть и найдешь :))
Но дык программы то не все в исходниках можно найти...
Как в этом случае действую товарищи пытающие исследовать какой-нибуть занятненький сервис на уязвимости?
 
Генерируют кривые входные данные и смотрят на поведение программы и на области памяти, которые она использует
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
На эту тему есть занятная книжечка, приятно удивившая меня своей грамотностью и достойным изложением материала с примерами. Воды, правда, тоже хватает, не без этого.
Грег Хогланд, Гари Мак-гроу - "Взлом программного обеспечения: анализ и использование кода"
Взять можно, например, на торренте.
 
Занятная книжка. Написано доступно. Изучаем-с.
 
В основах поиска уязвимостей - знание типов уязвимостей и методов их поиска. В вышеуказанной книге сделан акцент на методах их эксплуатации. Обычно для поиска уязвимостей в сетевом ПО с закрытым исходным кодом исследуют протокол взаимодействия клиентской и серверной части. После того, как протокол изучен, формируют левые данные. Так например для полей данных, означающих длину блока данных или их (блоков) кол-во в пакете, подсовывают граничные значения (типа 0xff, 0x80, 0xffff в зависимости от размерности(типа) поля). Для автоматизации поиска используют fuzzing-средства (см. beStorm и самопальные тулзы), которые по определенным правилам формируют пакеты данных и травят их программе. Учтите, что данная автоматизация всего лишь дает в лучшем случае аварийное завершение процесса. Естественно, исследователь должен быть адекватным в машинных кодах (ассемблер), чтобы исследовать аспекты аварии. Иначе, как он сможет определить, является ли бага DoS-ом или ведет к удаленному выполнению кода??
Существуют способы для сужения границ поиска невалидного кода в бинарнике, так называемый "поиск кандидатов"(например команда MOVSX, которая присутствует практически всегда, когда используется преобразование типов программистом), которая всегда должна притягивать внимание кодокопателя.
Вобщем, читайте о преобразованииях типов в ЯП и их неправильном использовании при написании программ.
Для примера напишите своего клиента и сервера, поиграйтесь с ним.
Нужно знать аспекты работы высокоуровневых языков с типами данных и их явным и неявным преобразованием. К примеру "С" не поддерживает проверку переполнения значения.
Помимо того, вы должны знать способы эксплуатации уязвимости на конкретной ОС (например затирание обработчика в SEH).
Изменено: amisto0x07 - 15.03.2009 03:33:06
Страницы: 1
Читают тему