Как встроить непрерывный контроль уязвимостей в разработку программного обеспечения
Сегодня почти каждая компания взаимодействует с пользователями и сотрудниками через веб‑приложения: корпоративные сайты для приобретения товаров или услуг, внутренние порталы для нужд HR или специальные CRM‑системы. Чем больше организация, тем сложнее ее IT‑инфраструктура. А чем сложнее инфраструктура и больше в ней приложений, тем выше шанс возникновения уязвимостей и рисков для компании.
Для контроля киберугроз и борьбы с ними используется много разных инструментов и методологий:
- SAST, DAST и IAST для статического и динамического анализа кода;
- SCA для анализа зависимостей с открытым исходным кодом;
- RASP‑анализ для выявления потенциальных угроз изнутри уже работающего приложения;
- ручная верификация срабатываний для коррекции результатов сканеров;
- подход IaC для взаимодействия с инфраструктурой.
В комбинации эти инструменты позволяют эффективно отслеживать потенциальные уязвимости в коде. Но их внедрение в цикл разработки — сложная задача. Особенно когда возможных уязвимостей много, а ресурсы для их обработки ограничены. Поэтому компании часто задаются вопросом, нужно ли именно им внедрять непрерывный контроль безопасности кода.
Наличие дыр безопасности в программном обеспечении компании — одно из слабых мест современной разработки. Даже если код программы небольшой и его писали профессионалы, в нем могут оказаться уязвимости. А даже самая безобидная уязвимость может привести к серьезным последствиям.
Как правило, любые приложения со временем необходимо улучшать: добавлять новые функции или устранять недоработки. Современная разработка устроена так, что чем меньше времени проходит от начала создания новой версии до ее выхода на рынок, тем больше конкурентных преимуществ приобретает бизнес.
Но чем сильнее разработчики стараются сократить время выхода релиза, тем меньше внимания уделяют безопасности. Дыры безопасности могут появиться в коде по причине простой невнимательности и скрываться в библиотеках с открытым исходным кодом. Бывает и такое, что уязвимости специально закладывают в код нелояльные сотрудники, чтобы позже получить к нему доступ извне.
Рано или поздно злоумышленники воспользуются оставленными уязвимостями. Это может привести к взлому и проникновению в информационный периметр компании, утечке персональных или учетных данных клиентов, нарушению конфиденциальности, репутационным потерям, затратам на восстановительные работы или ответственности перед законом. В результате организация рискует не только потерять деньги и испортить репутацию, но и вовсе прекратить свою деятельность.
Часто руководители, администраторы и разработчики не могут точно сказать, сколько веб‑приложений и API используется в организации. И тем более — включает ли их инфраструктура устаревшие зависимости, которые содержат угрозы безопасности. Это не только ставит компанию под угрозу, но и скрывает сам факт угрозы. А масштаб проблемы может казаться не таким большим.
Контроль угроз и уязвимостей — важный компонент программы обеспечения корпоративной безопасности. Он помогает организациям защитить корпоративные сети и сервисы от кибератак, обеспечить соответствие требованиям регуляторов, а также минимизировать риски. Поэтому следует как можно раньше позаботиться не только о скорости выпуска новых релизов, но и о проведении инвентаризации всех цифровых активов, оценке рисков, общем аудите безопасности, обучении сотрудников и внедрении контроля угроз.
Даже если потенциальные угрозы безопасности известны, может возникнуть впечатление, что достаточно один раз проверить программное обеспечение всеми инструментами анализа безопасности кода, чтобы код всегда оставался неуязвимым. К сожалению, это не так. Проверки только исходного кода часто недостаточно. Важно также внедрить средства защиты в инфраструктуру, в которой этот код разрабатывается.
В большинстве современных организаций существует свой цикл непрерывной интеграции и развертывания программного обеспечения. А программы и производственные среды, в которых они работают, постоянно изменяются. Если внедрять инструменты контроля безопасности кода по отдельности, это усложнит поддержку инфраструктуры и затормозит процесс создания продукта.
Использование разных комбинаций сканеров кода и методологий позволяет сделать контроль уязвимостей эффективным и непрерывным, а инфраструктуру разработки — безопасной. Рассказываем про них подробнее.
Цель непрерывного контроля безопасности кода — встроить высокие требования кибербезопасности в привычный жизненный цикл разработки, минимизировать риски и устранить как можно больше угроз, не повлияв при этом на срок выпуска и доработки продукта. Но как правило, потенциальных уязвимостей слишком много, а ресурсов для их устранения и найма высококвалифицированных специалистов не хватает.
Чтобы упростить процесс поиска уязвимостей, были разработаны системы для анализа кода и управления инфраструктурой разработки, позволяющие внедрить практики SSDLC
Static application security testing (SAST) — это вид анализа, который проверяет исходный код на содержание популярных уязвимостей, например из списка OWASP Top 10. Инструменты SAST выявляют критические уязвимости, такие как переполнение буфера, SQL‑инъекции и межсайтовый скриптинг.
SAST включает в себя четыре основных шага, во время которых:
- Подготавливает абстрактное синтаксическое дерево кода — своего рода карту с пометками о том, как фрагменты кода взаимодействуют между собой, какая у них вложенность и в каком порядке они выполняются.
- Ищет в синтаксическом дереве места, которые могут создавать угрозы безопасности.
- Анализирует семантику потенциально опасных участков кода. Когда SAST‑сканер находит такие подозрительные места, он изучает, какие данные передаются и как они обрабатываются.
- Создает отчет о возможных уязвимостях и рекомендациях по их устранению.
SAST-сканер — один из базовых и эффективных инструментов для контроля уязвимостей, но у него есть свои недостатки. Главный из них — большое количество ложных срабатываний.
Анализ с помощью dynamic application security testing (DAST) не проверяет код напрямую, но позволяет имитировать внешние атаки и изучать поведение приложения во время его работы. Для DAST‑проверок необходимо иметь доступный для сканера запущенный экземпляр приложения.
DAST-анализ включает в себя четыре основных шага, в ходе которых анализатор:
- Готовит набор запросов, параметров и данных, которые будут отправлены приложению, его окружению, базе данных и другим связанным компонентам.
- Отправляет запросы, используя разные вариации параметров и данных.
- Изучает ответы и ищет признаки уязвимостей: неправильные ответы, ошибки, утечки информации и другие аномалии.
- Создает отчет о возможных угрозах и рекомендациях по их устранению.
Результаты DAST‑анализа обычно гораздо точнее SAST. Но в отличие от SAST, который может анализировать 100% кодовой базы, DAST охватывает только часть кода, задействованную во время работы программы.
Interactive application security testing (IAST) — инструмент, который объединяет методы SAST и DAST, работая с кодом изнутри функционирующей программы:
- SAST сообщает место потенциально небезопасных сегментов кода.
- DAST находит потенциально опасные запросы.
- Если оба анализатора находят потенциальную угрозу в одном и том же фрагменте кода, IAST сообщает о нем.
Преимущество IAST заключается в его способности связывать результаты работы статических и динамических анализаторов. Это повышает качество сканирования, ускоряет поиск реальных уязвимостей и сокращает время на анализ отчетов каждого из инструментов по отдельности.
Из‑за комбинации двух подходов IAST‑анализ может длиться долго и пропускать код, который не исполняется в процессе работы программы.
Software composition analysis (SCA) — это анализ, который предполагает мониторинг устаревших зависимостей, содержащих критические уязвимости. SCA нужен, чтобы находить угрозы в компонентах с открытым исходным кодом, которые используются во многих приложениях и могут привести к проблемам с безопасностью в каждом из них.
Многие разработчики используют в своих приложениях различные зависимости с открытым исходным кодом. Они могут быть устаревшими и содержать уязвимости, которые уже исправили в последних обновлениях. Но новости об этом, как правило, доходят до злоумышленников раньше, чем до разработчиков. Поэтому программисты могут создавать дыры в безопасности, сами того не зная. SCA решает эту проблему, сканируя репозитории зависимостей и уведомляя о возможных угрозах разработчиков. А еще некоторые SCA‑инструменты предлагают проверку на лицензионную совместимость компонентов и указывают на риски нарушения лицензионных прав.
Как и другие анализаторы, SCA может генерировать ложные срабатывания. Также SCA‑анализаторы могут пропускать неизвестные уязвимости.
Run‑time application security protection (RASP) — технология, которая интегрируется в само приложение и позволяет автоматически определить потенциальные угрозы безопасности.
RASP анализирует и блокирует потенциально опасные входные данные, защищая среду выполнения от нежелательных изменений и несанкционированного доступа. Также проверяет выполняемый API‑запрос и решает, является ли этот запрос потенциально уязвимым местом или возможным способом атаки.
Если инструменты IAST проводят поиск уязвимостей в приложении, то RASP позволяет выявить признаки атаки извне и активно защищает его, сообщая о потенциальных угрозах разработчикам.
Отдельно от других инструментов RASP не сможет обеспечить полноценную защиту приложения от уязвимостей, но станет для них хорошим дополнением.
Infrastructure as code (IaC) — это подход, который позволяет обеспечить не только безопасность кода, но и надежность инфраструктуры. Принцип IaC основан на восприятии инфраструктуры как кода. То есть взаимодействие с ней выстраивается путем редактирования файлов конфигураций, а не через ручную настройку, что позволяет:
- контролировать файлы конфигураций с помощью системы контроля версий;
- поддерживать единообразие систем на всех серверах с целью создать условия для одинакового поведения кода как в тестовой среде, так и во время эксплуатации;
- быстро восстанавливать работоспособность инфраструктуры в случае сбоя;
- отслеживать все события и изменения на серверах и вести их запись.
Методология IaC позволяет быстро масштабировать инфраструктуру и адаптировать ее к обновлениям политики безопасности компании, снижает влияние человека на процессы, а с ним — вероятность ошибки.
Минусы IaC заключаются в том, что взаимодействие с инфраструктурой происходит в формате скриптов, написанных на разных языках программирования. А чем больше масштаб команды или количество проектов внутри одной команды, тем затратнее обслуживать инфраструктуру. Также IaC требует постоянного контроля прав доступа к инфраструктуре и разграничения ролей.
По отдельности эти контроли безопасности не обеспечат абсолютную безопасность кода, но в комплексе смогут повысить безопасность разработки до максимально возможного уровня.
Практически любой современный бизнес тесно связан с IT и нуждается в обеспечении непрерывности процессов, а задержка релиза приложения или простой компании в течение нескольких часов могут привести к огромным убыткам.
Именно поэтому контроль уязвимостей должен использовать преимущества каждого типа инструментов, встроив их на разные этапы SDLC. Например:
- SAST можно использовать вместе с SCA, чтобы выявлять проблемы безопасности в процессе написания кода и сборки.
- IAST, SAST и DAST будут эффективны на этапах тестирования и развертывания.
- RASP будет полезен во время и после релиза.
Совместить достоинства и устранить недостатки этих инструментов по отдельности — непростая задача. Чтобы помочь организациям реализовать эффективный процесс мониторинга, оценки и устранения угроз с минимальными затратами, были созданы комплексные решения. Одно из таких решений — BI.ZONE SSDLC.
Такие решения помогают обеспечить постоянный мониторинг и верификацию уязвимостей и учитывать обратную связь от разработчиков для снижения общего числа ложноположительных срабатываний. Они позволяют упростить выявление и исправление уязвимостей, а также сократить срок их жизни и уменьшить стоимость устранения. Но самое главное, что с помощью комплексных решений можно включить мониторинг и устранение уязвимостей в CI/CD:
- Автоматическое обнаружение и анализ изменений кода веб-приложений позволяет вносить изменения в код, своевременно устранять дыры безопасности и не давать им попадать в релиз ПО в промежутках между циклами тестирования.
- Оповещения о недавно обнаруженных уязвимостях гарантируют, что в каждом сканировании используется самая актуальная информация об эксплоитах и уязвимостях.
- Облачная система доставки упрощает внедрение, помогает быстро масштабировать инфраструктуру и бесперебойно поддерживать меры безопасности любого количества сайтов и приложений.
- Асинхронное тестирование дает возможность проверять отдельные функции или приложения, не дожидаясь окончания сканирования — полное сканирование экосистемы и тестирование итерационных изменений могут быть запущены одновременно.
Независимо от используемого решения, внедрение контроля уязвимостей — обязательный шаг для современных компаний, которые заботятся о кибербезопасности. Но именно внедрение непрерывного контроля уязвимостей в жизненный цикл разработки ПО позволяет службам безопасности, разработки и эксплуатации работать более слаженно, не задерживая при этом ни один из этапов жизненного цикла разработки.