Nullify

Usługi

Testy penetracyjne Audyty bezpieczeństwa Bezpieczeństwo aplikacji Szkolenia dla firm Bezpłatny skan ekspozycji

Menu

Blog O nas Kontakt
AI

Ujawnianie danych wrażliwych przez model AI (OWASP LLM02) - co model pamięta i co zdradzi

1 października 2026 · 8 min czytania

W skrócie: LLM02 Sensitive Information Disclosure to kategoria OWASP dla sytuacji, w której model ujawnia dane, które powinny zostać poufne - dane osobowe, finansowe, zdrowotne, poświadczenia albo wewnętrzne informacje firmy. W odróżnieniu od wycieków przez RAG, gdzie problem leży w kontroli dostępu do bazy wiedzy, tutaj źródłem bywa sam model: dane, na których był trenowany albo dostrajany, czasem da się z niego odtworzyć wprost.

Sanityzacja danych wejściowych i filtr odpowiedzi na wyjściu to dwie osobne warstwy - żadna z nich nie zastąpi drugiej.

To siódmy wpis z serii o liście OWASP dla aplikacji LLM, po wstrzykiwaniu promptu, wycieku promptu systemowego, bezpieczeństwie RAG, nadmiernej sprawczości agentów, niezaufanych odpowiedziach modelu i zatruwaniu danych.

Trzy różne źródła wycieku

Łatwo wrzucić wszystkie wycieki danych do jednego worka, ale OWASP rozróżnia je nieprzypadkowo - każde źródło wymaga innej obrony.

ŹródłoCo się dzieje
Dane treningowe lub dostrajająceModel "zapamiętuje" fragmenty danych, na których był uczony, i potrafi je odtworzyć na żądanie - to zjawisko nazywane regurgitacją
Prompt systemowy i kontekst rozmowyDane wklejone do promptu albo wprowadzone wcześniej w tej samej rozmowie wyciekają przez ekstrakcję promptu albo zwykłą nieuwagę modelu
Zewnętrzna baza wiedzy (RAG)Model ma dostęp do dokumentów, do których konkretny użytkownik nie powinien mieć wglądu - to temat, który szerzej opisaliśmy przy bezpieczeństwie RAG

Ten wpis skupia się na pierwszych dwóch źródłach - na tym, co model "wie" sam z siebie, nie na kontroli dostępu do zewnętrznej bazy wiedzy.

Regurgitacja - gdy model odtwarza dane treningowe

Duże modele językowe trenuje się na ogromnych zbiorach tekstu. Część z tego tekstu bywa zapamiętana niemal dosłownie - szczególnie fragmenty, które w danych treningowych pojawiły się wielokrotnie albo były wystarczająco charakterystyczne. Odpowiednio sformułowane zapytanie potrafi wydobyć taki fragment z powrotem, łącznie z danymi, które nigdy nie powinny trafić do użytkownika końcowego.

OWASP przywołuje tu udokumentowany przypadek ataku "Proof Pudding" (CVE-2019-20634), w którym ujawnione dane treningowe pozwoliły na odtworzenie modelu i obejście jego mechanizmów bezpieczeństwa. To pokazuje, że regurgitacja to nie tylko ryzyko prywatności pojedynczych danych - to także furtka do ataków na sam model.

Ryzyko rośnie przy dostrajaniu (fine-tuningu) modelu na danych firmowych. Jeśli do dostrajania trafiają dane klientów bez odpowiedniej anonimizacji, model może je później zwrócić komuś zupełnie innemu - niekoniecznie w wyniku ataku, czasem po prostu w trakcie zwykłej rozmowy.

Wyciek przez kontekst rozmowy

Drugi scenariusz nie wymaga ataku na model - wystarczy niedopracowana aplikacja. Asystent, który w ramach jednej sesji przetwarza dane wielu użytkowników (na przykład w systemie obsługi zgłoszeń albo czacie wsparcia), może przy niedostatecznej izolacji kontekstu "pomylić" rozmowy i ujawnić fragment danych jednego klienta drugiemu. To nie jest wina samego modelu - to błąd w sposobie, w jaki aplikacja zarządza kontekstem i pamięcią konwersacji.

Membership inference - da się ustalić, czy dane były w treningu

Oprócz bezpośredniej regurgitacji istnieje subtelniejsze ryzyko: ataki typu membership inference, w których nie trzeba wydobyć treści danych, wystarczy ustalić, czy konkretny rekord w ogóle znalazł się w zbiorze treningowym. Sam fakt, że dane konkretnej osoby były użyte do trenowania modelu (na przykład dokumentacja medyczna albo wewnętrzna korespondencja firmy), bywa informacją równie wrażliwą jak treść tych danych - zdradza, że dana osoba lub organizacja była klientem, pacjentem albo stroną konkretnego zbioru danych. To ryzyko, o którym łatwo zapomnieć, bo nie wygląda jak klasyczny "wyciek" - nic nie zostaje dosłownie ujawnione, a mimo to atakujący dowiaduje się czegoś, czego nie powinien.

