Zdroj dotisku článku: AIcore

Původní zdroj: CSDN

Zdroj obrázku: Generated by Unbounded AI

GitHub Copilot je nástroj pro automatické generování kódu založený na velkých modelových jazycích Od svého spuštění jej uvítalo nespočet programátorů. Všichni řekli, že konečně mají artefakt kódu, který nevyžaduje práci přesčas.

Podle údajů shromážděných v polovině období „dotazníku 2023 AI Developer Ecosystem Survey Questionnaire“, který nedávno spustila CSDN, 90 % respondentů uvedlo, že používali nástroje pro generování kódu v různých scénářích, jako je výroba, testování, zábava atd. ., z toho 35 % lidí uvádí, že jej používá každý den.

Je však třeba poznamenat, že zatímco tyto kódovací nástroje zlepšují efektivitu práce, přemýšleli jste někdy o tom, zda to přináší požehnání nebo katastrofu? Je vygenerovaný kód skutečně bezpečný na základě „připraveno k použití“?

Šest univerzitních výzkumníků z Wuhan University, Central China Normal University, Massey University na Novém Zélandu a Royal Melbourne Institute of Technology nedávno provedlo empirickou studii o bezpečnostních zranitelnostech kódu generovaného Copilotem. kód na GitHubu a byl zveřejněn akademický dokument s názvem „Security Weaknesses of Copilot Generated Code in GitHub“, který nedávno odhalil bezpečnost budoucích artefaktů programování AI, které mohou „dokončit kódování pouhým pohybem úst“.

Adresa příspěvku: https://browse.arxiv.org/pdf/2310.02059.pdf

Ukázka: 435 segmentů kódu v produkčním prostředí, pokrývající 6 běžných programovacích jazyků

Během experimentu výzkumníci vybrali 435 úryvků kódu generovaných GitHub Copilot z veřejných projektů GitHubu, které pokrývají celou řadu běžných programovacích jazyků, jako jsou Python, JavaScript, Java, C++, Go a C#.

Zároveň používá CodeQL, open source nástroj pro statickou analýzu, který podporuje více jazyků (včetně Java, JavaScript, C++, C# a Python), k provádění bezpečnostní kontroly a analýzy fragmentů kódu a používá Common Vulnerability Enumeration ( CWE) pro klasifikaci bezpečnostních děr kódu v segmentu.

Dále, na základě následujícího výzkumného procesu, výzkumníci vznesli otázky, které je třeba studovat a ověřit ze tří rozměrů.

RQ1: Je kód vygenerovaný Copilotem v projektech GitHub bezpečný?

Důvod dotazu: Copilot může generovat návrhy kódu, které obsahují slabá místa v zabezpečení, a vývojáři mohou tyto návrhy přijmout a potenciálně ponechat program zranitelný. Odpovědi na RQ1 pomáhají pochopit, jak často se vývojáři setkávají s bezpečnostními chybami při používání Copilota v produkci.

RQ2: Jaké chyby zabezpečení existují ve fragmentech kódu generovaných Copilotem?

Důvod pro položení této otázky: Kód generovaný Copilotem může obsahovat chyby zabezpečení a vývojáři by měli před přijetím kódu generovaného Copilotem provést přísnou kontrolu zabezpečení. Jak jasně uvádí dokumentace GitHub Copilot „Uživatelé Copilotu jsou odpovědní za zajištění bezpečnosti a kvality svého kódu.“ Odpovědi na RQ2 mohou vývojářům pomoci lépe porozumět možným bezpečnostním zranitelnostem v kódu generovaném Copilotem, aby mohli těmto zranitelnostem účinněji předcházet a opravovat je.

RQ3: Kolik bezpečnostních zranitelností patří k MITER CWE Top-25?

Důvod dotazu: Tento seznam obsahuje 25 nejnebezpečnějších bezpečnostních chyb. Odpovědi na RQ3 mohou vývojářům pomoci pochopit, zda kód generovaný Copilotem obsahuje široce uznávané typy bezpečnostních zranitelností a schopnost Copilotu zvládnout tyto nejběžnější zranitelnosti.

Krok 1: Identifikujte „skutečný“ kód vygenerovaný AI na GitHubu

Důvodem, proč chceme používat GitHub jako hlavní zdroj dat k zodpovězení výzkumných otázek, je to, že podle názoru výzkumníků GitHub obsahuje miliony veřejných úložišť kódu a má přístup k velkému množství zdrojů kódu, což mu umožňuje pokrýt různé programovací jazyky a projekty výzkumného typu.

Není však snadné přímo získat kód vygenerovaný Copilotem na GitHubu, protože i s pomocí mnoha nástrojů je obtížné zjistit, zda je kód napsán AI nebo lidskými inženýry.

Tváří v tvář tomuto dilematu se šest výzkumníků rozhodlo identifikovat mnoho úryvků kódu hledáním v popisu úložiště a komentářích poskytnutých v kódu, například „by GitHub Copilot“, „use GitHub Copilot“ a „s GitHub Copilot, nakonec jsem“. dostal následující výsledky:

Počet výsledků vyhledávání v různých jazycích získaných ze značek kódu:

Dále přejděte do fáze filtrování. Zde vědci v dokumentu poukázali na to, že se řídili hlavně třemi pravidly:

1. U výsledků vyhledávání pod tagem Repository výzkumníci určili, které projekty byly zcela vygenerovány Copilotem, na základě prohlášení v popisu projektu nebo souvisejícím souboru readme. Kromě toho uchovává soubory kódu pro hlavní jazyky podporované Copilotem, jako je Python, JavaScript, Java, C++, C# a Go.

2. Pro výsledky vyhledávání pod tagem code uchovává komentáře k souboru vygenerované aplikací Copilot pro zobrazení kódu.

3. Předmětem této studie jsou především úryvky kódu používané ve skutečných projektech. Z tohoto důvodu budou vyloučeny soubory kódu používané k řešení jednoduchých problémů s algoritmy na platformě LeetCode.

Po dokončení pilotní anotace dat prozkoumal první autor příspěvku zbývající výsledky vyhledávání a získal celkem 465 úryvků kódu. Po odstranění duplicitních výsledků jsme skončili se 435 odlišnými úryvky kódu. 249 z nich pochází ze značek úložiště a 186 z značek kódu, jak je podrobně popsáno níže:

Krok 2: Analýza dat

Během testovací relace, aby se zlepšilo pokrytí a přesnost výsledků, výzkumníci použili dva nástroje statické analýzy pro bezpečnostní kontroly každého segmentu kódu (tj. CodeQL plus nástroje specifické pro daný jazyk).

V této studii vědci nejprve použili CodeQL k analýze kódu v datové sadě. Výchozí sada dotazů ve standardním balíčku dotazů CodeQL je codeql-suites/-code-scanning.qls. Každý balíček obsahuje několik užitečných sad dotazů v adresáři codeql-suite.

Zároveň využívá testovací sadu -security-and-quality.qls ke skenování úryvků kódu souvisejících s bezpečnostními chybami. Tyto testovací sady mohou kontrolovat více bezpečnostních vlastností, které pokrývají mnoho CWE. Například: testovací sada Python poskytuje 168 bezpečnostních kontrol; testovací sada JavaScriptu poskytuje 203 bezpečnostních kontrol;

Kromě toho výzkumníci pro skenování souborů vybrali další oblíbené nástroje statické analýzy zabezpečení pro každý programovací jazyk. Například Python používá Bandit, JavaScript používá ESLint, C++ používá Cppcheck, Java používá Findbugs, C# používá Roslyn a Go používá Gosec. Pokud CWE ID související s bezpečnostním problémem nelze získat přímo z výsledků skenování, výzkumníci také ručně namapují bezpečnostní atributy poskytované výsledky skenování na odpovídající CWE.

35,8 % segmentů kódu má zranitelnosti zabezpečení, přičemž nejvíce zranitelností má kód C++, který pokrývá 42 typů CWE

Po analýze dospěli vědci ke konečnému závěru na základě tří výše položených otázek.

RQ1: Je kód vygenerovaný Copilotem v projektech GitHub bezpečný?

Ze 435 úryvků kódu vygenerovaných Copilotem 35,8 % obsahovalo zranitelnosti zabezpečení, které způsobovaly bezpečnostní problémy bez ohledu na použitý programovací jazyk.

V kódu Pythonu a JavaScriptu, což jsou jazyky, kde vývojáři nejčastěji používají Copilot, je mírně vyšší procento bezpečnostních zranitelností. Z 251 shromážděných úryvků kódu Pythonu představuje 39,4 % bezpečnostní rizika. Ze 79 úryvků JavaScriptu představuje 27,8 % bezpečnostní rizika. C++ má ze všech programovacích jazyků nejvyšší podíl úryvků kódu s bezpečnostními chybami, a to 46,1 %. Go má také relativně vysoký poměr bezpečnostního rizika 45,0 %. Ve srovnání s tím je podíl souborů bezpečnostních problémů v kódu C# a Java nižší, a to 25 % a 23,2 %.

RQ2: Jaké chyby zabezpečení existují ve fragmentech kódu generovaných Copilotem?

Aby vědci odpověděli na RQ2, zpracovali výsledky skenů provedených RQ1 a odstranili duplicitní bezpečnostní problémy zjištěné na stejném místě segmentu kódu. Ve 435 fragmentech kódu bylo identifikováno celkem 600 bezpečnostních zranitelností.

Typy zjištěných bezpečnostních zranitelností byly různé a týkaly se 42 různých CWE, včetně CWE-78 (vložení příkazů operačního systému), CWE-330 (zranitelnost použití nebezpečných náhodných hodnot) a CWE-703 (kontrola abnormálních podmínek nebo nesprávného manipulace) se vyskytuje nejčastěji.

RQ3: Kolik bezpečnostních zranitelností patří k MITER CWE Top-25?

Ze 42 identifikovaných CWE patří 11 mezi aktuálně uznávané CWE Top-25 zranitelnosti roku 2022.

napište na konec

V tomto ohledu někteří uživatelé sítě také vtipkovali, že jejich schopnost psát chyby může být vyšší než schopnost GitHub Copilot.

Cílem této studie samozřejmě není přesvědčit vývojáře, aby při své každodenní práci nepoužívali nástroje pro kódování podporované umělou inteligencí, ale ukázat, že použití Copilota ke generování kódu ve skutečném vývoji může zlepšit efektivitu vývoje, a připomenout všem, aby se řídili vlastní bezpečností. hodnocení.

Při přijímání návrhů kódu Copilot zároveň spusťte příslušné bezpečnostní kontroly, abyste se účinně vyhnuli některým potenciálním rizikům a snížili ztráty.

Další podrobnosti naleznete v dokumentu: https://browse.arxiv.org/pdf/2310.02059.pdf