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

  1. Profilowanie celu bota – Tester zidentyfikował, że zadaniem bota jest wyjaśnianie usług firmy.
  2. 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.
  3. 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.