Dwie osobne warstwy, nie jedna

Sanityzacja danych wejściowych i filtr na wyjściu bywają traktowane jak zamienniki - wystarczy jedno albo drugie. To błąd. Sanityzacja działa zanim dane w ogóle trafią do modelu: usuwa albo anonimizuje dane wrażliwe w zbiorze treningowym, dostrajającym i w promptach. Filtr wyjścia działa na samym końcu: sprawdza, czy to, co model właśnie wygenerował, nie zawiera czegoś, co nie powinno trafić do użytkownika. Obie warstwy łapią różne przypadki. Sanityzacja nie pomoże, jeśli model wywnioskuje dane wrażliwe z kontekstu rozmowy, zamiast odtworzyć je z treningu. Filtr wyjścia nie pomoże, jeśli dane wrażliwe trafiły do zbioru treningowego i model nauczył się ich używać w sposób, którego żaden prosty wzorzec nie wyłapie. Potrzeba obu, nie jednej z nich.

Dlaczego to nie to samo co LLM08

W wpisie o bezpieczeństwie RAG opisywaliśmy, jak gubią się uprawnienia przy indeksowaniu dokumentów - konto konektora czyta wszystko, filtr widoczności istnieje tylko na poziomie interfejsu, nie bazy. To wciąż aktualne ryzyko, ale dotyczy architektury wokół modelu. LLM02 jest węższe i głębsze: dotyczy tego, co sam model "wie" z treningu i dostrajania, niezależnie od tego, jak dobrze zabezpieczona jest otaczająca go infrastruktura. Można mieć bezbłędną kontrolę dostępu do bazy RAG i wciąż mieć model, który regurguluje dane treningowe.

Co robić

  • Sanityzuj dane przed treningiem i dostrajaniem. Dane osobowe, poświadczenia i informacje poufne nie powinny trafiać do zbioru uczącego bez anonimizacji albo pseudonimizacji.
  • Waliduj dane wejściowe. Filtruj dane wrażliwe już na etapie przyjmowania ich do systemu, zanim trafią gdziekolwiek dalej.
  • Stosuj zasadę najmniejszych uprawnień. Model i aplikacja wokół niego powinny mieć dostęp tylko do tych danych, które są niezbędne do konkretnego zadania.
  • Rozważ techniki chroniące prywatność przy treningu. Differential privacy (dodawanie szumu do danych) i federated learning (trening rozproszony, bez centralizowania surowych danych) zmniejszają ryzyko regurgitacji konkretnych rekordów.
  • Dodaj niezależny filtr wyjścia. Mechanizm wykrywający wzorce danych wrażliwych (numery dokumentów, dane kontaktowe, dane kart) w odpowiedzi modelu, zanim trafi do użytkownika - osobny od samego modelu.
  • Informuj użytkowników, co dzieje się z ich danymi. Przejrzysta polityka dotycząca tego, czy rozmowy trafiają do dalszego treningu, z możliwością rezygnacji.

Co sprawdzamy w teście

Przy testach penetracyjnych aplikacji LLM w kontekście LLM02 weryfikujemy między innymi:

  1. Czy model da się nakłonić do odtworzenia fragmentów danych treningowych lub dostrajających (próby ekstrakcji przez różne sformułowania zapytań).
  2. Czy w odpowiedziach modelu pojawiają się dane wrażliwe bez związku z aktualnym zapytaniem użytkownika.
  3. Czy izolacja kontekstu między sesjami i użytkownikami faktycznie działa, nie tylko na poziomie interfejsu.
  4. Czy istnieje niezależny filtr wyjścia wykrywający wzorce danych wrażliwych, zanim odpowiedź trafi do użytkownika.
  5. Czy dokumentacja i polityka prywatności opisują, jakie dane trafiają do treningu lub dostrajania modelu.

Czego to nie załatwi

Filtr wyjścia złapie wzorce, których szuka - numer dokumentu, adres e-mail, numer karty. Nie złapie danych, które nie pasują do żadnego znanego wzorca, na przykład unikalnego opisu sytuacji, który sam w sobie identyfikuje konkretną osobę. Najskuteczniejsza ochrona dzieje się zanim dane trafią do modelu - przy sanityzacji zbioru treningowego i kontroli tego, co w ogóle wchodzi do kontekstu rozmowy. Filtr na wyjściu to siatka bezpieczeństwa, nie główny mechanizm obrony.

Model w Waszym produkcie ma dostęp do danych klientów?

Sprawdzamy, czy model nie zdradza więcej, niż powinien - przez trening, dostrajanie albo zwykłą rozmowę. Napiszcie - odpiszemy w 24 h.

Zapytaj o wycenę