Бравые помощники компилятора Крис Касперски ака мыщъх Хакер, номер #076, стр. 076-104-3 Это не снижает производительности и не требует перекомпиляции существующих приложений, но на универсальное решение, увы, не тянет. Заплатки доступны только для старых версий ядер (2.0, 2.2, 2.4), да и всевозможных конфликтов предостаточно. Тем не менее, полностью отказываться от идеи неисполняемого стека все же не стоит. ITS4 Software Security Tool Статический анализатор исходных текстов, нацеленный на поиск переполняющихся буферов и некоторых других ошибок. Отмечает вызовы потенциально опасных функций, таких, например, как strcpy/memcpy, и выполняет поверхностный семантический анализ, пытаясь оценить, насколько опасен такой код, а так же дает советы по его улучшению (в большинстве своем либо слишком очевидные, либо откровенно глупые). Поддерживает приплюснутый и обычный диалекты Си. Представляет собой утилиту командной строки, работающую как на Windows, так и на *nix. Flawfinder Простой статический анализатор исходных текстов, написанных на языках Си и Си++. Пытается обнаружить ошибки переполнения, но как же неумело он это делает! Вместо семантического анализа кода, нам предлагают простой шаблонный поиск. Flawfinder обращает внимание лишь на имя функции (strcpy, strcat и т.д.) и аргументы, переданные ей (константная строка или указатель на буфер), оценивая потенциальную опасность в условных "хитах". Тем не менее, полезен для получения общих представлений о программе, особенно чужой. Что-то с памятью моей стало Проблемы с распределением памяти в основном относятся к чистому Си. В плюсах имеется множество механизмов для их решения. Конструкторы и деструкторы, перекрытие операторов, объекты с ограниченной зоной видимости — все это ликвидирует часть ошибок из серии "выделил память и забыл ее освободить". С другой стороны, более сложная семантика Си++ существенно затрудняет статический анализ, вынуждая прибегать к run-time контролю, осуществляемому непосредственно на стадии исполнения, что несколько снижает производительность. Большой популярностью пользуются отладочные версии библиотек, осуществляющие жесткий контроль за динамической памятью (она же — heap, куча) и обнаруживающие большое количество трудноуловимых ошибок, с которыми раньше приходилось справляться лишь многодневной отладкой без перерыва на сон и еду. По соображениям производительности обычно они используются лишь на стадии разработки и альфа-тестирования, а из финальной версии — исключаются. CCured Сишный протектор, защищающий программу от проблем с распределением памяти (выход за границы буфера, использование неинициализированных указателей и т. д.) и работающий по принципу source2source транслятора, "заглатывающего" сырой исходный текст и вставляющего дополнительные проверки в различных местах. То есть, вместо того чтобы исправить ошибки, он загоняет их подальше вглубь! Своеобразный предохранительный клапан, удерживающий программу от входа "вразнос" и предотвращающий ряд удаленных атак, основанных на передаче shell-кода. Но вот отказ в обслуживании злоумышленник устроить вполне может. К тому же, дополнительные проверки ощутимо замедляют быстродействие программы (от 10% до 60% в зависимости от качества исходного кода). |