Kad asistent okrenut kupcu posluša nepouzdani tekst kao naredbu, to je prompt napad. Tekst može doći iz chata, sa stranice koju je asistent otvorio, iz PDF-a ili iz tiketa. Ako asistent može da pogleda narudžbu, pošalje email ili izmijeni zapis, ta rečenica može pokrenuti radnju.

Model slijedi instrukcije. Ne umije pouzdano da odvoji vaše pravilo od rečenice koja je stigla unutar dokumenta. Filter na polju za chat promaši uobičajeni slučaj, jer neprijateljski tekst stoji u sadržaju koji ste tražili da pročita. OWASP ovo vodi kao LLM01 na listi rizika GenAI projekta, a kontrole su u cheat sheetu za prevenciju.

U CodeWizu gradimo asistenta i API-je koje zove. Odbrana znači najuže ovlasti, potvrdu kad se mijenja novac ili nalog, i allow-list alata. Ovo je za timove čiji bot vidi narudžbe ili šalje poštu. Sam razgovor pokriva naša izrada AI chatbota i agenata. Širi pregled je sigurnosni audit.

Redovi katanaca na mostu kao ilustracija za prompt napad

Instrukcije nisu isti kanal kao podaci

Instrukcije dolaze od vas: system prompt, spisak alata, pravila o povratu novca i tonu. Podaci dolaze od kupca, sa stranice, iz PDF-a, iz tiketa ili iz članka pomoći. Posao protiv prompt napad počinje kad ta dva kanala ne pomiješate. Podatak smije biti citat. Ne smije dodati alat, promijeniti ulogu ni proširiti ono što asistent smije.

Nepouzdani tekst stavite u označeni blok i recite modelu da je to dokument. Oznaka je nagovještaj, ne kontrola. Duga stranica, ili ona koja oponaša sistemsku poruku, i dalje zbunjuje modele. Razdvojnici smanjuju nesreće. Kontrola je kod koji od modela nikad ne traži dozvolu.

  • Sistemski kanal. Pravila, alati i ton, u Gitu, nedostupni kupcu i preuzetoj stranici.
  • Kanal korisnika. Trenutna poruka, vezana za sesiju, i dalje nepouzdana.
  • Kanal dokumenta. Stranice, PDF-ovi, tiketi i dijelovi pretrage, označeni kao citati.
  • Kanal alata. Strukturisani odgovori API-ja koje model smije objasniti, ali ne i proširiti.

Ako dokument kaže da je asistent sada administrator, uloga sesije ostaje ona koju je prijava postavila. To jedno pravilo uklanja veliki dio prompt napad koji radi samo dok je prompt ujedno i kontrola pristupa.

Posredni prompt napad sa stranice, emaila ili tiketa

Direktni prompt napad jeste kad kupac u chat upiše neprijateljsku naredbu. Posredni prompt napad je ista zamisao sakrivena u nečemu što je asistent dobio da pročita: stranica proizvoda, PDF, email nit ili komentar na tiketu.

Asistent podrške koji sažima tiket i šalje statusni email običan je slučaj. Red u niti kaže da cijelu narudžbu proslijedi na drugo sanduče i da to nazove rutinskim ažuriranjem. Ljudi jedan red previde. Ako alat za poštu prima bilo kojeg primaoca i bilo koji tekst, poruka bude poslata.

Asistent prodavnice koji otvara stranicu proizvoda ima istu izloženost. Katalog dobavljača, recenzije, kompromitovani nalog i učitani PDF može mijenjati neko drugi. Preuzeti nizovi ostaju podaci. Ne biraju primaoca, id narudžbe ni alat.

Posredni prompt napad je razlog zašto skeniranje samo polja za chat nije dizajn. Opasan tekst stiže preko preuzimanja stranica, sandučeta ili tiketa. Ti čitači vraćaju tekst, ne ovlaštenje.

Mnogo katanaca na sajlama iznad gradske rijeke

Allow-list alata koji diraju narudžbe i email

Least privilege znači kratak allow-list, ne opći token za API. Svaki alat radi jedan posao i odbacuje polja koja model nije smio da postavi. Čitanje narudžbe nije povrat novca, niti je sirovi upit koji model opiše.

Model smije izabrati samo ime alata koje ste registrovali. Argumenti moraju odgovarati šemi, a nepoznata imena ne izlaze iz procesa. Kupci i osoblje dobijaju zasebne asistente. Asistent za kupce ne registruje alate osoblja.

Rizik prati radnju. Model smije predložiti red ispod. Server odlučuje smije li ova sesija to da uradi.

