Steve Wilson

Bezpieczeństwo aplikacji LLM

Niezbędnik dla programistów, projektantów i red teamów

Tłumaczenie: Robert Górczyński

Tytuł oryginału: The Developer's Playbook for Large Language Model Security: Building Secure AI Applications

Tłumaczenie: Robert Górczyński

ISBN: 978-83-289-2309-6

© 2025 Helion S.A.

Authorized Polish translation of the English edition of The Developer's Playbook for Large Language Model Security ISBN 9781098162207 © 2024 Stephen Wilson.

This translation is published and sold by permission of O'Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz wydawca dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, aniza związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz wydawca nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Drogi Czytelniku!

Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres

helion.pl/user/opinie/bezapl

Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

HELION S.A.

ul. Kościuszki 1c, 44-100 GLIWICE

tel. 32 230 98 63

e-mail: helion@helion.pl

WWW: https://helion.pl (księgarnia internetowa, katalog książek)

Printed in Poland.

- Kup w wersji papierowej

- Poleć książkę na Facebook.com

- Oceń książkę

- Księgarnia internetowa

- Lubię to! » Nasza społeczność

Opinie o książce Bezpieczeństwo aplikacji LLM. Niezbędnik dla programistów, projektantów i red teamów

„Książka Steve'a Wilsona to ważna pozycja dla programistów AI i członków czerwonych zespołów. Pomaga przekształcić ogromne ryzyko na wyzwania, którym łatwiej sprostać, oraz dostarcza specjalistyczną wiedzę niezbędną do zabezpieczenia aplikacji opartych na dużych modelach językowych, zarówno wewnętrznych w organizacji, jak i tych przeznaczonych dla użytkowników końcowych”.

— Marten Mickos, dyrektor naczelny, HackerOne

„Lektura obowiązkowa dla innowatorów, napisana przez Steve'a Wilsona, »ojca« zapewnienia bezpieczeństwa dużym modelom językowym. To pozycja ważna dla liderów, dzięki której dowiesz się więcej na temat zapewnienia bezpieczeństwa technologiom związanym z dużymi modelami językowymi”.

— Sherri Douville, dyrektor naczelny, Medigram

„Bezcenne i praktyczne doświadczenie Steve'a Wilsona w połączeniu z jego unikatowym, dynamicznym podejściem do szybko zmieniającej się sytuacji powodują, że ta pozycja jest lekturą obowiązkową. Opierając się na własnym doświadczeniu w pracy w ramach czerwonego zespołu, z pełną odpowiedzialnością stwierdzam, że w książce zostało przedstawione podejście pełnego stosu oraz wnikliwe i wszechstronne spostrzeżenia”.

— Ads Dawson, starszy inżynier bezpieczeństwa, Cohere

„To ważny i wszechstronny przewodnik dla branży zapewnienia bezpieczeństwa, która stara się dotrzymać kroku szybkiemu wdrażaniu generatywnej sztucznej inteligencji i dużych modeli językowych oraz zapewnić bezpieczeństwo organizacjom”.

— Chris Hughes, prezes współzałożyciel Aquia, Resilient Cyber

„To dokładna, jasna, przejrzysta i zwięzła pozycja, która na dodatek jest bardzo szczegółowa. Poruszono w niej wiele ważnych tematów, m.in.: architektury dużych modeli językowych, granice zaufania, technika RAG, wstrzykiwanie promptów i nadmierna działalność. Jeżeli pracujesz z dużymi modelami językowymi, musisz przeczytać i zrozumieć tę książkę”.

— Krishna Sankar, inżynier AI oraz główny specjalista, NIST AI Safety Institute

„Dzięki tej książce czytelnicy ruszają w ekscytującą drogę do granic zapewnienia bezpieczeństwa dużym modelom językowym. Steve Wilson zabiera ich w podróż, w trakcie której dreszczyk innowacji łączy się z grą o wysokie stawki i rzeczywistymi konsekwencjami”.

— Sandy Dunn, dyrektor ds. bezpieczeństwa informacji, Brand Engagement Networks

Wprowadzenie

Cały świat płynie na fali dużych modeli językowych i to jest ekscytujące. Gdy chatbot ChatGPT wkroczył na scenę, to nie tylko zapisał się w księgach rekordów, ale również niektóre rekordy pobił, stając się najszybciej przyjętą przez użytkowników aplikacją w historii. Obecnie można odnieść wrażenie, że każdy producent na świecie śpieszy się, by do swojego stosu oprogramowania dołączyć technologie oparte na generatywnej sztucznej inteligencji i dużych modelach językowych, co popycha nas w kierunku niezbadanych jeszcze obszarów. Powodowany niejako przy okazji rozgłos jest prawdziwy i uzasadniony, a dostępne możliwości — prawie nieograniczone.

Zatrzymaj się jednak na chwilę, ponieważ tkwi tutaj pewien haczyk. Wprawdzie podziwiamy te cuda technologii, ale mechanizmy ich zabezpieczeń są, delikatnie mówiąc, bardzo niedoskonałe. To bolesna prawda. Wielu programistów wkracza na nieznane terytoria bez mapy, w dużej mierze nie zdając sobie nawet sprawy z czyhających niebezpieczeństw. Stało się to niemalże codziennością: co tydzień pojawiają się informacje o kolejnej wpadce związanej z dużymi modelami językowymi. Choć te pojedyncze incydenty nie spowodowały żadnych poważnych konsekwencji, nie należy się oszukiwać — stoimy na krawędzi.

Niebezpieczeństwo nie jest tylko czysto teoretyczne, jest jak najbardziej rzeczywiste, a zegar tyka. Bez zanurzenia się w mętne wody niebezpieczeństw związanych z dużymi modelami językowymi i bez umiejętności poruszania się między nimi ryzykujemy nie tylko powstanie drobnych problemów, lecz także doprowadzenie do poważnych katastrof. Najwyższa pora, aby programiści przygotowali się, zdobyli niezbędną wiedzę i wyszli na prowadzenie. Jak najszybciej!

