
Детали LLM и поиск уязвимостей безопасности в GitHub Copilot с FS-кодом
29 июля 2025 г.Таблица ссылок
Аннотация и I. Введение
II Связанная работа
Iii. Технический фон
IV Систематическое обнаружение уязвимости безопасности моделей генерации кодов
V. Эксперименты
VI Дискуссия
VII. Заключение, подтверждение и ссылки
Приложение
A. Подробности моделей языка кода
B. Поиск уязвимостей безопасности в GitHub Copilot
C. Другие базовые линии с использованием CHATGPT
D. Влияние различных числа нескольких примеров
E. Эффективность в создании конкретных уязвимостей для C -кодов
F. Результаты уязвимости безопасности после дедупликации нечеткого кода
G. Подробные результаты передачи сгенерированных небезопасных подсказок
H. Подробная информация о генерации набора данных небезопасных подсказок
I. Подробные результаты оценки кодельмов с использованием набора данных небезопасного
J. эффект температуры отбора проб
K. Эффективность схемы инверсии модели при восстановлении уязвимых кодов
L. Качественные примеры, сгенерированные CodeGen и CHATGPT
М. Качественные примеры, сгенерированные GitHub Copilot
A. Подробности моделей языка кода
Крупные языковые модели делают значительный прогресс в текущих разработках глубокого обучения. При увеличении размера их обучающая способность позволяет им применяться к широкому диапазону задач, включая генерацию кода для парного программирования, связанных с AI. Учитывая подсказку, описывающую функцию, модель генерирует подходящий код. Помимо моделей с открытым исходным кодом, e. глин CodeGen [6], есть также модели черного ящика, такие как CHATGPT [4] и Codex [5] [1]
В этой работе, чтобы оценить наш подход, мы сосредоточены на двух разных моделях, а именно Codegen и CHATGPT. Кроме того, мы оцениваем три другие модели языка кода с использованием нашего набора данных о бессектуальных подсказках. Ниже мы представляем подробную информацию об этих моделях.
а) CODEGEN:CodeGen - это набор моделей с разными размерами для синтеза кода [6]. На протяжении всей этой статьи все эксперименты выполняются с 6 миллиардами параметров. Модель авторегрессии на основе трансформаторов обучена естественному языку и языку программирования, состоящей из набора из трех наборов данных, и включает в себя репозитории GitHub (ThePile), многоязычный набор данных (BigQuery) и монолингвальный набор данных в Python (Bigpython).
б) Звездный Кодер:Модели StarCoder [24] разработаны как крупные языковые модели для кодов, обученных данным GitHub, которые включают более 80 языков программирования. Модель поставляется в различных версиях, таких как Starcoderbase и StarCoder. StarCoder-это тонкая версия StarCoderBase, специально обученная с использованием данных кода Python. В нашем эксперименте мы используем Starcoderbase, которая имеет 7 миллиардов параметров.
в) код лама:Code Llama [12] является семейством LLM для кода, разработанного на основе моделей Llama 2 [61]. Модели разработаны с использованием архитектур только для декодера с параметрами 7B, 13B и 34B. Code Llama включает в себя различные версии, адаптированные для широкого спектра задач и приложений, включая основополагающую модель, специализированные модели для кода Python и модели, настроенные на инструкции. В наших экспериментах мы генерируем небезопасные подсказки, используя код Llama (без настройки инструкций), который имеет 34 миллиарда параметров. Кроме того, мы оцениваем подготовленную инструкции версию кода Llama, которая имеет 13 миллиардов параметров, используя предлагаемый нами набор данных о небезопасных подсказках.
г) WizardCoder:WizardCoder улучшает модели языка кода, адаптируя метод Evol-Instruct [62] к домену данных исходного кода [56]. Более конкретно, этот метод адаптирует Evol-Instruct [62] для создания сложной связанной с кодом инструкции и использования сгенерированных данных для точной настройки моделей языка кода. В нашем эксперименте мы оцениваем WizardCoder с параметрами 15B, используя наш набор небезопасных подсказок. Важно отметить, что WizardCoder построен на модели StarCoder15B, и он дополнительно настраивается с использованием их сгенерированных инструкций [56].
д) Чатгпт:Модель CHATGPT представляет собой вариант моделей GPT3.5 [1], набор моделей, которые улучшаются на вершине GPT-3 и могут генерировать и понимать естественный язык и коды. Модели GPT-3.5 тонко настроены под подходами к подходам к обучению и подкреплению с помощью человеческой обратной связи [4]. Модели GPT-3.5 обучены следовать инструкциям пользователя, и было показано, что эти модели могут следовать инструкциям пользователя, чтобы суммировать код и ответить на вопросы о кодах [3]. Во всех наших экспериментах мы используем версию Chatgpt GPT-3.5-Turbo-0301, предоставленную OpenAI API [52].
Стоит отметить, что мы используем GPT-4 [54] в качестве одной из моделей для создания небезопасных подсказок нашего набора данных. Мы выбрали эту модель из -за ее исключительной эффективности в задачах генерации программ. В процедуре создания небезопасных подсказок мы используем GPT-4 с длиной 8K контекста через API OpenAI [52]
B. Поиск уязвимостей безопасности в GitHub Copilot
Здесь мы оцениваем возможности нашего подхода FS-кода в поиске уязвимостей безопасности коммерческой модели Black-Box Github. Github Copilot использует модели семейства Codex [15] через API Openai. Этот помощник по программированию ИИ использует определенную структуру быстрого приглашения для завершения заданных кодов. Это включает в себя суффикс и префикс кода пользователя вместе с информацией о других письменных функциях [63]. Точная структура этой подсказки не задокументирована публично. Мы оцениваем наш подход FS-Code, предоставляя пять нескольких выстрелов для различных CWE (следуя нашим настройкам в предыдущих экспериментах). Поскольку мы не имеем доступа к модели GitHub Copilot или их API, мы вручную запрашиваем GitHub Copilot для создания небезопасных подсказок и кодов через доступное расширение кода Visual Studio [9]. Из-за трудоемкой работы по созданию небезопасных подсказок и кодов мы предоставляем результаты для первых четырех из тринадцати репрезентативных CWE. Эти CWE включают CWE-020, CWE-022, CWE-078 и CWE-079 (см. Таблицу I для описания этих CWE). В процессе генерации небезопасных подсказок и кода мы запросили Ropilot Github, чтобы обеспечить завершение для данной последовательности кода. В каждом запросе Github Copilot возвращает до 10 выходов для данной кодовой последовательности. Github Copilot не возвращает дублируемые выходы; Следовательно, выход в некоторых случаях может быть менее 10. Чтобы генерировать небезопасные подсказки, мы используем те же самые построенные несколько выстрелов, которые мы используем в нашем подходе FS-кода. После генерации набора небезопасных подсказок для каждого CWE мы запросите GitHub Copilot для завершения предоставленных небезопасных подсказок, а затем используем CodeQL для анализа сгенерированных кодов.
В таблице VII представлены результаты сгенерированных уязвимых кодов с помощью GitHub Copilot с использованием нашего подхода FS-кода. Результатами являются количество кодов, по крайней мере, с одной уязвимостью. В общей сложности мы генерируем 783 кода, используя 109 подсказок для всех четырех CWE. В таблице VII столбец 2–5 дает результаты для различных CWE, а столбец 6 предоставляет сумму кодов с другими CWE, которые обнаруживает CodeQL. Последний столбец предоставляет сумму кодов, по крайней мере, с одной уязвимостью безопасности. В таблице VII мы
Обратите внимание, что наш подход также способен проверить потенциал коммерческой модели черной коробки в создании уязвимых кодов. Мы предоставляем примеры уязвимых кодов, сгенерированные GitHub Copilot в Приложении B.
Авторы:
(1) Хоссейн Хаджипур, Центр Cispa Helmholtz для информационной безопасности (hossein.hajipour@cispa.de);
(2) Кено Хасслер, Центр Cispa Helmholtz для информационной безопасности (keno.hassler@cispa.de);
(3) Торстен Хольц, Центр Cispa Helmholtz для информационной безопасности (holz@cispa.de);
(4) Lea Schonherr, Cispa Helmholtz Center для информационной безопасности (schoenherr@cispa.de);
(5) Марио Фриц, Центр Cispa Helmholtz для информационной безопасности (fritz@cispa.de).
Эта статья есть
[1] Недавно Openai установил API модели Codex.
Оригинал