RadnjaRizik ako se modelu vjerujeKontrola van prompta
Čitanje narudžbeStranica ili tiket imenuje tuđu narudžbuUzmite id kupca iz sesije i zanemarite svaki id koji model pošalje
Slanje emailaDetalji idu na adresu koja nije na naloguSamo šabloni; primalac se uzima iz narudžbe, ne iz razgovora
Povrat novcaNepouzdani tekst kaže da se narudžba vrati u cijelostiNema alata za povrat kod asistenta za kupce; osoblje potvrdi, pa radi vaša funkcija plaćanja
Promjena lozinkeTekst traži novu adresu ili lozinku koju je pošiljalac izabraoPokrenite postojeći reset na sačuvanu adresu; lozinku nikad ne postavljajte

Odbijte alate koji šalju bilo koji tekst na bilo koju adresu ili pišu proizvoljna polja. Šablon statusa dostave na adresu s narudžbe je dovoljan. Otvoreno sanduče je pojačivač za prompt napad, jer se model može nagovoriti na bilo kojeg primaoca i bilo koji tekst.

Model nikad sam ne odlučuje o povratu novca

Odvojite model od provjere ovlasti. Smije da sastavi ono što će kupac pročitati. Ne smije odlučiti da je povrat novca odobren. Ovlast koristi sesiju, stanje narudžbe i vaše pravilo. Model je samo pozivalac, a pozivaoca se može prevariti.

Timovi to pravilo često sakriju u system prompt. Prompt je savjet. Sljedeći prompt napad može osporiti pravilo koje živi samo u promptu. Prozor datuma i provjera vlasništva stoje pored baze, gdje preuzeta stranica ne može da ih mijenja.

Asistent nikad ne zove provajdera plaćanja. Vaša funkcija odbija poziv osim ako sesija pripada osoblju i ako je čovjek potvrdio ovu narudžbu:

function issueRefund(session, orderId) { requireStaff(session); requireExplicitConfirmation(session, orderId); return payments.refund(orderId); }

Tu funkciju ne registrujte na asistentu za kupce. Rečenica u PDF-u ne može proći provjeru osoblja, jer provjera čita sesiju prijave, ne chat.

Ljudska potvrda prije novca ili izmjene naloga

Povrat novca, izmjena adrese, otkazivanje, pošta nekome ko nije kupac i promjena lozinke čekaju čovjeka. Potvrda je dugme koje iscrta vaša aplikacija. Nije rečenica za koju model tvrdi da ju je korisnik već izgovorio.

Pokažite narudžbu i iznos iz zapisa narudžbe, ne iz nacrta. Sačuvajte id korisnika, id narudžbe i vrijeme klika. Model ne može da emituje taj klik. Sam prompt napad koji kaže da je korisnik već potvrdio ne postavlja tu oznaku, jer je upisuje obrada dugmeta.

Čitanje statusa pošiljke može ići odmah. Povrat novca ne može. Ako potvrdu ne možete objasniti u jednoj rečenici, alat je previše nejasan da bi bio izložen.

Hrpa zahrđalih katanaca sa malom ručno ispisanom cijenom

Odgovor asistenta koji se iscrtava kao HTML

Odgovor je nepouzdan. Ubačen kao HTML, script tag ili atribut obrađivača događaja postaje cross-site scripting. Tekst escapirajte, ili koristite podskup markdowna bez sirovog markupa, i zadržite Content-Security-Policy kao za svaki drugi sadržaj korisnika.

Isto tako prompt napad može pokušati da asistent pokaže link za praćenje koji napušta vaš domen. Dozvolite samo hostove sa spiska, ili linkove gradite iz podataka narudžbe kojima vjerujete. Model ne smije birati adresu dugmeta koje izgleda kao vaša prodavnica.

Widget koji odgovor upisuje preko innerHTML već je modelu povjerio stranicu.

Tajne ne pripadaju u system prompt

Sve iz system prompta može se izvući natrag. Sam prompt napad koji traži da model ponovi skrivene instrukcije dovoljan je da iscuri ono što ste tamo stavili. Ključevi, lozinke, bilješke osoblja i tuđi zapisi ne pripadaju u taj tekst.

Model vidi ime alata i rezultat, ne bearer token. Backend drži ključeve trećih strana. Dokumente filtrirajte na ono što ovaj korisnik smije vidjeti prije nego uđu u prompt, i ne učitavajte bilješke tiketa namijenjene osoblju u asistenta za kupce.

Pišite samo pravila koja biste rekli javno, jer korisnik može tražiti parafrazu. Sprovođenje ostaje u kodu, gdje citiranje pravila ništa ne mijenja.

Testovi koje možete ponovo pokrenuti poslije svake izmjene

Nekoliko redova u prozoru chata nije test. Slučajevi protiv prompt napad stoje u repozitoriju i kreću kad se promijene prompt, alati ili model. Skup držite malim i vežite ga za radnje koje ne smijete dopustiti.

  • Poruka u chatu i preuzeta stranica koje traže tuđu narudžbu.
  • Tiket ili PDF koji traži email na vanjsku adresu, ili tvrdi da je pisac iz osoblja.
  • Dokument koji traži povrat novca i tvrdi da je potvrda već data.
  • Zahtjev da se ispiše system prompt, ključ ili tuđi zapis.
  • Odgovor koji sadrži sirovi markup ili link ka hostu koji nije vaš.