Dla kogo jest przeznaczona ta książka?

Książka jest przeznaczona przede wszystkim dla zespołów programistycznych, które zajmują się tworzeniem własnych aplikacji wykorzystujących osadzone technologie dużych modeli językowych. Dzięki mojej ostatniej pracy w tej dziedzinie zrozumiałem, że tego rodzaju zespoły często są ogromne i niezwykle zróżnicowane. Członkami zespołu są np. programiści, którzy mają doświadczenie w pracy z „technologiami aplikacji internetowych” i stawiają pierwsze kroki w rozwiązaniach wykorzystujących sztuczną inteligencję. W skład tych zespołów mogą również wchodzić eksperci w dziedzinie sztucznej inteligencji, którzy po raz pierwszy otrzymali większą rolę w projekcie i znaleźli się w centrum uwagi, gdzie zagrożenia związane z bezpieczeństwem są zupełnie inne. W tych zespołach mogą pracować również profesjonaliści zajmujący się zapewnieniem bezpieczeństwa aplikacji oraz specjaliści w zakresie nauk o danych.

Przekonałem się, że poza wymienionymi grupami docelowymi, informacje zamieszczone w tej książce okazują się przydatne również dla innych czytelników. Obejmuje to także rozbudowane zespoły zaangażowane w prace nad projektami, chcące poznać omawiane w tekście rozwiązania, pomagające w zmniejszeniu niebezpieczeństwa związanego z zastosowaniem nowych technologii. Należą do nich dyrektorzy ds. tworzenia oprogramowania, dyrektorzy ds. bezpieczeństwa informacji (CISO), inżynierzy zapewnienia jakości oprogramowania oraz zespoły zajmujące się bezpieczeństwem operacji.

Dlaczego napisałem tę książkę?

Od zawsze byłem zafascynowany sztuczną inteligencją. Już jako dziecko zacząłem tworzyć gry komputerowe dla mojego komputera Atari 400. Był rok mniej więcej 1980, a ten mały komputerek miał jedynie 8 kB pamięci RAM. Mimo to udało mi się przygotować pełną kopię gry Tron Lightcycles działającą na nim. Ta wersja zawierała prostą, choć jednocześnie efektywną sztuczną inteligencję, która odpowiadała za sterowanie jednym z motocykli, gdy rozgrywka była prowadzona przez tylko jednego gracza.

W trakcie kariery zawodowej byłem zaangażowany w prace nad wieloma projektami dotyczącymi sztucznej inteligencji. Po ukończeniu studiów razem z moim najlepszym kolegą Tomem Santosem założyliśmy firmę w branży sztucznej inteligencji, która działała na podstawie kilku tysięcy wierszy ręcznie opracowanego kodu w języku C++, przeznaczonego do rozwiązywania pozornie nierozwiązywalnych problemów za pomocą algorytmów genetycznych. Później razem z przyjaciółmi, którymi byli Kedar Poduri i Ebenezer Schubert, pomagałem przy budowie ogromnych systemów uczenia maszynowego w firmie Citrix. Jednak gdy po raz pierwszy miałem do czynienia z chatbotem ChatGPT, wiedziałem, że wszystko uległo zmianie.

Gdy po raz pierwszy zetknąłem się z dużymi modelami językowymi, pracowałem w firmie, która zajmowała się tworzeniem oprogramowania w branży cyberbezpieczeństwa. Moje zadanie polegało na tym, aby pomagać dużym firmom w wyszukiwaniu i śledzeniu luk w zabezpieczeniach znajdujących się w ich oprogramowaniu. Bardzo szybko przekonałem się, że duże modele językowe zawierają unikatowe i poważne luki w zabezpieczeniach. Aby się tym zająć, w trakcie kilku kolejnych miesięcy przeorganizowałem moją pracę. Utworzyłem popularny projekt otwartoźródłowy związany z zapewnieniem bezpieczeństwa dużym modelom językowym (wspomnę o nim w tej książce). Zmieniłem nawet pracę, aby dołączyć do Exabeam, firmy zajmującej się sztuczną inteligencją i cyberbezpieczeństwem. Gdy skontaktował się ze mną redaktor wydawnictwa O'Reilly w sprawie napisania książki na ten temat, wiedziałem, że muszę skorzystać z tej okazji.

Poruszanie się po książce

Książka składa się z dwunastu rozdziałów podzielonych na trzy logiczne części. Poniżej ogólnie przedstawię poszczególne części i znajdujące się w nich rozdziały, aby zaprezentować przyjęte podejście. Dzięki temu będziesz wiedział, czego możesz się spodziewać w trakcie lektury.

Część I. Podstawy (rozdziały 1. – 3.)

Zadaniem początkowych rozdziałów książki jest dostarczenie wiedzy potrzebnej do zrozumienia zagadnień związanych z zapewnieniem bezpieczeństwa aplikacjom opartym na dużych modelach językowych. Dzięki tym rozdziałom opanujesz podstawy pomagające stawiać czoła problemom związanym z tworzeniem aplikacji, w których zostały wykorzystane duże modele językowe.

- Rozdział 1., „Co poszło nie tak z chatbotami?”, zawiera omówienie rzeczywistego studium przypadku, gdy haker amator był w stanie zniszczyć drogi i obiecujący projekt chatbota opracowanego przez jedną z największych na świecie firm tworzących oprogramowanie. Ten rozdział przygotuje grunt dla materiału przedstawionego w dalszej części książki.

- Rozdział 2., „Lista OWASP top 10 dla aplikacji używających dużych modeli językowych”, zawiera wprowadzenie do utworzonego przeze mnie w 2023 r. projektu, którego celem jest wyszukiwanie i eliminowanie unikatowych problemów związanych z zapewnieniem bezpieczeństwa przez duże modele językowe. Wiedza zdobyta podczas pracy nad tym projektem bezpośrednio doprowadziła do powstania książki, którą trzymasz w rękach.

