Supply Chain Security
Узнать большеАнализ безопасности ПО: какие угрозы и как искать
Согласно ГОСТ Р 56546-2015, под уязвимостью понимается недостаток (или слабость) информационной системы или программного средства, который может использоваться для реализации угроз безопасности информации.
2020 год побил все рекорды по росту количества уязвимостей, обнаруживаемых в ПО. В крупном программном обеспечении за этот период было выявлено более 17 500 уязвимостей, дыр и эксплойтов (против чуть более 17 300 в 2019 г.). 4177 из них присвоен высокий уровень критичности. И это только в крупных ПО, с которыми работает огромное количество пользователей. В статистику, как правило, не попадают программы, разрабатываемые на заказ, и специфичные программные продукты, не применяющиеся массово. В них тоже могут быть уязвимости. Ведь совершенного программного обеспечения не бывает.
Оценивая тенденции в сфере информационной безопасности (далее – ИБ) и прогнозы специалистов, можно прийти к выводу, что у 2021 года есть все шансы установить новый рекорд. Этому способствует продолжающийся рост популярности удаленного формата работы. В частности, наблюдается увеличение количества атак на VPN и RDP.
В связи с ежегодным ростом количества обнаруживаемых проблем в ПО не теряет актуальности анализ безопасности программного обеспечения. Он может встраиваться в процесс разработки, а также проводиться регулярно в процессе эксплуатации ПО. Ведь уязвимости могут появляться на любом этапе жизненного цикла программного средства.
Виды уязвимостей, угрожающих программному обеспечению
ГОСТ Р 56546-2015 выделяет по области происхождения 5 видов уязвимостей:
- Кода. Связаны с недостатками кода: ошибками при разработке, слабыми местами, появляющимися при обновлениях и так далее.
- Архитектуры. Обусловлены слабостями ПО, вызванными ошибками в процессе проектирования.
- Конфигурации. Возникают в связи с ошибками и неточностями в процессе конфигурирования программного обеспечения.
- Организационные. Виновники их появления – те, кто эксплуатирует ПО. Уязвимости обусловлены недостатками организационных мер, принимаемых в компании для обеспечения ИБ, несоблюдением правил использования и другими факторами.
- Многофакторные. Возникают при совокупности нескольких факторов.
Подавляющее большинство уязвимостей, выявляемых при проверке программного обеспечения, обусловлены недостатками кода.
Среди некоторых часто встречающихся в ПО уязвимостей:
-
Переполнение буфера (Buffer Overflow). Уязвимость реализуется за счет записи данных за пределами выделенного в памяти ПО буфера. Это – один из популярнейших способов взлома компьютерных программ и информационных систем. Он позволяет загрузить и выполнить произвольный код от имени программы, в которой выявлена такая уязвимость. Кроме того, она приводит к отказам обслуживания (DoS) из-за зависания или аварийного завершения программы.
-
Уязвимости Tainted Input Vulnerability («испорченного ввода»). Возникают из-за недостаточного контроля вводимых в ПО данных (как вариант – в формы авторизации, отправки данных и так далее). В результате появляется возможность задать такие входные данные, которые позволят выполнить нужную злоумышленнику команду, в то время как ПО или информационная система будут «думать», что выполняют другую, легальную. Один из подвидов этой уязвимости, которые могут реализовываться в программах, написанных на СИ-подобных языках, – ошибки форматных строк.
-
Ошибки синхронизации (Race Conditions). Связаны с многозадачностью. Злоумышленники могут изменять файлы, которые использует программа (и другое ПО) и заставлять ее выполнять определенные действия.
Также современному ПО часто угрожают такие уязвимости, как Authorization Bypass (обход аутентификации, позволяющий получать несанкционированный доступ к учетным записям через других пользователей). Довольно распространены SSI Injection, позволяющие вставлять серверные команды в HTML-код. В веб-приложениях угрозы часто реализуются посредством уязвимостей XSS: выполнение вредоносных программ для атаки на пользователей на сгенерированных приложением страницах.
Это малая часть проблем, которые могут угрожать программному обеспечению. Всего же их гораздо больше, и новые появляются с завидной регулярностью.
Как бизнесу находить уязвимости программного обеспечения
Не стоит думать, что тесты ПО на уязвимости – это обязанность только разработчиков. Да, они должны это делать безоговорочно. Но те, кто использует программы и приложения, тоже должны заботиться о безопасности и своевременном обнаружении проблем.
Для анализа безопасности программного обеспечения хорошо подходят 2 метода: динамический и статический анализ. В первом случае производится тестирование работающего ПО. Моделируются различные ситуации, анализируется выполнение кода и так далее. Вариант подходит компаниям с собственными разработчиками в штате и имеющим ресурсы для развертывания отдельной копии приложения для проведения тестирования. Такой вариант анализа программного обеспечения требует существенных временных трат. Также он никогда не обеспечивает 100-процентное покрытие кода, да и разработчики с нужными компетенциями есть далеко не в каждой компании.
Статический анализ и тестирование ПО на уязвимости происходит без необходимости его запуска. Статический анализатор SAST проверяет код, обеспечивая 100-процентное его покрытие. Для реализации этой технологии не требуются существенные вычислительные мощности. Кроме того, для интерпретации результатов анализа с помощью высокоуровневых инструментов статического анализа не нужна специальная подготовка, и работать с ними могут офицеры информационной безопасности или специалисты другого профиля.
Это означает, что организовать проверку ПО и поиск уязвимых мест в процессе эксплуатации может любая компания. Не стоит об этом забывать, поскольку безопасность вашей IT-инфраструктуры в ваших руках.