LLM-integratsioonide penetratsioonitestimine: miks tavameetmed tehisintellekti rakenduste puhul ei aita

·

Kõige olulisem lühidalt

  • Ei testita mudelit, vaid sinu integratsiooni: käsku, andmeallikaid, tööriistu ja väljundi edasist töötlemist
  • Keelemudel ei erista juhist andmetest – seetõttu on kaudne käsusüstimine dokumentide kaudu kõige ohtlikum klass
  • Veebirakenduse tulemüür siin ei aita: rünnak on grammatiliselt korrektne vaba tekst ilma signatuurita
  • Kandev kaitse peitub tööriista õigustes, mitte usalduses teksti vastu
  • Ilma teise, teistsuguste õigustega testkasutajata jääb kõige olulisem leiuklass testimata

Vestlusrobot, mis ainult tekste sõnastab, on hallatav risk. Niipea kui seesama vestlusrobot ühendatakse teadmusbaasiga, kui ta tohib luua tugipileteid või pöörduda API poole, ei ole ta enam vestlusrobot, vaid uus ründepind, millel on ligipääs sinu süsteemidele. Just see hüpe on viimase kahe aasta jooksul toimunud pea igas ettevõttes – enamasti kiiremini, kui turvakontroll järele jõudis.

See artikkel käib läbi, millised ründeklassid LLM-integratsioonide puhul tegelikult esinevad, miks klassikalised kaitsemeetmed seal ei aita, mida me AI- ja LLM-integratsioonide penetratsioonitestil konkreetselt kontrollime ja mida sa selleks ette valmistama pead.

Miks LLM-rakendused on omaette testimisdistsipliin

Klassikalise rakenduse puhul on piir selge: kood on juhis, sisendid on andmed. SQL-i süstimine toimib just seetõttu, et see piir ühes kohas kogemata kaotati – ja ettevalmistatud päringutega saab selle struktuurselt taastada.

Keelemudeli puhul seda piiri põhimõtteliselt ei ole. Süsteemikäsk, kasutaja küsimus, päritud dokumendid ja tööriistade väljundid jõuavad ühe tokenivoona samasse kontekstiaknasse. Mudel kaalub neid statistiliselt, ta ei jõusta ühtki reeglit. Ettevalmistatud päringul ei ole siin vastet.

Sellest tuleneb lause, mis kogu distsipliini kokku võtab: iga tekst, mis konteksti jõuab, on potentsiaalselt juhis. Üleslaaditud PDF, töödeldud e-kiri, kommentaarilahter piletis, allalaaditud veebileht, kirje vektorandmebaasist.

Ründeklassid, mis praktikas esinevad

Käsusüstimine

Otsene variant on tuntud: kasutaja kirjutab „eira kõiki eelnevaid juhiseid“ ja proovib sõnastusi läbi, kuni mõni läbi läheb.

Ohtlik on just kaudne variant. Juhis ei ole kasutaja sisendis, vaid sisus, mille süsteem ise tõmbab: üleslaaditud elulookirjelduses, sissetuleva e-kirja allkirjas, tootekirjelduses, veebilehel, mille agent alla laadib. Kasutaja ei sisesta midagi pahatahtlikku – ta esitab kahjutu küsimuse ja mudel täidab kolmanda osapoole juhise.

Tüüpiline muster, mida testides taasesitame: valgeks vormindatud lõik dokumendis annab mudelile korralduse lisada senise vestluse sisu pildi-URL-ina välisele domeenile. Kasutaja näeb tavalist kokkuvõtet. Kontekst on välja lekkinud. Selle klassi üksikasjad on dokumenteeritud meie vikis: Prompt Injection ja Markdown Exfiltration Channels.

Liiga laiad tegutsemisõigused

