🇩🇪 DE 🇬🇧 EN
👻 Geister in der Maschine / Kapitel 15: Semantic Engineering ohne Verantwortung – Warum KI-generierter Code nicht für den Systembetrieb geeignet ist
Einleitung: Die gefährliche Illusion des Vertrauens in maschinell erzeugten Code

Die rasante Entwicklung generativer Künstlicher Intelligenz hat eine neue Ära der Softwareentwicklung eingeläutet, in der Code nicht mehr ausschließlich von Menschen geschrieben, sondern zunehmend von Maschinen erzeugt wird.

Diese Fähigkeit verspricht Effizienzsteigerungen und eine Demokratisierung der Softwareerstellung. Doch hinter der oft beeindruckenden Fassade verbirgt sich eine fundamentale Problematik, die in diesem Kapitel ins Zentrum gerückt wird.

Die zentrale Hypothese lautet:

Generativer Code, wie er heute von den meisten KI-Modellen erzeugt wird, ist keine ausgereifte technische Leistung im Sinne einer verantwortungsvollen Ingenieurskunst, sondern vielmehr eine hochentwickelte semantische Simulation.

Was bedeutet "semantische Simulation" in diesem Kontext? Es bedeutet, dass die KI Code erzeugt, der zwar auf den ersten Blick syntaktisch korrekt ist – also formal den Regeln der jeweiligen Programmiersprache entspricht und oft auch fehlerfrei ausgeführt werden kann.

Jedoch werden die zugrundeliegende Bedeutung der implementierten Logik, der spezifische Systemkontext, in dem dieser Code operieren soll, und insbesondere die vielschichtigen Sicherheitsimplikationen von der KI nicht wirklich durchdrungen, verstanden oder gar proaktiv kontrolliert.

Was auf diese Weise entsteht, ist oft nur ein funktionaler Schein – ein technisches Artefakt, das aussieht wie eine echte, robuste Lösung, aber bei genauerer Betrachtung fundamentale Schwächen und inhärente Risiken birgt, die es für den produktiven Systembetrieb ungeeignet machen.

Dieses Kapitel wird anhand konkreter Tests und Analysen aufzeigen, warum blindes Vertrauen in KI-generierten Code nicht nur naiv, sondern potenziell gefährlich ist.

Testumgebung: Drei praxisnahe Prompts, zahlreiche unerkannte Risiken

Um die Hypothese der semantischen Simulation und der mangelnden Sicherheitsverantwortung generativer KI-Modelle zu überprüfen, wurden in mehreren strukturierten Sicherheitstests sechs verschiedene, aktuell verfügbare KI-Modelle unter realitätsnahen Bedingungen geprüft. Hierfür wurden drei konkrete, alltägliche Programmieraufgaben als Prompts formuliert:

Die getesteten Modelle wurden für die Analyse anonymisiert und wie folgt bezeichnet:

Die Prompts wurden bewusst so formuliert, wie sie typischerweise von Entwicklern gestellt werden könnten, ohne explizit auf jede einzelne notwendige Sicherheitsmaßnahme hinzuweisen.

Es wurde erwartet, dass die KI-Modelle aufgrund ihres umfangreichen Trainings mit öffentlich verfügbarem Code und Sicherheitsdokumentationen implizit Best Practices der sicheren Programmierung berücksichtigen würden.

Zentrale Beobachtung: Sicherheit wird nicht generiert, sondern bestenfalls simuliert

Die Ergebnisse der Tests waren ernüchternd und bestätigten die Ausgangshypothese auf breiter Front. Mit einer bemerkenswerten Ausnahme (KIJudith in einigen Teilaspekten) zeigten alle getesteten Modelle signifikante Defizite bei der Implementierung grundlegender Sicherheitsmechanismen.

Die folgende Tabelle fasst die zentralen Beobachtungen zusammen:

