Nadmierna autonomia to podatność na zagrożenia, która występuje, gdy duży model językowy (LLM) ma niepotrzebne lub zbyt szerokie uprawnienia do interakcji z innymi systemami. Gdy LLM może wywoływać zewnętrzne narzędzia, wtyczki lub funkcje (tzw. „agency”), ta podatność umożliwia mu wykonywanie działań niezamierzonych, nieautoryzowanych i potencjalnie szkodliwych. Osoba przeprowadzająca atak może to wykorzystać, stosując wstrzykiwanie promptów lub inne techniki manipulacji, aby nakłonić LLM do wykorzystania przyznanych mu uprawnień do złośliwych celów. Podstawowym problemem nie jest tylko to, że LLM może podejmować działania, ale to, że zakres tych działań jest zbyt szeroki i słabo kontrolowany.
Dlaczego deweloperzy aplikacji na Androida powinni się tym zainteresować
Przyznanie dużemu modelowi językowemu zbyt dużej swobody działania w aplikacji na Androida może prowadzić do poważnych incydentów związanych z bezpieczeństwem:
- Nieautoryzowany dostęp do systemu: atakujący może nakazać LLM dostęp do plików na lokalnym urządzeniu z Androidem (np. dokumentów użytkownika, danych aplikacji) lub podłączonych zasobów sieciowych, ich modyfikowanie lub usuwanie, jeśli model ma odpowiednie uprawnienia Androida.
- Wyciek danych: model LLM może zostać oszukany i odczytać dane wrażliwe z lokalnych baz danych aplikacji (np. Room), SharedPreferences lub wewnętrznych interfejsów API, a następnie przesłać te informacje do zewnętrznego źródła (np. wysłać je za pomocą wywołania interfejsu API lub funkcji e-mail). Model może też ujawniać informacje poufne, które przyswoił w fazie trenowania, lub informacje poufne, które użytkownik podaje w prompcie.
- Kompromitacja innych funkcji lub systemów: jeśli LLM ma kontrolę nad innymi funkcjami (np. wysyłanie SMS-ów, wykonywanie połączeń, publikowanie w mediach społecznościowych za pomocą niejawnych intencji, modyfikowanie ustawień systemu, dokonywanie zakupów w aplikacji), atakujący może przejąć te funkcje, aby wysyłać spam, rozpowszechniać dezinformację lub dokonywać nieautoryzowanych transakcji, co może prowadzić do bezpośrednich strat finansowych lub szkód dla użytkownika.
- Odmowa usługi: LLM może otrzymać instrukcję wielokrotnego wykonywania w aplikacji lub w usługach backendu działań wymagających dużych zasobów, np. uruchamiania złożonych zapytań do bazy danych lub wywoływania interfejsu API w pętli. Może to spowodować brak odpowiedzi aplikacji, wyczerpanie baterii, nadmierne zużycie danych, a nawet odmowę usługi w przypadku systemów backendu.
Środki zaradcze dla deweloperów aplikacji na Androida
Ograniczanie nadmiernej autonomii aplikacji na Androida polega na stosowaniu zasady najmniejszych uprawnień do każdego narzędzia i funkcji, do których LLM może mieć dostęp lub które może wywoływać.
Ogranicz zestaw narzędzi AI (funkcje szczegółowe lub otwarte):
- Zapewnij minimalny zestaw narzędzi: LLM powinien mieć dostęp tylko do tych narzędzi (funkcji, interfejsów API, intencji), których bezwzględnie potrzebuje do wykonywania zadań w aplikacji. Jeśli nie musi mieć możliwości przeglądania internetu ani wysyłania e-maili, nie udostępniaj mu tych funkcji.
- Używaj prostych narzędzi o jednym przeznaczeniu: lepiej jest udostępnić LLM narzędzie, które może wykonywać tylko jedną konkretną czynność (np. „odczytaj określony typ ustawienia użytkownika”), niż potężne, uniwersalne narzędzie, które może robić wszystko (np. „wykonaj dowolne polecenie powłoki”).
Ograniczanie możliwości AI
- Precyzyjne uprawnienia Androida: gdy funkcja wywoływana przez LLM wchodzi w interakcję z zasobami systemowymi Androida lub innymi aplikacjami, sprawdź, czy aplikacja żąda i ma tylko absolutnie minimalne wymagane uprawnienia Androida.
- Uprawnienia użytkownika: gdy LLM wykonuje działanie w imieniu użytkownika, powinien to robić z użyciem jego konkretnych uprawnień i kontekstu, a nie z użyciem szerszego, potencjalnie administracyjnego konta na poziomie aplikacji. Dzięki temu weryfikujemy, że LLM nie może wykonywać żadnych czynności, na które użytkownik nie miałby zezwolenia.
Pozostawienie kontroli w rękach człowieka (zgoda użytkownika na krytyczne działania)
- Wymagaj zatwierdzenia przez użytkownika: w przypadku wszystkich ważnych lub ryzykownych działań, które LLM może sugerować lub próbować wykonać (np. usuwanie danych, dokonywanie zakupów w aplikacji, wysyłanie wiadomości, zmienianie krytycznych ustawień), zawsze wymagaj wyraźnego zatwierdzenia przez użytkownika za pomocą okna potwierdzenia w interfejsie. To tak, jakby trzeba było uzyskać zgodę menedżera na podjęcie ważnej decyzji.
Zaufaj, ale sprawdź (weryfikacja danych wejściowych i wyjściowych oraz solidne backendy)
- Zabezpieczenia backendu: nie polegaj wyłącznie na modelu LLM, który ma decydować, czy działanie jest dozwolone. Wszystkie usługi backendu lub interfejsy API, z którymi łączą się funkcje wywoływane przez LLM, powinny mieć własne, niezawodne uwierzytelnianie, autoryzację i walidację danych wejściowych, aby dokładnie sprawdzać każde żądanie i weryfikować, czy jest ono prawidłowe i mieści się w oczekiwanych parametrach.
- Oczyszczanie danych: podobnie jak w przypadku innych luk w zabezpieczeniach, kluczowe jest oczyszczanie i weryfikowanie zarówno danych wejściowych przekazywanych do LLM, jak i parametrów generowanych przez LLM na potrzeby wywołań funkcji. Pozwala to wykrywać złośliwe instrukcje lub nieoczekiwane dane wyjściowe przed wykonaniem jakichkolwiek działań.
Podsumowanie
Nadmierna autonomia to poważna luka w zabezpieczeniach, w której LLM ma zbyt szerokie uprawnienia do interakcji z innymi systemami lub funkcjami, co pozwala na nakłonienie go do wykonywania szkodliwych działań. Może to prowadzić do nieautoryzowanego dostępu do danych, naruszenia bezpieczeństwa systemu, strat finansowych lub szkód dla użytkowników aplikacji na Androida. Ograniczanie ryzyka opiera się w dużej mierze na zasadzie jak najmniejszych uprawnień: należy ściśle ograniczyć narzędzia i uprawnienia Androida dostępne dla LLM, sprawdzić, czy każde narzędzie ma minimalną i określoną funkcjonalność, oraz wymagać zatwierdzenia przez człowieka wszystkich operacji o dużym znaczeniu.