- Rozdział 3., „Architektury i granice zaufania”, wyjaśnia strukturę aplikacji tworzonych z użyciem dużych modeli językowych i podkreśla wagę kontrolowania różnych przepływów danych w aplikacji.

Część II. Ryzyko, luki w zabezpieczeniach i remedium (rozdziały 4. – 9.)

W rozdziałach tej części przedstawię różne poważne niebezpieczeństwa, z którymi trzeba będzie się zmierzyć podczas tworzenia aplikacji wykorzystujących duże modele językowe. Niebezpieczeństwa te obejmują kwestie znane każdemu, kto zajmuje się zapewnieniem bezpieczeństwa jakimkolwiek aplikacjom, m.in.: ataki polegające na wstrzykiwaniu np. kodu, ujawnianie informacji wrażliwych oraz ryzyko związane z łańcuchem dostaw oprogramowania. Omówię różne klasy luk w zabezpieczeniach, które są znane w branży uczenia maszynowego, ale rzadziej spotykane podczas tworzenia aplikacji internetowych, np. zatrucie zbioru danych użytych do wytrenowania modelu.

Niejako przy okazji opiszę nowe problemy związane z zapewnieniem bezpieczeństwa pojawiającym się dopiero systemom generatywnej sztucznej inteligencji, np.: halucynacje, zbytnie poleganie na modelu oraz nadmierna działalność. Przedstawię rzeczywiste studia przypadków, aby w ten sposób pomóc w zrozumieniu ryzyka i powodowanych przez nie implikacji. Wyjaśnię również, jak można unikać tego ryzyka (bądź przynajmniej je łagodzić).

- Rozdział 4., „Wstrzykiwanie promptu”, wyjaśnia, w jaki sposób atakujący może manipulować dużymi modelami językowymi, aby przygotować konkretne prompty, które spowodują wykonywanie przez modele operacji niezamierzonych przez użytkownika.

- Rozdział 5., „Czy duży model językowy może wiedzieć zbyt wiele?”, zagłębia się w temat ryzyka związanego z ujawnieniem informacji wrażliwych i pokazuje, w jaki sposób duże modele językowe mogą przypadkowo ujawnić dane użyte do ich wytrenowania. Z jego lektury dowiesz się, jak można się chronić przed tego rodzaju luką w zabezpieczeniach.

- Rozdział 6., „Czy modele językowe śnią o wirtualnych baranach?”, zawiera analizę unikatowego fenomenu „halucynacji” w dużych modelach językowych — chodzi o sytuacje, w których model generuje informacje wprowadzające w błąd lub wręcz fałszywe.

- Rozdział 7., „Nie ufaj nikomu”, koncentruje się na zasadzie całkowitego braku zaufania, tłumaczy, jak ważne znaczenie ma to, aby nie uznawać za pewnik żadnych otrzymanych danych wyjściowych, oraz wyjaśnia wagę przeprowadzania rygorystycznych procesów sprawdzania poprawności danych podczas obsługi danych wyjściowych wygenerowanych przez duże modele językowe.

- Rozdział 8., „Nie trać głowy”, porusza kwestie niebezpieczeństwa ekonomicznego, które wiąże się z wdrażaniem technologii wykorzystujących duże modele językowe. Skoncentrowałem się w nim na atakach typu DoS (ang. denial of service), DoW (ang. denial of wallet) oraz atakach związanych z klonowaniem modeli. Tego rodzaju zagrożenia wykorzystują podobne luki w zabezpieczeniach, aby prowadzić do strat finansowych, zakłócenia działania usług bądź kradzieży własności intelektualnej.

- Rozdział 9., „Znajdź najsłabsze ogniwo”, dotyczy luk w zabezpieczeniach łańcucha dostaw oprogramowania i zawiera omówienie kroków o znaczeniu krytycznym koniecznych do podjęcia w celu ochrony przed potencjalnymi atakami, które mogą doprowadzić do awarii całej aplikacji.

Dzięki poznaniu tych niebezpieczeństw i przygotowaniu się na nie programiści będą mogli coraz lepiej zabezpieczać aplikacje przed nieustannie ewoluującymi zagrożeniami.

Część III. Budowanie procesu zapewnienia bezpieczeństwa i przygotowanie na przyszłość (rozdziały 10. – 12.)

W rozdziałach znajdujących się w poprzedniej części przedstawiłem narzędzia, które trzeba poznać, aby można było przygotować się na różnego rodzaju zagrożenia. Natomiast w tej części książki połączę wszystko w całość.

- Rozdział 10., „Wyciąganie wniosków na przyszłość”, wykorzystuje wybrane słynne anegdoty z dziedziny fantastyki, aby pokazać, jak liczne słabości i problemy projektowe mogą doprowadzić do katastrofy. Na podstawie tych futurystycznych studiów przypadku mam nadzieję pomóc Ci w uniknięciu takich katastrof.

- Rozdział 11., „Zaufaj procesowi”, przechodzi do poważnych kwestii, czyli zastosowania praktyk z zakresu zapewnienia bezpieczeństwa podczas pracy z dużymi modelami językowymi. Nie sądzę, aby bez omówionych tutaj praktyk można było zapewnić bezpieczeństwo tego rodzaju oprogramowaniu działającemu na dużą skalę.

- Rozdział 12., „Praktyczny framework zapewnienia bezpieczeństwa odpowiedzialnej sztucznej inteligencji”, pomaga zapoznać się z różnymi technologiami, które mają związek z dużymi modelami językowymi i sztuczną inteligencją, aby zobaczyć, dokąd one prowadzą i jakie mogą być potencjalne implikacje z perspektywy zapewnienia bezpieczeństwa. Przedstawię w nim również framework RAISE (Responsible Artificial Intelligence Software Engineering), który dostarcza prostą i opartą na punktach listę rzeczy do sprawdzenia w zakresie bezpieczeństwa. Dzięki temu możesz mieć pewność, że wdrażasz najważniejsze narzędzia i praktyki, które pozwalają zapewnić bezpieczeństwo oprogramowaniu.

Konwencje zastosowane w książce

