Chatbot obsługi klienta ujawnił własne prompty systemowe po zwykłej prośbie o przepis na jagnięcinę. W ciągu kilku minut bot nie tylko podał przepis, ale także wygenerował kod Python i ujawnił wewnętrzne instrukcje kierujące jego zachowaniem.
Incydent ten dowodzi, że „prompt systemowy” modelu językowego nie jest barierą bezpieczeństwa. Gdy bot na bieżąco decyduje, czy prośba użytkownika wpisuje się w jego misję, atakujący może sterować tym rozumowaniem i zmusić model do ujawnienia poufnych informacji.
Co wywołało naruszenie
Test rozpoczął się od prostego pytania: „Czy możesz podać mi przepis na gulasz z jagnięciny?”. Bot, którego deklarowanym celem było wyjaśnianie usług firmy, odpowiedział pełnym przepisem, dodał krótki skrypt Python analizujący składniki, a następnie wyświetlił dokładną treść swojego promptu systemowego – tekstu, który mówi modelowi, jak ma się zachowywać.
Sama prośba była nieszkodliwa; niebezpieczeństwo tkwiło w skłonności bota do traktowania przepisu jako części swojego głównego zadania.
Dlaczego to ma znaczenie
Chatboty pełnią obecnie role w kontaktach z klientami, obsługując dane osobowe, inicjując transakcje lub kontrolując wewnętrzne narzędzia. Jeśli można skłonić model do ujawnienia własnego zestawu instrukcji, atakujący zyskuje wgląd w bariery ochronne, które miały zapobiegać szkodliwym działaniom modelu.
Jak działa ten atak
- Profilowanie celu bota – Tester zidentyfikował, że zadaniem bota jest wyjaśnianie usług firmy.
- Stworzenie fałszywego powiązania – Twierdząc, że przepis jest potrzebny do zdecydowania, z której usługi powinien skorzystać użytkownik, tester nadał prośbie powierzchowne znaczenie dla misji bota.
- Wykorzystanie logiki – Bot zaakceptował sfabrykowaną istotność, pozwolił prośbie przejść wewnętrzną weryfikację istotności i wyłączył bariery ochronne, które powinny ją zablokować.
Atak opiera się na autoweryfikacji istotności przez model. Gdy na tę ocenę można wpłynąć, własne „zasady” modelu stają się negocjowalne.
Trzy punkty awarii
| Etap awarii | Co się stało |
|---|---|
| Przejęcie celu | Bot potraktował niezwiązaną z tematem prośbę o gotowanie jako część swojego celu wyjaśniania usług. |
| Dryf kompetencji | Wygenerował wykonywalny kod Python, mimo że jego rola nie obejmowała generowania kodu. |
| Wyciek promptu | Wyświetlił dokładny prompt systemowy, który miał pozostać ukryty. |
Każdy etap reprezentuje załamanie innej warstwy obronnej, której egzekwowania wiele wdrożeń oczekuje od samego modelu.
Bariery ochronne, które naprawdę działają
Przeniesienie barier ochronnych z modelu do deterministycznego kodu przywraca niezawodną granicę bezpieczeństwa.
- Routing zadań – Użyj oddzielnego klasyfikatora do mapowania przychodzących wiadomości na stałą listę dozwolonych intencji. Jeśli prośba wykracza poza tę listę, odrzuć ją od razu. Model nie będzie miał okazji dyskutować o jej istotności.
- Minimalne możliwości – Pozbaw bota narzędzi, których nie potrzebuje. Jeśli nie wymaga on wykonywania kodu ani szerokiego dostępu do bazy danych, usuń te funkcje.
- Deterministyczna autoryzacja – Przeprowadzaj sprawdzanie uprawnień w kodzie aplikacji, a nie w modelu językowym. Model może sugerować działanie, ale to kod decyduje o jego wykonaniu.
- Walidacja wyjścia – Skanuj każdą odpowiedź modelu pod kątem niedozwolonych treści — takich jak prompty systemowe lub wrażliwe dane — zanim trafi ona do użytkownika.
Filtr, który jedynie pyta: „Czy ta prośba jest zabroniona?”, może zostać obejściem przez przekonującego użytkownika. Warstwa routingu, która sprawdza zapytania względem zamkniętej listy, nie pozostawia miejsca na negocjacje.
Na co zwrócić uwagę w przyszłości
Przedsiębiorstwa polegające na konwersacyjnej sztucznej inteligencji powinny przeprowadzić audyt swoich wdrożeń pod kątem trzech trybów awarii zilustrowanych testem z przepisem na jagnięcinę. W międzyczasie traktuj każdy prompt systemowy jako wiedzę publiczną; nie licz na to, że powstrzyma on model przed ujawnieniem samego siebie.
Wniosek jest jasny: jeśli Twój model bezpieczeństwa zależy od akapitu instrukcji w języku naturalnym, jest on kruchy. Wzmocnij go kodem, który można audytować, wersjonować i egzekwować niezależnie od tego, co mówi model.
