Обнаружение переполнения буфера стека

Я прочитал 5 статей / статей и 2 видео о переполнении буфера стека и переполнении кучи. Я написал программу, которая была уязвима, переполнена и использовала ее, запустил сервер на порту 7777, который был уязвим, переполнился и использовал его. Но я не понимаю, как найти уязвимости в Windows (или других операционных системах) или программном обеспечении. Я использовал gcc и gdb для отладки, чтобы найти все, что мне нужно для написания эксплойта. Как найти уязвимости, связанные с переполнением буфера стека в других программах / программном обеспечении, и как отладить уязвимую программу или можно использовать gdb?


person Noah_DuV    schedule 24.04.2015    source источник
comment
gcc и gdb также доступны для Windows.   -  person Werner Henze    schedule 24.04.2015
comment
Можете ли Вы рассказать мне, как Вы достигли двух подвигов, о которых говорите? Я хотел бы знать особенно о целевой ОС.   -  person icbytes    schedule 24.04.2015
comment
Если то, что вы пытаетесь сделать, является законным, я предполагаю, что вы можете запросить и получить исходный код программного обеспечения, слабые места которого вы хотите проверить.   -  person David K    schedule 24.04.2015
comment
Первая программа, которую я переполнял / использовал, была простой программой, которая принимала ввод и сохраняла его в буфере без проверки границ. Использование gcc и gdb для определения количества байтов, необходимых для доступа к указателю кадра. Это было сделано на Windows 7 64bit. Второй эксплойт был удаленным эксплойтом, я разместил сервер на ноутбуке (ОС - kali-linux), серверная программа позволяла компьютеру подключаться к нему, а затем могла принимать ввод (команду) и не проверяла его границы. Я подключил gdb к серверу, после того, как буфер был переполнен, я использовал gdc и дамп ядра, чтобы найти, где был указатель стека - на icbytes   -  person Noah_DuV    schedule 24.04.2015


Ответы (1)


Существует два основных подхода к обнаружению переполнения буфера стека:

Тестирование черного ящика Ключом к тестированию приложения на уязвимости переполнения стека является предоставление слишком больших входных данных по сравнению с ожидаемыми. Однако обработки приложения произвольно большими данными недостаточно. Становится необходимым проверить поток выполнения приложения и ответы, чтобы убедиться, действительно ли произошло переполнение или нет. Следовательно, шаги, необходимые для обнаружения и проверки переполнения стека, заключаются в том, чтобы присоединить отладчик к целевому приложению или процессу, сгенерировать искаженный ввод для приложения, подвергнуть приложение искаженному вводу и проверить ответы в отладчике. Отладчик позволяет тестировщику просматривать поток выполнения и состояние регистров при срабатывании уязвимости.

Тестирование серого ящика Просмотрите код вручную (разберите его). При просмотре кода на предмет переполнения стека рекомендуется искать вызовы небезопасных библиотечных функций, таких как gets (), strcpy (), strcat () и т. Д., Которые не проверяют длину исходных строк и слепо копируют данные в буферы фиксированного размера. Помимо ручного просмотра кода на предмет переполнения стека, инструменты статического анализа кода также могут оказать большую помощь. Хотя они, как правило, генерируют множество ложных срабатываний и едва ли могут обнаружить небольшую часть дефектов, они, безусловно, помогают сократить накладные расходы, связанные с поиском низко висящих ошибок, таких как ошибки strcpy () и sprintf (). Для анализа языков C-стиля доступны различные инструменты, такие как RATS, Flawfinder и ITS4.

Лучшие инструменты для этого тестирования: OllyDbg и IDA Pro (для статической и динамической отладки).

person Slava Bronfman    schedule 27.04.2015
comment
@ user3673835 Ура добро пожаловать. Если вы нашли ответ полезным, буду признателен, если вы проголосуете и примете ответ :). - person Slava Bronfman; 28.04.2015