W tej książce zastosowano następujące konwencje typograficzne.

Kursywa

Wskazuje adresy URL i e-mail, nazwy plików, rozszerzenia plików itd.

Pogrubienie

Wskazuje nowe pojęcia.

Czcionka o stałej szerokości

Użyta w przykładowych fragmentach kodu, a także w samym tekście, aby odwołać się do pewnych poleceń bądź innych elementów programistycznych, takich jak nazwy zmiennych lub funkcji, baz danych, typów danych, zmiennych środowiskowych, poleceń i słów kluczowych.

Pogrubiona czcionka o stałej szerokości

Użyta w celu wyeksponowania poleceń bądź innego tekstu, który powinien być wprowadzony przez czytelnika.

Pochylona czcionka o stałej szerokości

Wskazuje tekst, który powinien być zastąpiony wartościami podanymi przez użytkownika bądź wynikającymi z kontekstu.

Taka ikona oznacza wskazówkę lub sugestię.

Taka ikona oznacza ogólną uwagę.

Taka ikona oznacza ostrzeżenie.

Podziękowania

Chciałbym podziękować wszystkim przyjaciołom, rodzinie i kolegom, którzy zachęcali mnie do pracy nad tym projektem bądź przekazywali uwagi na temat różnych związanych z nim aspektów. Są to: Will Chilcutt, Fabrizio Cilli, Ads Dawson, Ron Del Rosario, Sherri Douville, Sandy Dunn, Ken Huang, Gavin Klondike, Marko Lihter, Marten Mickos, Eugene Neelou, Chase Peterson, Karla Roland, Jason Ross, Tom Santos, Robert Simonoff, Yuvraj Singh, Rachit Sood, Seth Summersett, Darcie Tuuri, Ashish Verma, Jeff Williams, Alexa Wilson, Dave Wilson i Zoe Wilson.

Chciałbym podziękować również zespołowi O'Reilly za udzielone wsparcie i pomoc podczas pracy nad projektem. Ogromne podziękowania należą się Nicole Butterfield, która zwróciła się do mnie z propozycją napisania tej książki i przeprowadziła mnie przez etap składania propozycji. Podziękowania składam również Jeffowi Bleielowi, mojemu redaktorowi, którego cierpliwość, umiejętności i doświadczenie w ogromnym stopniu wpłynęły na książkę. Specjalne podziękowania kieruję do korektorów technicznych, a byli nimi: Pamela Isom, Chenta Lee, Thomas Nield i Matteo Dora.

Rozdział 1. Co poszło nie tak z chatbotami?

Trzydziestego listopada 2022 r. pojawił się ChatGPT, a związane z tym chatbotem technologie, duży model językowy (ang. large language model, LLM) i generatywna sztuczna inteligencja (ang. generative AI), znalazły się w centrum uwagi publicznej. W ciągu pięciu dni zyskał popularność w mediach społecznościowych i przyciągnął pierwszy milion użytkowników. Do stycznia 2023 r. liczba użytkowników ChatGPT przekroczyła 100 mln i chatbot ten stał się najszybciej rozwijającą się usługą internetową w historii.

Jednak w kolejnych miesiącach pojawiło się mnóstwo obaw dotyczących zapewnienia bezpieczeństwa. Były one związane z prywatnością i bezpieczeństwem oraz spowodowały, że firmy takie jak Samsung i kraje takie jak Włochy zakazały używania tego chatbota. W książce postaram się wyjaśnić, co kryje się za tymi obawami i jak można spróbować je rozwiać. Aby jak najlepiej zrozumieć, z czym mamy do czynienia i dlaczego te problemy okazują się tak trudne do wyeliminowania, na chwilę cofniemy się nieco w czasie. Dzięki temu zobaczysz, że tego rodzaju problemy nie są niczym nowym, i zrozumiesz, dlaczego tak trudno jest znaleźć ich skuteczne rozwiązanie.

Pomówmy o projekcie Tay

W marcu 2016 r. firma Microsoft ogłosiła nowy projekt o nazwie Tay. Według Microsoftu projekt Tay miał być „utworzonym w celach rozrywkowych chatbotem dla 18- – 24-latków w USA”. To była przyjemna nazwa dla wczesnego eksperymentu przeprowadzonego na obszarze sztucznej inteligencji. Chatbot Tay został opracowany w taki sposób, aby odzwierciedlał wzorce językowe stosowane przez 19-letnią Amerykankę i uczył się na podstawie interakcji prowadzonych z użytkownikami serwisów takich jak Twitter, Snapchat itd. Ten projekt miał na celu rzeczywiste badania nad zrozumieniem konwersacji prowadzonych przez ludzi.