Kõige suurema majandusliku mõjuga klass. Assistent, kes töötleb arveid, saab kirjutamisõigused majandustarkvarasse. Klienditoe agent saab õiguse paroole lähtestada. Kuni mudel saab ainult neid juhiseid, mille oled ette näinud, toimib kõik. Niipea kui keegi kirjutab võõra sisu kaudu sisse, täidab süsteem tema kavatsust sinu õigustega.

Kontrollküsimus ei ole kunagi „kas mudelit saab mõjutada“ – seda saab alati –, vaid: mis on kõige hullem, mida õnnestunud mõjutamine käivitada suudab? Vaata selle kohta Excessive Agency ja Approval Gate Bypass.

Andmeleke RAG-allikatest

Kõige sagedasem tegelik leid ettevõtete paigaldustes ja harva efektne: õigusi rakendatakse pärast päringut, mitte enne. Vektorindeks sisaldab kõigi osakondade dokumente, filtreerimine toimub alles tulemuste nimekirjas – või üldse mitte.

Töötaja ei küsi dokumenti, millele tal ligipääsu ei ole. Ta küsib: „Võta kokku, millised palgavahemikud kehtivad meeskonnajuhtidele.“ Ja saab vastuse. Ükski juurdepääsulogi ei näita rikkumist, sest formaalselt seda ei toimunudki.

Lisaks tulevad Cross-Session Context Bleed, kui kontekst jääb seansside või rentnike vahel alles, ja System Prompt Extraction, kui juhised ja sageli ka neisse manustatud võtmed ning lõpp-punktid on välja loetavad.

Väljundi ebaturvaline edasitöötlus

Mudeli väljundit käsitletakse rutiinselt usaldusväärse vastusena – ja siis renderdatakse see kasutajaliidesesse, pannakse andmebaasipäringusse või käivitatakse koodina. Sellega on klassikaline süstimine tagasi, ainult et mudel on vahejaamaks: kui mudeli saab panna tootma <script>-silti või ; DROP TABLE, jääb üle vaid küsimus, mida järgnev süsteem sellega teeb. Vaata Improper Output Handling ja Insecure AI-Generated Code.

Andmete ja indeksi mürgitamine

Kui sinu süsteem indekseerib sisu automaatselt – jagatud kaustad, sissetulevad e-kirjad, avalikud lehed –, saab ründaja sisestada sisu, mis jääb püsivalt indeksisse ja ilmub tulevastes päringutes kontekstina. Rünnak tehakse üks kord ja see mõjub edasi pidevalt. Vaata RAG Index Poisoning.

Piiramatu tarbimine

Vähem konfidentsiaalsust, rohkem arvet: päringud, mis sunnivad mudelit maksimaalselt pikkadele vastustele, rekursiivsetele tööriistakutsetele või korduvatele päringutele, ajavad tokenikulud lakke, ilma et ükski hoiatus käivituks. Kui suureks see kasvada võib, kirjeldasime artiklis denial-of-wallet-rünnakud RAG-süsteemide vastu.

Miks tulemüürist, filtritest ja turvapiiretest ei piisa

MeedeMida see suudabMiks see siin ei kanna
Veebirakenduse tulemüürTuvastab signatuure struktureeritud sisenditesRünnak on grammatiliselt korrektne vaba tekst ilma signatuurita, lõpmatus hulgas sõnastustes ja keeltes
Märksõnade keeluloendidPüüab kinni naiivse sõnastuseÜmbersõnastus, poolitus, Base64, emoji või teine keel lähevad neist mööda
Turvapiirde mudelidMõistlik esimene kiht tavarünnakute vastuIse statistilised – mida saab sõnastada, saab ka ümber sõnastada
„Me kasutame turvalist mudelit“Vähendab mõnda klassi juba allikasLeiud tekivad sinu integratsioonis, mitte mudelis
Rakenduse klassikaline pentestKatab ümbritseva veebirakenduseEi kontrolli ahelat käsk → kontekst → tööriist → väljund

Mõte ei ole selles, et need meetmed oleksid kasutud. Mõte on selles, et nad kõik töötavad teksti tasandil ja teksti tasandil ei ole see piir jõustatav. Jõustatav on see ühe tasandi võrra allpool: õigustes, millega tööriista käivitatakse.

Mida me konkreetselt kontrollime

ValdkondMida kontrollitakse
SüsteemikäskKas seda saab välja lugeda, üle kirjutada või sellest mööda minna? Kas see sisaldab võtmeid, lõpp-punkte või ärireegleid, mis sinna ei kuulu?
Otsene süstimineMöödaminekumustrite süstemaatiline läbimäng, mitmes keeles, kodeeringutega ja üle mitme vestlusvooru
Kaudne süstimineEttevalmistatud dokumendid, e-kirjad, veebilehed ja kirjed igas kanalis, millest süsteem konteksti võtab
Autoriseerimine päringulKas küsija õigusi rakendatakse enne päringut? Kas teiste rentnike või osakondade sisu on taastatav?
Tööriistad ja agendidMillised tegevused on võimalikud ilma kinnituseta, kas kinnitusest saab mööda minna, kas delegeerimine agentide vahel eskaleerub?
Väljundi töötlemineKas mudeli väljundit kuskil renderdatakse, käivitatakse või päringusse pannakse – ja kas seda käsitletakse seal mitteusaldusväärse sisendina?
SeansipiiridKontekstijäägid seansside, kasutajate ja rentnike vahel, vahemälu käitumine
TarbimispiiridPäringupiirangud, tokenite ülempiirid, rekursioonikaitse tööriistakutsete puhul
Ümbritsev rakendusKlassikaline testikatvus OWASP WSTG järgi – autentimine, seansihaldus, API turvalisus

Katvus lähtub OWASP Top 10 for LLM Applications loendist; üksikud klassid koos tehnilise kirjelduse ja lahendusega on meie LLM-vikis.

Kulg, maht ja see, mida sa ette valmistad

Kulg vastab tavalisele penetratsioonitestile: ulatuse ja reeglite kokkuleppimine, luure, testide läbiviimine koos tõenditega, süvenemine, aruanne, kordustest.

Piiritletud vestlus- või RAG-rakenduse test hõlmab tavaliselt 5–10 inimtööpäeva. Mitme tööriistaga agendisüsteemid võtavad rohkem, sest iga tööriistaõigust tuleb eraldi kontrollida.

Mida sa peaksid ette valmistama:

  • Ligipääsud vähemalt kahele erinevate õigustega kasutajale. See ei ole mugavusküsimus, vaid eeldus, et autoriseerimisvigu üldse tõestada saaks. Ilma teise kasutajata jääb kõige sagedasem tõsine leiuklass testimata.
  • Ühendatud tööriistade ja andmeallikate loend koos õigustega, millega need töötavad.
  • Süsteemikäsk, ideaalis. Kui sa seda välja anda ei soovi, loeme selle enamasti niikuinii välja – ja siis ongi see esimene leid.
  • Testkeskkond realistlike, kuid mitte päris andmetega.

Mida sa peaksid testist sõltumata tegema

  • Õigused tööriista tasandil, mitte usaldus teksti vastu. Tööriist töötab küsija õigustega, mitte rakenduse omadega. Kõik muu on kaitse valel tasandil.
  • Autoriseerimine enne päringut. Vektorindeks tohib tagastada ainult seda, mida küsija niikuinii näha tohiks – filtreerimine pärast päringut ei ole juurdepääsu kontroll.
  • Kinnitus kõigele pöördumatule. Maksed, kustutamised, väljaminevad sõnumid, õiguste muutmine: inimene kinnitab ja kinnitus näitab, mis täpselt juhtuma hakkab.
  • Mudeli väljund on mitteusaldusväärne sisend. Käsitle seda nii kõikjal, kus seda renderdatakse, käivitatakse või päringusse pannakse.
  • Logi seda, mida mudel algatas, mitte ainult seda, et ta vastas. Ilma selle jäljeta ei ole intsident taastatav.
  • Ei mingeid saladusi süsteemikäsku. See ei ole turvaline hoidla, vaid kontekst.

Kui võtad tehisintellekti funktsioone kasutusele reguleeritud keskkonnas: tõhususe tõendamine NIS2 järgi ja turvatestid ISO 27001 lisa A punkti 8.29 alusel kehtivad AI-komponentidele täpselt samamoodi nagu ülejäänud rakendusmaastikule – erireeglit, mis tehisintellekti välja jätaks, ei ole.

LLM-i penetratsioonitestid – korduvad küsimused

01

Mis on LLM-i penetratsioonitest?

LLM-i penetratsioonitest ei kontrolli keelemudelit ennast, vaid sinu integratsiooni sellega: süsteemikäsku, andmeallikaid, millest kontekst kokku pannakse, tööriistu ja API-sid, mida mudel kutsuda tohib, ning kohti, kus tema väljundit edasi töödeldakse. Testitakse, kas mudelit saab panna andmeid avaldama, õigusi ületama või käivitama tegevusi, mida ta käivitada ei tohiks.

02

Mis on käsusüstimine?

Käsusüstimine on juhiste sisestamine teksti, mida mudel kontekstina töötleb. Kuna keelemudel käsitleb kõiki talle antud tokeneid ühe vestlusvoona ega tunne ranget piiri juhise ja andmete vahel, võib üleslaaditud dokumendis, töödeldud e-kirjas või allalaaditud veebilehel olev juhis algsed juhised üle kirjutada. Kaudne variant selliste võõraste sisude kaudu on ohtlikum, sest kasutaja ise ei sisesta midagi pahatahtlikku.

03

Kas turvapiiretest ja tulemüürist ei piisa?

Ei. Veebirakenduse tulemüür töötab signatuuridega struktureeritud sisendite üle; rünnak keelemudeli vastu on grammatiliselt korrektne vaba tekst ilma signatuurita ja seda saab väljendada lõpmatus hulgas sõnastustes ja keeltes. Turvapiirded on mõistlik esimene kiht, kuid nad on ise statistilised ja neid saab ümber sõnastada. Kandev kaitse peitub arhitektuuris: õigused tööriista tasandil, mitte usaldus teksti vastu.

04

Mida RAG-rakenduse testimisel täpselt kontrollitakse?

Kas küsija juurdepääsuõigusi rakendatakse dokumentide päringul või alles pärast seda, kas sihitud küsimustega saab taastada teiste rentnike või osakondade sisu, kas sisestatud dokumendid võivad sisaldada juhiseid mudelile, kas kontekst jääb seansside vahel alles ja kas süsteemikäsku saab välja lugeda.

05

Kui kaua LLM-i penetratsioonitest kestab ja mis see maksab?

Piiritletud vestlus- või RAG-rakenduse test hõlmab tavaliselt 5–10 inimtööpäeva. Mitme tööriista ja teistele agentidele delegeerimisega agendisüsteemid võtavad rohkem, sest iga tööriistaõigust tuleb eraldi kontrollida. Hinnalt algab lihtne test umbes 2000 eurost; fikseeritud hinna anname pärast lühikest ulatuse vestlust.

06

Mida peame testi jaoks ette valmistama?

Ligipääsud vähemalt kahele erinevate õigustega kasutajale – see on eeldus, et autoriseerimisvigu üldse tõestada saaks –, ühendatud tööriistade ja andmeallikate kirjelduse, ideaalis süsteemikäsu ning testkeskkonna realistlike, kuid mitte päris andmetega. Ilma teise kasutajata jääb kõige olulisem leiuklass testimata.

Ära oota ründajaid – too oma nõrgad kohad penetratsioonitestiga juba täna välja!

Tasuta konsultatsioon