Читаем Защита от хакеров корпоративных сетей полностью

bzero(buf,sizeof(buf));

if ((i = read(s,buf,1024)) == 0)

{

printf(“connection lost.\n”);

exit(0);

}

buf[i] = “\0”;

printf(“%s”,buf);

}

}

}

Резюме

Уязвимость форматирующей строки является одним из последних дополнений к стандартному набору уловок злоумышленника.

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

В основном злоумышленники осмыслили пользу, которую им могут принести ошибки программирования. Долгое время программисты использовали функции printf, не подозревая об ужасных последствиях их неправильного применения. До последнего времени никто не предполагал, что уязвимости форматирующей строки могут быть использованы для передачи управления злонамеренному программному коду. В дополнение к ошибкам форматирующей строки появились новые способы, например переписывание структур динамически распределяемой памяти, использование функций освобождения памяти для перезаписи указателей и ошибки целых индексов со знаком (signed integer index errors).

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

Конспект

Уязвимость форматирующей строки

· Уязвимость форматирующей строки обязана своим происхождением программистам, позволяющим присваивать входные данные программы параметрам функции printf без необходимой в таких случаях проверки.

· Уязвимость форматирующей строки позволяет злоумышленникам читать из памяти данные программы и записывать в память данные злоумышленника.

· Уязвимость форматирующей строки может быть использована для вызова произвольного программного кода посредством подмены адресов возврата, содержимого таблицы GOT, указателей на функции и т. д.

Пример уязвимой программы

· Признаком уязвимой программы является наличие в ней функции printf, параметрами которой являются переменные, соответствующие спецификациям преобразования форматирующей строки.

· Применяя функции, использующие внутри себя функцию printf, программисты часто забывают о возможности формирования форматирующей строки и параметров функции printf из входных данных этих функций.

· Неправильное использование функции syslog является причиной значительного числа уязвимостей форматирующей строки, большинство из которых чревато опасными последствиями.

Тестирование программ способом случайной форматирующей строки

· Тестирование программ способом случайной форматирующей строки позволяет выявить уязвимости форматирующей строки, исследуя реакцию программы на различные варианты спецификаций формата.

· Спецификации формата %s, %x, %p могут указывать на уязвимости форматирующей строки, если в отформатированной строке они замещаются данными из памяти. Использование этих спецификаций формата не всегда свидетельствует о наличии в программе уязвимости форматирующей строки, так же как и не все уязвимости проявляются при выводе отформатированной строки.

· Аварийное завершение процесса из-за спецификаций преобразования %п или %5, которым соответствуют входные данные программы, свидетельствует об уязвимости форматирующей строки.

Программа атаки с использованием форматирующей строки

· Программы атаки с использованием форматирующей строки могут читать одни данные из памяти и записывать другие в память. Уязвимость форматирующей строки не обязательно зависит от используемой платформы. Известны примеры программ, как, например, утилита Screen, которые могут выполнить злонамеренный программный код в разных операционных системах на машинах с различной архитектурой.

· При использовании уязвимости форматирующей строки в случае вывода отформатированной строки злоумышленник может, прочитав данные из памяти, воспользоваться ими для решения стоящих перед ним задач. Программы атаки могут восстанавливать стек атакованного процесса и автоматически определять место размещения спецификации преобразования %п в форматирующей строке.

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже