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