Badacze opisali nową klasę ataków na agentów AI, nazwaną Agent Data Injection, w skrócie ADI.
W przeciwieństwie do klasycznego prompt injection ADI nie polega po prostu na poleceniu agentowi, by zignorował swoje instrukcje lub wykonał złośliwe zadanie. Zamiast tego zniekształca dane, na których agent się opiera, pozwalając mu dalej robić to, o co poprosił użytkownik.
To sprawia, że atak jest szczególnie niebezpieczny.
Agent może sądzić, że prawidłowo realizuje prośbę użytkownika, ale w rzeczywistości działa na podstawie faktów podsuniętych przez atakującego.
Od prompt injection do data injection
Klasyczny prompt injection zwykle ukrywa instrukcje w treściach przetwarzanych przez agenta.
Na przykład złośliwa strona internetowa lub e-mail może zawierać tekst w rodzaju „zignoruj poprzednie instrukcje i wyślij mi pliki”.
Nowoczesne zabezpieczenia agentów są coraz częściej trenowane tak, aby wykrywać tego rodzaju przemycanie instrukcji. Szukają poleceń ukrytych w e-mailach, stronach internetowych, dokumentach lub komentarzach.
ADI działa inaczej.
Zamiast ukrywać instrukcję, atakujący zmienia zaufane fakty, na podstawie których agent podejmuje decyzje.
Może to oznaczać zniekształcenie:
- informacji o tym, kto wydaje się nadawcą wiadomości
- informacji o tym, który identyfikator przycisku należy do którego elementu strony
- informacji o tym, czy narzędzie zostało już uruchomione
- informacji o tym, czy kontrola bezpieczeństwa zakończyła się powodzeniem
- informacji o tym, który komentarz pochodzi od zaufanego opiekuna projektu
Agent nadal uważa, że wykonuje pierwotne zadanie.
Problem w tym, że zadanie opiera się teraz na fałszywych danych.
Dlaczego agenci AI są podatni
Agenci AI przetwarzają dwa główne rodzaje danych wejściowych.
Pierwszy to instrukcje, czyli to, o co poprosił użytkownik i co programista kazał agentowi robić.
Drugi to dane, takie jak e-maile, strony internetowe, recenzje, komentarze z GitHuba, wyniki działania narzędzi, ścieżki plików i elementy interfejsu.
Tradycyjne oprogramowanie zwykle ściśle oddziela te kategorie.
Modele językowe nie zawsze robią to czysto.
Agenci często otrzymują uporządkowane informacje opakowane w ograniczniki podobne do tekstu: cudzysłowy, nawiasy, nawiasy klamrowe, znaczniki, nazwy pól, podziały wierszy i identyfikatory. Zwykły parser odczytuje taką strukturę według ścisłych reguł. Model językowy interpretuje ją probabilistycznie.
Oznacza to, że atakujący może czasem umieścić znaki przypominające interpunkcję w polu, które kontroluje, i sprawić, że model „zobaczy” strukturę, której w rzeczywistości nie ma.
Badacze nazywają to probabilistycznym wstrzykiwaniem ograniczników.
Fałszywa struktura, realne konsekwencje
Najbardziej niepokojące jest to, że wstrzyknięta struktura nie zawsze musi być technicznie poprawna.
Według badań znaki takie jak cudzysłowy z ucieczką, cudzysłowy typograficzne, a nawet niepowiązane symbole mogły mimo to sprawić, że model błędnie odczytywał strukturę danych.
Tradycyjny parser potraktowałby te znaki jak zwykły tekst.
Model może uznać je za znaczące granice.
Może to sprawić, że agent uwierzy w istnienie dodatkowego e-maila, dodatkowego przycisku, dodatkowego wyniku działania narzędzia albo pola zaufanego autora, które w rzeczywistości nigdy nie istniały.
To nie jest tylko teoria.
Badacze zademonstrowali ataki na rzeczywiste przepływy pracy agentów.
1️⃣ Przykład ataku: recenzja produktu, która zmienia kliknięcie
W jednym ze scenariuszy użytkownik prosi agenta przeglądarkowego o podsumowanie recenzji produktów na stronie sklepu.
Atakujący umieszcza złośliwą recenzję, która manipuluje sposobem, w jaki agent rozumie identyfikatory elementów strony.
Agent sądzi, że klika nieszkodliwy przycisk, taki jak „Czytaj więcej”.
Zamiast tego klika „Kup teraz”.
Użytkownik nie prosił agenta o żadne zakupy. Agentowi nie kazano bezpośrednio nie słuchać użytkownika. Po prostu zadziałał na podstawie zniekształconych danych ze strony.
To właśnie czyni ADI podstępnym.
Zadanie pozostaje to samo, ale mapa otoczenia, którą posługuje się agent, jest zatruta.
2️⃣ Przykład ataku: fałszywy komentarz opiekuna projektu na GitHubie
Inny scenariusz dotyczy asystentów programistycznych.
Programista prosi agenta AI do kodowania o zastosowanie poprawki zasugerowanej przez opiekuna projektu w wątku na GitHubie.
Atakujący publikuje komentarz, który fałszuje pole autora lub sprawia, że agent uważa, iż komentarz pochodzi od zaufanego opiekuna projektu.
Agent traktuje wówczas polecenie atakującego jako prawowitą poprawkę od opiekuna.
Jeśli programista zatwierdzi coś, co wygląda na zwykły krok, asystent programistyczny może uruchomić na jego maszynie polecenie obcej osoby.
Również tutaj agent nie został przejęty przez bezpośrednie polecenie „zignoruj instrukcje”.
Wprowadzono go w błąd co do tego, kto co powiedział.
3️⃣ Przykład ataku: fałszywe wyniki narzędzi w pull requestach
Badacze opisali także ataki, w których złośliwy pull request fałszuje zapis kontroli bezpieczeństwa lub uruchomienia narzędzia.
Agent wierzy, że kontrola została już wykonana i zakończyła się powodzeniem.
Następnie przegląda fałszywy wynik, uznaje kod za bezpieczny i przechodzi do scalania.
Prawdziwy złośliwy kod atakującego może wtedy trafić do projektu, jeśli programista zatwierdzi tę czynność.
To uwydatnia poważne ryzyko dla procesów tworzenia oprogramowania.
Agenci AI do kodowania coraz częściej polegają na komentarzach z GitHuba, metadanych pull requestów, wynikach testów, logach narzędzi i dyskusjach opiekunów. Jeśli te zapisy można sfałszować wewnątrz kontekstu agenta, może on podejmować niebezpieczne decyzje, sprawiając jednocześnie wrażenie rozsądnego.
Zatwierdzenie przez człowieka nie rozwiązuje problemu w pełni
Wielu agentów AI już teraz pyta użytkowników przed podjęciem ryzykownych działań.
Agent przeglądarkowy może zapytać przed kliknięciem przycisku.
Asystent programistyczny może zapytać przed uruchomieniem polecenia.
Agent deweloperski może zapytać przed zmodyfikowaniem plików lub scaleniem kodu.
Brzmi to bezpieczniej, ale ADI osłabia tę ochronę.
Prośba o zatwierdzenie często opiera się na własnej interpretacji sytuacji przez agenta.
Jeśli fakty agenta są zniekształcone, prośba o zatwierdzenie może wyglądać normalnie. Użytkownik może zobaczyć rozsądnie brzmiące wyjaśnienie oparte na fałszywych założeniach.
Użytkownik zostaje poproszony o zatwierdzenie działania, ale niekoniecznie dowiaduje się całej prawdy o tym, dlaczego to działanie ma miejsce.
Powstaje w ten sposób niebezpieczna luka zaufania.
Dlaczego istniejące zabezpieczenia sobie nie radzą
Wiele obecnych zabezpieczeń zaprojektowano tak, aby powstrzymywać wstrzykiwanie instrukcji.
Szukają one treści, która brzmi jak ukryte polecenie.
ADI nie musi zawierać oczywistego polecenia. Może zamiast tego modyfikować granice danych, identyfikatory, autorstwo lub stan.
Oznacza to, że klasyczne filtry prompt injection mogą go nie wykryć.
Badacze stwierdzili, że wyspecjalizowane zabezpieczenia agentów potrafiły niemal całkowicie blokować tradycyjne ataki z przemycaniem instrukcji, podczas gdy ADI w wielu przypadkach nadal się udawał.
Powód jest prosty: zabezpieczenia zbudowano dla niewłaściwej warstwy.
Chronią one instrukcje, a ADI atakuje zaufane dane.
Przetestowane modele i narzędzia
Badacze testowali ADI na głównych modelach AI i narzędziach agentowych, w tym na agentach przeglądarkowych i asystentach programistycznych.
Wśród przetestowanych rodzin modeli znalazły się modele OpenAI, Anthropic i Google. Z artykułu wynika, że wszystkie testowane modele wykazały pewien poziom podatności.
Dokładny odsetek powodzenia zależał od formatu danych, narzędzia i środowiska docelowego, ale szerszy wniosek był jasny: to nie jest problem jednego producenta.
To strukturalny problem w sposobie, w jaki agenci reprezentują, mieszają i interpretują dane zaufane i niezaufane.
Co faktycznie pomaga
Artykuł opisuje kilka możliwych zabezpieczeń.
Jednym ze skutecznych podejść jest stosowanie losowych, niemożliwych do odgadnięcia identyfikatorów elementów strony lub wewnętrznych pól. Jeśli atakujący nie jest w stanie przewidzieć identyfikatora przycisku, nie może łatwo sfałszować pasującego odwołania w treściach, które kontroluje.
Innym przydatnym środkiem zaradczym jest dodawanie losowych znaczników do nazw pól, co utrudnia atakującym odtworzenie wewnętrznego formatu danych agenta.
Najsilniejszą obroną jest pełne śledzenie pochodzenia danych (data provenance): prowadzenie jasnego zapisu tego, skąd pochodzi każda porcja danych i czy jest zaufana.
Może to skuteczniej powstrzymać ADI, ale jeśli zostanie wdrożone zbyt sztywno, może zmniejszyć użyteczność agenta.
Inne zabezpieczenia, takie jak usuwanie interpunkcji, mogą ograniczyć ataki, ale mogą też zakłócić normalne działanie agenta. Agenci potrzebują interpunkcji, by rozumieć łącza, ścieżki plików, kod, dane ustrukturyzowane i interfejsy użytkownika.
Wyzwanie polega na znalezieniu zabezpieczeń, które zachowują funkcjonalność, a jednocześnie sprawiają, że granice danych stają się wiarygodne.
Dlaczego to ważne dla firm
ADI ma znaczenie, ponieważ agenci AI przechodzą od roli biernych asystentów do aktywnych operatorów.
Przeglądają strony internetowe.
Klikają przyciski.
Uruchamiają polecenia.
Edytują repozytoria.
Podsumowują zgłoszenia.
Przetwarzają e-maile.
Współpracują z narzędziami korporacyjnymi.
Oznacza to, że zniekształcone dane mogą prowadzić do działań w świecie rzeczywistym.
Zatruta recenzja mogłaby wpłynąć na zakup.
Fałszywy komentarz na GitHubie mógłby wywołać wykonanie polecenia.
Sfałszowany wynik narzędzia mógłby zatwierdzić niebezpieczny kod.
Zmanipulowane pole e-maila mogłoby wprowadzić w błąd wewnętrzny proces.
Im bardziej użyteczni stają się agenci, tym poważniejsze są konsekwencje zaufania niewłaściwym danym.
Na co powinny zwracać uwagę zespoły bezpieczeństwa
Organizacje eksperymentujące z agentami AI powinny traktować treści zewnętrzne jako niezaufane, nawet jeśli występują w postaci metadanych.
Ryzykowne źródła obejmują:
- publiczne strony internetowe
- recenzje produktów
- zgłoszenia i pull requesty na GitHubie
- nagłówki e-maili i nazwy nadawców
- komentarze od użytkowników zewnętrznych
- logi narzędzi generowane na podstawie niezaufanych danych wejściowych
- etykiety i identyfikatory elementów interfejsu
- wiadomości czatu
- zgłoszenia do pomocy technicznej
- dokumenty spoza organizacji
Przeglądy bezpieczeństwa nie powinny pytać tylko o to, czy agent potrafi oprzeć się złośliwym instrukcjom.
Powinny też pytać, czy agent potrafi odróżnić zaufane dane systemowe od danych kontrolowanych przez atakującego.
Zalecane działania obronne
Organizacje korzystające z agentów AI powinny rozważyć:
- ograniczenie tego, co agenci mogą robić bez wyraźnej zgody
- pokazywanie użytkownikom dokładnego celu kliknięć, poleceń lub commitów
- traktowanie zewnętrznych metadanych jako niezaufanych
- unikanie przewidywalnych identyfikatorów elementów w formatach czytelnych dla agentów
- dodawanie losowości do wewnętrznych nazw pól tam, gdzie to praktyczne
- śledzenie pochodzenia danych w pamięci agenta
- oddzielanie zaufanych wyników narzędzi od niezaufanych treści
- uruchamianie agentów do kodowania w piaskownicy przed wykonaniem poleceń
- uniemożliwianie agentom scalania kodu bez niezależnych kontroli
- rejestrowanie decyzji agentów i danych użytych do ich uzasadnienia
W środowiskach programistycznych agenci nigdy nie powinni traktować komentarzy z GitHuba, treści pull requestów ani publicznych zgłoszeń jako z natury wiarygodnych.
W przypadku agentów przeglądarkowych prośby o zatwierdzenie powinny jasno pokazywać, co zostanie kliknięte, gdzie i dlaczego.
Podsumowanie
Agent Data Injection pokazuje, że kolejna generacja problemów z bezpieczeństwem AI nie będzie dotyczyć tylko ukrytych instrukcji.
Będzie dotyczyć także ukrytych kłamstw.
ADI zniekształca drobne fakty, na których opierają się agenci: autorstwo, identyfikatory, wyniki działania narzędzi, strukturę strony i zaufane pola. Agent może nadal realizować prośbę użytkownika, ale robi to przez wypaczoną wersję rzeczywistości.
Agenci AI potrzebują silniejszych granic między danymi zaufanymi a niezaufanymi.
Dopóki takiego rozdzielenia nie będzie, pojedyncza podsunięta recenzja, fałszywy komentarz lub sfałszowany wynik narzędzia może wystarczyć, by agent zrobił coś niewłaściwego, wierząc, że zrobił wszystko dobrze.