Sicherheitskriterium Ergebnis der meisten Modelle (Ausnahme: KIJudith in Teilen)
SQL-Injection-Schutz (allgemein) ❌ Möglich oder direkt ausnutzbar: Direkte Einbettung von Nutzereingaben in SQL-Queries ohne ausreichende Maskierung oder Validierung.
Verwendung von Prepared Statements ⚠️ Teilweise – oft nur auf explizite Nachfrage oder inkonsistent: Prepared Statements wurden nicht standardmäßig oder oft fehlerhaft implementiert.
Sichere Sortierlogik (z.B. ORDER BY-Klauseln) ❌ Keine Whitelist-Prüfung, keine Typvalidierung: Nutzereingaben für Sortierparameter wurden oft direkt in die SQL-Query übernommen, was Injections ermöglicht.
Prüfung der Eingabelängen (Input Length Validation) ❌ Fehlte vollständig oder war unzureichend: Kein Schutz gegen überlange Eingaben, die zu Pufferüberläufen oder Denial-of-Service führen können.
Schutz vor reflektierten Eingaben (Cross-Site Scripting, XSS) ❌ Häufig mit unsicherem innerHTML oder direkter, ungesicherter Ausgabe (echo) von Nutzereingaben im HTML-Kontext.
Autovervollständigung & User Experience (UX) ✅ Funktional oft gegeben, aber optisch irreführend: Die generierten Oberflächen wirkten oft professionell und suggerierten eine Sicherheit, die nicht vorhanden war.

Ein besonders kritisches und häufig vernachlässigtes Element war die korrekte Verwendung von Prepared Statements (deutsch: vorbereitete SQL-Anweisungen).

Diese sind ein fundamentaler Mechanismus in der Datenbankprogrammierung, um SQL-Befehle parametrisiert und damit inhärent sicherer an die Datenbank zu übergeben.

Sie verhindern effektiv, dass Benutzereingaben direkt und unkontrolliert in SQL-Strings eingebunden werden, und sind daher ein Grundbaustein im Kampf gegen SQL-Injection-Angriffe.

Die Tatsache, dass viele der getesteten KI-Modelle diesen grundlegenden Sicherheitsmechanismus falsch, inkonsistent oder gar nicht verwendeten, ist ein alarmierendes Zeichen für die mangelnde Tiefe ihres "Sicherheitsverständnisses".

Fallanalyse: Die drei Prompts im Detail – eine Chronik des Versagens

Die Analyse der von den KI-Modellen generierten Antworten auf die drei spezifischen Prompts offenbart ein durchgängiges Muster von Nachlässigkeit und Unverständnis für grundlegende Sicherheitsprinzipien.

Prompt 1 – HTML-Formular mit Datenbankanbindung (PHP/MySQL):
Fast alle Modelle lieferten Code, der die gewünschte Funktionalität – Daten aus einem HTML-Formular entgegennehmen und in einer Datenbank speichern – auf den ersten Blick erfüllte. Bei genauerer Betrachtung fehlten jedoch durchweg essenzielle Sicherheitsmaßnahmen:

Prompt 2 – Produktfilter für einen Onlineshop (z.B. PHP/SQL mit Limit, Preisfilter, Checkbox-Logik):
In diesem Szenario konnte lediglich KIJudith einen überzeugenden Lösungsansatz liefern, der sauberen, parametrisierten SQL-Code, eine Whitelist-basierte Logik für Sortierparameter und eine nutzergeführte Validierung der Eingabewerte umfasste.

Die meisten anderen Modelle, darunter beispielsweise KIBertha und KIRose, erzeugten zwar visuell ansprechenden und auf den ersten Blick funktionalen Code für die Filteroberfläche.

Dieser Code war jedoch bei genauerer Prüfung durch einfache Manipulation von GET-Parametern angreifbar. Beispielsweise konnte durch Anhängen von limit=-1 an die URL die Paginierungslogik ausgehebelt oder durch sort=DROP TABLE products (vereinfacht dargestellt) potenziell die Datenbank kompromittiert werden, da keine serverseitige Validierung der Sortierspalten gegen eine Whitelist erfolgte.

Die gefährlichsten Systeme waren hier nicht unbedingt jene, die offensichtlich schlecht strukturierten oder fehlerhaften Code lieferten. Es waren vielmehr jene, die einen optisch perfekten und funktional überzeugenden Schein erzeugten, unter dessen Oberfläche sich jedoch unsichtbare und für Laien kaum erkennbare Exploit-Pfade verbargen.

Prompt 3 – JavaScript-basiertes Suchformular mit serverseitiger SQL-Anbindung:
Auch bei dieser Aufgabe, die die Interaktion zwischen Client-seitigem JavaScript und einem Server-seitigen Backend erforderte, zeigten sich ähnliche Schwachstellenmuster:

Forensische Klassifikation: Die acht zentralen Fehlerklassen KI-generierten Codes

