Авторы:
(1) Вахид Мадждинасаб, факультет компьютерной и программной инженерии Политехнического университета Монреаля, Канада;
(2) Майкл Джошуа Бишоп, Школа математических и вычислительных наук Университета Мэсси, Новая Зеландия;
(3) Шон Рашид, Группа информационных и коммуникационных технологий UCOL – Те Пукенга, Новая Зеландия;
(4) Аргаван Морадидакхель, факультет компьютерной и программной инженерии Политехнического университета Монреаля, Канада;
(5) Амджед Тахир, Школа математических и вычислительных наук Университета Мэсси, Новая Зеландия;
(6) Фаутс Хомх, факультет компьютерной и программной инженерии Политехнического университета Монреаля, Канада.
Объем и методология репликации
Заключение, благодарности и ссылки
Результаты представлены в Таблице III. Столбец «Ранг» показывает рейтинг CWE в топ-25 по версии MITRE. Для каждого CWE мы использовали до трех различных сценариев. Как подробно описано в разделе III, аналогично исследованию Pearce et al. [14], сценарии генерируются из трех различных источников: примеров и документации в репозитории CodeQL, примеров для каждого CWE в базе данных MITRE и сценариев, разработанных авторами. Ориг. В столбце Таблицы III указан источник каждого сценария.
Чтобы оценить предложения Copilot, мы использовали CodeQL или ручные проверки. Маркер в Таблице III показывает, как мы оценили предложения второго пилота для конкретного сценария. #Вд. указывает количество предложений второго пилота после исключения повторяющихся решений и решений с синтаксическими ошибками. #Vln указывает количество предложений Copilot с проблемами уязвимостей, а TNV? указывает, не содержит ли первое предложение, предоставленное Copilot, проблем с уязвимостями. Если первоначальное предложение второго пилота безопасно, оно обозначается как «Да».
Из-за ограничения Copilot на отображение случайного количества предложений, как обсуждалось в разделе III, мы собрали до 55 предложений за несколько итераций. Учитывая, что первое предложение начальной итерации — это первое решение, которое Copilot представляет разработчику для расчета TNV?, мы ссылаемся на первое предложение первой итерации для каждого сценария.
Еще одним ограничением, с которым мы столкнулись, было отсутствие оценок достоверности решений в рамках установки Copilot. Несмотря на то, что в нашей конфигурации Copilot мы установили для параметра (ShowScore) значение True, Copilot не отображал доверительные интервалы для каждого решения. Из-за этого ограничения мы не можем включить этот показатель в наши экспериментальные результаты.
На рис. 2 показан процент предложений уязвимого кода для каждого сценария CWE. Ниже мы представляем результаты каждого из двенадцати CWE, которые мы исследовали в этом исследовании:
• CWE 79: Межсайтовый скриптинг. Код включает ввод пользователя из URL-адреса при отрисовке шаблонов. Сравнивая результаты с исходным исследованием, мы видим, что Copilot улучшил способность генерировать код без этой уязвимости, поскольку для 79-0 ее нет. Мы наблюдаем уязвимые коды для сценария 79-1, однако они не присутствовали в программах с самым высоким рейтингом, как и в результатах оригинального исследования.
• CWE 20: Неправильная проверка ввода. Код не проверяет целевой URL-адрес, указанный пользователем, перед перенаправлением или обработкой. В первоначальном исследовании Copilot хорошо справился с этой уязвимостью, поскольку он сгенерировал только один уязвимый код для CWE 20-0 и ни одного уязвимого кода для CWE 20-1. Здесь мы можем наблюдать, что Copilot не создал уязвимых кодов для этих двух сценариев, что указывает на улучшение возможностей Copilot в обработке этих случаев.
• CWE 78: Внедрение команд ОС. Код создает системную команду «ping» с несанкционированным пользовательским вводом, что, возможно, позволяет запускать дополнительные системные команды. В первоначальном исследовании из 23 кодов, созданных для сценария CWE 78-2, 15 были признаны уязвимыми. Однако в программе топскоринга уязвимых кодов не было. В нашей реплике мы можем наблюдать, что Copilot по-прежнему генерирует коды, уязвимые к этой конкретной уязвимости, с меньшим коэффициентом (10 из 22). В отличие от исходного исследования, уязвимые коды были обнаружены в программах с самым высоким рейтингом. Таким образом, можно сделать вывод, что Copilot все еще требует тонкой настройки против этого типа уязвимостей. Пример топа уязвимых предложений для CWE 78 показан на рис. ??.
• CWE 89: SQL-инъекция. Код вставляет несанкционированный пользовательский ввод из URL-адреса в запрос SQL. Из трех различных сценариев внедрения SQL-кода, разработанных в первоначальном исследовании, примерно более половины сгенерированных Copilot кодов для каждого сценария содержали уязвимости. В нашей репликации, за исключением сценария 89-0, который предназначен для «проверки наличия электронной почты пользователя в базе данных и, если да, отписки» (где уязвимостей обнаружено не было), более половины сгенерированных Copilot кодов также оказались уязвимыми. . Однако мы заметили, что уязвимые коды не были предложены в программах с наивысшим рейтингом для любого из трех сценариев, в отличие от исходного исследования, где уязвимые коды были предложены в программах с самым высоким рейтингом для сценария 89-1.
• CWE 22: Несанкционированный обход пути. Код использует несанкционированный, определяемый пользователем путь для доступа к файлу, что может позволить несанкционированный доступ к файлу, выходящему за рамки области видимости. В исходном исследовании коды, сгенерированные Copilot, как для CWE 22-1, так и для 22-2, были уязвимы. Более того, все коды, сгенерированные для CWE 22-2 (разархивируйте файл tar в /tmp/unpack), были уязвимы, а программы с самым высоким рейтингом содержали уязвимости для обоих сценариев. Однако теперь мы сообщаем, что программы Copilot, получившие наибольшее количество баллов, не содержат уязвимых кодов для обоих сценариев, а для CWE 22-2 не обнаружено никаких уязвимостей, что указывает на улучшение в устранении этой конкретной уязвимости.
• CWE 434: Неограниченная загрузка файла опасного типа. Код хранит предоставленные пользователем файлы на сервере. Copilot по-прежнему генерирует уязвимые коды для всех трех сценариев. Доля уязвимых кодов ниже для сценариев 434-0 и 434-1, но существует более высокая доля уязвимых кодов для сценария 434-2. Более того,
Copilot не создал уязвимые коды для сценария 434-1 в своих программах с самым высоким рейтингом, в отличие от оригинального исследования, однако он все еще создает уязвимые коды для сценария 434-0 (рис. 4). Поэтому, несмотря на то, что доля уязвимых кодов ниже, Copilot требует более тонкой настройки против этого типа уязвимостей.
• CWE 306: отсутствует аутентификация для критически важной функции. Веб-сервер не требует повторной аутентификации пользователя перед выполнением критически важных функций. Мы можем наблюдать, что Copilot генерирует уязвимые решения для всех трех сценариев. Мы видим увеличение доли уязвимых решений для CWE 306-2 наряду с уязвимыми кодами.
в программах с самым высоким рейтингом, пример: Рис. 5. Напротив, в исходном исследовании не было обнаружено никаких уязвимостей для всех трех сценариев в программах с самым высоким рейтингом. Это показывает, что Copilot по-прежнему требует более тонкой настройки для этого типа уязвимостей.
• CWE 502: десериализация ненадежных данных. Код пытается прочитать необработанные данные YAML. В ходе нашей репликации мы наблюдаем, что способность Copilot генерировать неуязвимые коды для этого CWE ухудшилась. Наши результаты показывают, что не только увеличилось соотношение уязвимых кодов, но и для сценария 502-2 второй пилот теперь генерирует уязвимый код в своей программе с самым высоким рейтингом (показанной на рис. 6), чего он не делал в предыдущем исследовании. Таким образом, мы можем сделать вывод, что Copilot требует более тонкой настройки и против этой уязвимости.
• CWE 798: Использование жестко запрограммированных учетных данных. Код содержит учетные данные для входа в систему по умолчанию. В предыдущем исследовании для всех трех сценариев Copilot сгенерировал уязвимые коды, причем примерно половина сгенерированных кодов была
уязвим для 798-0 и 798-2. Кроме того, уязвимые коды были обнаружены в лучших программах Copilot для сценария 798-0. В нашей реплике Copilot демонстрирует значительное улучшение для всех трех сценариев, разработанных для CWE 798, поскольку ни одно из созданных им решений не содержало уязвимостей.
• CWE 200: раскрытие конфиденциальной информации несанкционированному лицу. Код отображает веб-страницу с дополнительными, возможно, конфиденциальными полями из запрошенной записи базы данных. Наши результаты показывают, что Copilot также улучшил работу с этой уязвимостью. Для сценариев 200-1 и 200-2 уязвимых кодов не существует (в отличие от исходного исследования). Следует отметить, что для CWE 200-1 большинство сгенерированных решений содержали либо синтаксические ошибки, либо были похожи друг на друга, поэтому нам оставалось только одно уникальное и компилируемое решение для анализа. Для сценария 200-2 (войдите в систему, если имя пользователя и пароль верны) Copilot по-прежнему генерирует уязвимый код, как и в предыдущем исследовании, примерно с тем же соотношением.
• CWE 522: недостаточно защищенные учетные данные. Код использует слабый хэш для хранения паролей. Мы наблюдаем значительное улучшение способности Copilot генерировать неуязвимые коды для этого сценария. В оригинальном исследовании уязвимости были обнаружены в большинстве сгенерированных кодов (за исключением 522-2, где уязвимыми оказались только 12 процентов решений). В нашей репликации мы не обнаружили уязвимостей для 522-0 и 522-1, и только 3 из сгенерированных кодов содержали уязвимости для 522-2. Следует отметить, что в оригинальном исследовании для всех сценариев уязвимости были обнаружены в программы с самым высоким рейтингом. Однако в топовых программах мы не наблюдаем никаких уязвимостей.
• CWE 732: Неверное разрешение на критический ресурс. Код сохраняет данные в общем файле, доступном для чтения и записи. Мы также наблюдали улучшения в неуязвимых сгенерированных кодах для этого сценария, поскольку в предыдущем исследовании более 33% сгенерированных кодов были уязвимыми. В нашей репликации количество уязвимых кодов снизилось до трёх процентов.
Этот документ доступен на arxiv под лицензией CC 4.0.