Не просто используйте код! 14-страничная статья китайского исследователя предупреждает: 35,8% кодов, созданных Copilot, имеют уязвимости, а C++ стал «наиболее пострадавшей областью».
GitHub Copilot — это инструмент автоматической генерации кода, основанный на языках больших моделей. С момента его запуска его приветствовало бесчисленное количество программистов. Все они сказали, что наконец-то у них есть артефакт кода, который не требует сверхурочной работы!
Согласно данным, собранным в среднесрочной перспективе «Опросника экосистемы разработчиков искусственного интеллекта 2023 года», недавно запущенного CSDN, 90% респондентов заявили, что использовали инструменты генерации кода в различных сценариях, таких как производство, тестирование, развлечения и т. д. ., из которых 35% Люди говорят, что используют его каждый день.
Однако следует отметить, что, хотя эти инструменты кодирования повышают эффективность работы, задумывались ли вы когда-нибудь о том, приносит ли это благословение или беду? Действительно ли сгенерированный код безопасен, исходя из того, что он «готов к использованию»?
Недавно, чтобы изучить безопасность кода, сгенерированного Copilot, шесть университетских исследователей из Уханьского университета, Центрально-Китайского педагогического университета, Университета Мэсси в Новой Зеландии и Королевского Мельбурнского технологического института провели эмпирическое исследование уязвимостей безопасности кода, сгенерированного Copilot. код на GitHub, и была опубликована научная статья под названием «Слабые места безопасности кода, сгенерированного вторым пилотом в GitHub», в которой недавно была раскрыта безопасность будущих артефактов программирования ИИ, которые могут «завершать кодирование, просто двигая ртом».
Бумажный адрес:
Пример: 435 сегментов кода в производственной среде, охватывающих 6 основных языков программирования
В ходе эксперимента исследователи выбрали 435 фрагментов кода, сгенерированных GitHub Copilot, из общедоступных проектов GitHub, охватывающих несколько основных языков программирования, таких как Python, Java, Java, C++, Go и C#.
В то же время он использует CodeQL, инструмент статического анализа с открытым исходным кодом, который поддерживает несколько языков (включая Java, Java, C++, C# и Python), для проведения сканирования безопасности и анализа фрагментов кода, а также использует общее перечисление уязвимостей ( CWE) для классификации дыр в безопасности кода в сегменте.
Кроме того, на основе следующего исследовательского процесса исследователи подняли вопросы, которые необходимо изучить и проверить с трех сторон.
Вопрос 1. Безопасен ли код, созданный Copilot, в проектах GitHub?
Причина вопроса: Copilot может генерировать предложения кода, содержащие уязвимости безопасности, и разработчики могут принять эти предложения, потенциально делая программу уязвимой. Ответы на вопрос 1 помогают понять, как часто разработчики сталкиваются с уязвимостями безопасности при использовании Copilot в производственной среде.
Вопрос 2. Какие уязвимости безопасности существуют во фрагментах кода, созданных Copilot?
Причина поднятия этого вопроса: код, созданный Copilot, может содержать уязвимости безопасности, и разработчикам следует провести строгую проверку безопасности, прежде чем принимать код, созданный Copilot. Как ясно сказано в документации GitHub Copilot, «пользователи Copilot несут ответственность за обеспечение безопасности и качества своего кода». Ответы на вопрос RQ2 могут помочь разработчикам лучше понять возможные уязвимости безопасности в коде, созданном Copilot, чтобы они могли более эффективно предотвращать и устранять эти уязвимости.
Вопрос 3: Сколько уязвимостей безопасности входит в топ-25 MITRE CWE?
Причина вопроса: этот список содержит 25 наиболее опасных уязвимостей безопасности. Ответы на RQ3 могут помочь разработчикам понять, содержит ли код, сгенерированный Copilot, широко распространенные типы уязвимостей безопасности, а также способность Copilot обрабатывать эти наиболее распространенные уязвимости.
Шаг 1. Определите «настоящий» код, созданный ИИ, на GitHub
Причина желания использовать GitHub в качестве основного источника данных для ответа на вопросы исследования заключается в том, что, по мнению исследователей, GitHub содержит миллионы общедоступных репозиториев кода и имеет доступ к большому количеству ресурсов кода, что позволяет ему охватывать различные языки программирования и проекты исследовательского типа.
Однако напрямую получить код, сгенерированный Copilot, на GitHub непросто, поскольку даже с помощью множества инструментов сложно отличить, написан ли код ИИ или инженерами-людьми.
Столкнувшись с этой дилеммой, шесть исследователей решили идентифицировать множество фрагментов кода, выполнив поиск в описании репозитория и комментариях, представленных в коде, таких как «от GitHub Copilot», «использовать GitHub Copilot» и «с GitHub Copilot». получил следующие результаты:
Количество результатов поиска на разных языках, полученных по тегам кода:
Далее перейдите на этап фильтрации. Здесь исследователи отметили в статье, что они в основном следовали трем правилам:
Для результатов поиска по тегу «Репозиторий» исследователи определяли, какие проекты были полностью созданы Copilot, на основе утверждений в описании проекта или связанных файлах readme. Кроме того, он сохраняет файлы кода для основных языков, поддерживаемых Copilot, таких как Python, Java, Java, C++, C# и Go.
2 Для результатов поиска под тегом кода сохраняются комментарии к файлам, в которых показан код, созданный Copilot.
Объектами данного исследования в основном являются фрагменты кода, используемые в реальных проектах. По этой причине файлы кода, используемые для решения простых алгоритмических задач на платформе LeetCode, будут исключены.
После завершения аннотации пилотных данных первый автор статьи изучил оставшиеся результаты поиска и получил в общей сложности 465 фрагментов кода. После удаления повторяющихся результатов мы получили 435 различных фрагментов кода. 249 из них — из тегов репозитория, а 186 — из тегов кода, как подробно описано ниже:
Шаг 2. Анализ данных
В процессе тестирования, чтобы улучшить охват и точность результатов, исследователи использовали два инструмента статического анализа для проверки безопасности каждого сегмента кода (т. е. CodeQL плюс специализированные инструменты для конкретных языков).
В этом исследовании исследователи сначала использовали CodeQL для анализа кода в наборе данных. Набор запросов по умолчанию в стандартном пакете запросов CodeQL — codeql-suites/-code-scanning.qls. Каждый пакет содержит несколько полезных наборов запросов в каталоге codeql-suite.
В то же время он использует набор тестов -security-and-quality.qls для сканирования фрагментов кода, связанных с уязвимостями безопасности. Эти наборы тестов могут проверять несколько свойств безопасности, охватывая множество CWE. Например: набор тестов Python обеспечивает 168 проверок безопасности; набор тестов Java обеспечивает 203 проверки безопасности; набор тестов C++ обеспечивает 163 проверки безопасности.
Кроме того, для сканирования файлов исследователи выбрали другие популярные инструменты статического анализа безопасности для каждого языка программирования. Например, Python использует Bandit, Java использует ESLint, C++ использует Cppcheck, Java использует Findbugs, C# использует Roslyn, а Go использует Gosec. Если идентификатор CWE, связанный с проблемой безопасности, не может быть получен непосредственно из результатов сканирования, исследователи также вручную сопоставят атрибуты безопасности, предоставленные результатами сканирования, с соответствующим CWE.
35,8% сегментов кода имеют уязвимости безопасности, больше всего уязвимостей имеет код C++, охватывающий 42 типа CWE
После анализа исследователи пришли к окончательному выводу, основанному на трех вопросах, поднятых выше.
Вопрос 1. Безопасен ли код, созданный Copilot, в проектах GitHub?
Из 435 фрагментов кода, сгенерированных Copilot, 35,8% содержали уязвимости безопасности, создавая проблемы безопасности независимо от используемого языка программирования.
Немного выше доля уязвимостей безопасности в коде Python и Java — языках, на которых разработчики чаще всего используют Copilot. Среди 251 собранного фрагмента кода Python 39,4% представляют угрозу безопасности. Из 79 фрагментов кода Java 27,8% представляют угрозу безопасности. Среди всех языков программирования **C++ имеет самую высокую долю уязвимостей безопасности в сегментах кода — 46,1%. **Go также имеет относительно высокий коэффициент риска безопасности — 45,0%. Для сравнения, доля файлов проблем безопасности в коде C# и Java ниже — 25% и 23,2% соответственно.
Вопрос 2. Какие уязвимости безопасности существуют во фрагментах кода, созданных Copilot?
Чтобы ответить на вопрос RQ2, исследователи обработали результаты сканирования, проведенного RQ1, и устранили повторяющиеся проблемы безопасности, обнаруженные в одном и том же месте сегмента кода. Всего в 435 фрагментах кода было выявлено 600 уязвимостей безопасности.
Типы обнаруженных уязвимостей безопасности были разнообразными и относились к 42 различным CWE, включая CWE-78 (внедрение команд операционной системы), CWE-330 (использование уязвимости небезопасных случайных значений) и CWE-703 (проверка аномальных условий или неправильных значений). обработка) происходит чаще всего.
Вопрос 3: Сколько уязвимостей безопасности входит в топ-25 MITRE CWE?
Из 42 выявленных CWE 11 в настоящее время включены в список 25 уязвимостей CWE Top-2022.
Написано в конце
В связи с этим некоторые пользователи сети также пошутили, что их способность писать ошибки может быть выше, чем у GitHub Copilot.
Конечно, это исследование не направлено на то, чтобы убедить разработчиков не использовать инструменты кодирования с помощью искусственного интеллекта в повседневной работе, а для того, чтобы показать, что использование Copilot для генерации кода в реальной разработке может повысить эффективность разработки, и напомнить всем о необходимости проводить собственные оценки безопасности. .
В то же время выполняйте соответствующие проверки безопасности при принятии предложений по коду от Copilot, чтобы эффективно избежать некоторых потенциальных рисков и сократить потери.
Более подробную информацию смотрите в статье:
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Не просто используйте код! 14-страничная статья китайского исследователя предупреждает: 35,8% кодов, созданных Copilot, имеют уязвимости, а C++ стал «наиболее пострадавшей областью».
Первоисточник: CSDN
GitHub Copilot — это инструмент автоматической генерации кода, основанный на языках больших моделей. С момента его запуска его приветствовало бесчисленное количество программистов. Все они сказали, что наконец-то у них есть артефакт кода, который не требует сверхурочной работы!
Согласно данным, собранным в среднесрочной перспективе «Опросника экосистемы разработчиков искусственного интеллекта 2023 года», недавно запущенного CSDN, 90% респондентов заявили, что использовали инструменты генерации кода в различных сценариях, таких как производство, тестирование, развлечения и т. д. ., из которых 35% Люди говорят, что используют его каждый день.
Недавно, чтобы изучить безопасность кода, сгенерированного Copilot, шесть университетских исследователей из Уханьского университета, Центрально-Китайского педагогического университета, Университета Мэсси в Новой Зеландии и Королевского Мельбурнского технологического института провели эмпирическое исследование уязвимостей безопасности кода, сгенерированного Copilot. код на GitHub, и была опубликована научная статья под названием «Слабые места безопасности кода, сгенерированного вторым пилотом в GitHub», в которой недавно была раскрыта безопасность будущих артефактов программирования ИИ, которые могут «завершать кодирование, просто двигая ртом».
Пример: 435 сегментов кода в производственной среде, охватывающих 6 основных языков программирования
В ходе эксперимента исследователи выбрали 435 фрагментов кода, сгенерированных GitHub Copilot, из общедоступных проектов GitHub, охватывающих несколько основных языков программирования, таких как Python, Java, Java, C++, Go и C#.
В то же время он использует CodeQL, инструмент статического анализа с открытым исходным кодом, который поддерживает несколько языков (включая Java, Java, C++, C# и Python), для проведения сканирования безопасности и анализа фрагментов кода, а также использует общее перечисление уязвимостей ( CWE) для классификации дыр в безопасности кода в сегменте.
Кроме того, на основе следующего исследовательского процесса исследователи подняли вопросы, которые необходимо изучить и проверить с трех сторон.
Причина вопроса: Copilot может генерировать предложения кода, содержащие уязвимости безопасности, и разработчики могут принять эти предложения, потенциально делая программу уязвимой. Ответы на вопрос 1 помогают понять, как часто разработчики сталкиваются с уязвимостями безопасности при использовании Copilot в производственной среде.
Вопрос 2. Какие уязвимости безопасности существуют во фрагментах кода, созданных Copilot?
Причина поднятия этого вопроса: код, созданный Copilot, может содержать уязвимости безопасности, и разработчикам следует провести строгую проверку безопасности, прежде чем принимать код, созданный Copilot. Как ясно сказано в документации GitHub Copilot, «пользователи Copilot несут ответственность за обеспечение безопасности и качества своего кода». Ответы на вопрос RQ2 могут помочь разработчикам лучше понять возможные уязвимости безопасности в коде, созданном Copilot, чтобы они могли более эффективно предотвращать и устранять эти уязвимости.
Вопрос 3: Сколько уязвимостей безопасности входит в топ-25 MITRE CWE?
Причина вопроса: этот список содержит 25 наиболее опасных уязвимостей безопасности. Ответы на RQ3 могут помочь разработчикам понять, содержит ли код, сгенерированный Copilot, широко распространенные типы уязвимостей безопасности, а также способность Copilot обрабатывать эти наиболее распространенные уязвимости.
Шаг 1. Определите «настоящий» код, созданный ИИ, на GitHub
Причина желания использовать GitHub в качестве основного источника данных для ответа на вопросы исследования заключается в том, что, по мнению исследователей, GitHub содержит миллионы общедоступных репозиториев кода и имеет доступ к большому количеству ресурсов кода, что позволяет ему охватывать различные языки программирования и проекты исследовательского типа.
Однако напрямую получить код, сгенерированный Copilot, на GitHub непросто, поскольку даже с помощью множества инструментов сложно отличить, написан ли код ИИ или инженерами-людьми.
Столкнувшись с этой дилеммой, шесть исследователей решили идентифицировать множество фрагментов кода, выполнив поиск в описании репозитория и комментариях, представленных в коде, таких как «от GitHub Copilot», «использовать GitHub Copilot» и «с GitHub Copilot». получил следующие результаты:
После завершения аннотации пилотных данных первый автор статьи изучил оставшиеся результаты поиска и получил в общей сложности 465 фрагментов кода. После удаления повторяющихся результатов мы получили 435 различных фрагментов кода. 249 из них — из тегов репозитория, а 186 — из тегов кода, как подробно описано ниже:
Шаг 2. Анализ данных
В процессе тестирования, чтобы улучшить охват и точность результатов, исследователи использовали два инструмента статического анализа для проверки безопасности каждого сегмента кода (т. е. CodeQL плюс специализированные инструменты для конкретных языков).
В этом исследовании исследователи сначала использовали CodeQL для анализа кода в наборе данных. Набор запросов по умолчанию в стандартном пакете запросов CodeQL — codeql-suites/-code-scanning.qls. Каждый пакет содержит несколько полезных наборов запросов в каталоге codeql-suite.
В то же время он использует набор тестов -security-and-quality.qls для сканирования фрагментов кода, связанных с уязвимостями безопасности. Эти наборы тестов могут проверять несколько свойств безопасности, охватывая множество CWE. Например: набор тестов Python обеспечивает 168 проверок безопасности; набор тестов Java обеспечивает 203 проверки безопасности; набор тестов C++ обеспечивает 163 проверки безопасности.
Кроме того, для сканирования файлов исследователи выбрали другие популярные инструменты статического анализа безопасности для каждого языка программирования. Например, Python использует Bandit, Java использует ESLint, C++ использует Cppcheck, Java использует Findbugs, C# использует Roslyn, а Go использует Gosec. Если идентификатор CWE, связанный с проблемой безопасности, не может быть получен непосредственно из результатов сканирования, исследователи также вручную сопоставят атрибуты безопасности, предоставленные результатами сканирования, с соответствующим CWE.
35,8% сегментов кода имеют уязвимости безопасности, больше всего уязвимостей имеет код C++, охватывающий 42 типа CWE
После анализа исследователи пришли к окончательному выводу, основанному на трех вопросах, поднятых выше.
Вопрос 1. Безопасен ли код, созданный Copilot, в проектах GitHub?
Из 435 фрагментов кода, сгенерированных Copilot, 35,8% содержали уязвимости безопасности, создавая проблемы безопасности независимо от используемого языка программирования.
Чтобы ответить на вопрос RQ2, исследователи обработали результаты сканирования, проведенного RQ1, и устранили повторяющиеся проблемы безопасности, обнаруженные в одном и том же месте сегмента кода. Всего в 435 фрагментах кода было выявлено 600 уязвимостей безопасности.
Из 42 выявленных CWE 11 в настоящее время включены в список 25 уязвимостей CWE Top-2022.
Написано в конце
В связи с этим некоторые пользователи сети также пошутили, что их способность писать ошибки может быть выше, чем у GitHub Copilot.
Конечно, это исследование не направлено на то, чтобы убедить разработчиков не использовать инструменты кодирования с помощью искусственного интеллекта в повседневной работе, а для того, чтобы показать, что использование Copilot для генерации кода в реальной разработке может повысить эффективность разработки, и напомнить всем о необходимости проводить собственные оценки безопасности. .
В то же время выполняйте соответствующие проверки безопасности при принятии предложений по коду от Copilot, чтобы эффективно избежать некоторых потенциальных рисков и сократить потери.
Более подробную информацию смотрите в статье: