Nachdruckquelle des Artikels: AIcore

Originalquelle: CSDN

Bildquelle: Erstellt von Unbounded AI

GitHub Copilot ist ein automatisches Code-Generierungstool, das auf großen Modellsprachen basiert. Seit seiner Einführung wurde es von unzähligen Programmierern begrüßt. Sie alle sagten, dass sie endlich ein Code-Artefakt haben, das keine Überstunden erfordert!

Laut Daten, die zur Halbzeit des kürzlich von CSDN gestarteten „2023 AI Developer Ecosystem Survey Questionnaire“ erhoben wurden, gaben 90 % der Befragten an, dass sie Tools zur Codegenerierung in verschiedenen Szenarien wie Produktion, Tests, Unterhaltung usw. verwendet haben ., von denen 35 % angeben, dass sie es jeden Tag verwenden.

Es sollte jedoch beachtet werden, dass diese Codierungstools zwar die Arbeitseffizienz verbessern, Sie aber jemals darüber nachgedacht haben, ob sie Segen oder Katastrophe bringen? Ist der generierte Code wirklich sicher im Sinne von „ready to use“?

Um die Sicherheit von Copilot-generiertem Code zu untersuchen, führten kürzlich sechs Universitätsforscher der Wuhan University, der Central China Normal University, der Massey University of New Zealand und des Royal Melbourne Institute of Technology eine empirische Studie zu den Sicherheitslücken von Copilot-generiertem Code durch Code auf GitHub, und Es wurde eine wissenschaftliche Arbeit mit dem Titel „Sicherheitsschwächen von Copilot-generiertem Code in GitHub“ veröffentlicht, die kürzlich die Sicherheit zukünftiger KI-Programmierartefakte enthüllte, die „das Codieren durch bloße Bewegung des Mundes abschließen können“.

Papieradresse: https://browse.arxiv.org/pdf/2310.02059.pdf

Beispiel: 435 Codesegmente in der Produktionsumgebung, die 6 gängige Programmiersprachen abdecken

Während des Experiments wählten die Forscher 435 Codefragmente aus, die von GitHub Copilot aus öffentlichen GitHub-Projekten generiert wurden und eine Vielzahl gängiger Programmiersprachen wie Python, JavaScript, Java, C++, Go und C# abdecken.

