Автор: Константин Саматов
Как правило, разработчики программных продуктов уделяют основное внимание функциональности и скорости доставки приложений в ущерб безопасности, что подтверждается различными исследованиями. При этом, следует отметить, что эксплуатация лишь одной уязвимости (например, выполнение произвольного кода) может привести к полному нарушению работоспособности и компрометации информационной системы. О том как этого избежать пойдет речь в данной статье.
Современный подход к организации бизнес-процессов построен на широком использовании программных продуктов, в том числе на базе веб-технологий: официальные сайты, форумы, корпоративные порталы, интернет-магазины и аукционы, порталы услуг, электронные торговые площадки - стандартные элементы информационной инфраструктуры любой современной компании. Нарушение их штатного функционирования, вследствие реализации угроз информационной безопасности, может привести к существенным финансовым и репутационным потерям.
Так, по данным исследователей компании Positive Technologies, злоумышленники активно используют уязвимости веб-сайтов: за 2019 год, 92% веб-приложений позволяют проводить атаки на пользователей, при этом 82% найденных уязвимостей связаны с ошибками при разработке кода. Бреши безопасности в 16% исследованных сайтов давали возможность контролировать не только само веб-приложение, но и сервер.
Для того, чтобы этого избежать необходимо применение методов безопасной разработки и анализа безопасности исходного кода в процессе проектирования, создания и эксплуатации программного обеспечения.
Что такое анализ безопасности исходного кода и где он применяется?
Анализ безопасности исходного кода – это анализ программного обеспечения на предмет выявления уязвимостей информационной безопасности, допущенных при его разработке.
Существует три группы методов анализа исходного кода:
- Динамические методы - методы анализа безопасности программного обеспечения, требующие выполнения программ на реальном или виртуальном процессоре, с доступом к исходному коду и среде его функционирования.
- Статические методы – методы анализа безопасности программного обеспечения с доступом к исходному коду (или производным) приложения серверных и клиентских частей, но не требующие выполнения программ.
- Гибридные методы – методы, совмещающие два предыдущих похода.
Статические методы анализа исходного кода могут быть использованы при создании и эксплуатации программного обеспечения, а динамические на этапе ввода в эксплуатацию и в процессе эксплуатации.
Алгоритм анализа безопасности исходного кода
В общем виде (без учета особенностей конкретного проекта или процесса) алгоритм анализа безопасности исходного кода можно представить в виде следующей последовательности шагов – рисунок 1.
На практике анализ исходного кода широко применяется совместно с другим методами анализа защищенности и, нередко, является одной из стадий проекта по анализу защищенности информационных систем.
Так, большинство проектов по анализу защищенности, с которыми приходилось сталкиваться автору, включали в себя следующие стадии:
1. Анализ защищенности методами «черного» и «серого ящика», т.е. динамический анализ безопасности программного обеспечения без доступа к исходному коду:
- метод «черного ящика» направлен на поиск уязвимостей, использование которых позволяет злоумышленнику не имеющему никаких привилегий реализовать следующие виды угроз: получение несанкционированного доступа к информации, полного или частичного контроля над приложением и его использование для организации атак на рабочие места пользователей информационной системы;
- метод «серого ящика» аналогичен предыдущему, с тем лишь исключением, что под злоумышленником подразумевается пользователь, обладающий определенным набором привилегий в информационной системе.
3. Разработка рекомендаций и итогового отчета.
4. Проверка корректности устранения выявленных уязвимостей.
В качестве конкретного примера подобного проекта, встречавшегося в практике автора, можно привести анализ защищенности Интернет-магазина, одного из наиболее распространенных на сегодняшний день видов информационных ресурсов - таблица 1.
Основными проблемами, встречающимися в практике анализа исходного кода, являются следующие:
- Отсутствие программ анализаторов исходного кода для некоторых языков программирования. В данном случае возможна лишь ручная проверка.
- Отсутствие специалистов, владеющих конкретным языком программирования и имеющих представления о безопасности и безопасной разработке. В большинстве случаев, на практике, либо программисты не имеют особого понятия о механизмах защиты, либо специалисты по информационной безопасности плохо разбираются в программировании. Решением указанной проблемы служит только обучение.
- Для динамических методов анализа необходимо уметь собирать приложения и разворачивать их на каком-нибудь стенде, что достаточно трудозатратно (в случае привлечения для анализа внешнего исполнителя), либо требует постоянного наличия вычислительных мощностей для тестового стенда.
- При аутсорсинге (использовании услуг внешнего подрядчика) возникает следующая проблема: программы для анализа встраиваются в средства разработки и требуют, чтобы проект успешно собирался. Поэтому, для проведения работ, необходима организация полноценного рабочего места разработчика на территории подрядчика. В большинстве случаев это не просто и требует больших привилегий для подрядчика, т.к. рабочее место очень сильно завязывается на локальное окружение: какие-то репозитории доступны только изнутри сети, есть сложности в настройке и конфигурации средств разработки, документации по запуску и сборке может не быть.
Рисунок 1. Алгоритм анализа безопасности исходного кода
Таблица 1. Пример проекта по анализу защищенности Интернет-магазина
Стадия/этап |
Состав работ (что делается?) |
Анализ защищенности Интернет-магазина методами «черного» и «серого» ящиков |
|
Сбор и анализ информации |
Сбор общедоступной информации о внешних ресурсах, данных об инфраструктуре (сетевых сервисах, операционных системах и прикладном программном обеспечении), сканирование сетевых портов, анализ сетевого взаимодействия, определение типов и версий сетевых сервисов и приложений по реакции на внешнее воздействие. |
Анализ защищенности |
Выявление уязвимостей Интернет-магазина и его инфраструктурных компонентов с использованием сканеров защищенности и специализированного программного обеспечения, а также ручная проверка доступного функционала. |
Подтверждение уязвимостей |
Моделирование атак на уровне сетевых сервисов и приложений, использование обнаруженных уязвимостей с целью оценки возможности получения несанкционированного доступа к защищаемой информации, попытки получения привилегированных прав и их эксплуатация. |
Анализ безопасности исходного кода Интернет-магазина |
|
Сбор информации, анализ архитектуры приложений |
На данном этапе изучается программное окружение и вся информационная система целиком. В частности, выполняются следующие действия:
|
Поиск уязвимостей с использованием специализированных автоматических анализаторов | На данном этапе выполняется анализ исходного кода с помощью специализированного программного обеспечения (анализаторы исходного кода), позволяющего находить подозрения на уязвимости, которое осуществляет статический и динамический анализ исходного кода. Для разных языков и платформ могут использоваться различные анализаторы, которые специально подбираются для используемых технологий. |
Ручная проверка найденных подозрений на уязвимости и критичных элементов, выявление недокументированных возможностей в программном обеспечении |
На данном этапе проводится изучение критичных элементов системы и ранее найденных подозрений на уязвимости. В частности, выполняются следующие действия:
|
Разработка рекомендаций и подготовка отчета |
|
Разработка рекомендаций по устранению выявленных уязвимостей |
Перечень актуальных уязвимостей строится на основе рекомендаций производителей по безопасной конфигурации программного обеспечения, материалов свободных исследовательских групп по поиску уязвимостей, каталогов уязвимостей, в частности:
Вырабатываются предложения по устранению уязвимостей, выявленных в ходе анализа защищенности, или снижения ущерба от их реализации. |
Подготовка отчета |
Как правило отчет содержит следующую информацию:
|
Проверка корректности устранения уязвимостей | Проводится проверка наличия выявленных уязвимостей и оценка эффективности принятых мер по их нейтрализации. Подготавливается отчет о проверке корректности устранения выявленных уязвимостей. |
Подведем итоги: для надежной и корректной работы механизмов обеспечения безопасности в программном обеспечении необходимо регулярной проводить анализ исходного кода. При этом, для большего эффекта в части выявление уязвимостей, необходимо использовать гибридные методы анализа безопасности исходного кода: сочетание статических и динамических методов.
__________________________________________________
Сведения об авторе: Саматов Константин Михайлович, руководитель направления в Аналитическом центре Уральского центра систем безопасности, член правления Ассоциации руководителей служб информационной безопасности, преподаватель дисциплин информационной безопасности в УрГЭУ и УРТК им. А.С. Попова.
Источник: Журнал «Information Security/ Информационная безопасность» #1, 2020