Zatruwanie pamięci: obrona pamięci agenta na produkcji
Jak bronić pamięci długotrwałej i bazy retrievalu produkcyjnego agenta przed zatruwaniem — walidacja, provenance, segmentacja i wygasanie, które nie dają fałszywym danym obciążać decyzji.
Definicja
Zatruwanie pamięci to atak, który uszkadza pamięć długotrwałą agenta, embeddingi lub bazę retrievalu, tak by fałszywa lub złośliwa treść była później przywoływana jako zaufany kontekst. Ponieważ ładunek trwa między sesjami, jedno zdarzenie zatrucia może obciążać wiele przyszłych decyzji.
Większość ataków na agentów trwa jeden przebieg. Zatruwanie pamięci trwa znacznie dłużej: sadzi w pamięci agenta coś, co jest przywoływane jako zaufany kontekst raz za razem — długo po tym, jak atakujący zniknął.
Dlaczego trwałość zmienia wszystko
Prompt injection jest groźny w danej chwili. Zatruwanie pamięci jest groźne w czasie. Gdy fałszywa lub złośliwa treść wyląduje w pamięci długotrwałej, embeddingach lub bazie retrievalu, agent traktuje ją jak ustalony kontekst w każdym przyszłym przebiegu, który ją pobierze. Jedno zdarzenie zatrucia staje się stałym obciążeniem.
To utrudnia wykrycie. Pierwotny atak może być sprzed tygodni; widzisz agenta, który subtelnie i konsekwentnie podejmuje konkretną złą decyzję — a przyczyna jest zakopana w bazie, do której rzadko zaglądasz.
Jak ataki trwałe wypadają na tle jednorazowego:
| Atak | Jak długo trwa | Gdzie mieszka | Kiedy zauważasz |
|---|---|---|---|
| Prompt injection | Jeden przebieg | Bieżący kontekst | Często natychmiast |
| Zatruwanie narzędzi | Do naprawy narzędzia | Warstwa narzędzi | Gdy wyniki wyglądają źle |
| Zatruwanie pamięci | Między sesjami, bezterminowo | Pamięć długotrwała lub baza RAG | Tygodnie później, o ile w ogóle |
Jak treść zostaje zatruta?
- Niewalidowane zapisy. Agent streszcza zatruty dokument i zapisuje streszczenie — z ładunkiem w środku.
- Skażenie bazy RAG. Dane pod wpływem atakującego trafiają do indeksu retrievalu i są później podawane jako trafny, zaufany kontekst.
- Zmanipulowane wyniki narzędzi, które agent uzna za warte zapamiętania, wnosząc zatruwanie narzędzi do trwałej pamięci.
Wspólny wątek: ścieżkę zapisu do pamięci traktuje się jako zaufaną, gdy powinna być niezaufana.
Obrona
- Waliduj przy zapisie. Stosuj wobec wszystkiego, co wchodzi do pamięci, taką samą uwagę jak wobec innego niezaufanego wejścia — nie zapisuj surowej, osiągalnej dla atakującego treści jako faktu.
- Segmentuj według poziomu zaufania. Trzymaj pamięć z niezaufanych źródeł osobno od zaufanej wiedzy, by retrieval nie awansował po cichu jednej w drugą.
- Wygaszaj i przeglądaj. Nadaj długo żyjącym wpisom czas życia; okresowo audytuj to, co agent postanowił zapamiętać.
- Przypisuj i traceuj. Zapisuj, skąd pochodzi każda pamięć. Gdy zachowanie dryfuje, pochodzenie pozwala znaleźć zatruty wpis — to pamięciowa strona obserwowalności.
- Minimalne uprawnienia do pamięci. Nie każdy agent czy narzędzie powinno móc pisać do pamięci długotrwałej.
Zasada
Pamięć to powierzchnia ataku, nie bezpieczne miejsce. Cokolwiek agent zapisze, może być później przywołane jako prawda, więc strzeż ścieżki zapisu równie starannie jak ścieżki odczytu. To jedno z cichszych ryzyk OWASP Top 10 dla aplikacji agentowych i jedno z najtrudniejszych do zauważenia, gdy już się zadomowi. Pojęcia są w słowniku.
Najczęstsze pytania
Dlaczego zatruwanie pamięci jest szczególnie groźne?
Bo trwa, w przeciwieństwie do większości ataków na agentów. Prompt injection dotyka jednego przebiegu i znika, gdy kontekst się wyczyści; zatruwanie pamięci sadzi treść, którą agent przywołuje jako zaufany kontekst w wielu późniejszych przebiegach, często długo po tym, jak atakujący odszedł. To zamienia jedno zdarzenie w stałe obciążenie: ten sam fałszywy fakt może po cichu wykrzywiać decyzje tygodniami. Trwałość czyni je też wyjątkowo trudnym do wykrycia, bo zanim zauważysz, że agent konsekwentnie podejmuje konkretną złą decyzję, pierwotny atak jest już zakopany w bazie, do której rzadko zaglądasz — wektorowej, indeksie embeddingów, tabeli pamięci długotrwałej. Inaczej niż przy żywym injection nie ma momentu ataku do złapania; jest tylko powolny dryf agenta, który po cichu nauczył się czegoś fałszywego i traktuje to jak ustaloną wiedzę.
Jak zatruta treść trafia do pamięci?
Przez każdy zapis do pamięci długotrwałej lub bazy retrievalu, który dzieje się bez walidacji. Najczęstsza ścieżka to niewalidowane streszczenie: agent czyta zatruty dokument, streszcza go i zapisuje streszczenie z ładunkiem wciąż w środku. Bazy retrieval-augmented generation są częstym celem, bo dane pod wpływem atakującego, które trafią do indeksu, są później podawane jako trafny, zaufany kontekst. Zmanipulowane wyniki narzędzi to kolejna droga — jeśli agent uzna spreparowaną odpowiedź za wartą zapamiętania, zatruwanie narzędzi staje się trwałe. Wspólny problem to ten, że ścieżkę zapisu do pamięci zwykle traktuje się jako zaufaną, choć powinna być niezaufana: cokolwiek dosięga wejścia agenta, tym samym może dosięgnąć jego pamięci. Wszystko, co agent może zapamiętać bez kontroli, staje się kandydatem na jutrzejszą złą decyzję.
Jaka jest podstawowa obrona?
Strzeż ścieżki zapisu z taką samą podejrzliwością, z jaką podchodzisz do każdego niezaufanego wejścia, bo to, co wchodzi do pamięci, wraca później jako fakt. Waliduj treść przy zapisie, zamiast przechowywać surowy, osiągalny dla atakującego tekst. Segmentuj pamięć według poziomu zaufania, by materiał z niezaufanych źródeł nie stał się po cichu zaufanym kontekstem podczas pobierania. Nadaj długo żyjącym wpisom termin ważności i przeglądaj je okresowo, by zatrucie nie żyło domyślnie wiecznie. Zapisuj pochodzenie każdego wpisu: gdy zachowanie dryfuje, wiedza o tym, skąd pochodzi pamięć, pozwala znaleźć i usunąć tę zatrutą. Na koniec stosuj minimalne uprawnienia do samej pamięci — nie każdy agent czy narzędzie powinno móc pisać do magazynu długotrwałego. Żadna z tych kontroli nie wykrywa sprytnego ładunku wprost; razem sprawiają, że nawet jeśli coś fałszywego wejdzie, jest ograniczone, przypisywalne i usuwalne, a nie trwałe i niewidzialne.
Jak wykryć pamięć, która już jest zatruta?
Wykrycie jest trudne właśnie dlatego, że objaw jest subtelny i opóźniony, więc polegasz na pochodzeniu i przeglądach, a nie na złapaniu ataku na żywo. Praktycznym sygnałem jest dryf zachowania: agent, który zaczął konsekwentnie podejmować konkretną złą decyzję albo powoływać się na konkretny fałszywy fakt, czego wcześniej nie robił. Gdy widzisz ten wzorzec, metadane pochodzenia czynią poszukiwanie wykonalnym — jeśli każdy wpis pamięci zapisuje źródło, znacznik czasu i przebieg, który go utworzył, możesz prześledzić złe zachowanie wstecz do wpisu, który je wprowadził. Okresowe audyty tego, co agent postanowił zapamiętać, łapią zatrucie, zanim narobi większych szkód, zwłaszcza w magazynach o wysokim zaufaniu. Niewyjaśnione, trwałe zmiany w osądzie agenta traktuj jako incydent integralności pamięci, nie zwykłą regresję jakości, i przejrzyj bazę retrievalu tak, jak przejrzałbyś logi po włamaniu.