WEBVTT

00:00:00.005 --> 00:00:03.845
<v Clemens>Das zeigt ganz gut, was da die Gefahren sind.

00:00:03.845 --> 00:00:06.187
<v Clemens>Zum einen natürlich aus dem geopolitischen Aspekt, aber auch,

00:00:06.524 --> 00:00:09.065
<v Clemens>weil das ganz gut demonstriert, wie,

00:00:09.825 --> 00:00:12.607
<v Clemens>wenig wir einfach wissen, auf was wurde da genau trainiert,

00:00:12.915 --> 00:00:15.565
<v Clemens>wie wurde das trainiert, ist das hier absichtlich entstanden,

00:00:15.565 --> 00:00:20.565
<v Clemens>ist das ein blöder Seiteneffekt, weil man irgendwie da einen falschen Bias in

00:00:20.565 --> 00:00:21.344
<v Clemens>den Trainingssachen hat.

00:00:21.553 --> 00:00:25.599
<v Clemens>Man weiß es einfach nicht, aber das muss einem einfach bewusst sein.

00:00:26.305 --> 00:00:30.235
<v Clemens>Wir benutzen LLMs gerne, sie sind super wertvoll, aber wir verstehen nicht so

00:00:30.235 --> 00:00:33.365
<v Clemens>ganz, was unter der Haube passiert, auch worauf sie trainiert wurden,

00:00:33.365 --> 00:00:36.332
<v Clemens>was für Rahmenbedingungen sie vielleicht mitbringen.

00:00:42.017 --> 00:00:46.445
<v Hendrik>Der Thomas, der hat uns jetzt richtig Appetit gemacht auf KI im Coding,

00:00:46.785 --> 00:00:51.275
<v Hendrik>das mal einzusetzen, zu schauen, was kann man damit alles machen und ja,

00:00:51.275 --> 00:00:54.195
<v Hendrik>die Versprechen der KI-Technologie, die klingen ja auch verlockend.

00:00:54.195 --> 00:00:57.725
<v Hendrik>Effizienzboost, Ten Times Developer, Revolution. Ich weiß nicht,

00:00:57.725 --> 00:01:02.005
<v Hendrik>wie oft man das Wort Revolution schon gehört hat im Rahmen von KI-Technologie.

00:01:02.005 --> 00:01:07.480
<v Hendrik>Aber es gibt eine entscheidende Frage, die dabei vielleicht beim ganzen Enthusiasmus oft übersehen wird.

00:01:08.072 --> 00:01:11.230
<v Hendrik>Wie sicher ist denn eigentlich der Code, den KI-Assistenten schreiben?

00:01:12.658 --> 00:01:16.095
<v Hendrik>Die Antwort ist da leider ernüchternd. KI-Code bringt neue Risiken mit sich.

00:01:16.095 --> 00:01:17.761
<v Hendrik>Risiken sind auf alle Fälle da.

00:01:17.958 --> 00:01:21.592
<v Hendrik>Von klassischen Schwachstellen bis zu völlig neuen Angriffen wie Model Poisoning

00:01:21.952 --> 00:01:23.821
<v Hendrik>oder Rules File Backdoors.

00:01:24.669 --> 00:01:28.274
<v Hendrik>Vielleicht Begriffe, die ihr zum ersten Mal hört, aber die sehr real sind.

00:01:28.732 --> 00:01:31.315
<v Hendrik>Und deshalb freue ich mich, dass jetzt Clemens Hübner hier ist.

00:01:31.315 --> 00:01:35.327
<v Hendrik>Der ist nämlich Software Cyber Security Lead bei Giesecke und Devrient,

00:01:35.600 --> 00:01:37.719
<v Hendrik>einem Unternehmen, das Sicherheit ernst nimmt.

00:01:38.119 --> 00:01:43.280
<v Hendrik>Er begleitet Softwareprojekte, berät zu DevSecOps und baut sichere Entwicklungsprozesse auf.

00:01:43.640 --> 00:01:47.295
<v Hendrik>Als Trainer und Speaker auf internationalen Konferenzen kennt er die realen

00:01:47.295 --> 00:01:49.967
<v Hendrik>Sicherheitsprobleme, die KI-generierter Code mitbringt.

00:01:50.286 --> 00:01:53.085
<v Hendrik>Und die wird er uns jetzt auch gleich vorstellen. Seid gespannt.

00:01:53.085 --> 00:01:55.401
<v Hendrik>Ich freue mich sehr, dass du hier bist, lieber Clemens.

00:01:56.346 --> 00:01:59.115
<v Clemens>Ja, ich freue mich auch. Danke, Hendrik. Danke für die Einladung.

00:01:59.399 --> 00:02:01.106
<v Hendrik>Sehr, sehr gerne. Immer wieder gerne.

00:02:01.419 --> 00:02:05.041
<v Hendrik>Aber wir haben, wie du vielleicht gemerkt hast, wenig Zeit. Deshalb würde ich

00:02:05.041 --> 00:02:06.731
<v Hendrik>sagen, die Bühne gehört dir.

00:02:06.969 --> 00:02:11.288
<v Hendrik>Wenn ihr Fragen an Clemens habt, schreibt sie in den Chat und ich gebe sie weiter. Viel Spaß.

00:02:12.112 --> 00:02:15.705
<v Clemens>Super, danke dir. Starten wir direkt rein. Ich habe nämlich auch viel mitgebracht,

00:02:16.551 --> 00:02:19.653
<v Clemens>und da schauen wir jetzt direkt mal rein.

00:02:20.007 --> 00:02:23.921
<v Clemens>Ich glaube, zur Motivation brauche ich euch heute gar nicht so viel erzählen.

00:02:23.921 --> 00:02:29.171
<v Clemens>Ihr seid alle hier, weil ihr euch mit Code AI beschäftigt, weil ihr das relevant findet.

00:02:29.171 --> 00:02:34.891
<v Clemens>Ich habe trotzdem mal die letzten Zahlen rausgesucht, die ich gefunden habe, wie weit verbreitet.

00:02:36.174 --> 00:02:40.051
<v Clemens>Code AI schon in den Entwicklungsprozessen in den Unternehmen ist und auch wie

00:02:40.051 --> 00:02:44.821
<v Clemens>viel Geld hinter den entsprechenden Tools, hinter den entsprechenden Lösungen steht.

00:02:44.821 --> 00:02:47.638
<v Clemens>Also eine große Erfolgsgeschichte, könnte man meinen.

00:02:48.471 --> 00:02:51.381
<v Clemens>Wir haben heute auch schon so ein bisschen was von den menschlichen,

00:02:51.381 --> 00:02:56.561
<v Clemens>organisatorischen Herausforderungen gehört in der Keynote und ich muss jetzt

00:02:56.561 --> 00:03:00.281
<v Clemens>weiter ein bisschen den Spielverderber spielen, denn wenn man sich mit dem Thema

00:03:00.281 --> 00:03:02.201
<v Clemens>beschäftigt, dann stolpert man auch immer wieder

00:03:02.642 --> 00:03:04.861
<v Clemens>über Schlagzeilen wie diese hier.

00:03:04.861 --> 00:03:10.741
<v Clemens>Prompt Injection in AI-Agenten, über AI-Development-Tools,

00:03:10.741 --> 00:03:16.156
<v Clemens>die irgendwelche Daten verloren haben, über gelöschte Datenbanken,

00:03:16.751 --> 00:03:21.160
<v Clemens>über AI-Agenten, die Dinge machen, die man nicht möchte, die gehackt werden.

00:03:21.566 --> 00:03:24.301
<v Clemens>Und da möchten wir heute ein bisschen Struktur reinbringen und uns ein bisschen

00:03:24.301 --> 00:03:27.231
<v Clemens>genauer anschauen, was ist denn genau die Angriffsoberfläche,

00:03:27.231 --> 00:03:32.901
<v Clemens>das Sicherheitsrisiko, wenn wir Code AI einsetzen und wie können wir das sicher machen.

00:03:32.901 --> 00:03:38.807
<v Clemens>Was sind passende Gegenmaßnahmen, damit ich das passend und sicher einsetzen kann.

00:03:39.945 --> 00:03:43.103
<v Clemens>Ganz kurz noch zu mir. Ich wurde schon vorgestellt. Clemens Hübner mein Name,

00:03:43.347 --> 00:03:46.513
<v Clemens>Software Cyber Security Lead bei Giesecke und Devrient.

00:03:46.513 --> 00:03:53.673
<v Clemens>Wir sind ein Unternehmen, das sich mit Sicherheit rund um Zahlungsdienstleistungen beschäftigt.

00:03:53.673 --> 00:03:56.145
<v Clemens>Also jeder, der schon mal eine Euro-Banknote in der Hand hatte,

00:03:56.424 --> 00:04:00.383
<v Clemens>eine SIM-Karte, eine Chip-Karte, kennt unsere Produkte, also ein Umfeld,

00:04:00.383 --> 00:04:03.605
<v Clemens>in dem es viel um sichere Entwicklung geht.

00:04:03.953 --> 00:04:08.833
<v Clemens>Und aus der Brille darf ich euch heute eben auch ein bisschen meinen Blick auf,

00:04:09.313 --> 00:04:15.296
<v Clemens>das Thema Software Security mit Code AI erzählen.

00:04:15.557 --> 00:04:19.303
<v Clemens>Kleiner Disclaimer vorweg, ich bin heute hier als Privatperson,

00:04:19.303 --> 00:04:23.539
<v Clemens>das heißt, die Meinungen, die ich habe, die sind meine eigenen.

00:04:23.655 --> 00:04:28.624
<v Clemens>Und dann müssen wir uns auch nicht weiter zurückhalten und starten direkt rein

00:04:28.978 --> 00:04:31.213
<v Clemens>in den Aufstieg von Code AI.

00:04:31.613 --> 00:04:39.462
<v Clemens>Und Emma hat es vorhin schon kurz erwähnt, als Andrej Karpathy den Begriff Vibe-Coding geprägt hat.

00:04:40.229 --> 00:04:47.516
<v Clemens>Da fand gefühlt so, startete so eine neue Epoche in der Softwareentwicklung,

00:04:47.516 --> 00:04:49.546
<v Clemens>zumindest in der AI-gestützten Softwareentwicklung.

00:04:49.865 --> 00:04:54.756
<v Clemens>Vibe Coding wurde zu einem Schlagwort, an dem sich viele auch reiben und der

00:04:54.756 --> 00:05:01.230
<v Clemens>so ein bisschen die letzte Evolutionsstufe vielleicht von verschiedenen Entwicklungen

00:05:01.543 --> 00:05:04.086
<v Clemens>im Bereich Code AI darstellt.

00:05:04.086 --> 00:05:07.859
<v Clemens>Und wenn ich heute von Code AI spreche oder auch mal Coding Assistant sage,

00:05:08.213 --> 00:05:11.266
<v Clemens>dann benutze ich das so ein bisschen synonym, aber es hilft sicher,

00:05:11.266 --> 00:05:16.586
<v Clemens>wenn wir kurz verstehen, dass es da eine gewisse Bandbreite gibt.

00:05:16.586 --> 00:05:21.756
<v Clemens>Und wir haben so Autocompletion-Tools, die gab es auch schon vor LLMs,

00:05:22.376 --> 00:05:26.746
<v Clemens>die kennt jeder, der schon länger entwickelt, wo die IDE da eben entsprechend,

00:05:26.746 --> 00:05:30.946
<v Clemens>ja, auf Basis von einer Zeile oder vielleicht von zwei Zeilen irgendwie die

00:05:30.946 --> 00:05:32.135
<v Clemens>nächste vorgeschlagen hat.

00:05:32.996 --> 00:05:38.906
<v Clemens>Das war so der Anfang. Dann kam mit dem Erfolg von Chat-GPT natürlich auch der

00:05:38.906 --> 00:05:44.486
<v Clemens>Einsatz von solchen Modellen als Frage-Antwort-Helfer, wo wir vielleicht auch

00:05:44.486 --> 00:05:46.149
<v Clemens>fleißig Code rauskopiert haben.

00:05:46.445 --> 00:05:53.932
<v Clemens>Das wurde dann weiter verfeinert, eben mit Tools, die sich speziell mit Code-Generierung beschäftigen,