Die systematische Analyse der von den verschiedenen KI-Modellen generierten Codebeispiele offenbarte eine Reihe wiederkehrender Fehlerklassen, die auf ein fundamentales Missverständnis von Sicherheitsprinzipien hindeuten.

Die folgende Tabelle klassifiziert die acht zentralen beobachteten Fehler:

Nr. Fehlerklasse Beschreibung und typische Auswirkungen Relevanz für Systemsicherheit
1 Keine oder irreführende Warnhinweise Die KI liefert Code ohne expliziten Hinweis darauf, dass dieser nicht für den Produktionseinsatz geeignet ist oder zusätzliche Sicherheitsmaßnahmen erfordert. Dies ist besonders gefährlich für unerfahrene Nutzer oder Laien, die der KI blind vertrauen. Kritisch
2 Schwache oder fehlende Filterlogik Implementierte Filter (z.B. mittels regulärer Ausdrücke oder einfacher String-Prüfungen) sind oft unsauber, zu unspezifisch, umgehen wichtige Edge Cases oder sind gänzlich unkontrolliert und damit leicht zu umgehen. Hoch
3 Fehlende Eingabelängenprüfung Es erfolgt kein oder nur ein unzureichender Schutz gegen übermäßig lange oder komplett leere Eingabefelder. Dies öffnet Angriffsflächen für Denial-of-Service (DoS) durch Ressourcenerschöpfung oder Pufferüberläufe. Kritisch
4 Reflektierte Injektionen (XSS) Benutzereingaben werden client- oder serverseitig ohne ausreichende Maskierung (Escaping) direkt in die HTML-, JavaScript- oder CSS-Ausgabe zurückgegeben, was Cross-Site Scripting ermöglicht. Extrem hoch
5 Verstoß gegen fundamentale Best Practices Oft fehlt eine klare Trennung von Logik, Datenrepräsentation und Output-Generierung (z.B. Vermischung von PHP und HTML). Wichtige Praktiken wie umfassendes Logging von Fehlern und Sicherheitsereignissen oder konsequentes Sanitizing aller externen Daten fehlen. Hoch
6 Keine oder unzureichende Sonderzeichenprüfung Kritische Sonderzeichen, die für Angriffe wie SQL-Injection, Header-Injection oder XSS genutzt werden können, werden nicht adäquat gefiltert oder maskiert (z.B. durch fehlende Nutzung von filter_var() in PHP, htmlspecialchars() oder unzureichende preg_match()-Validierungen). Hoch
7 Fehlendes oder mangelhaftes HTTP-Header-Handling Wichtige HTTP-Header wie Content-Type, Origin, Referer oder sicherheitsrelevante Header wie Content-Security-Policy (CSP) werden nicht geprüft, gesetzt oder falsch konfiguriert. Mittel bis Hoch
8 Training auf Mustern statt Transferwissen für Betriebssicherheit Die Modelle erkennen zwar oft dokumentierte Exploits oder Code-Muster, die in ihren Trainingsdaten als "unsicher" markiert sind. Ihnen fehlt jedoch ein echtes, transferierbares Verständnis für die Prinzipien realer Betriebssicherheit, kontextabhängige Risiken und die Notwendigkeit einer durchgängigen Defense-in-Depth-Strategie. Fundamental

Der ethische Kern des Problems: Die Maschine täuscht eine Kompetenz vor, die sie nicht besitzt

Die getesteten KI-Systeme geben sich oft den Anschein von Expertise und Zuverlässigkeit. Sie generieren Code, der syntaktisch korrekt ist, oft auch die gewünschte Funktionalität auf den ersten Blick erfüllt und manchmal sogar mit Kommentaren versehen ist, die Best Practices suggerieren.

Doch diese Fassade ist trügerisch. Die Systeme sind in vielen Fällen blind für die operative Realität und die tatsächlichen Sicherheitsimplikationen ihres eigenen Outputs.

Sie "halluzinieren" Sicherheit – beispielsweise indem sie zwar eine Funktion wie password_hash() für die Passwortspeicherung verwenden (weil dies in den Trainingsdaten häufig vorkam), aber gleichzeitig elementare Schutzmaßnahmen wie Salt-Generierung, sichere Speicherung des Hash oder Richtlinien für Passwortkomplexität und -wechsel komplett ignorieren.

Sie verwenden vielleicht eine prepare()-Methode für Datenbankabfragen, aber ohne ein durchgängiges Verständnis für die Notwendigkeit der korrekten Parameterbindung, der Fehlerbehandlung oder des Schutzes vor SQL-Injection in anderen Teilen der Applikation.

