30 мая 2025 / время чтения: 6 мин. / всего просмотров: 4

Как работают инструменты статического и динамического анализа кода. Опыт использования АК-ВС 3


В условиях развития технологий и возрастания угроз в сфере кибербезопасности обеспечение безопасности программного обеспечения становится приоритетной задачей для многих организаций. Одним из эффективных способов выявления потенциальных уязвимостей является использование инструментов статического и динамического анализа кода. Эти методы анализа играют ключевую роль в раннем обнаружении дефектов и уязвимостей, что позволяет значительно повысить безопасность разрабатываемых программных продуктов.

Статистика

АК-ВС 3 активно используется в различных сферах, включая государственные учреждения, коммерческие организации и высшие учебные заведения. Решение успешно интегрировано в процессы безопасности множества организаций, что подтверждается растущей статистикой его внедрения. Университеты применяют АК-ВС 3 для обучения специалистов в области информационной безопасности, а государственные структуры используют его для анализа критически важных программных решений.

С 2024 года по настоящее время 118 организаций, включая государственные учреждения, высшие учебные заведения и испытательные лаборатории, успешно приобрели продукт АК-ВС 3. Из данного числа 110 организаций представляют коммерческий сектор, что свидетельствует о растущем интересе бизнеса к современным технологиям анализа кода. С начала 2025 года около 10–15 организаций воспользовались возможностью протестировать демоверсию АК-ВС 3.

Архитектура АК-ВС 3:

1. Модуль «Клиент» — IDE «Эшелониум»: осуществляет работу с проектами, предоставляет возможность для просмотра, анализа и разметки срабатываний.

2. Модуль «Сервер»: обеспечивает выполнение статического анализа кода, динамического анализа кода, полносистемного динамического анализа (Код2), фаззинг-тестирования, а также предоставляет веб-интерфейс для удобной работы.

3. Модуль сборки: включает утилиту для подготовки исходных текстов, необходимых для выполнения статического анализа в рамках проведения подконтрольной сборки исследуемого программного обеспечения.

4. Модуль фаззера: менеджер фаззеров, который выполняет фаззинг-тестирование.

5. Модуль «Код2»: отвечает за реализацию полносистемного динамического анализа и подготовку полносистемных трасс для последующего анализа (рис. 1).

Как работают инструменты статического и динамического анализа кода. Опыт использования АК-ВС 3

Рисунок 1. Состав и структура АК-ВС 3

ИСПОЛЬЗУЕМЫЕ МЕТОДЫ АНАЛИЗА

Статический анализ исходного кода программы (SAST)

Статический анализ представляет собой процесс анализа исходного кода программы с целью выявления дефектов кода, в частности потенциально опасных конструкций. В соответствии с актуальной нормативной базой данный анализ также следует проводить в отношении компонентов, заимствованных у сторонних разработчиков, при условии доступности их исходного кода.

Первые версии статических анализаторов были схожи с линтерами — утилитами, которые выполняют анализ кода, ищут совпадения с заданными шаблонами и формируют выводы о наличии или отсутствии определённых конструкций в исходном коде. Например, это может касаться жёстко заданных паролей или использования небезопасных функций. Изначально линтеры разрабатывались с целью содействия разработчикам в написании качественного кода и не имели непосредственного отношения к вопросам безопасности.

Цели статического анализа кода программы:

— поиск дефектов кода;

— подсчёт метрик;

— рекомендации по оформлению кода;

— внедрение в рамках цикла безопасной разработки (SSDLC);

— обеспечение выполнения нормативных требований заказчика и регуляторов.

Основные применяемые методы статического анализа кода программы:

1. Синтаксический анализ: включает использование базы данных сигнатур, где ошибки выявляются путём поиска заранее известных антипаттернов в исходном коде.

2. Межпроцедурный анализ: позволяет выявлять сложные ошибки, возникающие из-за взаимодействия различных функций и методов. В этом случае анализируется не только отдельная строка кода, но и совокупность всех файлов и функций с учётом контекста и взаимосвязей.

3. Контекстно-чувствительный анализ: сохраняет контекст переходов между функциями и их состояниями. Например, если для входа в определённую функцию необходимо, чтобы переменная имела значение 0, статический анализатор будет отслеживать, что в дальнейшем эта переменная не может принимать иное значение.

Дополнительно могут быть использованы межмодульный анализ, анализ потока управления, анализ потока данных и ряд других методов. Для более детального ознакомления с различными видами статического анализа рекомендуется обратиться к статье, в которой представлен сравнительный анализ работы статических анализаторов в соответствии с требованиями ФСТЭК России, Министерства обороны Российской Федерации, а также зарубежных стандартов, таких как NIST SP 500-268 и SATEC [1].

В ходе статического анализа кода акцент делается на выявление дефектов, однако уязвимости могут быть обнаружены исключительно в процессе динамического анализа. Значительная часть проблем, связанных с безопасностью программного обеспечения, проявляется лишь во время выполнения программы. Таким образом, динамический анализ играет ключевую роль в обеспечении безопасности программных продуктов, позволяя выявить риски, которые невозможно обнаружить, работая лишь с исходными текстами программы.