00:05:54.616 --> 00:05:58.768
<v Clemens>sowas wie Copilot-Chat oder dann eben auch ganzen IDEs, die darauf aufbauen,

00:05:59.436 --> 00:06:02.355
<v Clemens>und jetzt eben dann die agentische Entwicklung.

00:06:02.982 --> 00:06:07.857
<v Clemens>Hin zu Vibe Coding Agents, wo wir also sogar nur noch natürliche Sprache irgendwie

00:06:07.857 --> 00:06:14.507
<v Clemens>reingeben und dann eine ganze App rausbekommen und vielleicht gar nicht mehr so viel.

00:06:16.207 --> 00:06:21.457
<v Clemens>auf den Code schauen müssen, sondern quasi das alles vom Agenten scheinbar weg abstrahiert wird.

00:06:21.457 --> 00:06:26.707
<v Clemens>Also das ist so der Range, in dem wir uns entwickeln und der hilft uns auch,

00:06:26.707 --> 00:06:28.280
<v Clemens>damit ihr später verstehen könnt,

00:06:28.987 --> 00:06:33.359
<v Clemens>welche Schwachstelle ist denn für welche Art von Code AI besonders relevant

00:06:33.650 --> 00:06:38.387
<v Clemens>und ohne dass ich jetzt zu viel Spoiler, desto mehr man ins Autonome geht, desto,

00:06:38.987 --> 00:06:44.830
<v Clemens>mehr muss man natürlich auch darauf achten, dass die Agenten entsprechend sicher agieren.

00:06:45.173 --> 00:06:50.687
<v Clemens>Also, das so zur Einführung, Code AI, Coding Agents, über diese Systeme sprechen

00:06:50.687 --> 00:06:54.644
<v Clemens>wir und vor allem dann eben über das agentische Coden.

00:06:56.061 --> 00:06:59.987
<v Clemens>Und wenn wir dann jetzt über die Security sprechen wollen, dann habe ich uns

00:06:59.987 --> 00:07:04.797
<v Clemens>mal so ein vereinfachtes Schaubild von einem Coding Assistant mitgebracht.

00:07:05.232 --> 00:07:09.247
<v Clemens>Ein Coding Assistant, wirklich sehr, sehr vereinfacht, der hat,

00:07:10.347 --> 00:07:14.707
<v Clemens>gewissen Input, das ist zum einen natürlich der User Prompt, das ist das,

00:07:14.707 --> 00:07:20.907
<v Clemens>an das man als erstes denkt, also das, was ich als EntwicklerInnen eingebe und.

00:07:22.147 --> 00:07:25.602
<v Clemens>Dann gelöst haben möchte, aber natürlich auch der gesamte Kontext,

00:07:25.730 --> 00:07:29.515
<v Clemens>also die Inhalte, die der Coding Assistant sich zusätzlich,

00:07:30.473 --> 00:07:36.357
<v Clemens>dazu holt, sei es jetzt verschiedene Code-Files drumherum, Dokumentation,

00:07:36.357 --> 00:07:42.297
<v Clemens>vielleicht Libraries, vielleicht andere Materialien, die bereitstehen,

00:07:42.297 --> 00:07:44.166
<v Clemens>also all das wird dann in den Kontext gepackt,

00:07:44.851 --> 00:07:47.509
<v Clemens>Und landet dann gemeinsam mit irgendwie einem System-Prompt,

00:07:47.782 --> 00:07:55.909
<v Clemens>mit dem der Coding-Assistent selber irgendwie, ja, programmiert wird oder die

00:07:56.065 --> 00:07:58.660
<v Clemens>Rahmenbedingungen mitbekommt, mit denen er agieren soll.

00:07:58.916 --> 00:08:02.739
<v Clemens>Und all das wird in einen Prompt gepackt und in das LLM geworfen.

00:08:02.739 --> 00:08:07.419
<v Clemens>Und das ist ganz wichtig zu verstehen, dass ein LLM ja nur auf einem großen,

00:08:07.419 --> 00:08:10.509
<v Clemens>natürlich sprachlichen Input letzten Endes agiert.

00:08:10.509 --> 00:08:15.459
<v Clemens>Das heißt, all die verschiedenen Sachen, die Sachen, die wir als Developer reingeben

00:08:15.459 --> 00:08:18.009
<v Clemens>und auch die Sachen, die irgendwie vom Coding Assistant oder aus dem Kontext

00:08:18.009 --> 00:08:23.401
<v Clemens>kommen, landen am Ende gemeinsam im Prompt, den das LLM ausführt,

00:08:23.668 --> 00:08:25.499
<v Clemens>dann vielleicht auch drüber iteriert, das sind dann,

00:08:26.219 --> 00:08:28.794
<v Clemens>die entsprechenden Sachen, die der Coding Assistant eben so macht.

00:08:29.719 --> 00:08:34.729
<v Clemens>Und wo er dann am Ende die Möglichkeit hat, Code-Änderungen natürlich durchzuführen,

00:08:34.729 --> 00:08:37.359
<v Clemens>aber vielleicht auch irgendwie Tests auszuführen, zu schauen,

00:08:37.359 --> 00:08:38.663
<v Clemens>kompiliert noch alles, also.

00:08:39.609 --> 00:08:43.539
<v Clemens>Ja, das sind die Aktivitäten und wenn wir jetzt dann über moderne Agenten sprechen,

00:08:43.899 --> 00:08:50.459
<v Clemens>dann haben die eben auch noch Zugriff auf eine Reihe an Tools und da wird es

00:08:50.459 --> 00:08:53.098
<v Clemens>dann besonders interessant, deswegen schauen wir uns das später im Detail an.

00:08:53.551 --> 00:08:58.559
<v Clemens>Konkret möchte ich jetzt auf fünf Schwachstellen oder Risiken im Zusammenhang mit,

00:08:59.359 --> 00:09:05.527
<v Clemens>Code AI eingehen und wir starten direkt mit dem Bereich hier,

00:09:05.805 --> 00:09:09.279
<v Clemens>nämlich was landet eigentlich alles in dem Prompt und wenn man Prompt schon

00:09:09.279 --> 00:09:11.299
<v Clemens>hört und ein bisschen was mit Security,

00:09:12.079 --> 00:09:15.539
<v Clemens>zu tun hatte, dann denkt man natürlich als erstes an Prompt Injection.

00:09:15.539 --> 00:09:20.225
<v Clemens>Prompt Injection, eine Schwachstellenklasse, die quasi mit LLMs erst neu aufkam,

00:09:20.521 --> 00:09:23.905
<v Clemens>sehr spannend ist für jemanden wie mich, finde ich,

00:09:24.927 --> 00:09:28.689
<v Clemens>und die vom Begriff so ein bisschen an SQL Injection erinnern,

00:09:28.689 --> 00:09:33.699
<v Clemens>wer sich schon früher mal mit Security beschäftigt hat, und es funktioniert recht ähnlich.

00:09:35.010 --> 00:09:42.637
<v Clemens>Das, wie SQL Injection, Input von einem Nutzer oder auch von einem Angreifer, also,

00:09:43.277 --> 00:09:48.651
<v Clemens>nicht vertrauenswürdiger Input, wird so in ein Query, in ein Kommando integriert,

00:09:48.941 --> 00:09:50.957
<v Clemens>das später ausgeführt wird, dass,

00:09:51.617 --> 00:09:56.673
<v Clemens>der Angreifer eben die Möglichkeit hat, aus dem eigentlichen Dateninput auszubrechen

00:09:56.923 --> 00:10:00.137
<v Clemens>und den Query, das Kommando selber zu manipulieren.

00:10:00.137 --> 00:10:04.684
<v Clemens>Das ist die Idee hinter SQL Injection, das ist auch die Idee hinter Prompt Injection.

00:10:04.951 --> 00:10:09.407
<v Clemens>Die typische Prompt Injection, mit der es oft losging, die viele wahrscheinlich

00:10:09.407 --> 00:10:12.033
<v Clemens>kennen, ist so dieses Ignore all previous instructions.

00:10:12.358 --> 00:10:16.487
<v Clemens>Damit versucht man eben, diese Grenze zwischen dem System Prompt,

00:10:16.487 --> 00:10:21.087
<v Clemens>der vielleicht vor dem User Prompt steht, und dem User Prompt aufzubrechen und

00:10:21.087 --> 00:10:24.107
<v Clemens>aus dem User Prompt hinaus den System Prompt zu manipulieren,

00:10:24.107 --> 00:10:26.017
<v Clemens>in dem Fall eben ihn ignorieren zu lassen.

00:10:26.581 --> 00:10:29.097
<v Clemens>Als die ersten Chatbots aufkamen auf irgendwelchen Unternehmensseiten,

00:10:29.097 --> 00:10:35.863
<v Clemens>da gab es also lustige Posts, wo dann jemand eben genau mit so einem Trick geschafft hat, ja,

00:10:37.337 --> 00:10:41.557
<v Clemens>zum Beispiel jetzt hier ein Auto für einen Dollar zu kaufen oder ein Angebot

00:10:41.977 --> 00:10:44.761
<v Clemens>dafür, davon zu bekommen von so einem Chatbot.

00:10:45.457 --> 00:10:51.889
<v Clemens>Das kann aber auch noch entsprechend ausgefeilter werden, aber das Grundprinzip ist immer das gleiche.

00:10:52.156 --> 00:10:58.177
<v Clemens>Inhalt, der in den Prompt kommt, verändert den Prompt als Ganzen so,

00:10:58.177 --> 00:11:02.337
<v Clemens>dass das LLM am Ende Aktionen macht oder.

00:11:03.597 --> 00:11:08.277
<v Clemens>ein Ziel verfolgt, das eigentlich so nicht vorgesehen war.

00:11:08.857 --> 00:11:14.147
<v Clemens>Also zum Beispiel der User-Prompt manipuliert wird oder der System-Prompt manipuliert

00:11:14.147 --> 00:11:16.711
<v Clemens>wird, je nachdem aus welcher Richtung man kommt.

00:11:17.536 --> 00:11:24.496
<v Clemens>Und Prompt Injection ist so das wichtigste Risiko, das es überhaupt gibt im Zusammenhang mit LLMs.

00:11:24.821 --> 00:11:30.744
<v Clemens>Die OWASP hat die Top Ten Risiken im Zusammenhang mit LLMs und da ist Prompt

00:11:30.744 --> 00:11:37.064
<v Clemens>Injection schon von Anfang an auf Platz 1 als eben das wichtigste Risiko,

00:11:37.064 --> 00:11:39.459
<v Clemens>mit dem man sich auf jeden Fall auseinandersetzen muss.

00:11:40.306 --> 00:11:43.744
<v Clemens>Was bedeutet das jetzt im Zusammenhang mit Coding Assistants?

00:11:43.744 --> 00:11:49.114
<v Clemens>Coding Assistants. Wir haben gesehen, alles, was in den Prompt landet,

00:11:49.114 --> 00:11:52.096
<v Clemens>kann irgendwie potenziell für eine Prompt Injection verwendet werden.

00:11:52.375 --> 00:11:55.294
<v Clemens>Das ist zum einen der User-Prompt, okay, das heißt, wir können uns irgendwie

00:11:55.294 --> 00:11:59.289
<v Clemens>als Developer selber hacken, vielleicht nicht so interessant,

00:11:59.608 --> 00:12:02.975
<v Clemens>aber es kann auch alles andere sein, was drumherum liegt. Zum Beispiel auch

00:12:03.259 --> 00:12:05.264
<v Clemens>alles, was im Kontext ist.

00:12:05.724 --> 00:12:10.620
<v Clemens>Da gibt es ein anschauliches Beispiel, das nennt sich dann Rules-File-Backdoors.

00:12:10.870 --> 00:12:16.754
<v Clemens>Rules-Files, das sind so die Dateien, die neben einem Repository liegen oder

00:12:16.754 --> 00:12:22.084
<v Clemens>neben einem Code liegen, mit dem man einem Assistenten irgendwie Anweisungen

00:12:22.084 --> 00:12:24.923
<v Clemens>geben kann, auf was für Regeln soll er grundsätzlich achten.

00:12:25.214 --> 00:12:28.864
<v Clemens>Wir haben irgendwie Coding-Styles, je nach Coding-Assistent heißen die dann.

