Метод определения уязвимостей программного кода на основе кластерного анализа и контекстной адаптации больших языковых моделей
Ключевые слова:
информационная безопасность, обнаружение уязвимостей, большие языковые модели, кластерный анализ, машинное обучениеАннотация
Введение: обнаружение уязвимостей в исходном коде остается одной из приоритетных задач в области обеспечения кибербезопасности. Классические методы анализа кода часто не учитывают контекст исполнения и слабо масштабируются при росте объема программ. В условиях сложных архитектур и неполных аннотаций данных требуется контекстно-адаптированный подход, способный выявлять уязвимости на основе семантического и структурного анализа. Цель: разработать метод обнаружения уязвимостей в программном коде с использованием кластерного анализа и контекстной адаптации больших языковых моделей, способных учитывать не только синтаксис, но и семантическую структуру программ. Методы: разработанный подход сочетает кластеризацию кодовых сегментов с применением предварительно дообученных языковых моделей, адаптированных к программному коду. Для повышения результативности используется выделение признаков уязвимости, включающих как непосредственно уязвимый фрагмент, так и его контекст – управляющие конструкции, переменные, вызовы функций. Обучение и оценка проводились на размеченных открытых датасетах с использованием предобученных больших языковых моделей. Результаты: метод позволяет автоматически группировать фрагменты кода по структурному сходству, после чего осуществляется семантический анализ с помощью больших языковых моделей, способных распознавать шаблоны уязвимостей. Эксперименты показали, что включение контекстной информации существенно повышает эффективность определения уязвимостей в исходном коде. На датасетах BigVul и CVEfixes предложенный метод достиг точности до 78 % и полноты 82 %, что на 9–12 % выше по сравнению с существующими решениями. Метод демонстрирует устойчивость к синтаксическим вариациям и может быть использован для анализа ранее неразмеченного кода. Практическая значимость: метод применим в системах автоматического анализа исходного кода и способен значительно сократить затраты на ручной аудит, особенно в условиях анализа больших кодовых баз. Также он может использоваться в образовательных и исследовательских целях для анализа паттернов уязвимостей. Обсуждение: результаты подтверждают эффективность использования больших языковых моделей в задачах анализа безопасности программ. Перспективным направлением является расширение метода на другие языки программирования, а также исследование гибридных подходов с участием графовых нейросетей. Открытым остается вопрос аргументации решений модели и автоматического объяснения причин классификации сегмента как уязвимого.