Анализаторы исходных кодов
Осведомлен – значит вооружен, в случае с ИТ — защищен. Закрыться изнутри, настроив firewall, ограничить доступ, отключить ненужные службы, все это хорошо. А что делать, если то программное обеспечение, которое мы используем для своих целей под лицензией GNU, скаченное и установленное из надежного источника имеет уязвимости? Тогда вся наша безопасность катится «коту под хвост». Чтобы понять с какой стороны подойдет хакер, нужно разобраться во многих понятиях и в этом в частности. Хорошо, тогда как определить надежную программу мы ставим или нет? Нет, я не хочу сказать, что все программы «глючные», в любом случае на сайтах разработчиков есть техническая поддержка, форум для того, чтоб обсудить некоторые нюансы настройки, работы и если есть, то и уязвимости которые находят спецы и делятся с сообществом, этим и силен Linux.
Для проверки программ с открытым исходным кодом и поиска ошибок доступно огромное количество средств. Большинство из них позволяют находить недостатки в программах на языке С (так как большинство программ с открытым исходным кодом написаны именно на этом языке). Поехали.
LCLint
С помощью LCLint или Splint (http://lclint.cs.virginia.edu/ или http://www.splint.org/) можно выявлять ошибки в программах на языке С. Это средство позволяет провести множество стандартных проверок программ, а также выявить ошибки зашиты информации, контролировать интерфейсы функций, обнаруживать некорректное использование глобальных переменных, ошибки управления памятью, совместное использование потенциально опасных данных, потенциальные возможности обращения к несуществующим в памяти объектам и еще многие другие проблемы. Практическое руководство по использованию LCLint, Splint можно найти по адресу http://lclint.cs.virginia.edu/guide/guide-full.html или http://www.splint.org/manual/.
Cqual
Cqual (http://www.cs.umd.edu/~jfoster/cqual/) представляет собой средство для проверки соответствия типов и позволяет программисту устанавливать спецификаторы типов. Затем программист может добавить описание для спецификатора в свою программу и Cqual предоставит свой вывод относительно правильности этих описаний.
RATS
Средство аудита и обеспечения безопасности RATS позволяет провести проверку программ, написанных на языках С, C++, Perl, Python и PHP. Оно выдает предупреждения при наличии наиболее популярных ошибок программирования. Это средство особенно хорошо использовать для выполнения предварительной проверки кода.
Параметры:
Copyright 2001 by Secure Software Solutions
http://www.securesw.com
usage: rats [-adhilrwx] name1 name2 … namen
-a <fun> report any occurrence of function «fun» in the source file(s)
-d <filename> specify an alternate vulnerability database.
-h display usage information (what you»re reading)
-i report functions that accept external input
-l <language> force the specified language to be used
-r include references that are not function calls
-w <1,2,3> set warning level (default 2)
-x do not load default databases
Flawfinder
Проверить безопасность команд в исходном коде программ позволяет программа Flawfinder (http://www.dwheeler.com/flawfinder). Эта программа осуществляет поиск функций, ошибки при работе с которыми чаще всего используются для проведения различных атак, например атак на переполнение буфера (функции strcpy (), scanf () и другие), атак с помощью строки форматирования (функции printf (), syslog() и другие), ситуаций «гонки на выживание» (функции access(), chmod() и другие), потенциальных проблем, связанных с использованием метасимволов для командного интерпретатора (функции ехес(), system() и другие), а также ошибок при использовании генераторов случайных чисел (функция random() и другие). При выявлении какой-либо проблемы программисту выдается соответствующий совет.
Опции:
—context, -c | Показывает строку, которая содержит потенциальную недоработку; сходна с использованием grep для поиска каждой функции или демонстрации результатов каждого совпадения. |
—columns | Показывает номер столбца потенциальной недоработки. Например, уязвимый strcpy может начинаться с 16-го символа строки. |
—minlevel=X, -m X | Задает минимальный уровень риска, для которого сообщается совпадение. Значение X может быть от 0 (нет риска) до 5 (максимальный риск). По умолчанию — 1. |
—neverignore, -n | Не поддерживает директиву ignore в исходном файле. |
—immediate, -i | Показывает потенциальные совпадения по мере их нахождения. |
—inputs | Показывает только функции, которые получают внешний ввод (задает переменные из данных, полученных извне программы). Устанавливает минимальный уровень равный 0. |
—quiet | Не показывает информацию о совпадении во время сканирования. |
—loadhitlist=F | Загружает совпадения из файла F вместо анализа исходных программ. |
—savehitlist=F | Сохраняет совпадения в файле F. |
—diffhitlist=F | Не показывает совпадения, содержащиеся в файле F. Полезна для сравнения пересмотров. |
SPIKE и Sharefuzz
SPIKE (http://sourceforge.net/projects/spike/) представляет собой полезное средство для анализа протоколов и воспроизведения данных. Программа Sharefuzz с помощью переменной среды LD_PRELOAD позволяет анализировать SUID-программы на предмет возможного переполнения буфера.
Твитнуть
Спасибо за статейку. Я в исходном коде в основном проверяю дуфолоу или ноуфолоу А вот в браузере опера у меня не открывается исходный код, незнаю почему гуглил, но нет, а мозилла подвисает
Прикольная штука! СПС
Обычно проверяю исходный код мозилой на предмет ссылок. А так тоже неплохая вещь.
Вася:
как вариант, разве что для выявления подозрительных javascript-тов, данные способы более детально анализируют скрипты…