00:12:29.744 --> 00:12:33.358
<v Clemens>irgendwie unterschiedlich, aber das Prinzip ist immer das gleiche.

00:12:33.555 --> 00:12:38.154
<v Clemens>Wir spezifizieren dann Rahmenbedingungen für einen Agenten und die werden sich

00:12:38.154 --> 00:12:44.961
<v Clemens>dann automatisch mit angezogen, mit dem Kontext geladen und dann mit in den Prompt gepackt.

00:12:45.274 --> 00:12:48.884
<v Clemens>Und gerade zu Beginn waren so Rules Files gerne geteilt im Internet,

00:12:48.884 --> 00:12:51.050
<v Clemens>man hat sich da gerne Sachen zusammen kopiert, um irgendwie.

00:12:51.944 --> 00:12:55.996
<v Clemens>ja, gut funktionierende Instructions für einen Coding Assistant zu bekommen,

00:12:56.246 --> 00:12:59.914
<v Clemens>da wurde eben auch beobachtet, dass es Rules Files gab, in denen mit unsichtbaren

00:12:59.914 --> 00:13:03.384
<v Clemens>Unicode-Zeichen eben zusätzliche Instructions,

00:13:04.264 --> 00:13:07.171
<v Clemens>eingefügt waren, man sieht die jetzt hier dann rechts,

00:13:07.944 --> 00:13:12.814
<v Clemens>die dann dadurch in den Prompt gelangt sind und damit am Ende eine Instruction

00:13:12.814 --> 00:13:15.385
<v Clemens>war, die der Coding Assistant ausgeführt hat.

00:13:16.186 --> 00:13:19.823
<v Clemens>Also, das ist eine Möglichkeit, wie so eine Prompt Injection unseren Coding

00:13:19.823 --> 00:13:21.521
<v Clemens>Assistant beeinflussen kann.

00:13:21.898 --> 00:13:25.703
<v Clemens>Andere Möglichkeit ist die Studie hier. Ich habe die Links immer mit draufgepackt.

00:13:25.703 --> 00:13:29.241
<v Clemens>Ihr kriegt die Slides ja später. Könnt ihr euch nochmal im Detail durchlesen.

00:13:29.853 --> 00:13:34.333
<v Clemens>Da haben es eben Forschende geschafft, zu zeigen, dass man auch über Dependencies,

00:13:34.913 --> 00:13:38.075
<v Clemens>Third-Party-Dependencies, die wir mit in unserem Projekt benutzen,

00:13:38.302 --> 00:13:42.203
<v Clemens>solche Prompt-Injections eben durchführen können, wenn der Coding-Assistent

00:13:42.203 --> 00:13:46.237
<v Clemens>eben bemerkt, ah, hier geht es jetzt eben um diese, in diesem Fall Python-Library,

00:13:46.873 --> 00:13:50.469
<v Clemens>hier hole ich mir eben entsprechend die Datei mit rein, auch dann,

00:13:50.707 --> 00:13:54.023
<v Clemens>um zu verstehen, was ich eigentlich machen muss, dann landet das genauso im

00:13:54.023 --> 00:13:57.249
<v Clemens>Prompt und ist genauso ein Einfallstor für eine Prompt-Injection.

00:13:57.522 --> 00:14:00.953
<v Clemens>Und die Autoren hier haben es sogar geschafft, dass.

00:14:02.329 --> 00:14:05.803
<v Clemens>Die Library quasi vom Inhalt gar nicht verändert war, die hat immer noch weiterhin

00:14:05.803 --> 00:14:08.993
<v Clemens>das getan, was sie eigentlich sollte, war auch auf den ersten Blick gar nicht

00:14:08.993 --> 00:14:12.523
<v Clemens>zu erkennen, deswegen haben sie das eben Stealthy Cross-Origin Context Poisoning

00:14:12.523 --> 00:14:14.751
<v Clemens>genannt, also über den Kontext verwendet.

00:14:16.019 --> 00:14:19.106
<v Clemens>Eben eine Prompt Injection gegen einen AI-Coding-Assistent.

00:14:19.576 --> 00:14:23.079
<v Clemens>Und das muss einem sehr, sehr bewusst sein. Alles, was im Kontext landet,

00:14:23.079 --> 00:14:26.929
<v Clemens>muss eigentlich vertrauenswürdig sein. Und da kann man sich überlegen,

00:14:26.929 --> 00:14:31.523
<v Clemens>wie gut kann man den eigenen Kontext eigentlich kontrollieren.

00:14:31.813 --> 00:14:35.045
<v Clemens>Vor allem, wenn dann auch noch das Thema MCP ins Spiel kommt.

00:14:35.301 --> 00:14:40.399
<v Clemens>MCP-Server sind ja dafür ausgelegt, dass man eben ein gewisses Ökosystem schaffen

00:14:40.399 --> 00:14:45.969
<v Clemens>kann, dass Coding-Assistents oder gegen jede Art eben mit anderen Systemen auf

00:14:45.969 --> 00:14:49.093
<v Clemens>eine standardisierte Art und Weise interagieren können,

00:14:49.899 --> 00:14:54.169
<v Clemens>und das funktioniert in der Praxis so, dass die MCP-Server dann eben advertisen,

00:14:54.169 --> 00:14:57.879
<v Clemens>was bieten sie an, eine Description bereitstellen und diese Description dem

00:14:57.879 --> 00:15:00.109
<v Clemens>Coding-Assistent von Anfang an mitgegeben wird.

00:15:00.109 --> 00:15:03.019
<v Clemens>Das heißt, diese Description ist von Anfang an Teil des Kontexts,

00:15:03.019 --> 00:15:06.889
<v Clemens>egal ob der MCP-Server jetzt benutzt wird oder nicht, das muss einem bewusst

00:15:06.889 --> 00:15:09.619
<v Clemens>sein, sobald man einen MCP-Server integriert, selbst wenn der nicht benutzt

00:15:09.619 --> 00:15:11.472
<v Clemens>wird, hat dieser MCP-Server eben,

00:15:12.104 --> 00:15:16.619
<v Clemens>die Möglichkeit, den eigenen Kontext zu manipulieren und da gab es dann schon so,

00:15:17.199 --> 00:15:22.269
<v Clemens>Rugpull-Attacks, wo eben MCP-Server erst irgendwie sinnvolle Arbeit geleistet

00:15:22.269 --> 00:15:26.379
<v Clemens>haben, später dann aber quasi geflippt sind, das heißt, selbst wenn man

00:15:26.819 --> 00:15:29.438
<v Clemens>das am Anfang einmal kontrolliert, was schickt dieser MCP-Server,

00:15:29.705 --> 00:15:34.144
<v Clemens>dann kann man natürlich nicht sicherstellen, dass das auch in aller Ewigkeit so bleibt.

00:15:34.527 --> 00:15:39.819
<v Clemens>Da gab es jetzt im Frühjahr ein schönes Beispiel bei Context 7, das ist so ein.

00:15:40.939 --> 00:15:45.509
<v Clemens>MCP-Server, der eben Dokumentationen bereitstellt, das heißt,

00:15:45.509 --> 00:15:50.044
<v Clemens>wer da mal ein konkretes Beispiel anschauen möchte, wie sowas funktionieren kann,

00:15:50.821 --> 00:15:55.663
<v Clemens>Dem sei dieser Artikel hier empfohlen. Also, das ist so ein ganz wichtiger Punkt.

00:15:55.936 --> 00:16:02.291
<v Clemens>Prompt Injection bei Coding Assistants ist extrem wichtig und ich glaube, es ist eigentlich,

00:16:03.291 --> 00:16:06.031
<v Clemens>in der Art und Weise, wie wir das aktuell benutzen, unmöglich,

00:16:06.031 --> 00:16:11.348
<v Clemens>den Kontext so zu kontrollieren und so clean zu halten, so trusted zu halten,

00:16:11.685 --> 00:16:15.361
<v Clemens>dass wir sicherstellen können, dass da keine Prompt Injection reinkommt und

00:16:15.361 --> 00:16:17.491
<v Clemens>Prompt Injection ist technisch ungelöst.

00:16:17.491 --> 00:16:20.311
<v Clemens>Also SQL Injection weiß man inzwischen sehr gut, wie das funktioniert.

00:16:20.671 --> 00:16:24.501
<v Clemens>Prompt Injection fehlen bisher zuverlässige deterministische Maßnahmen,

00:16:24.501 --> 00:16:26.859
<v Clemens>um das zu verhindern. Das heißt, wir müssen uns Gedanken machen,

00:16:27.190 --> 00:16:29.011
<v Clemens>eigentlich annehmen, dass wir für Prompt Injection

00:16:30.340 --> 00:16:34.046
<v Clemens>anfällig sind, uns Gedanken machen, okay, wie können wir die Auswirkungen davon,

00:16:34.506 --> 00:16:35.837
<v Clemens>verhindern, aber dazu später mehr.

00:16:36.609 --> 00:16:42.396
<v Clemens>Wir schauen aber auf eine zweite wichtige Risikoklasse im Zusammenhang mit Coding

00:16:42.396 --> 00:16:45.366
<v Clemens>Assistants, und zwar ist das Data Leakage,

00:16:45.946 --> 00:16:50.786
<v Clemens>das heißt Daten von uns oder aus unserem Projekt fließen ab,

00:16:50.786 --> 00:16:55.986
<v Clemens>und das ist auch schon länger ein Thema, gab es bei Devon auch so eine, ja,

00:16:56.646 --> 00:16:59.817
<v Clemens>Agentic IDE quasi, oder Coding Assistant,

00:17:00.506 --> 00:17:05.686
<v Clemens>schon 2024, ein schönes Beispiel, wo eben gezeigt wurde, auf wie viele unterschiedliche

00:17:05.686 --> 00:17:10.726
<v Clemens>Arten man aus so einem Coding Assistant eben Daten exfiltrieren kann, also zum Beispiel,

00:17:11.226 --> 00:17:14.256
<v Clemens>Code, der euch wichtig ist, oder Credentials, die mit dem Repo liegen,

00:17:14.256 --> 00:17:15.827
<v Clemens>obwohl sie da vielleicht nicht sein sollten.

00:17:17.308 --> 00:17:21.534
<v Clemens>Aber natürlich auch, je nachdem, wie der Coding Assistant gesandboxed ist,

00:17:21.714 --> 00:17:26.468
<v Clemens>alles andere, was auf der Festplatte des Developers liegt, also SSH-Keys zum Beispiel.

00:17:27.646 --> 00:17:31.006
<v Clemens>Die Dateien, das heißt, das sind alles Möglichkeiten,

00:17:31.886 --> 00:17:35.476
<v Clemens>auf die ein Coding Assistant potenziell Zugriff hat und wo Devin das hier eben

00:17:35.476 --> 00:17:39.166
<v Clemens>auf verschiedene Arten und Weise dann exfiltrieren konnte, oder,

00:17:39.686 --> 00:17:43.876
<v Clemens>aus Devin exfiltriert werden konnte, dem Curl-Commands abgeschickt wurden,

00:17:43.876 --> 00:17:47.166
<v Clemens>mit dem das abgeschickt wurde, über den Browser, der da integriert war,

00:17:47.166 --> 00:17:50.412
<v Clemens>mit dem halt Sachen aufgerufen werden konnten, also gab es quasi,

00:17:51.326 --> 00:17:52.241
<v Clemens>sehr viele Möglichkeiten.

00:17:52.904 --> 00:17:55.197
<v Clemens>Ein anderes schönes Beispiel, das ich recht anschaulich finde,

00:17:55.597 --> 00:17:59.603
<v Clemens>ist bei GitHub Copilot Chat, also,

00:18:00.688 --> 00:18:06.391
<v Clemens>der Möglichkeit, dass man in GitHub in der Web UI auf Pull Request zum Beispiel,

00:18:07.471 --> 00:18:13.931
<v Clemens>ein LLM hat, mit dem man eben über den Pull Request quasi chatten kann, der läuft dann,

00:18:14.531 --> 00:18:19.031
<v Clemens>mit den Rechten des Nutzers, der eben gerade diesen Chat benutzt und da gab

00:18:19.031 --> 00:18:24.411
<v Clemens>es eben eine schöne Demonstration, dass unsichtbare Kommentare in den Pull-Requests,

