Supply Chain Security
Узнать большеЧтобы вычислительные машины могли выполнять те или иные команды, инициируемые пользователями, для каждого продукта разрабатывается свой программный код. От него напрямую зависят не только возможности ПО, но и безопасность приложений. Чтобы обнаружить и своевременно устранить ошибки, проблемы и уязвимости, проводится анализ программного обеспечения. В статье рассказываем, какие методы эффективны для проверки ПО, как применить их на практике.
Программный код: что это и зачем он нужен
Программным кодом называют текст, написанный программистами на одном из существующих языков программирования. Код лежит в основе всех программ, поскольку задает выполняемые ими функции. Чтобы код работал, его необходимо преобразовать с помощью компилятора, который интерпретирует язык программирования и преобразует код в понятный для машины формат.
Код состоит из команд (или блоков команд), связей между этими командами и знаков препинания, чаще всего точек. Знаки нужны, чтобы было понятно, где заканчивается одна команда и начинается следующая. В некоторых языках программирования вместо точек используется перенос строки.
Существует два типа исходного программного кода: открытый и закрытый. Открытый находится в общедоступных источниках, и разработчики могут свободно им пользоваться. Закрытый код недоступен посторонним лицам, и может вообще отсутствовать в готовых программах. В таком случае вместо него используется исполняемый код.
Что такое анализ программного кода
Чтобы выявить уязвимости, недекларированные возможности и ошибки программного кода, применяются различные виды анализа. Они внедряются на разных этапах разработки ПО, могут выполняться как вручную, так и с применением автоматических анализаторов. Второй вариант рациональнее, поскольку проверка будет происходить быстрее. К тому же, не всегда бывает возможность привлечь к процессу разработчиков и секьюрити-инженеров с необходимыми компетенциями.
Методы анализа программного кода
Найти связанные с безопасностью проблемы в исходном коде помогут пять видов тестирований: статическое, динамическое, анализ состава программного обеспечения, цепочки поставок и лицензионных рисков. Рассмотрим подробнее, как они проводятся, какие преимущества и минусы можно выделить.
Статический анализ программного кода
Этот вид тестирования называется Static Application Security Testing (далее — SAST). Такая проверка позволяет анализировать исходный код без необходимости запускать программу, поэтому не придется разворачивать рабочую среду и выделять вычислительные мощности.
SAST можно проводить в процессе разработки программного обеспечения и проверять готовое ПО, например, наследованное или разработанное подрядчиками под заказ. Во многих случаях (зависит от формата ПО) наследованные или сторонне разработанной программы проверяют не все анализаторы, а только те, у которых есть функция анализа бинарного кода. Данная функция реализована в платформе для комплексного анализа безопасности приложений Solar appScreener.
SAST является самым простым и удобным тестированием, поэтому именно его практически всегда применяют для проверки исходного кода. Но ограничиваться только им нецелесообразно, поскольку он не может выявить все уязвимости готового ПО. Оптимальный вариант — исследовать качество и безопасность кода комплексно.
Преимущества статистического анализа программного кода:
- Возможность охватить код практически на 100%, что позволяет обнаружить максимум существующих проблем.
- Внедрение с первых этапов разработки, когда другие виды тестирований еще будут не информативны.
- Возможность проводить статическое тестирование на каждом этапе разработки и сравнивать полученные результаты.
Минус статического тестирования, выполняемого с помощью автоматических анализаторов — большая вероятность ложных срабатываний (false positive), когда анализаторы сообщают о проблемах, которых на самом деле нет. В настоящее время есть возможность сократить количество таких случаев, если использовать специализированные механизмы обработки false positive, например, в Solar appScreener реализована функция Fuzzy Logic Engine.
Динамический анализ программного кода
Dynamic Application Security Testing (далее — DAST) используется для проверки приложений, развернутых и запущенных в рабочей среде. Знать структуру программ и иметь доступ к исходному коду не нужно, поэтому анализ называют методом «черного ящика».
В ходе такого анализа моделируются различные действия в отношении программы с целью проверить, как ПО будет себя вести. В процессе удается выявить уязвимости, недоработанные функции, недекларированные возможности, которые могут использоваться для реализации атак.
DAST позволяет проверить поведение программы при эксплуатации, что дает возможность до релиза исправить ошибки и недоработки. Еще одно важное преимущество — отсутствие ложных сигналов (если тестирование проводится с помощью анализатора).
Несмотря на все преимущества динамического тестирования, у него есть существенные минусы:
- Необходимость создавать максимально похожую на реальную тестовую среду для запуска приложений. Полностью имитировать ее нельзя, поскольку в этом случае есть риск скомпрометировать чувствительные данные пользователей.
- Невозможность в ходе тестирования полностью покрыть код, поскольку доступа к нему не будет. В результате часть проблем может остаться без внимания.
Динамическое тестирование целесообразно проводить, когда приложение уже готово к работе, то есть не на первых на этапах создания ПО. Чтобы анализ показал максимальную эффективность, его целесообразно комбинировать со статической проверкой.
Анализ состава программ
Software Composition Analysis (далее — SCA) — анализ ПО с открытым программным кодом. С его помощью можно обнаружить уязвимости, которые возникают в результате использования общедоступных компонентов.
SCA-тестирование также позволяет находить закладки в сторонних библиотеках, осуществлять непрерывный мониторинг программ с целью своевременного обнаружения уязвимостей. Анализаторы, сканирующие состав ПО, выполняют еще одну важную функцию — отправляют уведомления о проблемах, выявленных в разрабатываемых и наследованных приложениях.
Преимущества SCA:
- Простая интеграция в цикл безопасной разработки программного обеспечения.
- Возможность проводить анализ программного кода и других компонентов на любом этапе разработки.
- Возможность проверить как разрабатываемое ПО, так и уже эксплуатируемое.
Минусом такого тестирования можно назвать узкую направленность, поскольку с его помощью проверяются только открытые компоненты.
Анализ цепочки поставок и лицензионных рисков
Существует такой вид анализа, как Supply Chain Security (далее — SCS). Он подразумевает проверку процессов, происходящих с программным продуктом. Анализируются все используемые инструменты и технологии, компоненты ПО, лица, участвующие в разработке. Каждому проверяемому фактору присваивается оценка доверия — показатель, указывающий на потенциальные риски ИБ, которые могут возникнуть в будущем.
Также целесообразно выполнять автоматизированный анализ лицензионных рисков, подсвечивающий проблемы, с которыми можно столкнуться при лицензировании ПО с открытым кодом.
Возможности Solar appScreener для анализа программного кода
Solar appScreener — комплексное решение для контроля безопасности ПО, включающее модули для проведения статического и динамического тестирований, анализа состава приложений, анализа лицензионных рисков. Преимущества платформы:
- Технология Fuzzy Logic Engine, позволяющая свести к минимуму вероятность ложных сигналов анализатора при проведении SAST-тестирования и анализа сторонних компонентов.
- Поддержка всех распространенных языков программирования.
- Возможность анализа бинарного программного кода, по технологии реверс-инжиниринга, которая позволяет восстанавливать из исполняемых файлов исходный код.
- Расширенный инструментарий для проведения эффективного анализа программного кода.
- Корреляция результатов разных видов проверок, подготовка итоговых отчетов с подробными экспертными рекомендациями по устранению проблем ПО.
Solar appScreener может комплексно проверять ПО с применением перечисленных в статье видов анализа. Платформа имеет единый удобный интерфейс для управления всеми сканированиями, просмотра отчетов о результатах.