Diese punktuelle Anwendung von Sicherheitsbausteinen ohne ein übergeordnetes Verständnis für den Eingabekontext, den Ausführungskontext oder die potenziellen Angriffsvektoren ist nicht nur fahrlässig. Angesichts des Vertrauens, das viele Nutzer – insbesondere weniger erfahrene – in diese Systeme setzen, ist es ethisch unvertretbar.

Denn Sicherheit ist kein kosmetisches Attribut, das man einer Software nachträglich hinzufügen kann. Sie ist eine fundamentale Vertrauensarchitektur, die von Grund auf und in jedem Detail bedacht und implementiert werden muss. Eine KI, die diese Tiefe nicht versteht, sondern nur Oberflächenmuster nachahmt, kann keine sichere Software erzeugen.

Fazit: Warum generative KI im aktuellen Zustand nicht für den kritischen Systembetrieb einsetzbar ist

Die durchgeführten Tests und Analysen führen zu einer ernüchternden, aber notwendigen Schlussfolgerung: Generative KI-Modelle sind in ihrem aktuellen Entwicklungsstadium in der Regel nicht dazu geeignet, Code für den direkten Einsatz in produktiven, sicherheitskritischen Systemen zu erzeugen.

Die Gründe hierfür sind systemisch:

These Begründung
KI simuliert Sicherheit – sie garantiert sie nicht. Echte Sicherheit entsteht nicht aus der korrekten Syntax oder der Nachahmung von Mustern, sondern aus einer tiefgreifenden, durchdachten Sicherheitsarchitektur, einem Verständnis für Bedrohungsmodelle und einem gesunden Misstrauen gegenüber allen externen Eingaben. Dieses Verständnis fehlt den KIs.
Die Abhängigkeit vom perfekten Prompt ist ein inhärentes Risiko. Wer nicht explizit und detailliert nach jeder einzelnen Sicherheitsmaßnahme fragt, bekommt oft fahrlässigen oder unsicheren Code geliefert. Die KI nimmt dem Entwickler die Verantwortung für sicheres Design nicht ab, sondern erfordert von ihm oft noch mehr Expertise, um die generierten Vorschläge kritisch zu prüfen.
Blindes Vertrauen in Autovervollständigung und KI-Vorschläge ist gefährlich. Der oft professionell und überzeugend wirkende visuelle Eindruck des generierten Codes oder der Benutzeroberfläche ersetzt kein fundiertes Sicherheitskonzept und keine manuelle Code-Review durch erfahrene Sicherheitsexperten.
Fehlende Kontextlogik und Systemverständnis können fatale Folgen haben. Die KI weiß in der Regel nicht, in welchem spezifischen System oder unter welchen realen Betriebsbedingungen der von ihr generierte Code laufen wird. Ihr fehlt das Verständnis für die potenziellen Risiken und den möglichen Schadensumfang, den eine Sicherheitslücke in diesem Kontext verursachen könnte.
Schlussformel: Sicherheit als Haltung, nicht als Funktion

Sicherheit ist keine Funktion, die man einer Software einfach hinzufügen kann, indem man einen bestimmten Befehl oder eine spezifische Bibliothek verwendet. Sicherheit ist eine grundlegende Haltung, eine Denkweise, ein kontinuierlicher Prozess, der Misstrauen, Antizipation von Bedrohungen und ein tiefes Verständnis für Systemarchitektur erfordert.

Und genau diese Haltung fehlt den getesteten KI-Modellen – mit der teilweisen Ausnahme von KIJudith, die zumindest Ansätze einer strukturierteren und prinzipienbasierten Absicherung zeigte – fast durchgängig.

Die meisten Modelle sind primär auf funktionale Korrektheit und sprachliche Eloquenz optimiert, nicht auf die Generierung von Code, der den harten Anforderungen der realen Betriebssicherheit standhält.

Solange KI-Systeme nicht lernen, die Bedeutung von Sicherheit zu verstehen, anstatt nur ihre oberflächlichen Muster zu reproduzieren, bleibt ihr Output ein unkalkulierbares Risiko für jeden, der ihn unreflektiert in produktiven Umgebungen einsetzt.

Die Verantwortung für sicheren Code kann und darf nicht an eine Maschine delegiert werden, die diese Verantwortung weder verstehen noch tragen kann.