ДиалогНаука

Пресс-центр

Выберите интересующие вас разделы:

Периодичность рассылки:

Формат письма:

Назад к списку статей

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

Виктор Сердюк,
кандидат технических наук, CISSP,
Генеральный директор ЗАО «ДиалогНаука»

Издание «Information Security» №3 за 2013 год
www.itsec.ru

Хорошо известно, что любая информационная атака реализуется злоумышленником на основе той или иной уязвимости, которая присутствует в атакуемой системе. Согласно ГОСТ Р 50922-2006 под уязвимостью понимается свойство информационной системы, обусловливающее возможность реализации угроз безопасности обрабатываемой в ней информации. На сегодняшний день можно выделить различные виды уязвимостей, но в данной статье речь пойдет о тех из них, которые относятся к программному обеспечению.

Ни для кого не секрет, что с каждым годом увеличивается количество уязвимостей, которые обнаруживаются в прикладном программном обеспечении (ПО). При этом растет не только их количество, но и их разновидность. Так, например, по данным компании Hewlett Packard на сегодняшний день можно выделить более 500 классов различных уязвимостей в ПО. Примерами таких уязвимостей являются «переполнение буфера» (buffer overflow), SQL injection, Cross Site Scripting и многие другие.

Крайне важно также отметить, что чем раньше удастся выявить уязвимость в ПО, тем меньше финансовых средств понадобится для её устранения. Данный факт наглядно иллюстрирует таблица, приведенная ниже.

Наименование этапа разработки ПО Стоимость устранения уязвимости
1 Разработка технического задания $ 139
2 Проектирование ПО $ 455
3 Разработка ПО (программирование) $ 977
4 Тестирование ПО $ 7 136
5 Техническое сопровождение ПО $ 14 102

Стоимость устранения уязвимостей на различных этапах разработки ПО

Поиск уязвимостей в ПО может осуществляться в ручном режиме либо с использованием средств автоматизации. В настоящее время для выявления уязвимостей ПО могут использоваться средства статического или динамического анализа, которые будут более подробно рассмотрены ниже.

Средства статического анализа

Статический анализ предполагает поиск потенциально опасных конструкций в исходном коде программного обеспечения. Данный вид анализа потенциально позволяет выявлять технологические уязвимости, которые возникают на этапе разработки ПО вследствие халатности или злого умысла разработчика.

Процесс внедрения средств статического анализа требует вовлечения не только подразделения по защите информации, но и подразделения, которое отвечает за разработку программного обеспечения. Это обусловлено тем, что только разработчики смогут провести анализ результатов сканирования исходного кода и внести в исходный код приложения необходимые корректировки.

Ниже на рисунке показан обобщенный процесс использования средства статического анализа безопасности. В рамках данного процесса средство для статического анализа запускает процесс сканирования исходного кода в момент централизованной сборки всего приложения. Как правило, этот процесс осуществляется в конце рабочего дня. Информация о выявленных в процессе сканирования уязвимостях поступает в сервер управления, к которому имеет доступ представитель отдела разработки, ответственный за обеспечение информационной безопасности ПО. Проанализировав результаты сканирования, он выделяет актуальные уязвимости и создает по ним соответствующие заявки в системе отслеживания ошибок (Bug Tracker). На следующем этапе руководитель всего процесса разработки ПО назначает ответственных разработчиков за устранение выявленных уязвимостей на основе созданных заявок. После этого эти разработчики вносят изменения в исходный код с целью устранения выявленных уязвимостей. Далее этот процесс повторяется на регулярной основе до завершения процесса разработки приложения. При этом с заданной периодичностью представитель подразделения по защите информации осуществляет мониторинг того, что все уязвимости, выявляемые системой статического анализа, успешно устраняются командой разработчиков.

Процесс использования средства статического анализа безопасности ПО