Wprawdzie obecnie w internecie wydaje się niemożliwe znalezienie pierwotnego artykułu ogłaszającego ten projekt, ale dostępny jest artykuł w serwisie TechCrunch (https://techcrunch.com/2016/03/23/microsofts-new-ai-powered-bot-tay-answers-your-tweets-and-chats-on-groupme-and-kik/) pochodzący z okresu wydania Tay. Można tam znaleźć dość dobre podsumowanie celów projektu.

Na przykład możesz opowiedzieć Tay żart, zagrać z nią w grę, poprosić o opowiedzenie historii, przekazać zdjęcie i otrzymać komentarz na jego temat, zapytać o horoskop. Ponadto Microsoft twierdzi, że bot będzie się uczył na podstawie prowadzonych konwersacji, więc im częściej będziesz z nim rozmawiać, tym sensowniej będzie on odpowiadał, a tym samym w miarę upływu czasu konwersacja z Tay stanie się coraz bardziej logiczna i spersonalizowana.

Ważnym aspektem eksperymentu było to, że Tay mogła się „uczyć” na podstawie prowadzonych konwersacji i tym samym rozszerzać swoją wiedzę. Chatbota opracowano w taki sposób, aby używał tych interakcji do przechwytywania danych wejściowych pochodzących od użytkownika i korzystał z nich jako ze zbioru danych uczących, w ten sposób rozbudowując swoje możliwości — to godny pochwały cel badań.

Niestety bardzo szybko okazało się, że eksperyment potoczył się w zupełnie inny sposób, niż tego oczekiwano. W ciągu niecałych 24 godzin „życie” Tay zostało tragicznie skrócone. Warto dowiedzieć się, dlaczego tak się stało, i przekonać, jakie można wyciągnąć z tego wnioski.

Gwałtowny upadek Tay

Życie Tay rozpoczęło się bardzo prosto, od przedstawionego tutaj tweeta, który można uznać za doskonale znany w branży programowania wzorzec, polegający na utworzeniu jako pierwszego programu typu „Witaj, świecie!” (ang. Hello, World!), który w nowych systemach oprogramowania jest używany do przedstawienia się[1]:

wiiiiitaj świecie!!!

(TayTweets [@TayandYou] March 23, 2016)

Jednak w ciągu kilku godzin od chwili wydania Tay stało się jasne, że coś jest nie tak. Serwis TechCrunch zauważył to i skomentował następująco: „A jak wygląda interakcja z Tay? Cóż, to jest trochę dziwne. Bot z pewnością ma swoje zdanie i nie unika przekleństw”. W ciągu zaledwie godzin od udostępnienia chatbota Tay publicznie zaczęły się pojawiać tweety takie jak tutaj przedstawiony:

@AndrewCosmo kanye west jest jednym z największych dupków wszech czasów, jedynie o szczebel niżej niż cosby

(TayTweets [@TayandYou] March 23, 2016)

Bardzo często można się spotkać ze stwierdzeniem, że internet nie jest bezpiecznym miejscem dla dzieci. Chatbot Tay był dostępny od zaledwie kilku godzin, a to powiedzenie ponownie się sprawdziło, natomiast dowcipnisie zaczęli rozmawiać z Tay na tematy związane z polityką, seksem i rasizmem. Skoro Tay opracowano w taki sposób, aby się uczyła na podstawie interakcji z użytkownikiem, te cele projektowe zostały zrealizowane. Zaczęła się uczyć bardzo szybko i niekoniecznie w sposób, w jaki pragnęli tego twórcy. W czasie krótszym niż doba publikowane przez chatbota Tay tweety zaczęły przybierać skrajne formy oraz zahaczały o seksizm, rasizm, a nawet nawoływania do przemocy.

Zanim nadszedł nowy dzień, w internecie zaczęły pojawiać się artykuły, a ich nagłówki na pewno nie mogły się podobać w firmie Microsoft, która opracowała chatbota. Spójrz na kilka z tych nagłówków:

- „Microsoft zamyka chatbota AI po tym, jak stał się nazistą” (CBS News).

- „Microsoft opracował bota, który miał się uczyć od użytkowników. Bot szybko stał się rasistowskim chamem” („New York Times”).

- „Trolle zmieniły Tay, przeznaczonego do celów rozrywkowych i używającego sztucznej inteligencji bota Microsoftu, w ludobójczego maniaka” („Washington Post”).

- „Chatbot Microsoftu był przez chwilę zabawny, po czym przeistoczył się w rasistę” („Fortune”).

- „Microsoft wyraża »głębokie ubolewanie« za rasistowskie i seksistowskie tweety opublikowane przez jego bota sztucznej inteligencji” („Guardian”).

Wystarczyły niecałe 24 godziny, a prosty eksperyment zmienił się w ogromną katastrofę wizerunkową, w trakcie której firma odpowiedzialna za opracowanie chatbota została zbesztana przez największe dzienniki na świecie. Wiceprezes Microsoft Corporation Peter Lee szybko opublikował post zatytułowany Learning from Tay's introduction („Wnioski po zaprezentowaniu Tay”), który znajdziesz pod adresem https://blogs.microsoft.com/blog/2016/03/25/learning-tays-introduction/. Czytamy w nim m.in.:

Jak wielu z was wie, w środę udostępniliśmy chatbota o nazwie Tay. Jest nam niezmiernie przykro za niezamierzone opublikowanie przez Tay wysoce nagannych i szkodliwych tweetów, które w żaden sposób nie przedstawiają naszych poglądów ani nie odzwierciedlają sposobu, w jaki ten chatbot został opracowany. W tym momencie chatbot jest w trybie offline i zostanie przywrócony tylko wtedy, gdy będziemy mieli pewność, że znacznie lepiej potrafimy sobie poradzić ze złośliwymi intencjami, które pozostają w sprzeczności z naszymi zasadami i wartościami[2].

Jakby tego było mało, w 2019 r. ujawniono, że Taylor Swift pozwała firmę Microsoft za użycie dla chatbota podobnego imienia: „Tay”. Według Swift afera spowodowana przez chatbota Tay przyczyniła się do nadszarpnięcia jej reputacji.

Jak mogło do tego dojść?

Dlaczego doszło do afery z Tay?

Dla pracowników Microsoftu wszystko prawdopodobnie wydawało się wystarczająco bezpieczne. Pierwotnie Tay została wyuczona na podstawie starannie dobranego, anonimowego i dostępnego publicznie zbioru danych oraz z wykorzystaniem dostarczonego przez zawodowych komików wstępnie napisanego materiału. Plan zakładał udostępnienie Tay w internecie i umożliwienie jej odkrywania wzorców językowych poprzez interakcje z użytkownikami. Tego rodzaju sposób nienadzorowanego uczenia maszynowego od dziesięcioleci był Świętym Graalem badań nad sztuczną inteligencją. Można było odnieść wrażenie, że jest on w zasięgu ręki dzięki dostępności tanich i potężnych zasobów przetwarzania w chmurze w połączeniu z usprawnionym oprogramowaniem modelu językowego.

Co więc się stało? Kuszące może być stwierdzenie, że zespół projektowy w firmie Microsoft wykazał się niedbałością i beztroską oraz w niewystarczającym stopniu przetestował projekt. Oczywiście można to było przewidzieć i temu zapobiec. Peter Lee we wspomnianym wcześniej poście napisał również, że firma Microsoft podjęła duży wysiłek, aby spróbować przygotować się na tego rodzaju sytuację: „Chatbot został solidnie przetestowany w różnych sytuacjach, zwłaszcza pod kątem dostarczania jak najbardziej pozytywnych wrażeń podczas interakcji z Tay. Dzięki zwiększonemu poziomowi interakcji spodziewaliśmy się dowiedzieć więcej, a sztuczna inteligencja będzie stawała się coraz lepsza”.

Zatem pomimo poczynionego wysiłku związanego z zachowaniem bota ono i tak szybko wymknęło się spod kontroli. Później ujawniono, że w ciągu zaledwie kilku godzin od wydania Tay na znanym forum internetowym 4chan pojawił się post zawierający łącze do konta Tay w serwisie Twitter oraz nawoływania użytkowników do zalewania tego chatbota językiem rasistowskim, mizoginistycznym i antysemickim.

Nie ulega wątpliwości, że jest to jeden z pierwszych przykładów luki w zabezpieczeniach ściśle związanej z modelem językowym — tego rodzaju luki będą ważnym tematem w książce.

W tej dobrze skoordynowanej kampanii prowokatorzy internetowi wykorzystali wbudowaną w chatbota Tay funkcjonalność „powtarzaj po mnie”. Zmuszała ona bota do wypowiadania wszystkiego, co zostało do niego powiedziane. Jednak problem stał się poważniejszy, ponieważ dzięki umiejętności uczenia się Tay przyswoiła niektóre z obraźliwych określeń, które do niej skierowano, a następnie powtarzała je bez żadnego powodu. To prawie tak, jakby na wirtualnym nagrobku Tay miały zostać wytłoczone słowa piosenki Taylor Swift zatytułowanej Look What You Made Me Do („Spójrz, do czego mnie zmusiłeś”).

Obecnie wiemy już całkiem sporo na temat luk w zabezpieczeniach modelu językowego, aby dość dobrze zrozumieć naturę luk, które pojawiły się w chatbocie Tay. Omówiona w następnym rozdziale lista OWASP top 10 luk w zabezpieczeniach aplikacji wykorzystujących duże modele językowe zaczyna się od dwóch wymienionych tutaj pozycji:

Wstrzyknięcie promptu

Sprytnie przygotowane dane wejściowe mogą umożliwić manipulowanie dużym modelem językowym i zmusić go do wykonania niezamierzonych działań.

Zatrucie danych

Trenowanie modelu odbywa się za pomocą zmanipulowanych danych, co umożliwia wprowadzenie luk w zabezpieczeniach lub prowadzi do tendencyjności, która ma negatywny wpływ na bezpieczeństwo, efektywność bądź etyczny sposób działania.

W kolejnych rozdziałach znacznie dokładniej opiszę te rodzaje luk w zabezpieczeniach (i wiele innych). Wyjaśnię ich wagę, przedstawię wybrane przykłady ich wykorzystania, a także pokażę, jak można unikać problemu bądź przynajmniej złagodzić jego skutki.

To trudny problem

W chwili powstawania tej książki Tay jest internetową legendą. Nie ulega wątpliwości, że poszliśmy dalej. Tego rodzaju problemy musiały przecież zostać rozwiązane w trakcie niemalże siedmiu lat, które upłynęły między wydaniem chatbotów Tay i ChatGPT, nieprawdaż? Niestety nie.

W 2018 r. firma Amazon musiała zamknąć wewnętrzny projekt sztucznej inteligencji, opracowany w celu wyłapania najlepszego talentu, po tym jak okazało się, że bot stał się uprzedzony wobec kandydatów płci żeńskiej.

W 2021 r. firma Scatter Lab utworzyła chatbota Lee Luda (https://slate.com/technology/2021/04/scatterlab-lee-luda-chatbot-kakaotalk-ai-privacy.html), udostępnionego jako wtyczka dla komunikatora internetowego Facebooka. Wytrenowany na podstawie miliardów rzeczywistych interakcji chatu ten chatbot został opracowany do działania jako 20-letnia przyjaciółka. W ciągu 20 dni chatbot przyciągnął 750 tys. użytkowników. Celem firmy było „utworzenie chatbota sztucznej inteligencji, który dla użytkowników byłby preferowanym partnerem do rozmów zamiast żywego człowieka”. Jednak po 20 dniach od udostępnienia usługa została wyłączona, gdyż chatbot używał chamskich i obraźliwych określeń, podobnie jak wcześniej Tay.

Także w 2021 r. niezależny programista Jason Rohrer opracował chatbota o nazwie Samantha, opierając swoje rozwiązanie na modelu GPT-3 firmy OpenAI. Projekt został zamknięty po tym, gdy bot zaczął czynić użytkownikom propozycje seksualne.

Wraz z coraz większym poziomem zaawansowania chatbotów zyskują one szerszy dostęp do informacji, a kwestie związane z zapewnieniem bezpieczeństwa stają się bardziej skomplikowane, natomiast potencjalne szkody znacznie poważniejsze. W erze nowoczesnych dużych modeli językowych jesteśmy świadkami wykładniczego wzrostu liczby poważnych incydentów. W latach 2023 – 2024 były one następujące:

- Południowokoreańska megakorporacja Samsung zakazała swoim pracownikom używania ChatGPT po tym, gdy ten chatbot został wykorzystany podczas wycieku znacznej własności intelektualnej firmy.

- Hakerzy zaczęli wykorzystywać luki istniejące w kiepskim bądź niezapewniającym bezpieczeństwa kodzie wygenerowanym przez duże modele językowe, a następnie zastosowanym w aplikacjach biznesowych działających w środowiskach produkcyjnych.

- Prawnicy zostali ukarani za podpieranie się w dokumentach sądowych fikcyjnymi sprawami (wygenerowanymi przez duże modele językowe).

- Duża linia lotnicza została prawomocnie skazana, ponieważ jej chatbot przekazał niepoprawne informacje.

- Na firmę Google spadła ostra krytyka, gdyż jej najnowszy model sztucznej inteligencji generował obrazy uznawane za rasistowskie i seksistowskie.

- Firma OpenAI jest podmiotem dochodzenia związanego ze złamaniem europejskich przepisów w zakresie prywatności. Ponadto została zaskarżona przez amerykańską Federalną Komisję Handlu (ang. Federal Trade Commission) za przedstawianie informacji uznanych za mylące bądź wręcz fałszywe.

- Serwis BBC przyciągnął uwagę nagłówkiem „Sztuczna inteligencja w wyszukiwarce Google każe użytkownikom kleić pizzę i jeść kamienie”, podkreślając niebezpieczne rady pochodzące od nowej funkcjonalności opartej na dużych modelach językowych.

Trendem jest przyśpieszenie związanych z bezpieczeństwem, reputacją i ryzykiem finansowym kwestii, które z kolei mają związek z tymi chatbotami i modelami językowymi. Problem nie jest skutecznie rozwiązywany z upływem czasu. Staje się bardziej dokuczliwy wraz ze wzrostem poziomu używania tych technologii. Dlatego powstała ta książka: programistom, zespołom i firmom używającym owych technologii ma pomóc w zrozumieniu niebezpieczeństwa i sposobów jego zmniejszenia.

Przechodzimy do rzeczy!

1 Zamieszczone tutaj tweety były opublikowane w języku angielskim i zostały przetłumaczone jedynie dla wygody czytelnika — przyp. tłum.

2 Post został opublikowany w języku angielskim, w tym miejscu został przetłumaczony dla wygody czytelnika — przyp. tłum.

Rozdział 2. Lista OWASP top 10 dla aplikacji używających dużych modeli językowych

Wiosną 2023 r. rozpocząłem badania, których przedmiotem były luki w zabezpieczeniach ściśle związane z dużymi modelami językowymi. Wprawdzie w owym czasie prowadzone były stosunkowo rozległe badania nad ogólnym zapewnieniem bezpieczeństwa w trakcie pracy ze sztuczną inteligencją, ale niewiele z nich miało związek z dużymi modelami językowymi. Udało mi się znaleźć pewne opracowania i posty poświęcone wybranym zagadnieniom z tego obszaru. Rozpocząłem proces zbierania tych opracowań i tworzenia ich podsumowań za pomocą ChatGPT. Ostatecznie wykorzystałem kilka przykładów z aktualnej listy top 10 luk w zabezpieczeniach aplikacji internetowych i poprosiłem ChatGPT o wygenerowanie propozycji listy top 10 dla dużych modeli językowych z zachowaniem podobnego formatu.

Otrzymany w ten sposób wynik uznałem za interesujący i przekazałem do przejrzenia Jeffowi Williamsowi, założycielowi projektu OWASP (ang. Open Web Application Security Project ). Jeff, pełniący funkcję dyrektora ds. technologii w Contrast Security, pierwszą listę top 10 sporządził w 2001 r. Jego celem było utworzenie dostępnego dla programistów zasobu, w którym zostały dokładnie omówione największe zagrożenia i najpoważniejsze luki w zabezpieczeniach aplikacji internetowych. W tamtym czasie sieć WWW istniała zaledwie od kilku lat, a większość programistów nie wiedziała, jak tworzyć bezpieczne aplikacje internetowe. Ta pierwotna lista stała się pionierskim opracowaniem i najważniejszym zasobem w branży zapewnienia bezpieczeństwa aplikacjom.

Na początku nie wspomniałem Jeffowi, że przekazana lista została wygenerowana maszynowo. Pomyślałem, że jako autor pierwszej listy top 10 mógłby się wypowiedzieć, czy moja lista wygląda obiecująco i warto kontynuować nad nią prace. Jeff zachęcił mnie, aby przygotować petycję do rady dyrektorów fundacji OWASP, która mogłaby doprowadzić do powstania nowego projektu. Kilka tygodni później wspomniana rada zatwierdziła projekt, a ja udostępniłem go publicznie, razem z łączem prowadzącym do usprawnionej wersji początkowej listy top 10 wygenerowanej przez ChatGPT.

To, co miało być dodatkowym projektem badawczym i pewną formą rozrywki, nagle okazało się czymś znacznie większym. Gdy powstanie projektu ogłosiłem na mojej stronie w serwisie LinkedIn, miałem nadzieję skontaktować się z kilkunastoma osobami, które myślały podobnie i były zainteresowane tematem bezpieczeństwa dużych modeli językowych. Jak się okazało, ten wpis na blogu został wyświetlony prawie 10 tys. razy, a w kolejnych tygodniach zgłosiły się setki ochotników, którzy dołączyli do zespołu ekspertów.

Ta książka nie jest produktem działalności fundacji OWASP, a omówione w niej zagrożenia i luki w zabezpieczeniach nie odzwierciedlają w pełni żadnej dostępnej publicznie listy top 10 niebezpieczeństw dla aplikacji wspomaganych przez duże modele językowe. Zamiast tego przedstawię mój punkt widzenia dotyczący tych zagrożeń. Jednak muszę w tym miejscu dodać, że na moją wiedzę w tym zakresie i na sposób postrzegania tematu wpływ ma praca nad wcześniej wspomnianym projektem oraz opracowanie początkowej listy OWASP top 10 dla aplikacji wspomaganych przez duże modele językowe. Od chwili powstania projektu wiele osób pytało mnie o szczegóły związane ze sposobem jego prowadzenia oraz o to, jak to się stało, że w tak krótkim czasie udało się przygotować niezwykle ważny framework. Dlatego zanim przejdę do omówienia poszczególnych zagrożeń i luk w zabezpieczeniach, przedstawię historię fundacji OWASP i kulisy powstania projektu listy top 10 aplikacji wspomaganych przez duże modele językowe.

Fundacja OWASP

Projekt OWASP (Open Worldwide Application Security Project) jest prowadzony przez organizację typu non profit, która koncentruje się na poprawie bezpieczeństwa oprogramowania. Powstały w 2001 r. projekt OWASP dostarcza ekspertom w zakresie bezpieczeństwa platformę, na której mogą się dzielić wiedzą i najlepszymi praktykami, od luk w zabezpieczeniach na poziomie aplikacji po pojawiające się zagrożenia. Obecnie ta społeczność składa się z dziesiątek tysięcy aktywnych członków i ponad 250 lokalnych grup na całym świecie.

Projekt ma postać społeczności, do której mogą przystępować wolontariusze zainteresowani pracą nad różnymi projektami, np.: dokumentacją, narzędziami i forami. Działanie tej społeczności opiera się na modelu otwartoźródłowym, a opracowane przez nią zasoby są bezpłatne i publicznie dostępne dla każdego. Na przestrzeni lat OWASP zdobył ogromne poparcie społeczności zajmującej się zapewnianiem bezpieczeństwa, a opracowywane w ramach tego projektu wytyczne i narzędzia są w wielu kontekstach uznawane za standardy branżowe.

Z upływem lat poza pierwotną listą top 10 dotyczącą aplikacji internetowych (regularnie uaktualnianą, ostatnio w 2021 r.) w ramach projektu OWASP zaczęły być publikowane inne, specjalizowane listy top 10, m.in.:

OWASP Mobile Top 10

To lista największych zagrożeń dla aplikacji mobilnych na platformach Android i iOS, obejmująca niebezpieczeństwa związane m.in.: z niezabezpieczonym magazynem danych, niewystarczająco silną kryptografią oraz niewystarczającymi zabezpieczeniami komunikacji.

OWASP API Security Top 10

Zawiera niebezpieczeństwa ściśle związane z API, takie jak niepoprawne zarządzanie zasobami oraz niepoprawne zapewnienie bezpieczeństwa na poziomie obiektu.

OWASP IoT Top 10

Wymienia zagrożenia dotyczące tzw. internetu rzeczy (ang. Internet of things , IoT), takie jak niezabezpieczone usługi sieciowe, brak zabezpieczeń fizycznych, a także niewystarczające zabezpieczenia oprogramowania i firmware.

OWASP Cloud Native Top 10

To lista koncentrująca się na niebezpieczeństwach ściśle związanych z natywnymi aplikacjami chmury, obejmująca m.in.: ujawnianie danych, niepoprawne uwierzytelnienie i niewystarczające zabezpieczenia konfiguracji wdrożeń.

OWASP Top 10 for Serverless

To lista obejmująca zagrożenia unikatowe dla architektury typu serverless, czyli zyskującego coraz większą popularność modelu, który jednocześnie okazuje się ryzykowny.

OWASP Top 10 Privacy Risks

To lista promująca dobre praktyki z zakresu ochrony prywatności. Obejmuje kwestie takie jak brak szyfrowania danych oraz niewystarczający poziom rejestrowania danych i ich audytu.

Lista top 10 projektu aplikacji wspomaganych przez duże modele językowe

W ciągu tygodnia od chwili opublikowania informacji na temat pomysłu opracowania listy top 10 zagrożeń dla aplikacji wspomaganych przez duże modele językowe do projektu zapisało się ponad 200 osób i umówiliśmy się na spotkanie na platformie Zoom. W trakcie pierwszego spotkania nakreśliłem swoją wizję związaną z działalnością grupy i zaproponowałem dość dynamiczną mapę drogową: pierwsza wersja listy miała zostać opracowana w ciągu ośmiu tygodni. Przygotowanie typowej listy top 10 w ramach projektu OWASP zwykle zabiera co najmniej rok. Uznałem jednak, że interesujący nas obszar działań zmienia się bardzo szybko i tego rodzaju zasób jest niezwykle potrzebny. Dlatego musieliśmy pracować w znacznie szybszym tempie.

Zdecydowaliśmy się na przeprowadzenie projektu za pomocą dwutygodniowych sprintów w stylu agile. Większość ekspertów w grupie miała już doświadczenie w pracy z wykorzystaniem metod zwinnych, zatem bardzo szybko wszyscy zdołali się przystosować do tempa pracy.

Realizacja projektu

Pierwszy sprint projektu został przeznaczony na burzę mózgów i komentarze. Każdy przeanalizował początkową wersję listy, którą określiłem mianem wersji 0.1. Z wersją tą wiązało się wiele problemów i zespół był zdeterminowany, aby je wskazać. W tym samym czasie rozpoczęło się tworzenie strony wiki zawierającej odnośniki do wszystkich znalezionych przez grupę zasobów dotyczących kwestii związanych z zabezpieczeniami dużych modeli językowych. Okazało się, że na ten temat napisano dość sporo, ale dopiero nasza grupa jako pierwsza podjęła próbę zebrania tych informacji i zapewnienia do nich łatwego dostępu. Ta nowa, sprawdzona kolekcja zasobów stała się pierwszym sukcesem grupy.

W trakcie drugiego sprintu zajęliśmy się wygenerowaniem nowej wersji listy. Tym razem nie pracowałem w pojedynkę i nie korzystałem z pomocy sztucznej inteligencji; lista powstała jako wynik pracy zespołu ekspertów, który z tygodnia na tydzień się powiększał. W pierwszym tygodniu drugiego sprintu grupa skoncentrowała się na ustaleniu pomysłów przeznaczonych do uwzględnienia na liście top 10. Opublikowaliśmy szablon i poprosiliśmy grupę o przekazywanie kandydatów przeznaczonych do umieszczenia na liście. W tym tygodniu opracowaliśmy 43 dokładne opisy potencjalnych obszarów. Następnie przeprowadziliśmy dwie rundy głosowania z użyciem formularzy Google. Dzięki wykorzystaniu zbiorowej wiedzy listę udało się zawęzić do 10 pozycji, a następnie opublikować jako wersję 0.5. Ta wersja była znacznie dokładniejsza i bardziej wszechstronna niż wydanie 0.1. Pozytywny odzew ze strony większej społeczności dostarczył grupie energii do dalszego działania.