bzero(buf,sizeof(buf));
if ((i = read(s,buf,1024)) == 0)
{
printf(“connection lost.\n”);
exit(0);
}
buf[i] = “\0”;
printf(“%s”,buf);
}
}
}
Резюме
Уязвимость форматирующей строки является одним из последних дополнений к стандартному набору уловок злоумышленника.
В последнее время применяемые злоумышленниками способы использования ошибок программного обеспечения стали гораздо изощреннее. Одна из причин усложнения инструментария злоумышленников состоит в том, что стало больше злоумышленников, стало больше любопытных, высматривающих что-либо полезное для себя, и стало больше ревизоров, внимательно исследующих исходные тексты программ. Сейчас стало намного легче узнать о работе систем, об уязвимости программ и о том, как их можно использовать в своих целях.
В основном злоумышленники осмыслили пользу, которую им могут принести ошибки программирования. Долгое время программисты использовали функции
Злоумышленники хорошо разбираются в интересующих их вопросах. Они знают, как воспользоваться коварными ошибками в программах. Ныне злоумышленники изучают каждую программу, анализируя ее реакцию на различные варианты входных данных. Сейчас как никогда для программистов важно осознать, что многие ошибки, ранее считавшиеся безобидными, могут привести к серьезным последствиям, если их вовремя не исправить. Системные администраторы и пользователи должны знать, что в используемых программах скрытно присутствуют ошибки программного обеспечения, ныне представляющиеся несущественными, но пригодные для использования в злонамеренных целях.
Конспект
Уязвимость форматирующей строки
· Уязвимость форматирующей строки обязана своим происхождением программистам, позволяющим присваивать входные данные программы параметрам функции
· Уязвимость форматирующей строки позволяет злоумышленникам читать из памяти данные программы и записывать в память данные злоумышленника.
· Уязвимость форматирующей строки может быть использована для вызова произвольного программного кода посредством подмены адресов возврата, содержимого таблицы GOT, указателей на функции и т. д.
Пример уязвимой программы
· Признаком уязвимой программы является наличие в ней функции
· Применяя функции, использующие внутри себя функцию
· Неправильное использование функции
Тестирование программ способом случайной форматирующей строки
· Тестирование программ способом случайной форматирующей строки позволяет выявить уязвимости форматирующей строки, исследуя реакцию программы на различные варианты спецификаций формата.
· Спецификации формата
· Аварийное завершение процесса из-за спецификаций преобразования
Программа атаки с использованием форматирующей строки
· Программы атаки с использованием форматирующей строки могут читать одни данные из памяти и записывать другие в память. Уязвимость форматирующей строки не обязательно зависит от используемой платформы. Известны примеры программ, как, например, утилита Screen, которые могут выполнить злонамеренный программный код в разных операционных системах на машинах с различной архитектурой.
· При использовании уязвимости форматирующей строки в случае вывода отформатированной строки злоумышленник может, прочитав данные из памяти, воспользоваться ими для решения стоящих перед ним задач. Программы атаки могут восстанавливать стек атакованного процесса и автоматически определять место размещения спецификации преобразования