|

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
|