вторник, августа 11, 2009

Инструменты статического анализа кода для поиска уязвимостей

Разыскиваются инструменты статического анализа кода на разных языках программирования, предназначенные для поиска уязвимостей путём анализа потоков данных, в особенности для веб-приложений.

Для понятности приведу пример одного такого известного мне инструмента – Pixy, я уже неоднократно упоминал про него на своих семинарах и собираюсь достаточно подробно рассказать и продемонстрировать его в работе на семинаре “Работа с программным кодом для тестировщиков”, который состоится через полторы недели.

Вкратце, суть работы таких инструментов в том, что инструмент сканирует исходный код и пытается строить графы потоков данных. И затем по этому графу прослеживается путь данных, которые поступают извне программы – от пользователя, из базы данных, от какого-нибудь внешнего плагина и т.п. Если такие данные без проверок и преобразований доходят до SQL-запроса – имеем уязвимость типа SQL injection. Если они добираются до вывода в HTML-код – извольте получить XSS.

Конечно, можно такие проверки делать и вручную, я на семинаре собираюсь рассказать, как можно анализировать потоки данных, используя обычные средства построения диаграмм вызовов, но инструменты могут здорово сэкономить время, подсказав, где начинать копать.

Инструмент Pixy работает с языком PHP, и неплохо работает, но для полноты картины хочу найти аналогичные инструменты для других языков – Perl, Python, Ruby, Java, .Net или хотя бы понять, есть ли такие, сделал ли уже кто-нибудь или ниша пока открыта.

Инструменты для “обычного” статического анализа, которые анализируют только поток управления, не предлагать, я просмотрел большинство из них, они неплохо справляются с поиском низкоуровневых проблем типа неинициализированных переменных или дедлоков. А хочется найти инструменты, работающие на более высоком уровне абстракции. Именно поэтому меня интересуют именно те, которые умеют работать с потоками данных.

6 комментариев:

Unknown комментирует...

Для java и .Net не встречал,там разве что при использовании MVC фреймворков возможен такой анализ(как в Pixy) для руби вполне возможно что есть, даже если и нет сделать можно быстро (по крайней мере для ROR)

Unknown комментирует...

А что вообще есть для руби? В википедии не нашёл ничего -- http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

OpenQuality.ru комментирует...

Для Java:
http://findbugs.sourceforge.net/
This is the web page for FindBugs, a program which uses static analysis to look for bugs in Java code.

Unknown комментирует...

2OpenQuality.кu: Прошу внимательно отнестись к последнему абзацу моей заметки, он написан не просто так.

Или Вы знаете, как использовать FindBugs для поиска "неразрушающих" уязвимостей типа SQL-инъекций или XSS? Авторы и сами не скрывают, что их инструмент в этом не силён:

"FindBugs looks only for the most blatant, obvious cases of cross site scripting. If FindBugs found any, you almost certainly have more cross site scripting vulnerabilities that FindBugs doesn't report. If you are concerned about cross site scripting, you should seriously consider using a commercial static analysis or pen-testing tool."

OpenQuality.ru комментирует...

Да, проморгал. Пространственно-временной разрыв между прочтением заметки и обнаружением ссылки (просто попалось под руку и решил поделиться).

Unknown комментирует...

Вот навскидку из этого парочкой пользовался,тулзы в большинстве своем неудобные (отчеты в текстовом виде,некоторые вообще только под линуском работают) но требуемый анализатор с учетом возможностей руби написать будет не сложно,спеки нужны подробные а активисты найдутся.
http://rubyforge.org/projects/reek
http://github.com/martinjandrews/roodi/tree/master
http://rufus.rubyforge.org/rufus-treechecker/files/README_txt.html
http://ruby.sadi.st/Ruby_Sadist.html