00:18:25.131 --> 00:18:29.031
<v Clemens>eines Angreifers dann eben dazu geführt haben, dass der Agent,

00:18:29.571 --> 00:18:36.201
<v Clemens>also das GitHub-Copilot-Chat, dann eben Sachen gemacht hat im Kontext des Nutzers

00:18:36.201 --> 00:18:39.701
<v Clemens>und auf Sachen zugegriffen hat, die von außen zum Beispiel nicht zugreifbar

00:18:39.701 --> 00:18:42.320
<v Clemens>sind, also auf Secrets, auf private Repos.

00:18:42.709 --> 00:18:47.391
<v Clemens>Und wo dann sehr spannend auch diese Daten exfiltriert wurden, das ist ja bei so einem.

00:18:48.591 --> 00:18:50.801
<v Clemens>Chatbot vielleicht nochmal ein bisschen schwieriger, könnte man meinen,

00:18:51.063 --> 00:18:56.031
<v Clemens>war das dann aber quasi in lauter einzelne Bilder kodiert, also jedes Zeichen

00:18:56.031 --> 00:18:58.251
<v Clemens>ist dann ein Bild, wir haben.

00:18:59.551 --> 00:19:04.261
<v Clemens>ein Bild für A, ein Bild für B, ein Bild für C und so weiter und packen die

00:19:04.261 --> 00:19:09.531
<v Clemens>hintereinander, je nachdem welchen String wir exfiltrieren wollen und je nachdem

00:19:09.531 --> 00:19:12.733
<v Clemens>welche Bilder dann von unserem Server geladen werden, dann können wir dann eben gut sehen,

00:19:13.482 --> 00:19:17.591
<v Clemens>wie das Secret, das wir da exfiltrieren wollen, eben genauer ausschaut.

00:19:17.591 --> 00:19:18.706
<v Clemens>Also, sehr spannender Angriff.

00:19:19.571 --> 00:19:22.711
<v Clemens>Lohnt sich auch, das sich mal anzuschauen, wenn einem das interessiert.

00:19:22.711 --> 00:19:27.961
<v Clemens>Das zeigt nämlich auch ganz gut, wie vielfältig die Möglichkeiten sind,

00:19:27.961 --> 00:19:29.891
<v Clemens>mit denen man solche Daten exfiltrieren kann.

00:19:31.627 --> 00:19:34.774
<v Clemens>Gut, kommen wir zu dem Thema Tools.

00:19:34.774 --> 00:19:38.014
<v Clemens>Wir haben vorhin schon gesehen, immer mehr,

00:19:38.834 --> 00:19:43.434
<v Clemens>Tools stehen so einem Coding-Agent zur Verfügung, zum Beispiel über einen MCP-Server,

00:19:43.434 --> 00:19:47.730
<v Clemens>aber natürlich auch, gerade wenn wir jetzt über eine IDE-Integration sprechen,

00:19:48.037 --> 00:19:52.284
<v Clemens>über die Aspekte, die dort direkt zur Verfügung stehen.

00:19:52.284 --> 00:19:57.154
<v Clemens>Also, vielleicht hat unser Agent Zugriff auf das komplette Filesystem,

00:19:57.154 --> 00:20:00.514
<v Clemens>er kann auf jeden Fall sicher das Repo lesen, vielleicht darf er im Web nach

00:20:00.514 --> 00:20:03.854
<v Clemens>Sachen suchen, vielleicht soll er auch in unserem...

00:20:05.069 --> 00:20:09.775
<v Clemens>Repo, ähm, agieren dürfen, ja, vielleicht soll der in Git rein oder in unserem

00:20:10.095 --> 00:20:13.376
<v Clemens>Issue-Tracker schauen können, was, ähm, was verbirgt sich hinter einem Feature, ja,

00:20:13.719 --> 00:20:18.065
<v Clemens>all das sind, sind Tools, die oft an Agenten, äh, angebunden wurden und die

00:20:18.065 --> 00:20:22.365
<v Clemens>zum einen dann eben, ähm, Möglichkeit sind für eine Prompt Injection als Einfallstor,

00:20:22.365 --> 00:20:25.515
<v Clemens>das haben wir vorhin gesehen, aber natürlich auch eine Möglichkeit,

00:20:25.515 --> 00:20:28.246
<v Clemens>wie der Agent, ähm, der Coding Agent,

00:20:28.885 --> 00:20:32.315
<v Clemens>dann eben Schaden anrichten kann und das berühmte Beispiel,

00:20:32.315 --> 00:20:35.404
<v Clemens>das, äh, letztes Jahr, ähm, für viel,

00:20:36.542 --> 00:20:38.375
<v Clemens>ja, vielleicht auch ein bisschen Freude.

00:20:40.655 --> 00:20:44.285
<v Clemens>Gesorgt hat, weil der Artikel sehr, sehr unterhaltsam geschrieben war,

00:20:44.582 --> 00:20:47.035
<v Clemens>ist eben hier das Beispiel von Replit, auch so ein,

00:20:47.735 --> 00:20:53.435
<v Clemens>Webcoding-Anbieter, der eben die gesamte Produktionsdatenbank von einem Nutzer

00:20:53.435 --> 00:20:56.905
<v Clemens>gelöscht hat und dann danach behauptet, er kann sie auch nicht wiederherstellen,

00:20:56.905 --> 00:20:58.148
<v Clemens>obwohl er es gekonnt hätte,

00:20:59.375 --> 00:21:02.535
<v Clemens>großartige Ausreden produziert hat, also wirklich,

00:21:03.235 --> 00:21:08.185
<v Clemens>ja, wenn es nicht so tragisch wäre, ein sehr unterhaltsamer Vorfall,

00:21:08.185 --> 00:21:14.185
<v Clemens>vor allem auch so wie der Autor das da eben berichtet hat und das war nur ein

00:21:14.185 --> 00:21:16.325
<v Clemens>unbeabsichtigter Fehler.

00:21:16.325 --> 00:21:19.085
<v Clemens>Das heißt, da hat der Agent einfach irgendwie Sachen verwechselt,

00:21:19.085 --> 00:21:21.773
<v Clemens>man kann das natürlich nicht so ganz nachvollziehen, was da genau schief lief,

00:21:22.535 --> 00:21:25.465
<v Clemens>aber man kriegt ein Gefühl dafür, was passieren kann, wenn ein Angreifer das

00:21:25.465 --> 00:21:31.113
<v Clemens>wirklich darauf anlegt und da so einen Coding Agent bewusst manipulieren möchte.

00:21:31.775 --> 00:21:35.449
<v Clemens>Solche Sachen kommen immer wieder um die Ecke, solche Erfahrungsberichte.

00:21:36.698 --> 00:21:42.715
<v Clemens>Jetzt erst von diesem Jahr auch wieder, wo ein anderer Nutzer berichtet hat,

00:21:42.715 --> 00:21:48.155
<v Clemens>jetzt den Claude-Code, das ist jetzt nicht auf einen bestimmten Agent beschränkt, ähnlicher Vorfall,

00:21:49.120 --> 00:21:53.235
<v Clemens>ja, wo eigentlich die Idee war, er möchte irgendwie Kosten optimieren,

00:21:53.235 --> 00:21:55.985
<v Clemens>hat da einen Agenten drauf losgeschickt und das Resultat war,

00:21:55.985 --> 00:21:59.435
<v Clemens>dass die Datenbank dann weg war und dass er dann am Ende sogar mehr für seine

00:21:59.435 --> 00:22:00.605
<v Clemens>Infrastruktur bezahlt hat.

00:22:00.605 --> 00:22:05.495
<v Clemens>Also das ist auch ein schönes Beispiel dafür, was quasi ein Agent mit zu viel

00:22:05.495 --> 00:22:08.416
<v Clemens>Toolzugriff alles für Schaden anrichten kann.

00:22:09.658 --> 00:22:12.167
<v Clemens>Und dann sehen wir eben Sachen, wo das absichtlich passiert,

00:22:12.167 --> 00:22:16.407
<v Clemens>also wo das kein Versehen ist, zum Beispiel bei Agent Skills,

00:22:16.867 --> 00:22:22.247
<v Clemens>die ja auch fleißig im Internet geteilt werden, wo es eben Studien gibt,

00:22:23.107 --> 00:22:26.697
<v Clemens>oder Versuche gibt, dass eben sehr viele von diesen Skills,

00:22:26.697 --> 00:22:30.735
<v Clemens>die ja auch dann am Ende Teil von unserem Prompt werden,

00:22:31.919 --> 00:22:36.993
<v Clemens>eben dafür genutzt wurden, um die Agenten zu übernehmen und dann auch dort wieder

00:22:37.300 --> 00:22:41.039
<v Clemens>zum Beispiel Secrets auszuleiten, durch entsprechende Tools,

00:22:41.393 --> 00:22:45.979
<v Clemens>also auch das ein Beispiel dafür, was durch zu viel.

00:22:47.413 --> 00:22:50.060
<v Clemens>Ja, agentische Autonomie passieren kann.

00:22:50.785 --> 00:22:53.932
<v Clemens>Also das muss einem an dieser Stelle eben bewusst sein.

00:22:55.027 --> 00:22:58.287
<v Clemens>Alle Möglichkeiten, die ein Agent hat, kann dann eben zum Beispiel durch eine

00:22:58.287 --> 00:23:02.535
<v Clemens>ausgenutzte Prompt Injection-Schwachstelle auch ein Angreifer nutzen.

00:23:03.191 --> 00:23:07.007
<v Clemens>Also, hier mal so ein Beispiel, wie so ein malicious Agent-Skill ausschaut und

00:23:07.007 --> 00:23:11.677
<v Clemens>auch ein Beispiel dafür, dass man sowas auch immer gut überprüfen muss und sich

00:23:11.677 --> 00:23:16.031
<v Clemens>überlegen muss, ist das wirklich das, was der Agent machen soll.

00:23:17.927 --> 00:23:22.475
<v Clemens>Gut. Das waren jetzt so die verschiedenen Bereiche rund um den Agenten selber.

00:23:22.475 --> 00:23:28.812
<v Clemens>Jetzt müssen wir uns natürlich noch mit dem Output von dem Coding Assistant beschäftigen.

00:23:29.615 --> 00:23:35.412
<v Clemens>Wie ist eigentlich die Code-Qualität und insbesondere die Security von generiertem Code?

00:23:35.998 --> 00:23:39.825
<v Clemens>Und da ist zuerst mal zu verstehen, wir haben das ja auch in der Keynote heute

00:23:39.825 --> 00:23:47.285
<v Clemens>schon gelernt, dass der Durchsatz und die schiere Menge an Code massiv steigt.

00:23:47.285 --> 00:23:52.795
<v Clemens>Gibt's auch schöne Untersuchungen, jetzt hier eben auf einem Datenset mit,

00:23:54.075 --> 00:24:00.075
<v Clemens>ja, fast einer halben Milliarde, glaube ich, von Line Changes aus verschiedenen

00:24:00.075 --> 00:24:05.115
<v Clemens>großen Repositories, nicht nur Open Source, sondern auch eben Google, Microsoft,

00:24:06.289 --> 00:24:12.075
<v Clemens>Meta, interne Repos, die da untersucht haben, wie verändert Copilot,

00:24:12.075 --> 00:24:17.247
<v Clemens>Usage oder Agentic AI im Coding eben die,

00:24:17.875 --> 00:24:21.345
<v Clemens>Art und Weise, wie entwickelt wird und das Spannendste, was man eben sehen kann,

00:24:21.345 --> 00:24:26.441
<v Clemens>ist, dass der Code-Churn eben massiv ansteigt in den letzten Jahren, also.

00:24:27.415 --> 00:24:31.655
<v Clemens>Die Menge an Code, der quasi immer wieder angefasst wird und das,

00:24:31.655 --> 00:24:34.835
<v Clemens>was ich auch selber bei der Benutzung von Coding Assistants,

00:24:35.355 --> 00:24:39.935
<v Clemens>merke, sie tendieren dazu, viel zu verändern, viel umzustrukturieren,

00:24:39.935 --> 00:24:41.686
<v Clemens>wenn man sie davon nicht abhält,

