Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Prompt injection wykradający poufne dane w kilku krokach w Microsoft 365 Copilot
Seria podatności związanych z Microsoft 365 Copilot pozwala na:
- zmuszenie LLM do przeszukania korporacyjnych zasobów poprzez prompt injection
- wykorzystanie zintegrowanego API obsługującego np. komunikatory firmowe do pozyskania kolejnych wrażliwych informacji
- eksfiltrację znalezionych wcześniej danych z wykorzystaniem technik ukrywających rzeczywiste zamiary atakującego
Kilka dni temu wygasło embargo na dzielenie się informacją o łańcuchu exploitów związanych z asystentem opartym o LLM od Microsoftu. Mowa oczywiście o produkcie Microsoft 365 Copilot, czyli rozwiązaniu dla firm. Johann Rehberger opublikował writeup opisujący dokładne szczegóły podatności, pozwalającej na wykradanie danych osobowych ze środowiska organizacji. A to wszystko dostępne na wyciągnięcie ręki – wystarczy wysłać odpowiednią wiadomość email.
Prompt injection
Atak wykorzystuje kilka kroków. Pierwszym z nich jest prompt injection, czyli wstrzyknięcie zapytania do modelu LLM w taki sposób, aby potraktował on informacje pochodzące od niezaufanego źródła _ od atakującego – jako część systemowej komendy. Podobny aspekt opisywaliśmy w przypadku prompt injection w Slacku. Atak dokonywany jest przez wysłanie maila do odbiorcy znajdującego się w firmie korzystającej z Microsoft 365, może to być np. załącznik w formacie DOCX, którego analiza przez model LLM powoduje wykonanie zadań zleconych przez atakującego.
Zaprezentowany przykład pokazuje, jak Copilot zwraca nieprawdziwą informację o infekcji oraz nakłania do kontaktu z „supportem”. Wewnątrz dokumentu znajduje się instrukcja, mówiąca o tym, jaką odpowiedź ma wygenerować LLM. Tekst prompt injection nie musi być widoczny dla użytkownika. Można spróbować ukryć go przy pomocy małej czcionki lub koloru.
Jak słusznie zauważa autor znaleziska, na dzień dzisiejszy nie ma 100% metody ochrony przed tego typu atakami.
Automatyczne wywołanie narzędzi
Kolejnym ogniwem jest atak, który może przypominać trochę SSRF – odpowiednio zaprojektowany prompt zmusza model językowy do wykorzystania swojego API i np. przeszukania dokumentów lub wykonania zapytania do zewnętrznych systemów. W opisywanym scenariuszu przedstawiono przeszukiwanie sekretów – w tym przypadku kodów 2FA do komunikatora firmowego.
Skoro modele mają dostęp do zawartości komunikacji i mogą ją przeszukiwać, oraz atakujący jest w stanie przeprowadzić atak “z zewnątrz organizacji”, to teraz pozostaje tylko znaleźć sposób na ekstrakcję tych danych poza organizację. Tak samo jak w przypadku poprzednio prezentowanych ataków, możliwe jest stworzenie linków, które kierować będą do serwera pod kontrolą atakującego. Requesty te mogą zawierać krytyczne dane. Jednak aby nieco ukryć zamiary atakującego, możliwe jest wykorzystanie techniki określanej jako ASCII Smuggling – polega ona na zastąpieniu znaków ASCII przy pomocy kodowania Unicode w taki sposób, aby nie były one widoczne w interfejsie użytkownika.
Eksfiltrowana zawartość może też zostać pokolorowana zgodnie z barwą tła, aby nie była widoczna dla użytkownika czytającego odpowiedź wygenerowaną przez LLM.
Reasumując, wygląda na to, że ataki typu prompt injection zostaną z nami na dłużej, co pokazuje przykład Copilota czy Slacka. Sposoby eksfiltrowania danych potrzebują interakcji użytkownika, dlatego sposób przedstawienia odpowiedzi wygenerowanej przez LLM ma niebagatelny wpływ na bezpieczeństwo. Pominięcie renderowania tagów Unicode, zachowanie staranności i ostrożności przy renderowaniu linków oraz ograniczenie możliwości narzędzi, które mogą być wywoływane przez LLM to podstawowe kroki, jakie należy wdrożyć już dzisiaj. W momencie gdy zostaną opracowane skuteczne metody zapobieganiu prompt injection (jeśli to jest w ogóle możliwe), część z prezentowanych tutaj ataków straci na znaczeniu.
Na szczęście wymaganie interakcji użytkownika powoduje, że pełen łańcuch nie jest eksploitowalny automatycznie, jednak to się może zmienić wraz z rozrastającymi się API, które są udostępniane modelom. W przypadku możliwości wykonania zapytania HTTP pod zdefiniowany we wstrzykniętym prompcie adres, pojawi się możliwość eksfiltracji danych przez automatyczne SSRF wyzwalane przez LLM. Żyjemy w ciekawych czasach :)
~fc
A że modele LLM próbuje się podpinać do wszystkiego, to możemy z czasem zobaczyć ataki wchodzące jeszcze głębiej w systemy organizacji. Brzmi fascynująco.
„skuteczne metody zapobieganiu prompt injection” problem stary jak komputery. Ogólnie to są skuteczne metody(potrzebny przypis) zapobiegania ale ograniczą one właśnie zalety takiej komunikacji człowieka z LLM.