Как работают инструменты статического и динамического анализа кода. Опыт использования АК-ВС 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

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

18.08.2026
NIST модернизирует базу данных уязвимостей с учётом ИИ
18.08.2026
Каждый тайванец получит «технодивиденды»
18.08.2026
Достаточно ли ваша нейросеть духовно‑нравственна?
18.08.2026
«ДиалогНаука» реализовала комплексный проект для АО «Медицина»
18.08.2026
«Административные расследования часто длятся месяцами»
18.08.2026
Positive Technologies выявила сеть по распространению фейков
18.08.2026
Игроделы предпочитают имеющиеся меры поддержки новым
17.08.2026
Скамеры снова ловят россиян на топливо
17.08.2026
Китай усиливается на мировой ИИ-арене
17.08.2026
Google Cloud стремится в эру постквантовой безопасности

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

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

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