Source code scanners

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


Утилита поставляется в стандартном tar.gz архиве; после извлечения всех файлов в отдельную папку и стандартного процесса компиляции (./configure, make, make install) получаем папку its4, в которой содержится три каталога: bin - непосредственно с исполняемым файлом its4, its4 - с базой уязвимостей, и man - со страницей справочника. Всю необходимую информацию о параметрах, с которыми запускается утилита, можно почерпнуть из этой страницы ($ man /its4/man/man1/its4.1), здесь приведу основные параметры с их описанием:

Параметры запуска: $ ./its4 [option]... [file]...

Параметр file - путь к исходному C/C++ файлу

Вот основные флаги:

--a, -add=name

Добавить новое имя функции в базу данных только для этого сеанса сканирования.

--D, --no-descriptions

Не выводить описания потенциальных проблем (только результаты сканирования)

-i, --ignore=function

Игнорировать анализ данной функции. Может применяться любое количество раз.

-I, --limit=function

Не анализировать никакие функции, кроме указанных. Может применяться любое количество раз.

-o, --output=filename

Вывести отчет сканирования в указанный файл. По умолчанию используется стандартный поток вывода (на экран).

-S, --no-solutions

Не выводить советы по возможному решению проблемы.

-Q, --quiet

«Тихий» режим. Выводится минимум информации, данный флаг аналогичен совместному использованию флагов -D и -S.

-v, --db-location=file

Указать путь к базе уязвимостей (для возможности держать несколько баз, каждую для определенных целей).

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

Вот что примерно выдается при запуске проги (показан кусок отчета):

[root@localhost bin]# [root@localhost bin]# ./its4 /root/scanz/test1.c

/root/scanz/test1.c:38:(Urgent) fprintf

Non-constant format strings can often be attacked.

Use a constant format string.

/root/scanz/test1.c:125:(Very Risky) sprintf

This function is high risk for buffer overflows

Use snprintf if available, or precision specifiers, if available.

Здесь мы видим, что в некоторых строках (38) используются строки с непостоянным (неявно указанным) форматом, что, очевидно, может привести к такой известной ошибке, как форматирование строки (ликбез: это когда, допустим, строка ждет от юзера значение типа int, а ты ей пихаешь char, а в переменной, куда значение передается, тип явно не прописан). Как решение проблемы, ITS4 предлагает использовать постоянный формат строки. Когда формат строки «непостоянный», т.е. не задан явно, и утилита расценивает уровень опасности как urgent, т.е. «немедленно подлежащий исправлению». В строке 125 та же функция (sprintf) может быть причиной переполнения буфера (уровень опасности, как видишь, «очень велик»), о чем нас и предупреждает утилита, рекомендуя по возможности использовать более защищенную функцию snprintf, аналогичную данной, но имеющую одним из параметров фиксированное количество передаваемых символов.

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