Не просто використовуйте код! 14-сторінкова стаття китайського дослідника попереджає: 35,8% кодів, згенерованих Copilot, мають уразливості, а C++ став «найбільш ураженою областю»
GitHub Copilot — це автоматичний інструмент для генерації коду на основі великих модельних мов. З моменту його запуску його вітали незліченна кількість програмістів. Усі вони сказали, що нарешті у них є артефакт коду, який не вимагає понаднормової роботи!
Згідно з даними, зібраними під час «Опитування екосистем розробників AI 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), для проведення перевірки безпеки та аналізу фрагментів коду, а також використовує Common Vulnerability Enumeration ( CWE), щоб класифікувати діри безпеки коду в сегменті.
Крім того, ґрунтуючись на наступному дослідницькому процесі, дослідники поставили питання, які необхідно вивчити та перевірити з трьох вимірів.
RQ1: Чи безпечний код, згенерований Copilot, у проектах GitHub?
Причина запиту: Copilot може генерувати пропозиції коду, які містять вразливі місця безпеки, і розробники можуть прийняти ці пропозиції, потенційно залишаючи програму вразливою. Відповіді на RQ1 допомагають зрозуміти, як часто розробники стикаються з уразливістю системи безпеки під час використання Copilot у виробництві.
RQ2: Які вразливості безпеки існують у фрагментах коду, згенерованих Copilot?
Причина постановки цього запитання: код, згенерований Copilot, може містити вразливі місця, тому розробники повинні провести сувору перевірку безпеки, перш ніж прийняти код, згенерований Copilot. Як чітко зазначено в документації GitHub Copilot, «користувачі Copilot несуть відповідальність за забезпечення безпеки та якості свого коду». Відповіді на RQ2 можуть допомогти розробникам краще зрозуміти можливі вразливості безпеки в коді, згенерованому Copilot, щоб вони могли ефективніше запобігати та виправляти ці вразливості.
RQ3: Скільки вразливостей безпеки належать до 25 найкращих МІТЕР CWE?
Причина запиту: цей список містить 25 найнебезпечніших уразливостей безпеки. Відповіді на RQ3 можуть допомогти розробникам зрозуміти, чи містить код, згенерований Copilot, загальновизнані типи вразливостей безпеки, і здатність Copilot справлятися з цими найпоширенішими вразливими місцями.
Крок 1. Визначте на GitHub «справжній» код, згенерований ШІ
Причина використання GitHub як основного джерела даних для відповідей на запитання дослідження полягає в тому, що, на думку дослідників, GitHub містить мільйони загальнодоступних сховищ коду та має доступ до великої кількості ресурсів коду, що дозволяє охоплювати різноманітні мови програмування та проекти дослідницького типу.
Однак отримати код, створений Copilot безпосередньо в GitHub, нелегко, оскільки навіть за допомогою багатьох інструментів важко розрізнити, чи код написаний ШІ чи інженерами-людьми.
Зіткнувшись із цією дилемою, шість дослідників вирішили ідентифікувати багато фрагментів коду за допомогою пошуку в описі сховища та коментарях, наданих у коді, наприклад «від GitHub Copilot», «використовувати GitHub Copilot» і «з GitHub Copilot». Для пошуку я нарешті отримали такі результати:
Кількість результатів пошуку на різних мовах, отриманих з кодових тегів:
Далі переходимо до етапу фільтрації. Тут дослідники вказали в статті, що вони в основному дотримувалися трьох правил:
Для результатів пошуку під тегом Repository дослідники визначили, які проекти були повністю згенеровані 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
Після аналізу дослідники дійшли остаточного висновку на основі трьох поставлених вище питань.
RQ1: Чи безпечний код, згенерований 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% відповідно.
RQ2: Які вразливості безпеки існують у фрагментах коду, згенерованих Copilot?
Щоб відповісти на RQ2, дослідники обробили результати сканування, проведеного RQ1, і усунули повторювані проблеми безпеки, виявлені в тому самому місці сегмента коду. Загалом у 435 фрагментах коду виявлено 600 вразливостей безпеки.
Типи виявлених уразливостей безпеки були різноманітними та стосувалися 42 різних CWE, у тому числі CWE-78 (впровадження команд операційної системи), CWE-330 (використання небезпечних випадкових значень уразливості) та CWE-703 (перевірка на наявність аномальних умов або неправильного обробки) трапляється найчастіше.
RQ3: Скільки вразливостей безпеки належать до 25 найкращих МІТЕР CWE?
З 42 ідентифікованих уразливостей CWE 11 наразі визнано 25 найпопулярніших уразливостей CWE 2022 року.
Написано в кінці
З цього приводу деякі користувачі мережі також пожартували, що їх здатність писати помилки може бути вищою, ніж у GitHub Copilot.
Звичайно, це дослідження не має на меті переконати розробників не використовувати інструменти кодування за допомогою штучного інтелекту в щоденній роботі, а показати, що використання Copilot для створення коду під час фактичної розробки може підвищити ефективність розробки, і нагадати кожному проводити власну оцінку безпеки. .
У той же час виконайте відповідні перевірки безпеки, приймаючи пропозиції коду Copilot, щоб ефективно уникнути деяких потенційних ризиків і зменшити втрати.
Для отримання додаткової інформації дивіться статтю:
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Не просто використовуйте код! 14-сторінкова стаття китайського дослідника попереджає: 35,8% кодів, згенерованих Copilot, мають уразливості, а C++ став «найбільш ураженою областю»
Джерело: CSDN
GitHub Copilot — це автоматичний інструмент для генерації коду на основі великих модельних мов. З моменту його запуску його вітали незліченна кількість програмістів. Усі вони сказали, що нарешті у них є артефакт коду, який не вимагає понаднормової роботи!
Згідно з даними, зібраними під час «Опитування екосистем розробників AI 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), для проведення перевірки безпеки та аналізу фрагментів коду, а також використовує Common Vulnerability Enumeration ( CWE), щоб класифікувати діри безпеки коду в сегменті.
Крім того, ґрунтуючись на наступному дослідницькому процесі, дослідники поставили питання, які необхідно вивчити та перевірити з трьох вимірів.
Причина запиту: Copilot може генерувати пропозиції коду, які містять вразливі місця безпеки, і розробники можуть прийняти ці пропозиції, потенційно залишаючи програму вразливою. Відповіді на RQ1 допомагають зрозуміти, як часто розробники стикаються з уразливістю системи безпеки під час використання Copilot у виробництві.
RQ2: Які вразливості безпеки існують у фрагментах коду, згенерованих Copilot?
Причина постановки цього запитання: код, згенерований Copilot, може містити вразливі місця, тому розробники повинні провести сувору перевірку безпеки, перш ніж прийняти код, згенерований Copilot. Як чітко зазначено в документації GitHub Copilot, «користувачі Copilot несуть відповідальність за забезпечення безпеки та якості свого коду». Відповіді на RQ2 можуть допомогти розробникам краще зрозуміти можливі вразливості безпеки в коді, згенерованому Copilot, щоб вони могли ефективніше запобігати та виправляти ці вразливості.
RQ3: Скільки вразливостей безпеки належать до 25 найкращих МІТЕР 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
Після аналізу дослідники дійшли остаточного висновку на основі трьох поставлених вище питань.
RQ1: Чи безпечний код, згенерований Copilot, у проектах GitHub?
З 435 фрагментів коду, згенерованих Copilot, 35,8% містили вразливі місця, що створювало проблеми безпеки незалежно від використовуваної мови програмування.
Щоб відповісти на RQ2, дослідники обробили результати сканування, проведеного RQ1, і усунули повторювані проблеми безпеки, виявлені в тому самому місці сегмента коду. Загалом у 435 фрагментах коду виявлено 600 вразливостей безпеки.
З 42 ідентифікованих уразливостей CWE 11 наразі визнано 25 найпопулярніших уразливостей CWE 2022 року.
Написано в кінці
З цього приводу деякі користувачі мережі також пожартували, що їх здатність писати помилки може бути вищою, ніж у GitHub Copilot.
Звичайно, це дослідження не має на меті переконати розробників не використовувати інструменти кодування за допомогою штучного інтелекту в щоденній роботі, а показати, що використання Copilot для створення коду під час фактичної розробки може підвищити ефективність розробки, і нагадати кожному проводити власну оцінку безпеки. .
У той же час виконайте відповідні перевірки безпеки, приймаючи пропозиції коду Copilot, щоб ефективно уникнути деяких потенційних ризиків і зменшити втрати.
Для отримання додаткової інформації дивіться статтю: