Методы исследования уязвимостей по своей сути универсальны. Как домашний энтузиаст безопасности, так и корпоративные аудиторы безопасности в повседневной деятельности применяют одни и те же методы, один и тот же набор инструментальных средств. Диапазон применяемых средств широк: от шестнадцатеричных редакторов до дизассемблеров кода. Методы могут быть как эмпирическими, основанными на счастливой догадке, так и научно обоснованными на основе фундаментальных знаний. Некоторые из этих методов могут показаться хаотичными, в то время как другие – детализированными, строго регламентирующими последовательность выполняемых при исследовании действий. Новичок может предпочесть последние методы, в то время как закаленные исследователи с большим опытом программирования в большей степени полагаются на свою интуицию. Причина выбора тех или иных методов кроется в личном предпочтении исследователя.
Примечание
В практике обеспечения безопасности используется ряд схем исследования уязвимостей, которые предусматривают различные методы исследования. Некоторые предпочитают детализированные методичные методы пошагового аудита программ, а другие – методы, в которых последовательность выполняемых действий напоминает «белый шум».
Выбор субъективен и целиком определяется предпочтениями исследователя. Уже говорилось о широком распространении программных средств определения уязвимостей и аудита программного обеспечения. Некоторые из них по своим возможностям аналогичны Web CGI или SQL Database. Другие, как, например, Bugzilla, предоставляют ряд дополнительных возможностей, включая прекрасный интерфейс, ведение учетных записей пользователя, идентификаторов ошибок и их отслеживание.
Следует сказать, что для анализа различных типов данных требуются разные методы исследования. Для анализа двоичных данных требуется совершенно иной подход, чем для анализа исходного текста программы. Поэтому рассмотрим эти два подхода отдельно друг от друга.
Анализ исходного текста программы
Анализ исходного текста программы предполагает экспертизу текста программы на предмет ошибок. Программа может быть написана на языках C, Perl, Java, C++, ASP, PHP и им подобных. Обычно аудит исходного текста программы начинается с поиска потенциально небезопасных функций, или, другими словами, функций, подверженных ошибкам.
Аудит исходного текста программы осуществляется