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

BIS Journal №2(57)2025

30 мая, 2025

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

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

 

Статистика

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

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

 

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

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

 

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

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

 

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

 

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

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

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

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

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

 

Вывод

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

 

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

Стать автором BIS Journal

Смотрите также

Подписаться на новости BIS Journal / Медиа группы Авангард

Подписаться
Введите ваш E-mail

Отправляя данную форму вы соглашаетесь с политикой конфиденциальности персональных данных

17.06.2025
ВТБ узнал мнение россиян об интеграции виртуальной тревожной кнопки
17.06.2025
Без ИБ теперь даже не отдохнуть. Боты оставляют россиян без отпуска
17.06.2025
ИБ-компании помогли Интерполу в борьбе с азиатскими хакерами
17.06.2025
Северная Европа задумалась о цифровом суверенитете
17.06.2025
Гигант оптовой торговли продуктами питания стал жертвой кибератаки
16.06.2025
Китай нагружает соседские ИИ-чипы своими данными
16.06.2025
Ernst & Young: Быстрое внедрение ИИ-агентов требует усиления контроля
16.06.2025
«Платформизация вынудит многие отрасли выйти из-зоны комфорта»
16.06.2025
Трамп пустил под нож основные киберпроекты Обамы и Байдена
16.06.2025
Сравняет ли Иран счёт в «цифре»?

Стать автором BIS Journal

Поля, обозначенные звездочкой, обязательные для заполнения!

Отправляя данную форму вы соглашаетесь с политикой конфиденциальности персональных данных