Примерами систем, которые реализуют данный метод анализа, являются HP Fortify и IBM AppScan. Данные решения позволяют полностью автоматизировать процесс анализа исходного кода, интегрируются во все наиболее распространенные среды разработки ПО, а также позволяют идентифицировать конкретные участки кода, содержащие уязвимость, и предложить рекомендации по её устранению. В качестве рекомендаций приводятся примеры фрагментов исходного кода, в котором показано, как исправить ту или иную уязвимость. Как правило, решения подобного класса поддерживают возможность анализа исходного кода, написанного на различных языках программирования. Так, например, решение HP Fortify поддерживает более 20-ти различных видов языков программирования, начиная от COBOL, заканчивая C#.

Средства динамического анализа

Динамический анализ предполагает проведение тестирования уже скомпилированного ПО и функционирующего в определенной среде. Для решения данной задачи, в частности, могут использоваться специализированные сканеры безопасности, которые моделируют возможные атаки злоумышленников, а также анализируют конфигурационные файлы ПО. Динамический анализ позволяет выявлять не только технологические, но и эксплуатационные уязвимости, связанные с неправильной настройкой ПО. К таким уязвимостям можно отнести: использование слабых и нестойких к угадыванию паролей доступа, наличие неиспользуемых учетных записей, неправильно настроенные функции безопасности ПО и др. В качестве примеров продуктов, реализующих функционал динамического анализа, можно привести решения Max Patrol (компании Positive Technologies) и Qualis (компании Qualys, Inc.).

Еще одной разновидностью динамического анализа является фаззинг (от английского термина fuzzing). Фаззинг представляет собой процесс передачи на вход программе намеренно некорректных данных с целью вызова ситуации сбоя или ошибки. Таким образом, эта технология позволяет обнаруживать уязвимости в анализируемом приложении.

Использование средств динамического анализа не требует наличия исходного кода ПО, а также вовлечения разработчиков для проведения анализа безопасности приложения.

Комплексный подход

Для обеспечения максимально эффективной оценки уровня безопасности ПО необходимо использование средств как статического, так и динамического анализа, поскольку они позволяют дополнить друг друга. Так, статический анализ позволяет обнаружить до 80% имеющихся уязвимостей, которые можно идентифицировать на основе исходного кода. В то же время динамический анализ позволяет дополнительно выявить оставшиеся 20% уязвимостей, которые связаны с настройкой ПО и тем окружением, в котором оно работает. Необходимо также отметить, что данные решения по анализу безопасности ПО могут использоваться как в виде специализированных продуктов, установленных в ЛВС компании, так и в виде облачных сервисов.

При этом анализ безопасности ПО, безусловно, должен стать частью комплексного подхода к обеспечению информационной безопасности компании в целом. Требования о необходимости проведения такого рода анализа уже прописаны в ряде стандартов по защите информации, в частности в PCI DSS и СТО БР ИББС. Это означает, что помимо использования инструментальных средств статического или динамического анализа необходимо также наличие документированных процедур, которые описывают процессы, связанные с разработкой безопасного ПО. За основу таких процедур можно взять рекомендации ведущих компаний-разработчиков ПО, таких как Microsoft или EMC, которые внедрили у себя и создали специальные рекомендации по организации процесса разработки безопасного ПО – SDL (Security Development Lifecycle). Эти рекомендации в том числе включают в себя процедуры повышения осведомленности разработчиков о проблемах, связанных с созданием небезопасного кода. Конечным результатом внедрения всех этих процедур должно являться повышение качества разрабатываемого кода, в том числе и с точки зрения информационной безопасности.

Заключение

На сегодняшний день более 80% атак злоумышленников базируются на использовании уязвимостей в прикладном ПО. Своевременное выявление и устранение этих уязвимостей позволит предотвратить возможные атаки нарушителей. Для эффективного решения данной задачи рекомендуется использовать современные инструментальные средства анализа безопасности ПО, которые могут значительно автоматизировать процесс поиска и устранения слабых мест в ПО организации.