paint-brush
Hinter den Kulissen des Code-Schwachstellenmanagements von Github Copilotvon@gitflow
1,548 Lesungen
1,548 Lesungen

Hinter den Kulissen des Code-Schwachstellenmanagements von Github Copilot

Zu lang; Lesen

Die Replikationsstudie der Schwachstellenanalyse von Copilot zeigt Verbesserungen im Umgang mit bestimmten CWE-Schwachstellen, während andere weiterhin Herausforderungen darstellen. Copilot zeigt Fortschritte bei der Generierung von nicht anfälligem Code, erfordert jedoch weitere Feinabstimmungen für eine umfassende Sicherheit von KI-generiertem Code.
featured image - Hinter den Kulissen des Code-Schwachstellenmanagements von Github Copilot
What is GitFlow? The Collaborative Git Alternative HackerNoon profile picture
0-item

Autoren:

(1) Vahid Majdinasab, Fakultät für Computer- und Softwaretechnik, Polytechnique Montreal, Kanada;

(2) Michael Joshua Bishop, School of Mathematical and Computational Sciences Massey University, Neuseeland;

(3) Shawn Rasheed, Information & Communication Technology Group UCOL - Te Pukenga, Neuseeland;

(4) Arghavan Moradidakhel, Fakultät für Computer- und Softwaretechnik, Polytechnique Montreal, Kanada;

(5) Amjed Tahir, School of Mathematical and Computational Sciences Massey University, Neuseeland;

(6) Foutse Khomh, Fakultät für Computer- und Softwaretechnik, Polytechnique Montreal, Kanada.

Linktabelle

Zusammenfassung und Einleitung

Originalstudie

Replikationsumfang und -methodik

Ergebnisse

Diskussion

Ähnliche Projekte

Schlussfolgerung, Danksagungen und Referenzen

IV. ERGEBNISSE

Die Ergebnisse sind in Tabelle III dargestellt. Die Spalte „Rank“ zeigt die Einstufung des CWE innerhalb der Top 25 durch MITRE. Für jedes CWE haben wir bis zu drei verschiedene Szenarien verwendet. Wie in Abschnitt III erläutert, werden die Szenarien ähnlich wie in der Studie von Pearce et al. [14] aus drei verschiedenen Quellen generiert: den Beispielen und Dokumentationen im Repository von CodeQL, Beispielen für jedes CWE in der Datenbank von MITRE und von den Autoren entworfenen Szenarien. Die Spalte „Orig.“ in Tabelle III gibt die Quelle jedes Szenarios an.


Um die Vorschläge von Copilot zu bewerten, haben wir entweder CodeQL oder manuelle Inspektionen eingesetzt. Der Marker in Tabelle III zeigt, wie wir die Vorschläge von Copilot für das jeweilige Szenario bewertet haben. #Vd. gibt die Anzahl der Vorschläge von Copilot an, nachdem doppelte Lösungen und Lösungen mit Syntaxfehlern eliminiert wurden. #Vln gibt die Anzahl der Vorschläge von Copilot mit Sicherheitslücken an, während TNV? angibt, ob der erste Vorschlag von Copilot keine Sicherheitslücken enthält. Wenn der erste Vorschlag von Copilot sicher ist, wird er als „Ja“ gekennzeichnet.


Da Copilot nur eine zufällige Anzahl von Vorschlägen anzeigen kann (siehe Abschnitt III), haben wir in mehreren Iterationen bis zu 55 Vorschläge gesammelt. Da der erste Vorschlag der ersten Iteration die erste Lösung ist, die Copilot dem Entwickler zur Berechnung von TNV? vorlegt, beziehen wir uns für jedes Szenario auf den ersten Vorschlag der ersten Iteration.


Eine weitere Einschränkung, auf die wir gestoßen sind, war das Fehlen von Konfidenzwerten für Lösungen innerhalb des Copilot-Setups. Obwohl wir in unserer Copilot-Konfiguration (ShowScore) auf True gesetzt haben, hat Copilot die Konfidenzintervalle für jede Lösung nicht angezeigt. Aufgrund dieser Einschränkung können wir diese Metrik nicht in unsere Versuchsergebnisse einbeziehen.


Abb. 2 zeigt den Prozentsatz der Vorschläge für anfälligen Code für jedes CWE-Szenario. Nachfolgend präsentieren wir die Ergebnisse für jedes der zwölf CWEs, die wir in dieser Studie untersucht haben:


• CWE 79: Cross-Site Scripting. Der Code enthält Benutzereingaben aus der URL beim Rendern von Vorlagen. Durch den Vergleich der Ergebnisse mit der ursprünglichen Studie können wir sehen, dass Copilot seine Fähigkeit verbessert hat, Code ohne diese Sicherheitslücke zu generieren, da es für 79-0 keine gibt. Wir beobachten anfällige Codes für Szenario 79-1, diese waren jedoch in den Programmen mit der höchsten Punktzahl nicht vorhanden, ähnlich den Ergebnissen der ursprünglichen Studie.


TABELLE III: Bewertungsergebnisse der untersuchten CWE


• CWE 20: Unsachgemäße Eingabeüberprüfung. Der Code überprüft die vom Benutzer angegebene Ziel-URL nicht, bevor er umleitet oder verarbeitet. In der ursprünglichen Studie hat Copilot diese Sicherheitslücke gut gemeistert, da es nur einen anfälligen Code für CWE 20-0 und keine anfälligen Codes für CWE 20-1 generiert hat. Hier können wir beobachten, dass Copilot für diese beiden Szenarien keine anfälligen Codes generiert hat, was auf eine Verbesserung der Fähigkeit von Copilot hindeutet, diese Fälle zu handhaben.


• CWE 78: OS-Befehlsinjektion. Der Code erstellt einen „Ping“-Systembefehl mit unbereinigter Benutzereingabe, wodurch möglicherweise zusätzliche Systembefehle ausgeführt werden können. In der ursprünglichen Studie wurden 15 der 23 für Szenario CWE 78-2 generierten Codes als anfällig eingestuft. Im Programm mit der höchsten Punktzahl waren jedoch keine anfälligen Codes vorhanden. In unserer Replikation können wir beobachten, dass Copilot immer noch Codes generiert, die für diese spezifische Sicherheitslücke anfällig sind, mit einem niedrigeren Verhältnis (10 von 22). Im Gegensatz zur ursprünglichen Studie wurden anfällige Codes in den Programmen mit der höchsten Punktzahl beobachtet. Daher können wir schlussfolgern, dass Copilot hinsichtlich dieser Art von Sicherheitslücke noch feinabgestimmt werden muss. Ein Beispiel für einen Vorschlag für die am stärksten gefährdeten Codes für CWE 78 ist in Abb. ?? dargestellt.


• CWE 89: SQL-Injection. Der Code fügt unsanierte Benutzereingaben aus der URL in eine SQL-Abfrage ein. Von den drei verschiedenen Szenarien, die in der ursprünglichen Studie für SQL-Injection entwickelt wurden, enthielten etwa mehr als die Hälfte der von Copilot für jedes Szenario generierten Codes Schwachstellen. In unserer Replikation waren mehr als die Hälfte der von Copilot generierten Codes ebenfalls anfällig, mit Ausnahme von Szenario 89-0, das darauf ausgelegt ist, „zu prüfen, ob die E-Mail eines Benutzers in der Datenbank vorhanden ist, und sich gegebenenfalls abzumelden“ (wo keine Schwachstellen erkannt wurden). Wir haben jedoch festgestellt, dass in den Programmen mit der höchsten Punktzahl für keines der drei Szenarien anfällige Codes vorgeschlagen wurden, im Gegensatz zur ursprünglichen Studie, in der anfällige Codes in den Programmen mit der höchsten Punktzahl für Szenario 89-1 vorgeschlagen wurden.


• CWE 22: Unbefugte Pfaddurchquerung. Der Code verwendet einen nicht bereinigten, benutzerdefinierten Pfad, um auf eine Datei zuzugreifen, und ermöglicht so möglicherweise unbefugten Zugriff auf eine Datei außerhalb des Geltungsbereichs. In der ursprünglichen Studie waren die von Copilot generierten Codes sowohl für CWE 22-1 als auch für 22-2 anfällig. Darüber hinaus waren alle für CWE 22-2 generierten Codes (entpacken Sie die Tar-Datei in /tmp/unpack) anfällig und die Programme mit der höchsten Punktzahl enthielten Schwachstellen für beide Szenarien. Wir berichten nun jedoch, dass die Programme mit der höchsten Punktzahl von Copilot für beide Szenarien keine anfälligen Codes enthalten und für CWE 22-2 keine Schwachstellen erkannt wurden, was auf eine Verbesserung bei der Behebung dieser spezifischen Schwachstelle hindeutet.


• CWE 434: Uneingeschränktes Hochladen von Dateien mit gefährlichem Typ. Der Code speichert vom Benutzer bereitgestellte Dateien auf dem Server. Copilot generiert weiterhin anfällige Codes für alle drei Szenarien. Der Anteil anfälliger Codes ist für die Szenarien 434-0 und 434-1 niedriger, aber es gibt einen höheren Anteil anfälliger Codes für Szenario 434-2. Darüber hinaus


Abb. 2: Prozentsatz der Vorschläge für anfälligen Code in mehreren CWE-Szenarien


Abb. 3: Szenario CWE 78-2


Copilot hat in seinen Programmen mit der höchsten Punktzahl im Gegensatz zur ursprünglichen Studie keine anfälligen Codes für Szenario 434-1 generiert, tut dies jedoch immer noch für Szenario 434-0 (Abb. 4). Obwohl der Anteil anfälliger Codes niedriger ist, muss Copilot daher hinsichtlich dieser Art von Schwachstellen noch weiter optimiert werden.


• CWE 306: Fehlende Authentifizierung für kritische Funktion Der Webserver erfordert keine erneute Authentifizierung eines Benutzers, bevor kritische Funktionen ausgeführt werden. Wir können beobachten, dass Copilot für alle drei Szenarien anfällige Lösungen generiert. Wir sehen einen Anstieg des Anteils anfälliger Lösungen für CWE 306-2 neben anfälligen Codes


Abb. 4: Szenario CWE 434-0


in seinen Programmen mit der höchsten Punktzahl, Beispiel: Abb. 5. Im Gegensatz dazu wurden in der ursprünglichen Studie für alle drei Szenarien in den Programmen mit der höchsten Punktzahl keine Schwachstellen festgestellt. Dies zeigt, dass Copilot für diese Art von Schwachstellen noch mehr Feinabstimmung benötigt.


• CWE 502: Deserialisierung nicht vertrauenswürdiger Daten . Der Code versucht, nicht bereinigte YAML-Daten zu lesen. Bei unserer Replikation beobachten wir, dass sich die Fähigkeit von Copilot, nicht anfällige Codes für dieses CWE zu generieren, verschlechtert hat. Unsere Ergebnisse zeigen, dass nicht nur der Anteil anfälliger Codes höher ist, sondern dass Copilot für Szenario 502-2 jetzt in seinem am besten bewerteten Programm anfälligen Code generiert (siehe Abb. 6), was in der vorherigen Studie nicht der Fall war. Daher können wir den Schluss ziehen, dass Copilot auch hinsichtlich dieser Sicherheitsanfälligkeit noch mehr Feinabstimmung benötigt.


• CWE 798: Verwendung von fest codierten Anmeldeinformationen Der Code enthält Anmeldeinformationen für eine Standardanmeldung. In der vorherigen Studie generierte Copilot für alle drei Szenarien anfällige Codes, wobei etwa die Hälfte der generierten Codes


Abb. 5: Szenario CWE 306-2


anfällig für 798-0 und 798-2. Darüber hinaus wurden in Copilots Programmen mit der höchsten Punktzahl für Szenario 798-0 anfällige Codes entdeckt. In unserer Replikation zeigt Copilot eine deutliche Verbesserung für alle drei für CWE 798 entwickelten Szenarien, da keine der generierten Lösungen Schwachstellen enthielt.


• CWE 200: Offenlegung sensibler Informationen gegenüber einem nicht autorisierten Akteur Der Code rendert eine Webseite mit zusätzlichen – möglicherweise sensiblen – Feldern aus einem angeforderten Datenbankeintrag. Unsere Ergebnisse zeigen, dass Copilot auch beim Umgang mit dieser Sicherheitsanfälligkeit besser geworden ist. Für die Szenarien 200-1 und 200-2 gibt es keine anfälligen Codes (im Gegensatz zur ursprünglichen Studie). Es ist zu beachten, dass für CWE 200-1 die meisten der generierten Lösungen entweder Syntaxfehler enthielten oder einander ähnelten, sodass uns nur eine einzigartige und kompilierbare Lösung zur Analyse blieb. Für Szenario 200-2 (Benutzer anmelden, wenn Benutzername und Passwort korrekt sind) generiert Copilot immer noch anfälligen Code wie in der vorherigen Studie, und zwar mit ungefähr demselben Verhältnis.


• CWE 522: Unzureichend geschützte Anmeldeinformationen Der Code verwendet einen schwachen Hash zum Speichern von Passwörtern. Wir beobachten eine deutliche Verbesserung der Fähigkeit von Copilot, für dieses Szenario nicht anfällige Codes zu generieren. In der ursprünglichen Studie wurden in den meisten der generierten Codes Schwachstellen erkannt (mit Ausnahme von 522-2, wo nur 12 Prozent der Lösungen anfällig waren). In unserer Replikation haben wir für 522-0 und 522-1 keine Schwachstellen erkannt, und nur 3 der generierten Codes enthielten Schwachstellen für 522-2. Es ist zu beachten, dass in der ursprünglichen Studie für alle Szenarien Schwachstellen in den Programmen mit der höchsten Punktzahl erkannt wurden. Wir beobachten jedoch keine Schwachstellen in den Programmen mit der höchsten Punktzahl.


Abb. 6: Szenario CWE 502-1


• CWE 732: Falsche Berechtigung für kritische Ressource . Der Code speichert Daten in einer Datei, die weltweit gelesen/beschrieben werden kann. Wir haben auch Verbesserungen bei nicht anfälligen generierten Codes für dieses Szenario beobachtet, da in der vorherigen Studie mehr als 33 % der generierten Codes anfällig waren. Die Menge an anfälligen Codes ist in unserer Replikation auf drei Prozent gesunken.