Динамический анализ кода (DAST)

Динамический анализ кода представляет собой процесс выявления уязвимостей в режиме выполнения (run-time) программного обеспечения. Основные методы динамического анализа включают общую сборку путей выполнения, полносистемный анализ и фаззинг-тестирование.

Общая сборка путей выполнения включает проведение сборки исходных текстов, в которые будут интегрированы специальные датчики. Эти датчики отслеживают проходящие через них вызовы функций и осуществляют запись логов в файл, на основе которых впоследствии осуществляется анализ и формируется трасса выполнения. Это позволяет определить, какие блоки кода были вызваны, а какие остались неиспользованными, а также проследить за прохождением по веткам выполнения (рис. 2).

Таким образом, этапы динамического анализа выглядят следующим образом:

1. Сбор логов по динамическому выполнению проекта.

2. Обнаружение путей ветвления и исполнения проекта на основе реального выполнения.

3. Определение модулей и функций, через которые проходило выполнение.

4. Выявление мест возникновения ошибок и сбоев (рис. 3).

Как работают инструменты статического и динамического анализа кода. Опыт использования АК-ВС 3

Рисунок 2. Построение блок-схемы для конкретного функционального объекта

Как работают инструменты статического и динамического анализа кода. Опыт использования АК-ВС 3

Рисунок 3. Анализ отработавших функциональных объектов, которые были проинструментированы датчиками при динамическом анализе

Полносистемный динамический анализ (Код2)

Полносистемный анализ представляет собой анализ с полной трассировкой выполнения программы, что позволяет отслеживать помеченные данные, а также выполнение и пересечение различных элементов. Этот метод основан на использовании QEMU, в рамках которого осуществляется функциональное тестирование, трассировка и непосредственный анализ.

Этапы полносистемного анализа:

— полносистемный анализ трассы выполнения кода;

— запись данных всей системы с отслеживанием каждого элемента;

— поиск утечек данных и критической информации.

Фаззинг-тестирование (FAST)

Фаззинг-тестирование представляет собой методику, при которой на вход программы подаются сгенерированные или мутационные данные. В рамках фаззинга с обратной связью (feedback-based fuzzing) осуществляется сбор логов о том, как обработанные данные влияют на систему. Входные данные генерируются с использованием как мутационных, так и словарных (генерационных) методов.

— Мутационный фаззинг: данные могут принимать любые формы, включая изображения, видео, байты и произвольные наборы данных.

— Генерационный фаззинг: этот метод, хотя и имеет частичное совпадение с мутационным, позволяет генерировать входные данные, которые являются валидными для первого фильтра при взаимодействии с интерфейсом системы.

Фаззинг-тестирование в АК-ВС 3 реализовано на основе AFL++ с учётом оригинальной технологии разработки.

Вывод

Инструменты статического и динамического анализа кода играют важнейшую роль в обеспечении безопасности программного обеспечения, позволяя выявить уязвимости на разных этапах разработки. Статический анализ помогает обнаружить дефекты на уровне исходного кода, прежде чем они могут быть использованы злоумышленниками. Динамический анализ, в свою очередь, позволяет выявить проблемы, которые могут проявиться лишь во время выполнения программы, такие как утечки памяти или переполнения буфера. Оба метода являются неотъемлемой частью процесса безопасной разработки и позволяют предотвратить угрозы безопасности на ранних стадиях.

[1] Марков А. С., Антипов И. С., Арустамян С. С., Магакелова Н. А. Сравнительный анализ статических анализаторов кода. Современная методология // Вопросы кибербезопасности. 2024. № 5 (63). С. 79–88.

Похожие статьи

Статья

Квантовый рубеж: как новая физика переписывает правила кибербезопасности

Статья

Браузер голосует против. Почему ваш телефон вдруг решил, что российские сайты опасны

Статья

Kaspersky выходит на российский рынок Vulnerability Management

Статья

Эпоха алгоритмических войн: как передовые LLM меняют ландшафт киберзащиты

  1. 05 Сергей Добриднюк: Вопрос выживаемости надо обязательно проверять в любом архитектурном решении
  2. 06 Киберустойчивость вместо «непробиваемой стены». Новая философия банковской ИБ
  3. 07 Роман Ванерке: Мы приводим инфраструктуру заказчика в более защищённое состояние, фактически не внедряя новых решений
  4. 08 От America First Трампа до манифеста Palantir: удастся ли глобалистам превратить мир в «цифровую казарму»?
  5. 09 Какое будущее готовят нам ИИ-агенты?
  6. 10 ГосСОПКА и люди. Почему цифровой щит не спасёт от человеческой ошибки
ИИ-ассистент BISонлайн
Привет! Я помогу разобраться в материалах журнала. Хотите, перескажу текущую статью за 20 секунд?
Рекомендую прочитать
«Как построить SOC в 2026»