00:24:42.122 --> 00:24:47.223
<v Clemens>das heißt, immer mehr Code wird irgendwann mal von einem Coding Assistant angefasst

00:24:47.415 --> 00:24:50.285
<v Clemens>Und deswegen ist es interessant zu schauen, ja gut, wie ist denn die Sicherheit

00:24:50.285 --> 00:24:52.077
<v Clemens>von dem Code, der da generiert wird.

00:24:52.780 --> 00:24:57.769
<v Clemens>Da gibt es ganz spannende Studien. Eine sehr umfangreiche war von Veracode aus

00:24:57.769 --> 00:25:01.829
<v Clemens>dem letzten Jahr, wo sie über 100 verschiedene Modelle eben gefragt haben,

00:25:02.707 --> 00:25:09.859
<v Clemens>ja, verschiedene Coding-Tasks gegeben haben und fast die Hälfte von allen Coding-Samples,

00:25:09.859 --> 00:25:10.879
<v Clemens>die da rausgefallen sind,

00:25:11.589 --> 00:25:14.689
<v Clemens>eben Schwachstellen hatten und oft auch einfach sehr simple,

00:25:14.689 --> 00:25:19.419
<v Clemens>oberste Top-Ten-Schwachstellen, also jetzt nicht besonders ausgefeilte,

00:25:19.419 --> 00:25:23.839
<v Clemens>sondern wirklich typische, einfache Schwachstellen, an die ein guter Entwickler,

00:25:23.839 --> 00:25:25.675
<v Clemens>eine gute Entwicklerin eigentlich denken würde,

00:25:26.609 --> 00:25:31.730
<v Clemens>war eben fast die Hälfte aller Coding-Aufgaben da der Fall.

00:25:32.072 --> 00:25:34.669
<v Clemens>Und weil sie hier eben so viele Modelle sich angeschaut haben,

00:25:35.349 --> 00:25:39.619
<v Clemens>war da auch ganz spannend zu sehen, die neueren Modelle sind in der Hinsicht

00:25:39.619 --> 00:25:45.464
<v Clemens>Security gar nicht so viel besser als die Modelle, die schon ein bisschen älter waren.

00:25:45.743 --> 00:25:51.159
<v Clemens>Die Studie ist schon fast ein Jahr alt, das ist in AI-Zeitalter natürlich irgendwie ein Jahrtausend.

00:25:52.909 --> 00:25:56.769
<v Clemens>Aber auch die neueren Studien, die waren jetzt nicht ganz so umfangreich,

00:25:57.429 --> 00:26:02.763
<v Clemens>die man da sieht, die zeigen so eine leichte Verbesserung mit den Modellen, aber die,

00:26:03.909 --> 00:26:07.989
<v Clemens>wenn man die ungepromptete Security nimmt, also ohne, dass man besonders darauf

00:26:07.989 --> 00:26:12.718
<v Clemens>achtet, dann ist die Sicherheit von generiertem Code immer noch relativ schlecht.

00:26:13.530 --> 00:26:16.789
<v Clemens>Wenn man da ein bisschen tiefer reinsteigen möchte, dann finde ich BaxBench

00:26:16.789 --> 00:26:18.019
<v Clemens>schon mal ein ganz tolles Projekt.

00:26:18.359 --> 00:26:21.808
<v Clemens>Das ist ein Benchmarking eben für LLMs, Open Source.

00:26:22.116 --> 00:26:28.339
<v Clemens>Dann kann man sich auf GitHub anschauen, welche Testcases da benutzt wurden,

00:26:29.099 --> 00:26:33.616
<v Clemens>und kann das zum Beispiel auch mal für ein eigenes LLM ausführen.

00:26:33.906 --> 00:26:38.056
<v Clemens>Das ist jetzt auch eine Studie aus dem letzten Jahr, die da aber auch gezeigt hat, ja,

00:26:39.599 --> 00:26:44.616
<v Clemens>bei den, selbst bei dem besten Modell, das sie da eben getestet haben,

00:26:44.900 --> 00:26:49.489
<v Clemens>waren fast zwei Drittel entweder falsch oder haben eine Schwachstelle enthalten.

00:26:49.489 --> 00:26:52.429
<v Clemens>Und insgesamt über alle Modelle, die wir da eben getestet haben,

00:26:52.429 --> 00:26:57.779
<v Clemens>das ist jetzt der aktuelle Stand, den ich mal gezogen habe, es sind eigentlich,

00:26:59.219 --> 00:27:03.993
<v Clemens>im Durchschnitt in der Hälfte aller Antworten noch hier eine Schwachstelle enthalten.

00:27:05.729 --> 00:27:09.719
<v Clemens>Was für Schwachstellen sind das? Ich habe meine Erfahrungen mit Schwachstellen

00:27:09.719 --> 00:27:14.493
<v Clemens>aus Coding Assistants mal in vier Cluster eingeteilt.

00:27:15.639 --> 00:27:18.959
<v Clemens>Zum einen gibt es die Schwachstellen, die irgendwie darauf basieren,

00:27:18.959 --> 00:27:23.629
<v Clemens>dass die Coding Assistants sehr auf den Happy Path fokussiert sind,

00:27:23.629 --> 00:27:28.249
<v Clemens>also auf die Funktionalität, auf das umzusetzen, was von ihnen verlangt wird

00:27:28.249 --> 00:27:29.739
<v Clemens>erstmal, die Beschreibung,

00:27:30.399 --> 00:27:34.549
<v Clemens>die man ihnen gibt, und dass dann gerne eben begleitende Sicherheitsmaßnahmen

00:27:34.549 --> 00:27:37.237
<v Clemens>vergessen werden, also eine Autorisierung, also eine Rechtevergabe,

00:27:37.556 --> 00:27:40.709
<v Clemens>ein Rate Limiting oder auch schon irgendwie einfach nur ein Error Handling,

00:27:40.709 --> 00:27:42.816
<v Clemens>dass das irgendwie Sachen sind, die fehlen.

00:27:43.617 --> 00:27:49.181
<v Clemens>Dann gibt es natürlich den Aspekt, dass, ja, die auch nur auf unsicherem Code

00:27:49.181 --> 00:27:53.691
<v Clemens>trainiert wurden, das heißt, manche Sachen sind auch einfach gelernt,

00:27:53.691 --> 00:27:56.655
<v Clemens>das ist das, was man früher als Stack-Overflow-Effekt bezeichnet hat.

00:27:57.601 --> 00:28:02.721
<v Clemens>Wo eben in den Trainingsdaten schon irgendwie unsichere Sachen waren oder irgendwelche

00:28:02.721 --> 00:28:08.191
<v Clemens>alten Patterns, alten Cypher, zum Beispiel gerade bei Krypto irgendwie benutzt

00:28:08.191 --> 00:28:10.835
<v Clemens>waren, die man heute eigentlich nicht mehr benutzen möchte.

00:28:11.386 --> 00:28:13.691
<v Clemens>Dann natürlich das Thema Architectural Blindness. Ich glaube,

00:28:13.691 --> 00:28:16.561
<v Clemens>das ist der Bereich, der sich am meisten verbessert, weil die Modelle immer

00:28:16.561 --> 00:28:19.781
<v Clemens>besseres Verständnis, einen größeren Kontext, ein besseres Verständnis für ein

00:28:19.781 --> 00:28:22.841
<v Clemens>gesamtes Projekt bekommen, aber halt trotzdem vielleicht immer noch nicht,

00:28:23.761 --> 00:28:27.371
<v Clemens>die gesamte Domäne überblicken, alles komplett verstehen, verstehen,

00:28:27.371 --> 00:28:30.821
<v Clemens>was hat man eigentlich für ein Trust-Model, gerade wenn man irgendwie nur ein

00:28:31.141 --> 00:28:35.571
<v Clemens>Sub-Projekt hat und das Modell nicht weiß, was sind denn die entsprechenden

00:28:35.571 --> 00:28:37.724
<v Clemens>anderen Komponenten, mit denen wir arbeiten.

00:28:38.049 --> 00:28:40.528
<v Clemens>Das ist all das, was in die Klasse fällt.

00:28:41.195 --> 00:28:44.875
<v Clemens>Und dann natürlich, wir arbeiten hier immer noch mit LLMs. LLMs halluzinieren fröhlich.

00:28:45.259 --> 00:28:50.101
<v Clemens>Das heißt, wir sehen Schwachstellen, die darauf basieren, dass APIs falsch aufgerufen

00:28:50.101 --> 00:28:55.511
<v Clemens>werden, dass zum Beispiel irgendwelche Security-Flags vergessen werden bei einer

00:28:55.511 --> 00:28:59.701
<v Clemens>API oder auch das berühmte Thema Slop-Squatting.

00:29:00.141 --> 00:29:03.179
<v Clemens>Man kennt vielleicht den Begriff Typosquatting, wo also.

00:29:04.363 --> 00:29:07.891
<v Clemens>Pakete registriert werden, Third-Party-Pakete registriert werden,

00:29:07.891 --> 00:29:11.112
<v Clemens>die so einen ähnlichen Namen haben wie valide Pakete

00:29:11.495 --> 00:29:15.441
<v Clemens>und Angreifer dann eben sich zunutze machen, dass sich Developer vielleicht

00:29:15.441 --> 00:29:20.591
<v Clemens>mal vertippen und Slopsquatting ist quasi das Gleiche, nur mit halluzinierten Paketen.

00:29:21.665 --> 00:29:27.012
<v Clemens>LLMs halluzinieren irgendwelche Libraries, irgendwelche.

00:29:28.426 --> 00:29:33.106
<v Clemens>NPM-Packages zum Beispiel, die es eigentlich gar nicht gibt und ein cleverer

00:29:33.106 --> 00:29:36.536
<v Clemens>Angreifer hat diese Halluzination vorhergesehen oder vielleicht selber schon

00:29:36.536 --> 00:29:38.662
<v Clemens>mal gesehen oder hat einfach auf Verdacht sehr viele

00:29:39.069 --> 00:29:44.406
<v Clemens>von diesen Paketen genauso schon registriert, die dann aber entsprechend bösartig

00:29:44.406 --> 00:29:48.200
<v Clemens>sind und sobald das LLM das eben halluziniert,

00:29:49.086 --> 00:29:54.966
<v Clemens>laden wir uns das Package runter, führen das vielleicht mit aus oder es landet in unserem Produkt.

00:29:55.626 --> 00:30:00.506
<v Clemens>Das ist also das, was man unter Slopsquatting versteht, warum man immer quasi

00:30:00.506 --> 00:30:06.016
<v Clemens>auch die Abhängigkeiten, die ein Modell benutzen möchte, nochmal genauer überprüfen sollte.

00:30:06.016 --> 00:30:10.286
<v Clemens>Sind das wirklich die Richtigen, sind das die Abhängigkeiten,

00:30:10.286 --> 00:30:11.976
<v Clemens>die ich da benutzen möchte?

00:30:12.706 --> 00:30:16.469
<v Clemens>Da gab es jetzt gerade, ja, ist schon länger ein Thema.

00:30:17.566 --> 00:30:20.766
<v Clemens>Wer da nochmal genauer reinschauen möchte, da habe ich hier noch einen Artikel,

00:30:21.266 --> 00:30:26.813
<v Clemens>verlinkt, wo eben analysiert wurde, was da alles zusammenhalluziniert wurde.

00:30:28.079 --> 00:30:31.223
<v Clemens>Also wir sehen, es gibt so eine Reihe von verschiedenen Schwachstellen,

00:30:31.223 --> 00:30:36.453
<v Clemens>die für AI-generated-code typisch sind und wir sehen auch, dass die Studien,

00:30:36.453 --> 00:30:37.860
<v Clemens>die wir bisher haben, zeigen,

00:30:38.917 --> 00:30:48.042
<v Clemens>ja, es gibt eine gewisse Diskrepanz oder eine gewisse Problematik mit der Qualität

00:30:48.402 --> 00:30:49.929
<v Clemens>von so generiertem Code.

00:30:50.248 --> 00:30:55.153
<v Clemens>Und das fasst eine Studie, die jetzt auch schon ein paar Jahre älter ist,

00:30:55.153 --> 00:30:59.053
<v Clemens>aber deren psychologischer Effekt ein sehr, sehr spannendes,

