Раскрытие пропасти кода: инвертирование LLMS для обнаружения вихрей уязвимости в программах, сгенерированных AI

Раскрытие пропасти кода: инвертирование LLMS для обнаружения вихрей уязвимости в программах, сгенерированных AI

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. Модели больших языков и подсказка

Модели крупных языков продвинули поле обработки естественного языка в различных задачах, включая ответ на вопрос, перевод и понимание прочитанного [1], [17]. Эти этапы были достигнуты путем масштабирования размера модели с сотен миллионов [18] до сотен миллиардов [1], самоотверженных объективных функций, подкрепления обучения от обратной связи человека [19] и огромной корпорации текстовых данных. Многие из этих моделей обучаются крупными компаниями, а затем выпускаются в качестве предварительно обученных моделей. Браун и соавт. [1] показывают, что эти модели могут использоваться для решения различных задач, предоставляя только несколько примеров в качестве входных данных - без каких -либо изменений в параметрах моделей. Конечный пользователь может использовать шаблон в качестве нескольких выстрелов для руководства моделями для создания желаемого вывода для конкретной задачи. В этой работе мы показываем, как можно использовать несколько выстрелов подхода для создания кода с конкретными уязвимостями путем аппроксимации инверсии моделей генерации кодов черного ящика.

B. Большие языковые модели исходных кодов

Растет интерес к использованию больших языковых моделей для понимания исходного кода и задач генерации [7], [5], [20]. Feng et al. [21] и Guo et al. [22] предлагают модели только для энкодера с вариантом объективных функций. Эти модели [21], [22] в первую очередь фокусируются на классификации кода, поиске кода и ремонте программы. Ahmad et al. [23] и Wang et al. [20] Используйте архитектуру Encoder-Decoder для борьбы с кодом кода и задач генерации кода в текст, включая перевод программы, ремонт программы и суммирование кода. В последнее время модели Decoderonly показали многообещающие результаты в создании программ в правом направлении [5], [4], [6], [12]. Эти модели могут быть применены к задачам генерации программ с нулевым выстрелом и несколькими выстрелами [5], [6], [24], [12], включая завершение кода, заполнение кода и задачи текста к коду. Большие языковые модели кода в основном были оценены на основе функциональной правильности сгенерированных кодов без рассмотрения потенциальных проблем уязвимости безопасности (см. Раздел II-C для обсуждения). В этой работе мы предлагаем подход к автоматическому поиску конкретных уязвимостей безопасности, который может генерироваться этими моделями посредством приближения инверсии целевых моделей черного ящика посредством нескольких выстрелов.

C. Проблемы с уязвимостью моделей генерации кодов

Модели генерации крупных языковых кодов были предварительно обучены с использованием обширной корпорации данных кода с открытым исходным кодом [7], [5], [25]. Эти коды с открытым исходным кодом могут содержать множество различных проблем уязвимости безопасности, включая нарушения безопасности памяти [26], устаревший API и алгоритмы (например, алгоритм хэша MD5 [27], [15]) или инъекция SQL и сценарии перекрестных сайтов [28], [15] уязвимостей. Большие языковые модели могут изучать эти шаблоны безопасности и потенциально генерировать уязвимые коды, учитывая входные данные пользователей. Недавно Pearce et al. [15] и Siddiq и Santos [28] показывают, что сгенерированные коды с использованием моделей генерации кодов могут содержать различные проблемы безопасности.

Pearce et al. [15] Используйте набор сценариев, разработанных вручную, для изучения потенциальных проблем уязвимости в области безопасности Github Copilot [9]. Эти сценарии курируются с использованием ограниченного набора уязвимых кодов. Каждый сценарий содержит первые несколько строк потенциально уязвимых кодов, и модели запрашиваются, чтобы завершить сценарии. Эти сценарии были разработаны на основе общей перечисления слабости Митра (CWE) [29]. Pearce et al. [15] Оцените уязвимости сгенерированных кодов, используя инструмент статического анализа GitHub CodeQL. Предыдущие исследования [15], [30], [28] изучали проблемы безопасности в моделях генерации кодов, но они полагались на ограниченный набор сценариев, разработанных вручную, что может привести к отсутствию потенциальных кодов с определенными типами уязвимости. Напротив, наша работа предлагает систематический подход к поиску уязвимостей безопасности путем автоматического генерирования различных сценариев в масштабе. Это позволяет нам создавать разнообразный набор небезопасных подсказок для оценки и сравнения моделей в отношении создания кода с проблемами безопасности.

D. Моделиная инверсия и извлечение данных

Глубокая модель инверсия была применена к модельному объяснению [31], модели дистилляции [32] и чаще для реконструкции частных данных обучения [33], [34], [35], [36]. Общая цель в инверсии модели состоит в том, чтобы реконструировать репрезентативное представление о входных данных на основе выходов моделей [34]. Недавно Carlini et al. [37] показали, что можно извлечь запоминающиеся данные из моделей крупных языков. Эти данные включают личную информацию, такую как электронная почта, URL-адреса и номера телефонов. В этой работе мы используем несколько выстрелов, чтобы приблизительно инверсию целевых моделей кода черного ящика. Здесь наша цель состоит в том, чтобы использовать аппроксимированную инверсию моделей для автоматического поиска сценариев (подсказок), которые приводят модели к созданию кодов с определенным типом уязвимости.

Iii. Технический фон

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

A. Оценка вопросов безопасности

Различные методы тестирования безопасности могут использоваться для поиска уязвимостей программного обеспечения, чтобы избежать ошибок во время выполнения развернутой системы [38], [39], [40]. Для достижения этой цели эти методы пытаются обнаружить различные виды ошибок программирования, плохой стиль кодирования, устаревшие функциональные возможности или потенциальные нарушения безопасности памяти (например, несанкционированный доступ к небезопасной памяти, которые могут использоваться после развертывания или устаревших криптографических схем, которые являются неуверенными [41], [42], [26]). Вообще говоря, текущие методы оценки безопасности программного обеспечения могут быть

Listing 1: Python code adapted from [29], showing an example for deserialization of untrusted data (CWE-502).

разделены на две категории: статические [38], [43] и динамический анализ [44], [45]. В то время как статический анализ оценивает код данной программы для поиска потенциальной уязвимости, последний подход выполняет коды. Например, тестирование Fuzz (Fuzzing) генерирует случайные выполнения программ для запуска ошибок.

В целях нашей работы мы решили использовать статический анализ для оценки сгенерированного кода, поскольку он позволяет нам классифицировать тип обнаруженных уязвимостей. В частности, мы используем CodeQL, один из наиболее эффективных бесплатных двигателей статического анализа, выпущенных GitHub [46]. Для анализа языковой модели, сгенерированной кодом, мы запрашиваем код через CodeQL, чтобы найти уязвимости безопасности в коде. Мы используем выход CWE CWE CWE CWE, чтобы классифицировать тип уязвимости, который был обнаружен во время нашей оценки, и для определения набора уязвимостей, которые мы дополнительно исследуем на протяжении всей этой работы.

B. Классификация слабых мест безопасности

Общие слабости перечисления(CWES) - это список типичных недостатков в программном и аппаратном обеспечении, предоставляемых MITRE [29], часто с конкретными примерами уязвимости. В целом, более 400 различных типов CWE определяются и классифицируются на разные классы и варианты, e. глин ошибки повреждения памяти. В листинге 1 показан пример CWE-502 (десериализация ненадежных данных) в Python. В этом примере из [29] библиотека Pickle используется для десериализации данных: код анализирует данные и пытается аутентифицировать пользователя на основе проверки токена, но без проверки входящих данных. Потенциальный злоумышленник может построить маринованный маринован, который порождает новые процессы, и, поскольку Pickle позволяет объектам определять процесс того, как они должны быть незаконными, злоумышленник может направить процесс незаметного, чтобы вызватьподпроцессМодуль и выполнить /bin /sh.

Для нашей работы мы сосредоточены на анализе тринадцати репрезентативных CWE, которые могут быть обнаружены с помощью инструментов статического анализа, чтобы показать, что мы можем систематически генерировать уязвимый код и их подсказки ввода. Мы решили не использовать Fuzzing для обнаружения уязвимости из -за потенциально высоких вычислительных затрат и ручных усилий, наложенных анализом основной причины. Некоторые CWE представляют собой простые запахи кода или требуют рассмотрения процесса разработки и развертывания и, следовательно, не имеют возможности для этой работы. Тринадцать проанализированных CWE, в том числе краткое описание, перечислены в таблице I. из тринадцати перечисленных CWE, одиннадцать из 25 лучших списков наиболее важных уязвимостей. Описание определено MITRE [29].

TABLE I: List of evaluated CWEs. Eleven of the thirteen CWEs are in the top 25 list. The description is from [29].

Авторы:

(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).


Эта статья естьДоступно на ArxivПод CC By-NC-SA 4.0 Лицензия.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE