Da KI-Technologien aufgrund ihrer Produktivitätsgewinne in Softwareentwicklungsprozesse eingebettet werden, stehen Entwickler vor komplexen Sicherheitsherausforderungen. Erkunden Sie mit Balázs Kiss die wesentlichen Sicherheitspraktiken und Eingabeaufforderungstechniken, die für einen verantwortungsvollen und effektiven Einsatz von KI erforderlich sind.
Der Einsatz von künstlicher Intelligenz (KI) in der Softwareentwicklung hat in den letzten Jahren zugenommen. Wie bei jedem technologischen Fortschritt bringt dies auch Sicherheitsaspekte mit sich. Balázs Kiss, Leiter der Produktentwicklung beim ungarischen Schulungsanbieter Cydrill Software Security, hat die Sicherheit des maschinellen Lernens bereits vor der allgemeinen Aufmerksamkeit für generative KI unter die Lupe genommen. „Während heute alle über große Sprachmodelle diskutieren, lag der Fokus im Jahr 2020 vor allem auf maschinellem Lernen, wobei die meisten Anwender Wissenschaftler in Forschungs- und Entwicklungsabteilungen waren.“
Bei der Untersuchung des aktuellen Stands der Technik stellte Kiss fest, dass viele grundlegende Konzepte aus der Welt der Software-Sicherheit ignoriert wurden. „Aspekte wie Eingabevalidierung, Zugriffskontrolle, Sicherheit der Lieferkette und die Vermeidung einer übermäßigen Ressourcennutzung sind für jedes Softwareprojekt wichtig, auch für das maschinelle Lernen. Als ich also feststellte, dass die Leute diese Praktiken in ihren KI-Systemen nicht einhalten, habe ich mich mit möglichen Angriffen auf diese Systeme beschäftigt. Das Ergebnis ist, dass ich nicht davon überzeugt bin, dass maschinelles Lernen sicher genug ist, um es ohne menschliche Aufsicht einzusetzen. Der KI-Forscher Nicholas Carlini von Google Deepmind verglich den aktuellen Stand der ML-Sicherheit sogar mit den Anfängen der Kryptographie vor Claude Shannon, ohne starke Algorithmen, die auf einer strengen mathematischen Grundlage beruhen.“
Als die Popularität großer Sprachmodelle zunahm, bemerkte Kiss, dass die gleichen grundlegenden Sicherheitsprobleme wieder auftauchten. „Sogar die gleichen Namen tauchten in Forschungsarbeiten auf. Carlini war beispielsweise an der Entwicklung eines Angriffs beteiligt, mit dem automatisch Jailbreaks für jedes LLM generiert werden können – ein Spiegelbild der gegnerischen Angriffe, die seit einem Jahrzehnt gegen Computer-Vision-Modelle eingesetzt werden.“
Fabrizierte Abhängigkeiten
Wenn Entwickler derzeit einen LLM verwenden, um Code zu generieren, müssen sie bedenken, dass sie im Wesentlichen eine erweiterte Autovervollständigungsfunktion verwenden. „Die Ausgabe ähnelt dem Code, auf den sie trainiert wurde, und wirkt recht überzeugend. Das ist jedoch keine Garantie für seine Korrektheit. Wenn ein LLM beispielsweise Code generiert, der eine Bibliothek enthält, fabriziert er oft einen falschen Namen, weil das ein Wort ist, das in diesem Kontext Sinn ergibt. Cyberkriminelle erstellen jetzt Bibliotheken mit diesen fiktiven Namen, betten Malware ein und laden sie in beliebte Code-Repositories hoch. Wenn Sie also diesen generierten Code verwenden, ohne ihn zu überprüfen, kann Ihre Software unbeabsichtigt Malware ausführen.“
In den USA hat das National Institute of Standards and Technology (NIST) sieben wesentliche Bausteine für eine verantwortungsvolle KI festgelegt: Validität und Zuverlässigkeit, Sicherheit, Sicherheit und Widerstandsfähigkeit, Rechenschaftspflicht und Transparenz, Erklärbarkeit und Interpretierbarkeit, Datenschutz und Fairness mit Abmilderung schädlicher Verzerrungen. „Der Angriff mit den gefälschten Bibliotheken ist ein Beispiel, bei dem Sicherheit und Widerstandsfähigkeit gefährdet sind, aber die anderen Bausteine sind für eine vertrauenswürdige und verantwortungsvolle KI ebenso wichtig. Validität und Zuverlässigkeit‘ bedeutet zum Beispiel, dass die Ergebnisse durchweg korrekt sein sollten: Wenn Sie einmal ein korrektes Ergebnis erhalten und das nächste Mal ein falsches, wenn Sie das LLM mit der gleichen Aufgabe betrauen, ist das nicht zuverlässig.“
''If you’re aware of the type of vulnerabilities you can expect, such as cross-site scripting vulnerabilities in web applications, specify them in your questions.''
Was die Voreingenommenheit betrifft, so wird diese oft in anderen Bereichen verstanden, z. B. bei großen Sprachmodellen, die stereotype Annahmen über Berufe von Männern und Frauen ausdrücken. Aber auch ein Datensatz mit Code kann eine Verzerrung aufweisen, erklärt Kiss. „Wenn ein LLM ausschließlich auf Open-Source-Code von Github trainiert wird, könnte es zu Code tendieren, der dieselben Bibliotheken verwendet wie der Code, auf dem es trainiert wurde, oder zu Code mit englischer Dokumentation. Dies wirkt sich auf die Art des Codes aus, den der LLM generiert, und auf seine Leistung bei Aufgaben, die mit Code ausgeführt werden, der sich von dem unterscheidet, den er in seinem Trainingsset gesehen hat, und der möglicherweise schlechter abschneidet, wenn er mit einer benutzerdefinierten Closed-Source-API interagiert.
Balasz Kiss
Credits: Egressy Orsi Foto
Effektive Eingabeaufforderung
Laut Kiss sind viele Best Practices für den verantwortungsvollen Einsatz von KI in der Softwareentwicklung nicht neu. „Validieren Sie die Benutzereingaben in Ihrem Code, überprüfen Sie die von Ihnen verwendeten Bibliotheken von Drittanbietern, suchen Sie nach Schwachstellen – all das ist im Sicherheitsbereich allgemein bekannt. Es gibt viele Tools, die Sie bei diesen Aufgaben unterstützen.“ Sie können sogar KI verwenden, um von KI erzeugten Code zu überprüfen, schlägt Kiss vor. „Geben Sie den generierten Code zurück in das System und bitten Sie es um Kritik. Gibt es irgendwelche Probleme mit diesem Code? Wie könnten sie behoben werden?“ Die Ergebnisse dieses Ansatzes können recht gut sein, so Kiss, und je präziser Ihre Fragen sind, desto besser ist die Leistung des LLM. „Fragen Sie nicht nur, ob der generierte Code sicher ist. Wenn Sie wissen, welche Art von Schwachstellen zu erwarten sind, wie z.B. Cross-Site-Scripting-Schwachstellen in Webanwendungen, sollten Sie diese in Ihren Fragen angeben.“
Für die Erstellung effektiver Prompts, d.h. der Fragen, die Sie dem LLM stellen, gibt es viele neue Best Practices. One-shot oder few-shot Prompting, bei dem Sie dem LLM ein oder wenige Beispiele für die erwartete Ausgabe vorgeben, ist laut Kiss eine leistungsstarke Technik, um zuverlässigere Ergebnisse zu erzielen. „Wenn Ihr Code zum Beispiel derzeit XML-Dateien verarbeitet und Sie zu JSON wechseln möchten, können Sie einfach darum bitten, den Code so umzuwandeln, dass er JSON verarbeiten kann. Der generierte Code wird jedoch viel besser sein, wenn Sie ein Beispiel für Ihre Daten im XML-Format neben denselben Daten im JSON-Format einfügen und um einen Code bitten, der stattdessen Daten im JSON-Format verarbeitet.“
''With the present state of generative AI, it’s possible to write code without understanding programming. However, if you don’t understand the generated code, how will you maintain it?''
Eine weitere nützliche Prompting-Technik ist das sogenannte Chain-of-Thought-Prompting, bei dem ein LLM angewiesen wird, seinen Denkprozess zur Erlangung einer Antwort darzustellen und so das Ergebnis zu verbessern. Kiss hat diese und andere Prompting-Techniken sowie wichtige Fallstricke in einer eintägigen Schulung über verantwortungsvolle KI in der Softwareentwicklung am High Tech Institute zusammengestellt. „Zum Beispiel sind Unit-Tests, die von einem LLM generiert werden, oft ziemlich repetitiv und daher nicht besonders nützlich. Aber mit den richtigen Aufforderungen können sie verbessert werden. Sie können auch testgetriebene Entwicklung betreiben, indem Sie die Unit-Tests selbst schreiben und den LLM bitten, den entsprechenden Code zu erzeugen. Diese Methode kann sehr effektiv sein.“
Hier zu bleiben
Bei all diesen Vorsichtsmaßnahmen könnte man sich fragen, ob das große Versprechen der KI-Codegenerierung, nämlich die Steigerung der Entwicklerproduktivität, noch gilt. „Eine aktuelle Studie, die auf randomisierten kontrollierten Studien basiert, bestätigt, dass der Einsatz generativer KI die Produktivität von Entwicklern um 26 Prozent erhöht“, stellt Kiss fest, wobei die Vorteile für weniger erfahrene Entwickler sogar noch größer sind. Er warnt jedoch davor, dass dies ein Fallstrick für junge Entwickler sein könnte. „Beim derzeitigen Stand der generativen KI ist es möglich, Code zu schreiben, ohne das Programmieren zu verstehen. Der bekannte KI-Forscher Andrej Karpathy bemerkte sogar: ‚Die heißeste neue Programmiersprache ist Englisch.‘ Aber wenn Sie den generierten Code nicht verstehen, wie sollen Sie ihn dann pflegen? Das führt zu technischen Schulden. Wir wissen noch nicht, wie sich der dauerhafte Einsatz dieser Tools auf die Wartbarkeit und Robustheit auswirken wird.“
Auch wenn der Einsatz von KI in der Softwareentwicklung nicht ganz unproblematisch ist, so Kiss, wird sie sich zweifelsohne durchsetzen. „Auch wenn es heute wie eine Blase oder ein Hype aussieht, gibt es nachweisbare Vorteile, und die Technologie wird sich weiter durchsetzen. Viele Tools, die wir heute sehen, werden verbessert und sogar in integrierte Entwicklungsumgebungen integriert werden. Microsoft hat seinen Copilot bereits fest in seine Visual Studio Produkte integriert und ist damit nicht allein. Die menschliche Aufsicht wird jedoch immer notwendig sein. Letztendlich ist die KI nur ein Werkzeug, wie jedes andere Werkzeug, das Entwickler verwenden. Und LLMs haben inhärente Grenzen, wie z.B. ihre Tendenz zu „Halluzinationen“ – also zu Fälschungen. Das liegt an ihrer probabilistischen Natur, und die Benutzer müssen sich dessen immer bewusst sein, wenn sie sie einsetzen.
Dieser Artikel wurde geschrieben von Koen Vervloesem, freier Mitarbeiter bei Bits&Chips.