00:30:59.053 --> 00:31:01.623
<v Clemens>eine psychologische Erkenntnis, war auch eine Studie, wo.

00:31:03.263 --> 00:31:07.773
<v Clemens>Teilnehmende quasi mit Coding Assistants, eine Kontrollgruppe eben ohne Coding

00:31:07.773 --> 00:31:09.920
<v Clemens>Assistants, Code entwickeln sollten,

00:31:10.723 --> 00:31:15.403
<v Clemens>und wo die Autoren von Stanford eben herausgefunden haben, nicht nur haben die

00:31:15.403 --> 00:31:19.249
<v Clemens>mit Coding Assistants irgendwie mehr Schwachstellen in ihrem Code eingebaut,

00:31:19.521 --> 00:31:23.083
<v Clemens>sie hatten auch danach ein besseres Gefühl über die Qualität,

00:31:23.083 --> 00:31:24.827
<v Clemens>über die Sicherheit von ihrem Code.

00:31:25.286 --> 00:31:30.033
<v Clemens>Also, mehr Schwachstellen gleichzeitig aber, ja, ein besseres Gefühl,

00:31:30.033 --> 00:31:31.673
<v Clemens>das ist das, was ich eben als The

00:31:31.673 --> 00:31:36.640
<v Clemens>Trust Trap bezeichne, also eine falsche Wahrnehmung, ein falsches Gefühl,

00:31:37.223 --> 00:31:41.940
<v Clemens>wie gut und wie sicher der Code ist, der mit Coding Assistants entsteht.

00:31:42.428 --> 00:31:45.363
<v Clemens>Wie gesagt, die Studie ist jetzt schon ein paar Jährchen alt,

00:31:45.363 --> 00:31:52.209
<v Clemens>aber auch der aktuelle BSIMM-Report, das ist ein Report über den Reifegrad von Softwareentwicklung.

00:31:54.003 --> 00:31:57.263
<v Clemens>Der jetzt veröffentlicht wird, der zeigt eben auch, dass,

00:31:58.003 --> 00:32:00.998
<v Clemens>es diese Illusion of Correctness, nennen sie es jetzt hier eben,

00:32:01.310 --> 00:32:04.880
<v Clemens>existiert, dass eben Code, der von einem Coding Assistant generiert wird,

00:32:05.188 --> 00:32:09.643
<v Clemens>grundsätzlich irgendwie als besser, als sicherer wahrgenommen wird bei vielen

00:32:09.643 --> 00:32:11.423
<v Clemens>Entwicklern und das eben,

00:32:12.131 --> 00:32:16.206
<v Clemens>Zusammen mit dem Phänomen, dass es eben kein perfekter Code ist,

00:32:16.903 --> 00:32:19.863
<v Clemens>eben ein echtes Problem darstellt und da versuche ich immer,

00:32:20.188 --> 00:32:23.103
<v Clemens>mehr Bewusstsein für zu schaffen und hoffe, dass ihr das heute so ein bisschen

00:32:23.103 --> 00:32:25.443
<v Clemens>mitnehmen könnt, was da noch,

00:32:26.603 --> 00:32:28.583
<v Clemens>die Einschränkungen sind und

00:32:28.583 --> 00:32:32.216
<v Clemens>dass es wichtig ist, darüber zu sprechen und sich damit zu beschäftigen.

00:32:34.061 --> 00:32:40.069
<v Clemens>Soviel also zum Thema Code Quality. Dann kommen wir zum Abschluss noch zu einem

00:32:40.489 --> 00:32:44.139
<v Clemens>letzten Thema, Model Poisoning.

00:32:44.889 --> 00:32:47.807
<v Clemens>Das hatte ich hier unten, genau.

00:32:48.069 --> 00:32:50.799
<v Clemens>Das Thema Trainingsdaten hatte ich vorhin so ein bisschen ausgeklammert,

00:32:50.799 --> 00:32:53.769
<v Clemens>weil das ja etwas ist, mit dem sich die wenigsten hier aktiv beschäftigen.

00:32:54.789 --> 00:32:59.578
<v Clemens>Die wenigsten trainieren noch eigene LLMs,

00:33:00.189 --> 00:33:03.469
<v Clemens>aber man muss sich natürlich immer vergegenwärtigen, dass es diese Trainingsdaten

00:33:03.469 --> 00:33:08.209
<v Clemens>gibt und dass wir die genauso wenig kontrollieren können für die meisten LLMs,

00:33:08.209 --> 00:33:13.289
<v Clemens>wie das Training selber oder wie das LLM sich eben verhält.

00:33:13.759 --> 00:33:16.801
<v Clemens>Und das ist eben ein ganz wichtiger Punkt,

00:33:17.429 --> 00:33:23.229
<v Clemens>den man ganz gut an dieser Studie sehen kann, wo eben das chinesische Modell

00:33:23.229 --> 00:33:29.149
<v Clemens>DeepSeek untersucht wurde und dem Modell eben gleichlautende

00:33:29.898 --> 00:33:35.205
<v Clemens>Coding-Tasks gegeben wurden, also zum Beispiel eine To-Do-Liste oder eine Verwaltungs-App

00:33:35.205 --> 00:33:38.945
<v Clemens>für eine Firma, die aber einmal eben komplett ohne einen,

00:33:39.485 --> 00:33:43.165
<v Clemens>politischen Kontext und einmal eben mit einem gewissen politischen Kontext,

00:33:43.165 --> 00:33:46.765
<v Clemens>der in China als kontrovers eingeschätzt wird.

00:33:47.065 --> 00:33:51.785
<v Clemens>Zum Beispiel baue eine To-Do-Listen-App für ein tibetanisches Kloster zum Beispiel,

00:33:52.404 --> 00:33:58.305
<v Clemens>war da, glaube ich, ein Beispiel, wo dann verglichen wurde, wie ist die Qualität von diesem

00:33:59.565 --> 00:34:03.995
<v Clemens>Code, den dieses chinesische Modell da eben generiert, und es hat sich gezeigt,

00:34:03.995 --> 00:34:07.982
<v Clemens>obwohl quasi der Task, der technische Task der gleiche ist,

00:34:08.825 --> 00:34:16.185
<v Clemens>waren die Produkte oder der Code, der eben mit so politischen Triggern versehen war, eben signifikant

00:34:17.005 --> 00:34:21.035
<v Clemens>unsicherer, hat mehr Sicherheitsschwachstellen, Security-Bugs enthalten,

00:34:21.035 --> 00:34:24.161
<v Clemens>als die, die eben ohne sowas geprompted wurden.

00:34:24.469 --> 00:34:28.305
<v Clemens>Und das zeigt ganz gut, was da die Gefahren sind.

00:34:28.305 --> 00:34:30.651
<v Clemens>Zum einen natürlich aus dem geopolitischen Aspekt, aber auch,

00:34:30.970 --> 00:34:32.945
<v Clemens>weil das ganz gut demonstriert,

00:34:33.565 --> 00:34:37.089
<v Clemens>wie wenig wir einfach wissen, auf was wurde da genau trainiert,

00:34:37.274 --> 00:34:40.005
<v Clemens>wie wurde das trainiert, ist das hier absichtlich entstanden,

00:34:40.005 --> 00:34:45.015
<v Clemens>ist das ein blöder Seiteneffekt, weil man irgendwie da einen falschen Bias in

00:34:45.015 --> 00:34:46.998
<v Clemens>den Trainingssachen hat. Man weiß es einfach nicht.

00:34:47.218 --> 00:34:50.985
<v Clemens>Aber das muss einem einfach bewusst sein, wenn man

00:34:53.205 --> 00:34:56.226
<v Clemens>über solche Themen spricht.

00:34:56.985 --> 00:35:00.905
<v Clemens>Wir benutzen LLMs gerne, sie sind super wertvoll, aber wir verstehen nicht so

00:35:00.905 --> 00:35:04.025
<v Clemens>ganz, was unter der Haube passiert, auch worauf sie trainiert wurden,

00:35:04.025 --> 00:35:06.977
<v Clemens>was für Rahmenbedingungen sie vielleicht mitbringen.

00:35:08.737 --> 00:35:13.293
<v Clemens>Das wäre also mein Überblick zu den fünf wichtigsten Risiken,

00:35:13.293 --> 00:35:17.061
<v Clemens>die ich euch heute mitgeben möchte im Zusammenhang mit Coding Assistants.

00:35:17.439 --> 00:35:25.383
<v Clemens>Jetzt wollen wir die letzten Minuten noch nutzen und ein bisschen über Gegenmaßnahmen sprechen.

00:35:25.743 --> 00:35:30.073
<v Clemens>Denn ich möchte hier Coding Assistants nicht verteufeln.

00:35:30.073 --> 00:35:33.513
<v Clemens>Sie haben großen Wert. Ich benutze sie auch super gerne selber,

00:35:33.513 --> 00:35:38.123
<v Clemens>aber man muss sie halt passend und verantwortungsbewusst einsetzen.

00:35:38.123 --> 00:35:43.433
<v Clemens>Also schauen wir mal auf die Gegenmaßnahmen zu den fünf Schwachstellen,

00:35:43.433 --> 00:35:44.823
<v Clemens>die wir jetzt gesehen haben.

00:35:44.823 --> 00:35:50.053
<v Clemens>Wir haben gesehen, Prompt Injection betrifft alles, was irgendwie über den Kontext

00:35:50.053 --> 00:35:53.267
<v Clemens>vor allem in unserem Prompt landet.

00:35:53.534 --> 00:35:57.773
<v Clemens>Wir haben gesehen, wie dann daraus basierend Daten irgendwie abfließen können,

00:35:57.773 --> 00:36:02.124
<v Clemens>zum einen natürlich durch Command-Executions, aber auch durch Tools, das passt zu beiden,

00:36:02.542 --> 00:36:07.012
<v Clemens>dann eben wie die Tools insgesamt missbraucht werden können durch Agenten,

00:36:07.268 --> 00:36:09.508
<v Clemens>was die Code-Qualität betrifft,

00:36:10.163 --> 00:36:15.303
<v Clemens>und eben das Thema, wie die Trainingsdaten ausschauen, also ob die potenziell

00:36:15.303 --> 00:36:17.693
<v Clemens>vergiftet wurden, Model-Poisoning, ich glaube, den Begriff hatte ich vorhin

00:36:17.693 --> 00:36:20.288
<v Clemens>gar nicht so explizit genannt, so nennt man das,

00:36:21.124 --> 00:36:26.494
<v Clemens>Und die Gegenmaßnahmen zu diesen Sachen lassen sich in ein paar Bereiche einteilen.

00:36:26.859 --> 00:36:32.288
<v Clemens>Zum einen gibt es Sachen, da gibt es schon sehr typische und sehr.

00:36:35.088 --> 00:36:40.536
<v Clemens>bewährte Methoden und das betrifft alles, was den Bereich Code Quality eben betrifft.

00:36:41.588 --> 00:36:45.139
<v Clemens>Da haben wir schon gute Maßnahmen, wie wir die Qualität von,

00:36:45.928 --> 00:36:48.968
<v Clemens>jemandem, von Code überprüfen, der von jemandem geschrieben wurde,

00:36:48.968 --> 00:36:53.578
<v Clemens>der wir nicht selber sind und diese Aktivitäten müssen wir einfach weiter genauso

00:36:53.578 --> 00:36:58.286
<v Clemens>durchführen, auch wenn wir jetzt eben Code von Coding Assistants bekommen, das heißt,

00:36:58.968 --> 00:37:03.458
<v Clemens>gerade jetzt in Bezug auf Security heißt das, die Security-Aktivitäten,

00:37:03.458 --> 00:37:07.273
<v Clemens>die wir eigentlich schon lange in unseren Entwicklungsprozessen haben müssen,

00:37:07.557 --> 00:37:12.968
<v Clemens>Sei es jetzt schon beim Entwurf, durch Threat Modeling zum Beispiel, aber dann eben auch,

00:37:13.528 --> 00:37:15.823
<v Clemens>beim Review natürlich und beim Testen von Code.

00:37:16.143 --> 00:37:19.528
<v Clemens>Das ist für alles, was von Coding Assistants kommt, eben.

00:37:21.739 --> 00:37:25.756
<v Clemens>Besonders relevant und eben dieser Trust Trap aktiv begegnen,

00:37:26.023 --> 00:37:33.569
<v Clemens>ein bisschen Sachen hinterfragen, Sachen überprüfen und das Ganze eben verantwortungsbewusst nutzen.

00:37:34.858 --> 00:37:38.035
<v Clemens>Bei den anderen Sachen ist es so ein bisschen schwieriger. Prompt Injection,

00:37:38.035 --> 00:37:41.475
<v Clemens>habe ich vorhin schon gesagt, ist aktuell noch ein ungelöstes Problem.

00:37:41.475 --> 00:37:47.350
<v Clemens>Es gibt Tools und Methoden, um eben solche einfachen Prompt Injections irgendwie zu finden.

00:37:47.646 --> 00:37:54.405
<v Clemens>Alle großen LLMs haben sowas, bieten sowas an, um eben so diese typischen Ignore

00:37:54.405 --> 00:37:56.543
<v Clemens>All Previous Instructions zu verhindern.

00:37:57.305 --> 00:38:02.515
<v Clemens>Aber das ist nicht 100% möglich und das wird vermutlich auch so schnell nicht

00:38:02.515 --> 00:38:06.655
<v Clemens>sein, eben durch die nicht-deterministische Art und Weise von LLMs.

00:38:07.425 --> 00:38:12.285
<v Clemens>Das heißt, wir müssen eigentlich hier annehmen, dass ein Angreifer mit genug,

00:38:12.965 --> 00:38:18.815
<v Clemens>Motivation und mit genug Aufwand eben so eine Prompt Injection durchführen kann.

00:38:18.815 --> 00:38:22.602
<v Clemens>Das heißt, wir müssen uns darum kümmern, wie können wir die Auswirkungen verhindern.

00:38:24.157 --> 00:38:27.546
<v Clemens>Das heißt, da sind wir dann jetzt hier bei den Limitations, das heißt,

00:38:27.546 --> 00:38:31.106
<v Clemens>das macht Sinn, die Autonomie von Coding Agents,

00:38:32.023 --> 00:38:37.764
<v Clemens>gezielt zu beschränken, um eben so eine Prompt Injection dann eben einzudämmen,

00:38:38.100 --> 00:38:41.613
<v Clemens>das heißt, das macht Sinn zu überlegen, welche Tools braucht mein Agent genau,

00:38:42.246 --> 00:38:43.975
<v Clemens>darf er da einfach drauf zugreifen,

00:38:45.046 --> 00:38:47.956
<v Clemens>muss er da nochmal nachfragen, das ist so dieser berühmte Human-in-the-Loop,

00:38:48.146 --> 00:38:51.266
<v Clemens>Und darauf wird sich oft irgendwie zurückgezogen, wenn man sagt,

00:38:51.266 --> 00:38:53.296
<v Clemens>okay, wir können das hier nicht weiter kontrollieren, dann machen wir hier noch

00:38:53.296 --> 00:38:57.486
<v Clemens>so ein Human-in-the-Loop-Button, aber jeder, der schon mal irgendwie 50 Mal in Folge auf ein,

00:38:58.106 --> 00:39:01.342
<v Clemens>Ja-Okay-Mach-Weiter-Button geklickt hat, der kann sich vorstellen.

00:39:03.226 --> 00:39:06.874
<v Clemens>Wie gut das in der Praxis wirklich funktioniert. Also, ich bin da mal so ein bisschen vorsichtig.

00:39:07.188 --> 00:39:11.982
<v Clemens>Schöner sind da technische Lösungen, dass man Sachen wirklich konkret einschränkt,

00:39:12.267 --> 00:39:16.576
<v Clemens>sinnvolle Rechte vergibt und eben auch das Thema Sandboxing sich genauer anschaut.

00:39:16.576 --> 00:39:20.626
<v Clemens>Also, einen Coding Assistant ohne eine passende Sandbox zu betreiben,

00:39:21.366 --> 00:39:23.488
<v Clemens>ist eine gefährliche Sache.

00:39:24.066 --> 00:39:26.483
<v Clemens>Das kann ich auf keinen Fall empfehlen.

00:39:27.139 --> 00:39:30.262
<v Clemens>Und das gleiche gilt dann natürlich auch für Data Leakage, also sich zu überlegen,

00:39:30.587 --> 00:39:35.326
<v Clemens>wo können überall Daten hinfließen, auch dort die passenden Einschränkungen,

00:39:35.326 --> 00:39:41.541
<v Clemens>die passenden Rechte zu vergeben, das ist da eben die Gegenmaßnahme.

00:39:42.366 --> 00:39:45.416
<v Clemens>Und beim Model Poisoning, ich springe hier wild ein bisschen hin und her,

00:39:45.416 --> 00:39:46.766
<v Clemens>ich hoffe, ihr könnt mir folgen,

00:39:47.746 --> 00:39:52.166
<v Clemens>bei Model Poisoning ist eben der Punkt, ja, wir können es nicht komplett kontrollieren,

00:39:52.846 --> 00:39:56.106
<v Clemens>außer wir nehmen wirklich ein Modell, wo auch die Trainingsdaten offengelegt

00:39:56.106 --> 00:40:02.306
<v Clemens>sind, was sehr selten ist, das heißt, wir können das auch nur wieder durch Reviews versuchen,

00:40:02.966 --> 00:40:08.185
<v Clemens>zu erkennen, zu überprüfen, aber wir werden das nie komplett verhindern können.

00:40:09.834 --> 00:40:13.709
<v Clemens>Auf einer Folie zusammengefasst, habe ich hier nochmal meine Tipps für eine

00:40:13.709 --> 00:40:18.899
<v Clemens>sichere Nutzung von Coding Assistants, hier darüber sprechen,

00:40:18.899 --> 00:40:22.879
<v Clemens>sich dazu weiterzubilden, das macht ihr gerade eh, das ist eh gerade

00:40:24.899 --> 00:40:29.205
<v Clemens>im Gange, und dann ist quasi wichtig, dass man in jedem Schritt vom Entwicklungsprozess

00:40:29.489 --> 00:40:36.194
<v Clemens>das passend und verantwortungsbewusst einsetzt, also dass man sich vorab genau Gedanken macht, okay,

00:40:36.959 --> 00:40:42.069
<v Clemens>was ist das Feature, das ich hier machen möchte, was hat das für eine Bedrohungslage,

00:40:42.069 --> 00:40:45.429
<v Clemens>was hat das für eine Angriffsoberfläche, kann ich das später dem Modell dann

00:40:45.429 --> 00:40:47.219
<v Clemens>eben auch entsprechend mitgeben,

00:40:47.719 --> 00:40:52.279
<v Clemens>oder prompten, das zeigt die Erfahrung, dass so ein Security Reminder eben hilft,

00:40:52.639 --> 00:40:56.919
<v Clemens>desto besser, dass der Agent eben versteht, was meine Rahmenbedingungen sind,

00:40:56.919 --> 00:40:58.799
<v Clemens>worauf er achten soll, desto,

00:40:59.439 --> 00:41:01.369
<v Clemens>eher kann er das verhindern,

00:41:01.999 --> 00:41:06.419
<v Clemens>Und dann natürlich das Thema Review, also alles, was irgendwie von dem Agenten,

00:41:08.099 --> 00:41:10.686
<v Clemens>generiert wurde, muss von dem Menschen meiner Meinung nach

00:41:12.399 --> 00:41:17.549
<v Clemens>reviewt werden und natürlich auch durch passende Security-Tests begleitet werden

00:41:17.549 --> 00:41:21.652
<v Clemens>und schauen, dass da keine neuen Schwachstellen eingeführt wurden.

00:41:22.331 --> 00:41:24.787
<v Clemens>Das sind also meine Empfehlungen für euch.

00:41:25.483 --> 00:41:30.059
<v Clemens>Ich habe hier noch zwei Links mit draufgepackt, wer sich nochmal weiter einlesen

00:41:30.059 --> 00:41:33.790
<v Clemens>möchte. Das eine ist die OpenSSF Guidance.

00:41:34.739 --> 00:41:40.349
<v Clemens>Da kann man nochmal genauer nachlesen, was es für Empfehlungen gibt für AI Coding

00:41:40.349 --> 00:41:43.559
<v Clemens>Assistants und dann von der OWASP das GenAI Security Project.

00:41:43.599 --> 00:41:46.109
<v Clemens>Steckt auch eine große Sammlung an verschiedenen Ressourcen,

00:41:46.109 --> 00:41:48.679
<v Clemens>Tools, Templates, Whitepapern.

00:41:49.519 --> 00:41:53.688
<v Clemens>Das kann ich euch mitgeben, wenn ihr sagt, da möchte ich noch mehr zu lernen.

00:41:54.623 --> 00:41:58.901
<v Clemens>Und so hoffe ich, dass ihr heute mitnehmen konntet, was eben die,

00:41:59.831 --> 00:42:05.471
<v Clemens>ja, Möglichkeiten sind von Code AI und dass es wichtig ist, da gewisse Sachen

00:42:05.471 --> 00:42:08.921
<v Clemens>aktiv zu beschränken, um eben Risiken zu minimieren.

00:42:09.414 --> 00:42:14.611
<v Clemens>Alles, was nur durch Prompting passiert, ist eben für eine Prompt Injection

00:42:14.611 --> 00:42:19.596
<v Clemens>auch anfällig, das heißt, wir müssen Sicherheit um das LLM drumherum bauen,

00:42:20.191 --> 00:42:22.901
<v Clemens>uns darauf konzentrieren, was darf alles rein, was darf alles raus,

00:42:22.901 --> 00:42:25.743
<v Clemens>was darf der Coding Assistant alles machen.

00:42:26.491 --> 00:42:30.544
<v Clemens>Das sind also die Sachen, die ihr hoffentlich heute mitnehmen könnt.

00:42:31.049 --> 00:42:35.431
<v Clemens>Und damit würde ich jetzt auch zum Abschluss kommen, denn ich bin mir sicher,

00:42:35.431 --> 00:42:41.991
<v Clemens>es gibt noch ein paar Fragen und denen wollen wir genug Zeit einräumen und deswegen

00:42:41.991 --> 00:42:45.252
<v Clemens>sage ich erstmal herzlichen Dank und freue mich auf eure Fragen.

00:42:46.587 --> 00:42:50.351
<v Hendrik>Ja, lieber Clemens, erstmal sage ich herzlichen Dank dir für diesen Vortrag.

00:42:51.440 --> 00:42:57.121
<v Hendrik>Wir haben tatsächlich auch eine Frage im Chat, und zwar der Cass,

00:42:57.121 --> 00:43:01.099
<v Hendrik>der sagt, in meinem Dev-Team nutzen wir IntelliJ-AI.

00:43:01.442 --> 00:43:05.011
<v Hendrik>Die größte Besorgnis im Team, unser Code, ups, da springt es,

00:43:05.011 --> 00:43:06.812
<v Hendrik>könnte in falsche Hände geraten.

00:43:07.131 --> 00:43:10.567
<v Hendrik>Deshalb nutzen wir den Coding-Agent nur mit der Option Codebase off.

00:43:11.026 --> 00:43:15.461
<v Hendrik>Er fragt jetzt, wir geben stattdessen die benötigten Files explizit mit.

00:43:15.641 --> 00:43:19.025
<v Hendrik>Ist das jetzt schlau oder doch eher das Gegenteil von schlau?

00:43:22.126 --> 00:43:25.426
<v Clemens>Also das betrifft ja quasi so das Risiko, wir machen uns irgendwie Sorgen,

00:43:25.426 --> 00:43:30.618
<v Clemens>dass unser Intellectual Property, also unser eigener Code irgendwie abfließt.

00:43:32.081 --> 00:43:38.026
<v Clemens>Ich glaube, dafür ist die beste oder die typische Antwort heute,

00:43:38.026 --> 00:43:42.146
<v Clemens>dass man das halt vertraglich regelt, dass man quasi nur ein LLM benutzt,

00:43:42.626 --> 00:43:45.698
<v Clemens>wo einem der Anbieter zusichert, dass er die Daten, die er da bekommt,

00:43:46.168 --> 00:43:49.336
<v Clemens>nicht zum Training oder sonst was verwendet.

