Source code scanners

Xakep, номер #043, стр. 043-040-4


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

Flawfinder

http://www.dwheeler.com/flawfinder

Flawfinder (Flaw - трещина, щель, изъян; Find - искать, (С) Lingvo 7 :) - это программа, призвание которой все то же: искать в исходном коде программы уязвимые с точки зрения безопасности места. В отличие от вышеупомянутой утилиты ITS4, flawfinder является программным обеспечением, свободно распространяемым под лицензией General Public License (GPL).

Для корректной работы Flawfinder требует интерпретатор языка Python версии 1.5 или выше (под версией 1.3 или ниже не функционирует), ибо на языке Python и написан. Утилита включается в некоторые дистрибутивы Linux. Поставляется либо в стандартном .tar.gz архиве, либо как RPM-пакет.

К сожалению, утила довольна слаба, что определяется не «сырым» состоянием программы (алгоритм уже достаточно хорошо отработан и программа отлажена), а размером базы уязвимостей - она еще сравнительно мала и нуждается в пополнении.

Установка стандартная: распаковка в отдельный каталог и запуск в нем make install. В случае же rpm-пакета вообще никаких сложностей (кроме зависимостей) возникать не может.

Flawfinder можно передавать в качестве аргумента как отдельные файлы, так и целые директории для анализа групп C/C++ файлов (в т.ч. и по маске). Утилита анализирует каждый файл и на выходе, в случае обнаружения потенциальной уязвимости, присваивает ей степень риска по шестибальной шкале (от 0 - минимальный риск, до 5 - очень большой риск). Степень эта зависит как от вида функции, так и от ее параметров и переменных. Очевидно, далеко не каждый найденный flawfinder'ом баг - это в самом деле уязвимость, и рассматривать все выданные утилитой ошибки как априори требующие исправления не нужно. Впрочем, это относится ко всем без исключения сорцсканерам. Рекомендуется сначала исправить те баги, что входят в категорию "Highest Risk", а уж потом смотреть на остальные. Также, если какую-либо особенность программы flawfinder принял за уязвимость, но ты знаешь, что это не так, рекомендуется в коде внести перед этой функцией комментарий типа /* Flawfinder: ignore */ (сканнер игнорирует функции, определенные с таким комментарием) или же, наоборот, запустить программу с ключом -newerignore для отключения игнорирования.

Рассмотрим основные ключи запуска утилиты (они все доступны при запуске программы с ключом -help):

-n (--newerignore)

Не игнорировать вызовы никакой функции, даже если в комментариях наличествует директива :ignore.

-I (--immediate)

Показывать найденные уязвимости тут же, не дожидаясь окончания процесса сканирования (полезно в случае проверки какого-либо большого количества файлов, например, ядра Linux =).

-savehitlist=/PATH

Сохранить отчет о сканировании в файл.

Вот кусок результата работы Flawfinder'а:

[root@localhost flawfinder-0.21]# ./flawfinder test2.c

Назад на стр. 043-040-3  Содержание  Вперед на стр. 043-040-5