Taj tekst pošaljite kao testne podatke. Provjerite ime alata, argumente, da li je potvrda bila obavezna i da li je odgovor escapiran. Koristite lažne narudžbe i sanduče koje ne šalje poštu. Kvarove popravite u kodu, a verziju modela zakačite uz slučajeve.

Šta zaštita od prompt napad ne rješava

Samo zaustavljanje prompt napad ne čini model istinitim. I dalje može izmisliti datum dostave ili pravilo koje nemate. Pretraga i odbijanje kad izvora nema zaseban su problem. Pogrešan datum dostave nije ista greška kao pošta poslata pogrešnoj osobi.

Pokvarena kontrola pristupa na API-ju narudžbi pokvarena je i bez modela. Ukradena sesija zaobilazi asistenta. Tajne u repozitoriju i mail API koji prima bilo kojeg primaoca obični su propusti. Asistent ih čini lakšim za dosezanje.

Niko ne može obećati da tekst nikad neće zbuniti jezički model. Cilj koji možete postići uži je: zbunjen model ne može vratiti novac, pročitati tuđu narudžbu, poslati poštu na adresu koju je sam izabrao, niti promijeniti lozinku. To možete testirati pri svakoj izmjeni.

Kako radimo

Mi prompt napad tretiramo kao ograničenje asistenta i API-ja iza njega.

  1. Upoznavanje. Popišite radnje koje postoje sada i one koje želite sljedeće: narudžbe, email, povrati, reset lozinke i ostali upisi.
  2. Bilješke o prijetnji. Za svaku radnju zapišite kako chat, stranica, PDF ili tiket mogu zatražiti, i koji se izvori preuzimaju.
  3. Allow-list i provjere. Alate suzite u kodu. Sesija bira kupca. Novac i izmjena naloga traže potvrdu ili nisu izloženi.
  4. Testovi. Slučajeve držite u repozitoriju i pokrećite ih kad se promijene prompt, alati ili verzija modela.
  5. Puštanje i briga. Bilježite ime alata, argumente i rezultat, bez tajni. Novi alat prolazi isti spisak prije registracije.

Zašto CodeWiz

  • CodeWiz je 2023. osnovao Dragan Plavšić u Banjoj Luci i radi s klijentima lokalno i u inostranstvu, na daljinu.
  • Gradimo asistenta i API-je koje zove, pa je provjera ovlasti dio iste isporuke.
  • AI, API-ji i sigurnost jedna su praksa. Asistent koji upisuje zapis jeste API klijent s nepouzdanim pozivaocem.
  • Kratak allow-list sigurniji je od dugog prompta koji pokušava da odvrati model od loše radnje.
  • Bot za status pošiljke ne dobija funkciju povrata samo zato što ju je demo na platformi imao.

Često postavljana pitanja

Je li ovo isto što i jailbreak modela?

Jailbreak obično znači gurati model preko sigurnosne politike vendora. Ovdje je prompt napad nepouzdani tekst koji usmjerava asistenta spojenog na vaše poslovanje. Možete izgubiti takmičenje u jailbreaku i ostati sigurni ako funkcija povrata čita sesiju i ignoriše model.

Hoće li jači system prompt to zaustaviti?

Jasniji prompt smanjuje nesreće. Neće izdržati tekst koji je model trebalo da pročita. Prompt koristite za ton i spisak alata. Ovlast držite u kodu. Kontrola koja radi samo dok model sarađuje nije ona na koju se možete osloniti.

Treba li asistent uopšte da šalje email?

Da, kad je poruka šablon, a primalac dolazi iz narudžbe. Ne, kad model bira adresu ili tekst. Alat slobodnog oblika „pošalji email na ovu adresu” jeste prompt napad koji čeka sljedeći tiket. Neuobičajena pošta treba da postane nacrt za čovjeka.

Treba li nam ovo ako bot samo odgovara na pitanja?

Treba vam encoding izlaza ako se odgovor iscrtava kao HTML, i plan za dan kad neko doda čitanje narudžbe ili odlaznu poštu. Alate ne registrujte dok provjere ne postoje.

Kako testirati a da ne dirate produkciju?

Slučajeve pokrenite na stagingu, s lažnim narudžbama i sandučetom koje ne šalje poštu. Provjerite da zabranjeni alat nije pozvan, ili da je id kupca došao iz sesije. Nisu potrebni stvarni povrat novca ni pravo sanduče.

Pregledajte asistenta prije nego što može da djeluje

Ako asistent može da pogleda narudžbu, pošalje email ili izmijeni zapis, možemo popisati alate, provjere premjestiti u kod i ostaviti testove koje ponovo pokrećete. Recite nam koje radnje smiju biti dozvoljene. Počnite na stranici za kontakt, ili pogledajte naše usluge.