Gleichzeitig verwendet es CodeQL, ein Open-Source-Tool zur statischen Analyse, das mehrere Sprachen (einschließlich Java, JavaScript, C++, C# und Python) unterstützt, um Sicherheitsscans und Analysen von Codefragmenten durchzuführen, und verwendet die Common Vulnerability Enumeration ( CWE), um die Code-Sicherheitslücken im Segment zu klassifizieren.

Darüber hinaus warfen die Forscher auf der Grundlage des folgenden Forschungsprozesses Fragen auf, die aus drei Dimensionen untersucht und überprüft werden müssen.

RQ1: Ist von Copilot generierter Code in GitHub-Projekten sicher?

Grund für die Anfrage: Copilot generiert möglicherweise Codevorschläge, die Sicherheitslücken enthalten, und Entwickler akzeptieren diese Vorschläge möglicherweise, wodurch das Programm möglicherweise angreifbar wird. Die Antworten auf RQ1 helfen zu verstehen, wie oft Entwickler beim Einsatz von Copilot in der Produktion auf Sicherheitslücken stoßen.

RQ2: Welche Sicherheitslücken bestehen in den von Copilot generierten Codefragmenten?

Grund für diese Frage: Von Copilot generierter Code kann Sicherheitslücken enthalten und Entwickler sollten eine strenge Sicherheitsprüfung durchführen, bevor sie von Copilot generierten Code akzeptieren. Wie die Dokumentation von GitHub Copilot deutlich macht: „Benutzer von Copilot sind dafür verantwortlich, die Sicherheit und Qualität ihres Codes zu gewährleisten.“ Antworten auf RQ2 können Entwicklern helfen, mögliche Sicherheitslücken in von Copilot generiertem Code besser zu verstehen, damit sie diese Schwachstellen effektiver verhindern und beheben können.

RQ3: Wie viele Sicherheitslücken gehören zu den MITRE CWE Top-25?

Grund der Frage: Diese Liste enthält die 25 gefährlichsten Sicherheitslücken. Antworten auf RQ3 können Entwicklern dabei helfen, zu verstehen, ob der von Copilot generierte Code allgemein anerkannte Arten von Sicherheitslücken enthält, und wie Copilot in der Lage ist, diese häufigsten Schwachstellen zu bewältigen.

Schritt 1: Identifizieren Sie „echten“ KI-generierten Code auf GitHub

Der Grund dafür, GitHub als Hauptdatenquelle zur Beantwortung von Forschungsfragen nutzen zu wollen, liegt darin, dass GitHub nach Meinung der Forscher Millionen von öffentlichen Code-Repositories enthält und Zugriff auf eine große Anzahl von Code-Ressourcen hat, wodurch es eine Vielzahl von Bereichen abdecken kann Programmiersprachen und Projekte im Forschungstyp.

Es ist jedoch nicht einfach, den von Copilot generierten Code direkt in GitHub abzurufen, da es selbst mit Hilfe vieler Tools schwierig ist zu unterscheiden, ob der Code von KI oder menschlichen Ingenieuren geschrieben wurde.

Angesichts dieses Dilemmas entschieden sich sechs Forscher, viele Codeausschnitte zu identifizieren, indem sie die im Code bereitgestellten Repository-Beschreibungen und Kommentare durchsuchten, z. B. „von GitHub Copilot“, „verwende GitHub Copilot“ und „mit GitHub Copilot“. habe folgende Ergebnisse erhalten:

Die Anzahl der Suchergebnisse in verschiedenen Sprachen, die aus Code-Tags erhalten wurden:

Als nächstes betreten Sie die Filterphase. Dabei wiesen die Forscher in der Arbeit darauf hin, dass sie vor allem drei Regeln befolgten:

1. Für Suchergebnisse unter dem Repository-Tag ermittelten die Forscher anhand der Angaben in der Projektbeschreibung oder der zugehörigen Readme-Datei, welche Projekte vollständig von Copilot generiert wurden. Darüber hinaus werden Codedateien für die wichtigsten von Copilot unterstützten Sprachen wie Python, JavaScript, Java, C++, C# und Go gespeichert.

2. Für die Suchergebnisse unter dem Code-Tag werden die von Copilot generierten Dateikommentare zur Anzeige des Codes beibehalten.

3. Die Objekte dieser Studie sind hauptsächlich Codeausschnitte, die in tatsächlichen Projekten verwendet werden. Aus diesem Grund werden Codedateien, die zur Lösung einfacher Algorithmusprobleme auf der LeetCode-Plattform verwendet werden, ausgeschlossen.

Nach Abschluss der Annotation der Pilotdaten untersuchte der Erstautor des Artikels die verbleibenden Suchergebnisse und erhielt insgesamt 465 Codeausschnitte. Nachdem wir doppelte Ergebnisse entfernt hatten, hatten wir am Ende 435 unterschiedliche Codeausschnitte. 249 davon stammen von Repository-Tags und 186 von Code-Tags, wie unten beschrieben:

Schritt 2: Datenanalyse

Um die Abdeckung und Genauigkeit der Ergebnisse zu verbessern, verwendeten die Forscher während der Testphase zwei statische Analysetools für Sicherheitsüberprüfungen für jedes Codesegment (d. h. CodeQL plus sprachspezifische Tools).

In dieser Studie verwendeten die Forscher zunächst CodeQL, um den Code im Datensatz zu analysieren. Die Standardabfragesuite im CodeQL-Standardabfragepaket ist codeql-suites/-code-scanning.qls. Jedes Paket enthält mehrere nützliche Abfrage-Suites im Codeql-Suite-Verzeichnis.

Gleichzeitig nutzt es die Testsuite -security-and-quality.qls, um Codeschnipsel im Zusammenhang mit Sicherheitslücken zu scannen. Diese Testsuiten können mehrere Sicherheitseigenschaften überprüfen und viele CWEs abdecken. Beispiel: Die Python-Testsuite bietet 168 Sicherheitsüberprüfungen; die JavaScript-Testsuite bietet 203 Sicherheitsüberprüfungen; die C++-Testsuite bietet 163 Sicherheitsüberprüfungen.

Darüber hinaus wählten die Forscher für jede Programmiersprache andere beliebte statische Sicherheitsanalysetools aus, um die Dateien zu scannen. Python verwendet beispielsweise Bandit, JavaScript verwendet ESLint, C++ verwendet Cppcheck, Java verwendet Findbugs, C# verwendet Roslyn und Go verwendet Gosec. Wenn die CWE-ID im Zusammenhang mit dem Sicherheitsproblem nicht direkt aus den Scan-Ergebnissen ermittelt werden kann, ordnen die Forscher die durch die Scan-Ergebnisse bereitgestellten Sicherheitsattribute auch manuell der entsprechenden CWE zu.

35,8 % der Codesegmente weisen Sicherheitslücken auf, C++-Code weist die meisten Schwachstellen auf und deckt 42 CWE-Typen ab

Nach der Analyse kamen die Forscher auf der Grundlage der drei oben aufgeworfenen Fragen zu einer endgültigen Schlussfolgerung.

RQ1: Ist von Copilot generierter Code in GitHub-Projekten sicher?

Von den 435 von Copilot generierten Codefragmenten enthielten 35,8 % Sicherheitslücken, die unabhängig von der verwendeten Programmiersprache zu Sicherheitsproblemen führten.

Es gibt einen etwas höheren Prozentsatz an Sicherheitslücken in Python- und JavaScript-Code, den Sprachen, in denen Entwickler Copilot am häufigsten verwenden. Von den 251 gesammelten Python-Codefragmenten weisen 39,4 % Sicherheitsrisiken auf. Von den 79 JavaScript-Snippets weisen 27,8 % Sicherheitsrisiken auf. Von allen Programmiersprachen weist C++ mit 46,1 % den höchsten Anteil an Codefragmenten mit Sicherheitslücken auf. Go weist außerdem eine relativ hohe Sicherheitsrisikoquote von 45,0 % auf. Im Vergleich dazu ist der Anteil von Sicherheitsproblemdateien in C#- und Java-Code mit 25 % bzw. 23,2 % geringer.

RQ2: Welche Sicherheitslücken bestehen in den von Copilot generierten Codefragmenten?

Um RQ2 zu beantworten, verarbeiteten die Forscher die Ergebnisse der von RQ1 durchgeführten Scans und beseitigten doppelte Sicherheitsprobleme, die an derselben Codesegmentposition festgestellt wurden. Insgesamt wurden 600 Sicherheitslücken in 435 Codeschnipseln identifiziert.

Die Arten der erkannten Sicherheitslücken waren vielfältig und standen im Zusammenhang mit 42 verschiedenen CWEs, darunter CWE-78 (Einschleusung von Betriebssystembefehlen), CWE-330 (Schwachstelle durch die Verwendung unsicherer Zufallswerte) und CWE-703 (Überprüfung auf abnormale oder fehlerhafte Bedingungen). Handhabung) kommt am häufigsten vor.

RQ3: Wie viele Sicherheitslücken gehören zu den MITRE CWE Top-25?

Von den 42 identifizierten CWEs gehören 11 zu den derzeit anerkannten CWE Top-25-Schwachstellen im Jahr 2022.

schreibe am Ende

In diesem Zusammenhang scherzten einige Internetnutzer auch, dass ihre Fähigkeit zum Schreiben von Fehlern möglicherweise höher sei als die von GitHub Copilot.

Natürlich soll diese Studie Entwickler nicht davon überzeugen, bei ihrer täglichen Arbeit keine KI-gestützten Codierungstools zu verwenden, sondern vielmehr zeigen, dass die Verwendung von Copilot zum Generieren von Code in der tatsächlichen Entwicklung die Entwicklungseffizienz verbessern kann, und jeden daran erinnern, seine eigenen Sicherheitsvorkehrungen zu treffen Einschätzungen.

Führen Sie gleichzeitig entsprechende Sicherheitsüberprüfungen durch, wenn Sie die Codevorschläge von Copilot annehmen, um potenzielle Risiken wirksam zu vermeiden und Verluste zu reduzieren.

Weitere Einzelheiten finden Sie im Dokument: https://browse.arxiv.org/pdf/2310.02059.pdf