|

Source code scanners
Xakep, номер #043, стр. 043-040-5
Flawfinder version 0.21, (C) 2001 David A. Wheeler.
Number of dangerous functions in C ruleset: 55
Examining test2.c
test2.c:29 [5] (buffer) gets: does not check for buffer overflows. Use fgets() instead.
test2.c:14 [4] (buffer) strcpy: does not check for buffer overflows. Consider using strncpy or strlcpy.
test2.c:12 [1] (buffer) strcpy: does not check for buffer overflows. Consider using strncpy or strlcpy. Risk is low because the source is a constant character.
test2.c:23 [1] (buffer) scanf: the scanf() family's %s operation, without a limit specification, permits buffer overflows. Specify a limit to %s, or use a different input function. Only low-risk scanf formats detected.
Number of hits = 14
Not every hit is necessarily a security vulnerability.
There may be other security vulnerabilities; review your code!
Тут мы видим, что уязвимость с самой высокой степенью риска (5) найдена всего одна, в 29-й строчке, и связана она с отсутствием проверки на переполнение буфера. Что ж, buffer overflow - это классика жанра =). Также в функциях sprintf найдено отсутствие проверки на формат передаваемой строки (он непостоянен); в функциях scanf нет ограничения на количество принимаемых символов, что также может быть причиной переполнения буфера; наконец, не менее классическое использование опасной strcpy вместо безопасной strncpy. По выдаваемому утилитой отчету все понятно без дополнительных комментариев.
Pscan
http://www.striker.ottawa.on.ca/~aland/pscan/
Pscan (Problem Scanner) отличается тем, что «заточен» конкретно под такую распространенную ошибку, как переполнению буфера. Сканер работает по следующему принципу: он ищет одну из «проблемных» функций (на основе своего списка) и проверяет ее на наличие необходимых аргументов (тип данных, фиксированное кол-во символов). После того как потенциальная уязвимость найдена, сканер выдает ее на консоль с предложением о коррекции данного куска кода. На выходе, при передаче в качестве параметра си-файл, как и все подобные утилиты, сканер выводит номер строки, описание уязвимости и название функции, в которой найдена проблема. Программе можно передавать как отдельный файл, так и задавать сканирование по маске.
Запуск программы с ключом -v (verbose) даст более детальное описание уязвимостей.
Ключ -w позволяет выводить предупреждения, когда непостоянного формата строки (non-constant strings) используются как передаваемый в функцию параметр.
Также заметим, что многие программы определяют свои собственные функции, но с подобными стандартным функциям проблемами. Для этого к сканеру имеется возможность подключить скрипт find_formats.sh (поставляется в архиве) для подбора прототипов си-функций для подобных «проблемных». Если уж будут обнаружены не все, то хоть самые типичные.
Смотрим кусочек отчета:
[root@localhost pscan-1.2]# ./pscan test1.c
test1.c:38 SECURITY: fprintf call should have "%s" as argument 1
test1.c:66 SECURITY: sprintf call should have "%s" as argument 1
test1.c:77 SECURITY: sprintf call should have "%s" as argument 1
Назад на стр. 043-040-4 Содержание Вперед на стр. 043-040-6
|