|

Source code scanners
Xakep, номер #043, стр. 043-040-6
test1.c:95 SECURITY: sprintf call should have "%s" as argument 1
test1.c:118 SECURITY: printf call should have "%s" as argument 0
test1.c:131 SECURITY: syslog call should have "%s" as argument 1
[root@localhost pscan-1.2]#
Как видишь, отчет нам выдали в довольно лаконичной форме. Очевидно, что в указанных строках соответствующим функциям не хватает аргумента "%t", где t - тип передаваемых данных, т.е. это можно интерпретировать как неявно заданный формат строки. Затем, по своему алгоритму, программа сравнивает, так ли на самом деле (т.е. присутствует "%t" или нет), и, в случае неудачи, возвращает 0, иначе - 1. Таким образом, в программе test1.c найдена одна ошибка на переполнение буфера (строка 118).
Запуская программу с ключом -vv, получаем несколько более «разговорчивый» отчет (привожу одну его строчку):
[root@localhost pscan-1.2]# ./pscan -vv /root/scanz/test2.c
Scanning /root/scanz/test2.c ...
/root/scanz/test2.c:6 FUNC printf Last argument is variable or reference: BAD
Суть та же самая, найдено две ошибки, в тех местах, где, как видим по отчету, аргумент функции printf варьируется (не постоянен) или зависит от чего-либо (потенциально не постоянен).
RATS
http://www.securesw.com/projects.html
RATS (Rough Auditing Tool for Security, «Грубая утилита для аудита безопасности») - утилита для сканирования исходных кодов программ не только на С/С++, но и Perl, PHP и Python. Как подразумевает название программы, она предназначена только для грубого анализа исходника и может обнаружить не все ошибки или же, наоборот, принять за ошибку корректный участок кода (интересно, что это - признание автора в несовершенстве алгоритма или скромность, граничащая с осторожностью?). То есть «ручную» проверку кода этот сканер не заменит, но серьезно поможет в сем трудном деле.
Использование утилиты:
rats [-d <filename>] [-h] [-r] [-w <level>] [-x] [file1 file2 ... filen]
Где основные опции:
-d <filename>
Путь к альтернативной базе уязвимостей (если дефолтовая не устраивает).
-h
Список всех команд.
-l <lang>
Явное указание языка исходника, даже невзирая на расширение файла, для более точного аудита с учетом специфики данного языка (позволяется выбирать "c", "perl", "php" и "python").
-w <level>
Установка уровня опасности уязвимостей. Уровень 1 включает только проверку на высокую степень уязвимости (несерьезные, мелкие потенциальные уязвимости игнорируются). Уровень 2 включает в себя проверку на среднюю степень уязвимости (это уровень по умолчанию). Уровень 3 включает также проверку на незначительные, мелкие возможные уязвимости.
-x
Указание не грузить стандартные базы уязвимостей (/usr/local/lib) по умолчанию (указываешь путь к своим базам).
Очевидно, то, какие уязвимости будут найдены, зависит от указанной базы. Для каждой уязвимости выводится номер строки, где она встретилась, уровень опасности, название исследуемой функции, краткое описание уязвимости, а также предлагаемые действия. Отчет будет выглядеть примерно так:
Назад на стр. 043-040-5 Содержание Вперед на стр. 043-040-7
|