00:43:49.336 --> 00:43:52.706
<v Clemens>Dann kann man da drauf vertrauen oder es auch nicht machen.

00:43:55.270 --> 00:44:00.306
<v Clemens>Aber am Ende ist die Erfahrung ja, desto mehr Kontext ein LLM hat,

00:44:01.006 --> 00:44:05.350
<v Clemens>ein Coding Assistant hat, desto besser sind die Ergebnisse, das heißt,

00:44:05.350 --> 00:44:08.766
<v Clemens>ich bin mir nicht sicher, ob es so praktikabel ist, was er jetzt da beschreibt,

00:44:09.606 --> 00:44:12.546
<v Clemens>dass man dann nur wirklich einzelne Sachen mitgibt.

00:44:12.842 --> 00:44:17.736
<v Clemens>Wenn man wirklich so sensiblen Code hat, dass man das auf keinen Fall irgendwie

00:44:17.736 --> 00:44:21.446
<v Clemens>rausgeben möchte, dann möchte man ja wahrscheinlich auch nicht einzelne Dateien

00:44:21.446 --> 00:44:24.166
<v Clemens>rausgeben, dann hat man da ja auch weiterhin irgendwie ein schlechtes Gefühl.

00:44:24.166 --> 00:44:28.506
<v Clemens>Dann lohnt es sich vielleicht wirklich zu überlegen, möchte man da irgendwie

00:44:28.506 --> 00:44:34.396
<v Clemens>eigene Modelle hosten, was aber wieder ganz andere Herausforderungen mit sich bringt.

00:44:34.396 --> 00:44:42.382
<v Clemens>Also ich glaube, dafür gibt es gerade keine bessere Lösung, als auf Verträge zu vertrauen.

00:44:43.195 --> 00:44:46.876
<v Hendrik>Alles klar, okay. Wir haben noch eine Frage von dem Nils Klüver,

00:44:46.876 --> 00:44:50.446
<v Hendrik>der auch nachher hier einen Vortrag halten wird. Er möchte wissen,

00:44:50.446 --> 00:44:53.365
<v Hendrik>hast du Erfahrungen mit der Model Armor von Google gemacht?

00:44:55.340 --> 00:45:00.848
<v Clemens>Nee, die kenne ich nicht. Das würde mich interessieren, wenn du da später etwas

00:45:01.228 --> 00:45:03.148
<v Clemens>zu sagen willst, sonst schaue ich es mir selber an.

00:45:03.467 --> 00:45:05.738
<v Clemens>Ich glaube, der Vortrag geht in eine etwas andere Richtung.

00:45:05.738 --> 00:45:06.688
<v Hendrik>Ja, das habe ich befürchtet.

00:45:08.285 --> 00:45:13.798
<v Clemens>Nee, das kenne ich selber noch nicht. Ich nehme mal an, das ist auch eine Art

00:45:13.798 --> 00:45:17.109
<v Clemens>und Weise, wie man versucht, Prompt Injection zu verhindern.

00:45:18.148 --> 00:45:21.568
<v Clemens>Wie gut das da funktioniert, kann ich nicht einschätzen.

00:45:22.130 --> 00:45:26.739
<v Clemens>Meinem Gefühl nach gibt es da immer noch keine hundertprozentige Trefferquote,

00:45:27.157 --> 00:45:29.248
<v Clemens>um sowas wirklich zu verhindern.

00:45:29.668 --> 00:45:33.258
<v Clemens>Dafür gibt es einfach in natürlicher Sprache zu viele Möglichkeiten,

00:45:33.258 --> 00:45:36.788
<v Clemens>Sachen irgendwie zu verstecken und zu verschleiern. Und

00:45:37.831 --> 00:45:42.788
<v Clemens>alle Ansätze, ja, dann muss man halt mit einem zweiten LLM das erste LLM kontrollieren

00:45:42.788 --> 00:45:44.928
<v Clemens>und dann findet man da wieder einen Weg drumherum.

00:45:45.633 --> 00:45:49.028
<v Clemens>Ist alles bisher noch nicht vom Erfolg gekrönt. Das ist, glaube ich,

00:45:49.028 --> 00:45:53.508
<v Clemens>so ein grundsätzliches, konzeptionelles Problem mit LLMs. Aber ich schaue es

00:45:53.508 --> 00:45:55.583
<v Clemens>mir mal an. Danke für den Tipp.

00:45:56.388 --> 00:46:00.024
<v Hendrik>Ja, cool. Und Ingo hat noch eine Frage. Ich lese das mal kurz vor. Er sagt,

00:46:00.134 --> 00:46:04.108
<v Hendrik>auffällig ist in der Taxonomie, irgendwie scheinen so ziemlich alle Punkte ein

00:46:04.108 --> 00:46:06.241
<v Hendrik>entsprechendes menschliches Pendant zu haben.

00:46:06.647 --> 00:46:10.668
<v Hendrik>Liegt das eher an der Arbeitsweise von LLMs, die trainiert sind auf einem menschlichen

00:46:10.668 --> 00:46:14.716
<v Hendrik>Textkorpus, oder ist das vielleicht auch ein Blindspot in der Taxonomie,

00:46:14.995 --> 00:46:18.768
<v Hendrik>dass nicht menschliche Fehlertypen nicht ausreichend beachtet werden.

00:46:18.768 --> 00:46:21.518
<v Hendrik>Da fehlt einem vielleicht auch die Fantasie, was diese Fehlertypen überhaupt

00:46:21.518 --> 00:46:23.755
<v Hendrik>sein könnten. Das ist mal eine spannende Frage.

00:46:24.504 --> 00:46:27.521
<v Clemens>Das stimmt, das stimmt. Also ich bin ja grundsätzlich der Meinung,

00:46:27.521 --> 00:46:31.881
<v Clemens>dass es eigentlich nur menschliche Fehlertypen gibt, weil, also man kann sich

00:46:31.881 --> 00:46:34.506
<v Clemens>nie darauf zurückziehen, dass irgendwie ein System,

00:46:35.291 --> 00:46:38.461
<v Clemens>das da alleine schuld ist, weil dann betreibt man das System falsch und das

00:46:38.461 --> 00:46:40.535
<v Clemens>ist am Ende wieder ein menschlicher Fehler.

00:46:40.819 --> 00:46:43.745
<v Clemens>Das heißt, die Grenze ist da eh schon so ein bisschen schwammig.

00:46:44.971 --> 00:46:49.451
<v Clemens>Wo haben wir denn die Folie? Aber also die grundsätzliche Beobachtung gilt natürlich,

00:46:49.451 --> 00:46:53.051
<v Clemens>genau, die meisten Sachen davon lassen sich irgendwie darauf zurückführen,

00:46:53.051 --> 00:46:56.671
<v Clemens>dass entweder schon mal früher jemand diese Fehler gemacht hat oder,

00:46:57.151 --> 00:47:01.073
<v Clemens>man vielleicht falsch gepromptet hat oder das hätte besser erklären müssen und so.

00:47:01.831 --> 00:47:05.371
<v Clemens>Also, die Beobachtung stimmt auf jeden Fall. Hier hinten wird es dann so ein

00:47:05.371 --> 00:47:07.951
<v Clemens>bisschen schwieriger, aber dann kann man natürlich immer noch sagen,

00:47:07.951 --> 00:47:14.169
<v Clemens>ja gut, da fehlt dann halt die gewisse Sorgfalt und dann auch wieder ein menschlicher Fehler.

00:47:14.891 --> 00:47:19.851
<v Clemens>Es wirft aber einen interessanten Punkt auf, quasi auch zu dem Aspekt,

00:47:20.351 --> 00:47:23.973
<v Clemens>der aus den Studien kommt, wie sicher ist dein Code?

00:47:25.680 --> 00:47:30.671
<v Clemens>Weil ich natürlich jetzt gezeigt habe, ja, irgendwie 50 Prozent der Sachen,

00:47:30.671 --> 00:47:32.251
<v Clemens>die Studien sind irgendwie unsicher.

00:47:32.511 --> 00:47:34.751
<v Clemens>Das ist natürlich die Frage, womit vergleicht man das eigentlich genau?

00:47:34.751 --> 00:47:37.869
<v Clemens>Also, wie gut ist denn ein durchschnittlicher Entwickler?

00:47:38.671 --> 00:47:41.869
<v Clemens>Ist das besser oder ist das schlechter als das? Also, wenn es darum geht,

00:47:42.142 --> 00:47:44.921
<v Clemens>das jetzt irgendwie auf menschlichen Fehler zurückzuführen oder mit menschlichen

00:47:44.921 --> 00:47:47.841
<v Clemens>Fehlern zu vergleichen, dann wird es, glaube ich, eh schwierig,

00:47:47.841 --> 00:47:52.551
<v Clemens>weil ich bisher auch keine Studie gefunden habe, die leider die gleichen Coding-Tasks auch an,

00:47:53.011 --> 00:47:55.191
<v Clemens>Menschen gegeben hat und das damit verglichen hat.

00:47:56.091 --> 00:48:01.011
<v Clemens>Da kann jetzt jeder mal sich selber überlegen, wie er sich oder seine,

00:48:02.591 --> 00:48:03.742
<v Clemens>Kolleginnen so einschätzt,

00:48:04.611 --> 00:48:07.637
<v Clemens>ob die da besser oder schlechter sind.

00:48:08.131 --> 00:48:11.211
<v Hendrik>Alles klar. Und eine letzte Frage noch von Christian.

00:48:11.731 --> 00:48:15.191
<v Hendrik>Was für Modelle setzt ihr ein? Hosted in EU?

00:48:15.551 --> 00:48:19.050
<v Hendrik>Also Quatsch, warum lese ich das auf Englisch vor? Also gehostet in der EU,

00:48:19.691 --> 00:48:22.219
<v Hendrik>in den USA oder lokale LLMs? Willst du da auspacken?

00:48:23.548 --> 00:48:27.936
<v Clemens>Ja, ich kann da schon einen Einblick geben.

00:48:28.476 --> 00:48:33.666
<v Clemens>Also genau, selbst gehostete Modelle benutzen wir nicht, aus den Gründen,

00:48:33.666 --> 00:48:37.241
<v Clemens>die ich da vorhin schon mal genannt habe, halten das aktuell nicht für praktikabel.

00:48:38.656 --> 00:48:42.136
<v Clemens>Soweit ich weiß, sind unsere Modelle alle EU-hosted. Ich glaube,

00:48:42.146 --> 00:48:46.523
<v Clemens>dass es aber letzten Endes auch ähnliche, rechtliche ...

00:48:49.118 --> 00:48:51.366
<v Clemens>ich möchte jetzt nicht Augenwischerei sagen, aber man darf das auch mit einer

00:48:51.366 --> 00:48:54.476
<v Clemens>gewissen Skepsis betrachten, ob das jetzt wirklich den Unterschied macht,

00:48:54.476 --> 00:48:59.246
<v Clemens>ob ein amerikanischer Konzern das hier hostet oder drüben hostet.

00:48:59.246 --> 00:49:03.003
<v Clemens>Ich glaube, im Fall eines Falles ist da der Zugriff immer da.

00:49:03.282 --> 00:49:07.601
<v Clemens>Das heißt, auch wir verlassen uns bei den meisten Sachen eben auf rechtliche

00:49:07.891 --> 00:49:13.436
<v Clemens>Zusicherungen und haben natürlich gewisse Sachen, die so sensibel sind, dass sie nie das,

00:49:14.216 --> 00:49:18.396
<v Clemens>Auge einer externen AI sehen, wo also dann noch wirklich,

00:49:19.596 --> 00:49:20.679
<v Clemens>ohne AI gecodet wird.

00:49:21.840 --> 00:49:26.476
<v Hendrik>Okay, super. Dann vielen Dank nochmal dir hier für deinen Vortrag und jetzt

00:49:26.476 --> 00:49:29.728
<v Hendrik>auch, dass du nochmal hier die letzten Fragen auch noch beantwortet hast.

00:49:30.129 --> 00:49:33.766
<v Hendrik>Und ja, bis zum nächsten Mal, würde ich sagen, Clemens. Ja, sehr gerne.

00:49:33.766 --> 00:49:35.136
<v Clemens>Ja, sehr gerne. Viel Spaß noch. Bis zum nächsten Mal.