
Source code scanners
Xakep, номер #043, стр. 043-040-1
Помощники сетевого программиста
Toxa (toxa@real.xakep.ru)
Все, конечно же, наслышаны о так называемых сканерах безопасности: утилитах, позволяющих сканировать удаленные сервера, что называется, «во все порты», на предмет поиска уязвимостей. Также не секрет, что эти утилиты, созданные официально, чтобы помочь администратору сервера проводить аудит безопасности, во всю используются хаксорами для собирания подробной информации об атакуемом сервере (нажал кнопочку scan и сиди, плюй в потолок, тулза сама все просканит, пошарит базу уязвимостей и выдаст красивый отчет). Да, я имею в виду такие программы, как Nessus (под *nix), Retina, Shadow Security Scanner, XSpider, Languard Network Scanner и другие (под Win32), и тому подобные утилиты, которые ты вовсю гоняешь по ночам - все они тебе известны, покопайся в конце концов в рубрике «софт» нашего сайта.
Но вот (почему-то) намного менее популярны сканеры другого плана: утилиты, призванные помочь программисту в его нелегком деле написания какого-нибудь сетевого приложения (анализаторы исходных текстов aka source code scanners). Что, спросишь, какие в коде могут быть уязвимости? Тут тебе и переполнение буфера (классика), и форматирование строки, и еще много всяких ошибок, которые может допустить программер в своем труде из нескольких сотен строк. Поэтому сейчас я попытаюсь охватить хотя бы узкий круг таких программ-сканеров. Узкий - так как будем считать, что приложение, требующее проверки, написано на Си, а программист работает из никсовой консольки. И если с первым все ясно (Си - безусловно, самый популярный язык), то популярность таких программ под unix-like'системы вызвана, во-первых, малым их размером (.tgz-архив с исходниками сканера редко весит больше 300 кб), а во-вторых, связанной с Free'шными вариациями Юникса (под сим я понимаю Linux, Free/Net/OpenBSD и иже с ними, как известную альтернативу дорогим unix-системам) свободой софта, ибо серьезные анализаторы исходных текстов (это уже не просто сканеры, а глобальные системы для полноценного анализа ПО) под Win, с GUI и всеми делами, стоят больших денег.
Короче, смысл считаю поясненным. Рассматриваем сканеры исходного кода под юниксовую консоль (беги срочно ставить линукс :), задача которых - указать программисту на ошибки в том чуде, которое они написали, как то: неправильные и потенциально опасные вызовы библиотечных функций, переполнение буфера, уязвимость формата строки и так далее. Перед прочтением рекомендую ознакомиться хотя бы с основными аспектами «теории багов в Си-программах», об этом писали в номерах ]['2001, также, помнится, много подобной инфы валялось на Void.ru. Разумеется, для понимания всего нижеописанного неплохо бы иметь хоть начальные знания языка C, так как если ты не знаешь, чем одна рассматриваемая функция отличается от другой и для чего она нужна, то чтиво превратится для тебя в нудную жвачку :)
Как следует оценивать качество рассматриваемой проги? Конечно, тестировать ее «в боевых условиях». Как тестить сорцсканеры? Конечно, прогонять через них километровые исходники с кучей багов и смотреть, что отловится, а что нет. К сожалению, злобный редактор отказался давать мне двадцать страниц для публикации полных результатов тестов, да и тебе, думаю, было бы скучно их изучать, поэтому полную версию статьи, со всеми отчетами, ты можешь найти на сайте (угадай, каком), а тут я лишь скажу, что для тестирования использовались две программы: исходник из дистрибутива рассматриваемой ниже тулзы pscan, который содержит вызовы и объявления основных функций, в которых могут содержаться различные проблемы, соответственно, программы, содержащие такие функции, могут быть уязвимы, и исходник из дистрибутива сканера flawfinder (смысл его примерно тот же, он менее функционален, но для исчерпывающего тестирования я юзал и его). Достоинство программ - в очень хороших комментариях и структуре: последовательно дается возможно небезопасное объявление функции и сразу - априори безопасный вариант, для сравнения. Впрочем, тебе никто не мешает самому поиграть с объявлением функций: это, во-первых, может помочь разобраться в алгоритме работы сканера (если есть в этом необходимость), и, во-вторых, как следствие, может помочь обнаружить в сканере баги :).

















































































































