Каскадная AI-валидация дефектов кода для оптимизации процесса исправления
Пожалуй, главные «боли» руководителя, отвечающего за безопасную разработку программных продуктов, – это эффективное выявление и устранение дефектов кода, напрямую влияющее на его безопасность и сроки ввода приложения в эксплуатацию, а также минимизация трудозатрат высококвалифицированных специалистов на решение данных задач. Конечно, современные инструменты анализа безопасности кода позволяют значительно упростить и ускорить процесс за счет автоматизации, но для достижения максимального эффекта необходимо разбираться в том, как они работают. В ITD Group решили объяснить парадигму оптимизации работы с уязвимостями на примере методологии каскадной AI-валидации дефектов кода (КАИВ) — подхода, позволяющего кардинально сократить количество ложноположительных срабатываний анализатора кода и упростить процесс исправления.
Содержание |
Анна Архипова, менеджер продукта SASTAV ITD Group |
Статический анализ: основные принципы
Работа с уязвимостями начинается со статического анализа (SAST), ставшего уже практически стандартом. Парадигма классического SAST – поиск всех возможных векторов атак на анализируемом участке кода. Под вектором атаки в данном случае понимается возможный вектор передачи злоумышленником потенциально опасных данных через приложение, не подвергающийся валидации на своем пути.
Из «коробки» ни один SAST-анализатор не знает специфики разрабатываемых приложений и контекста в силу отсутствия данных об архитектуре, неполноты кода, неопознанного фреймворка и прочих факторов, а также невозможности анализа поведения приложения в динамике. Именно поэтому ложноположительные сработки – печальная неизбежность. С точки зрения SAST, эти сработки зачастую могут быть верны для конкретного участка кода, но по тем или иным причинам на практике не эксплуатируемы для приложения в целом. Кроме того, SAST не осуществляет проверок уже собранного приложения, где векторы атак могут быть нейтрализованы разными способами, что также влияет на уровень ложноположительных срабатываний.
Некоторые SAST-решения, например, SASTAV или Checkmarx, строят карту векторов атак, что позволяет специалистам сосредоточиться на оптимальных местах для их устранения (те самые «best fix location»). Известный писатель-фантаст Сергей Лукьяненко выступит на TAdviser SummIT 28 ноября. Регистрация
Что имеется в виду? Предположим, у нас есть код, где через различные точки входа поступают данные. Разработчик должен разобраться, какие параметры передаются и через какие именно участки кода они проходят, чтобы выявить потенциальные уязвимости. Один из ключевых моментов — проверка параметров на этапе их попадания в базу данных, где может срабатывать встроенная система очистки, как это бывает в фреймворке SpringData. В таком случае санитизация уже присутствует в фреймворке, и этого будет достаточно, чтобы вектор уже не был потенциально опасным, но всегда есть вероятность того, что не все параметры проходят такую проверку внутри фреймворка, это стоит проверять. Поиск места оптимального устранения максимального количества дефектов - нетривиальная задача. Ее решение позволит поправить один участок кода, закрыв потенциальные уязвимости сразу во всех векторах, проходящих через этот участок кода.
Решать задачу сокращения трудозатрат специалистов по безопасности приложений и разработчиков можно несколькими способами, а лучше – их совокупностью:
- Визуализация векторов атак
- Автоматизация (включая AI) триажа потенциальных дефектов
- Автоматическая генерация исправленного кода
Визуализация векторов атак
Помимо линейного представления кода, можно построить многомерную графическую модель. Это удобно, ведь векторы прохождения данных в приложениях зачастую могут пересекаться или иметь одинаковые точки входа или выхода. Поскольку нам нужно поставить хотя бы одну санитизирующую или валидирующую функцию на их пути, оптимально сделать это как раз в точках пересечения. Таким образом, мы одним исправлением закроем сразу большое количество потенциальных векторов атак. Благодаря уже одной этой визуализации трудозатраты на исправления существенно снижаются. Графы наглядно демонстрируют, где именно пересекаются векторы атак, что позволяет специалисту быстрее принять решения, где и как должен быть исправлен дефект.
Особенно эффективно такой подходит работает на больших приложениях, где много логических зависимостей.
Методология КАИВ: сокращение объема работы
Другой важный аспект современного подхода к безопасности кода — это автоматизация с использованием искусственного интеллекта (AI) триажа срабатываний SAST-анализатора и предоставления обоснованного решения. Собственно, в этом и суть КАИВ.
Методология отработки ложноположительных срабатываний построена следующим образом: за основу берутся срабатывания классического SAST, строится граф и выявляются точки пересечения векторов, затем собирается контекст для отработки AI, к которому относятся язык программирования, тип уязвимости, параметры точек входа и выхода, участки кода, попадающие в выборку, способы устранения дефектов и другие параметры.
Мы устраняем ложноположительные срабатывания и при этом не получаем ложноотрицательных. Почему? Контекст собирается по четко заданным параметрам, которые явно подсвечивают, что вектор атаки не может быть проэксплуатирован. Такой подход гарантирует нулевой уровень False Negative.
Важно знать, что ложноположительные срабатывания могут остаться. Не все можно предусмотреть. Тем не менее, такой процесс позволяет кардинально снизить нагрузку на команду, так как основную часть рутинной работы выполняет автоматизированная система.
Исследование, которое мы провели, используя российскую облачную нейросеть, показало, что сократить объем трудозатрат можно в 8,5 раз. В нашем случае при тестировании на нескольких приложениях после обработки и анализа AI потенциальных дефектов осталось менее 12% уязвимостей, которые потребовали детальной проверки специалистом.
Кнопка «Сделать хорошо»
Собирая контекст, AI также собирает и варианты исправления для той или иной уязвимости. Это означает, что финальный вариант исправления дефекта можно сразу использовать в своем коде. Данный функционал позволяет экономить время уже не только AppSec-специалиста при триаже результатов, но и время разработчиков на исправление: достаточно просто скопировать исправленный код и вставить его на место уязвимого.
Все же не стоит забывать, что искусственный интеллект – это не человек, и окончательное решение - за ответственным специалистом. Пока заменить человека полностью не получится, но сократить время, нервы и, в конечном итоге, деньги стало возможным.
Стоимость и перспективы локализации AI
Как уже было упомянуто, в нашем исследовании использовалась российская облачная нейросеть. Ее уникальное преимущество - довольно небольшая стоимость. Так, в рамках одного из проектов стоимость анализа нескольких приложений с ее помощью составила всего 46,5 рублей за три недели работы. Это даже дешевле, чем стоимость проезда специалиста на общественном транспорте. При этом система практически не требует ресурсов и способна эффективно работать с большими объемами данных.
У многих встает резонный вопрос о безопасности при использовании облачных решений. Некоторые компании опасаются передавать свой код в облако из-за потенциальных рисков его утечки. В таких случаях возможна локализация системы AI, что позволит эксплуатировать ее внутри своего контура и снизить зависимость от внешних поставщиков.
Выводы
Оптимизация работы с уязвимостями кода с использованием методологии КАИВ — это эффективный подход, позволяющий значительно сократить объем трудозатрат и повысить качество результата. Ключевые моменты, которые нужно учитывать для достижения максимальной эффективности:
- правильная трассировка векторов атак;
- сбор контекстных данных;
- точные запросы к автоматизированной системе анализа.
При этом AI помогает сэкономить время, предоставляя контекстные объяснения для результатов обработки каждого срабатывания и рекомендации по устранению уязвимостей. В отличие от классического подхода, который дает рекомендации общие, КАИВ предлагает контекстные и адаптированные методы решения, в том числе, готовый вариант исправленного кода, что существенно облегчает работу разработчикам.
В результате компании получают инструмент, способный снизить трудозатраты в 8,5 раз за счет сокращения количества ложноположительных срабатываний и предоставить рекомендации по исправлению уязвимостей с пояснениями. Такой подход помогает не только ускорить процесс устранения дефектов, но и повысить безопасность конечного продукта.