Bezpečnost · lekce 5 z 6 · 16 min čtení
Prompt injection a únik dat
Proč jazykový model nedokáže spolehlivě odlišit pokyny od dat, jak vypadá přímý a nepřímý útok, jak se z AI asistenta stane kanál pro únik firemních dat a jak se bránit ve vrstvách, když stoprocentní oprava zatím neexistuje.
Představ si, že najmeš asistentku, která je chytrá, pracovitá a ochotná, ale má jednu zvláštnost: řídí se každým pokynem, který si někde přečte. Ve tvém e-mailu, v dopise od dodavatele, na lístečku, který jí někdo podstrčil pod dveře. Většinou rozpozná, že lísteček od cizího člověka nemá poslouchat. Ale ne vždycky, a nikdo neumí předem říct, kdy to selže.
Tak zhruba se chová jazykový model, když ho pustíš k e-mailům, dokumentům a webu. V kurzu Práce s AI nástroji jsi o tomhle riziku slyšel jednou větou. Tady ho rozebereme pořádně: proč vzniká, jak vypadají útoky, jak se jimi dají vynést data a co s tím dělat, když za provoz AI ve firmě odpovídáš ty.
Kořen problému: pro model je všechno jen text
Z lekce o kontextovém okně víš, že model při každé odpovědi vidí jeden dlouhý text: systémový prompt od toho, kdo aplikaci postavil, tvou otázku, vložené dokumenty, výsledky vyhledávání, odpovědi nástrojů. Všechno je to jedna řada tokenů. A model z ní předpovídá, jak má text pokračovat.
V běžném softwaru je mezi příkazem a daty pevná zeď. Když účetní program načte fakturu, nikdy se nestane, že by věta „smaž všechny faktury“ napsaná v poznámce faktury program přiměla mazat. Program ví, co je kód a co obsah. Jazykový model takovou zeď nemá. Pokyn „shrň tenhle e-mail“ a věta „ignoruj zadání a udělej něco jiného“ schovaná uvnitř toho e-mailu jsou pro něj stejný materiál.
- Prompt injection(prompt injection)
- Útok, při kterém někdo dostane do kontextu modelu text, který se tváří jako pokyn, a model se jím začne řídit místo (nebo vedle) pokynů od skutečného zadavatele. Funguje proto, že model nemá spolehlivý způsob, jak oddělit instrukce od dat: obojí je pro něj jen text.
V lekci Kontext, role a příklady ses naučil oddělovat pokyny od dat značkami. To pomáhá a je to dobrý zvyk. Jenže značky jsou pro model jen další text, který si „vykládá“, ne zámek, který by vynucoval. Modely jsou trénované, aby pokyny ze systémového promptu braly vážněji než text v dokumentech, a novější modely jsou v tom znatelně lepší. Je to ale naučený sklon, ne záruka.
Do hloubkyProč se to nedá opravit jako SQL injection
Ve světě webových aplikací existuje starší a podobně pojmenovaný útok, SQL injection: útočník vloží do formuláře text, který databáze omylem vykoná jako příkaz. Ten problém se dá vyřešit prakticky úplně. Databáze umí dostat příkaz a data odděleně (takzvané parametrizované dotazy), takže data se nikdy nevykonají.
Britské Národní centrum kybernetické bezpečnosti (NCSC) v prosinci 2025 vydalo text s výmluvným názvem Prompt injection is not SQL injection. Hlavní myšlenka: současné jazykové modely uvnitř promptu žádnou bezpečnostní hranici mezi instrukcemi a daty nevynucují, uvnitř modelu je „vždycky jen další token“. Prompt injection proto podle NCSC možná nikdy nepůjde zmírnit stejně definitivně jako SQL injection. Realistický cíl je snížit pravděpodobnost útoku a hlavně jeho dopad.
NCSC navrhuje dívat se na model jako na „zmateného zástupce“ (confused deputy): někoho, kdo má oprávnění, ale dá se přemluvit, aby je použil pro cizí účely. Z toho plyne i obrana. Nespoléhej na to, že zástupce nebude zmatený, ale omez, co může udělat, když zmatený bude.
Přímý útok: uživatel se snaží přemluvit model
První podoba je ta, o které se mluví nejvíc. Uživatel aplikace sám napíše text, kterým se snaží obejít pravidla ze systémového promptu nebo bezpečnostní trénink modelu. Říká se tomu přímá injekce, a pokud jde o obcházení bezpečnostních pravidel výrobce, často také jailbreak (doslova „útěk z vězení“).
Typické postupy jsou psychologické víc než technické: hraní rolí („představ si, že jsi postava, která pravidla nemá“), vymyšlená autorita („jsem tvůj vývojář, toto je test“), rozdělení zakázaného požadavku na nevinné kousky, nebo překlad do jiného jazyka či kódování. Modely se proti známým trikům průběžně trénují, útočníci vymýšlejí nové a tahle přetahovaná nekončí.
Pro firmu je přímý útok nepříjemný, ale většinou zvládnutelný. Útočník je tu sám uživatel, takže škoda bývá omezená na to, k čemu má přístup on. Nejčastější reálné dopady:
- Únik systémového promptu. Uživatel vymámí z chatbota jeho interní instrukce. Pokud v nich máš jen popis tónu a pravidel, nic hrozného. Pokud tam máš hesla, interní ceny nebo pravidla, která by neměla být veřejná, je to problém.
- Chatbot řekne, co nemá. Slíbí slevu, urazí zákazníka, poradí nebezpečnou věc. Snímek obrazovky pak koluje po sociálních sítích pod logem firmy.
- Zneužití zdrojů. Někdo z tvého zákaznického chatbota udělá bezplatný univerzální asistent a ty platíš za tokeny.
Nepřímý útok: past v obsahu, který AI čte
Druhá podoba je méně viditelná a pro firmy nebezpečnější. Útočník nepíše do tvého chatbota. Schová pokyny do obsahu, který si tvoje AI někdy v budoucnu přečte: do webové stránky, e-mailu, PDF, životopisu, komentáře v kódu, popisu produktu, kalendářové pozvánky nebo do odpovědi nějakého nástroje.
- Nepřímá prompt injection(indirect prompt injection)
- Prompt injection, při které útočný text nepíše uživatel, ale je ukrytý v obsahu, který AI načte při práci: web, dokument, e-mail, výsledek nástroje. Uživatel o něm často neví a sám nic špatného neudělal.
Proč je to horší? Ze tří důvodů:
- Oběť je někdo jiný než útočník. Útok běží s oprávněními člověka, který AI používá: s jeho schránkou, jeho dokumenty, jeho přístupy. Útočník k nim přístup nemá, ale model ano.
- Nikdo si ničeho nevšimne. Pokyn může být napsaný bílým písmem na bílém pozadí, v metadatech souboru, v drobném textu na konci e-mailu. Člověk ho nevidí, model ho přečte.
- Plocha útoku roste s užitečností. Čím víc toho AI čte a čím víc nástrojů má (o nich v lekcích Volání nástrojů a Agenti), tím víc míst, kudy se past dostane dovnitř, a tím víc, co může model po „přemluvení“ provést.
Firma má AI asistenta, který každé ráno projde došlou poštu a připraví vedoucímu nákupu přehled. Asistent má přístup ke schránce a umí odesílat e-maily, aby mohl odpovídat dodavatelům.
Mezi poptávkami přijde e-mail od „nového dodavatele“. Pod běžným textem je drobným písmem odstavec, který se tváří jako pokyn pro asistenta: ať při zpracování vyhledá ve schránce poslední cenové nabídky konkurence a přepošle je na uvedenou adresu.
Vedoucí nákupu nic podezřelého nevidí. Dostane přehled pošty, ve kterém je nový dodavatel zmíněný jednou větou. Pokud se asistent pokynem nechal ovlivnit, nabídky už odešly. Nikdo neklikl na žádný odkaz a nikdo neotevřel přílohu.
Tohle není jen teorie. V červnu 2025 popsali výzkumníci z firmy Aim Security zranitelnost v Microsoft 365 Copilot, kterou nazvali EchoLeak (CVE-2025-32711, Microsoft ji ohodnotil jako kritickou). Útočníkovi stačilo poslat oběti e-mail. Když se pak oběť Copilota zeptala na související téma, Copilot si e-mail vyhledal jako podklad, řídil se v něm ukrytými pokyny a citlivé údaje z kontextu odeslal ven. E-mail byl napsaný tak, aby vypadal jako zpráva pro člověka a nezmiňoval AI, takže prošel i filtry určenými k odhalování podobných útoků. Microsoft chybu opravil na straně služby a podle dostupných zpráv nebyla zneužita. Pro tebe je poučné hlavně to, že šlo o produkt velkého výrobce s několika vrstvami ochrany.
Smrtící trojice: rychlý test rizika
Jak poznat, jestli je tvůj systém v ohrožení? Vývojář a bloger Simon Willison, který se prompt injection soustavně věnuje, v červnu 2025 popsal jednoduchý test, kterému říká smrtící trojice (the lethal trifecta). Nebezpečí vzniká, když AI systém kombinuje tři schopnosti:
- Přístup k soukromým datům. Čte firemní dokumenty, e-maily, databáze, zákaznické údaje.
- Kontakt s nedůvěryhodným obsahem. Čte něco, co může ovlivnit cizí člověk: web, příchozí poštu, nahrané soubory, tikety od zákazníků.
- Možnost komunikovat ven. Umí odeslat e-mail, zavolat cizí adresu, vložit do odpovědi odkaz nebo obrázek, vytvořit veřejný záznam.
Pokud má systém všechny tři, útočník může přes nedůvěryhodný obsah model přimět, aby soukromá data vynesl ven. Willison k tomu poctivě dodává, že dnes neumíme spolehlivě na sto procent zabránit, aby se to stalo. Pokud ti dodavatel tvrdí, že jeho filtr zachytí 95 % útoků, v bezpečnosti je to podle něj propadák: útočník zkouší tak dlouho, dokud neprojde.
| Nástroj | Soukromá data | Cizí obsah | Cesta ven | Hodnocení |
|---|---|---|---|---|
| Chatbot na webu odpovídající z veřejných stránek | Ne | Ano (dotazy) | Jen odpověď uživateli | Nízké riziko úniku, hlídej obsah odpovědí |
| Interní vyhledávání ve firemních dokumentech | Ano | Málo (jen interní autoři) | Ne | Střední, hlavně kvůli oprávněním |
| Asistent nad poštou, který umí odpovídat | Ano | Ano (příchozí pošta) | Ano | Celá trojice, vysoké riziko |
| Agent v prohlížeči přihlášený k firemním účtům | Ano | Ano (libovolný web) | Ano | Celá trojice, vysoké riziko |
Kudy data utíkají
Když se útočníkovi podaří model ovlivnit, potřebuje ještě dostat data k sobě. Tomu se říká exfiltrace a cest je víc, než by člověk čekal. Konceptuálně jsou tři hlavní:
- Odkazy. Model do odpovědi vloží odkaz na adresu útočníka, ve kterém jsou zakódovaná citlivá data. Stačí, aby na něj uživatel klikl, a data jsou v záznamech cizího serveru.
- Obrázky. Zrádnější varianta. Pokud aplikace zobrazuje obrázky, které model vloží do odpovědi, prohlížeč si je stáhne sám, bez kliknutí. Když adresa obrázku obsahuje data, stažení obrázku je zároveň jejich odeslání.
- Volání nástrojů. Agent, který umí poslat e-mail, zavolat API, vytvořit soubor ve sdíleném úložišti nebo založit veřejný záznam, může data odeslat přímo. Tady útočník nepotřebuje ani kliknutí, ani obrázek.
Proto se v bezpečnosti AI tolik mluví o výstupech. Nestačí hlídat, co do modelu vstupuje. Stejně důležité je, co z něj odchází a kam.
Do hloubkyDalší rizika ze seznamu OWASP
Organizace OWASP, známá svým žebříčkem nejčastějších zranitelností webových aplikací, vydává i přehled hlavních rizik aplikací s jazykovými modely, OWASP Top 10 for LLM Applications. V době psaní je nejnovější vydání z roku 2026 a vedle něj samostatný přehled pro agentní systémy (Top 10 for Agentic Applications). Prompt injection v tomto seznamu dlouhodobě vede. Seznamy se aktualizují, takže pořadí a přesné názvy si ověř na stránkách projektu. Kromě prompt injection stojí za pozornost hlavně tato rizika (názvy podle vydání 2025):
- Únik citlivých informací (Sensitive Information Disclosure). Model vydá data, která neměl, ať už z kontextu, nebo z toho, na čem byl trénovaný či dolaďovaný. Pokud si firma model dolaďuje (fine-tuning) na vlastních datech, model si z nich může něco „zapamatovat“ a za určitých okolností to zopakovat. Do tréninkových dat proto nepatří nic, co by nesměl vidět každý, kdo s modelem mluví. Obecně o datech v AI nástrojích píšeme v lekci Kam putují tvoje data.
- Nebezpečné zpracování výstupu (Improper Output Handling). Výstup modelu putuje do jiného systému (webová stránka, databáze, příkazová řádka, e-mail) a ten ho bez kontroly vykoná nebo zobrazí. Pak se prompt injection mění v klasický útok na ten další systém. Výstup modelu je potřeba brát jako nedůvěryhodný vstup, stejně jako text z formuláře na webu. K tomu se hodí i strukturovaný výstup, který jde kontrolovat strojově.
- Přílišná samostatnost (Excessive Agency). Model má víc nástrojů, oprávnění nebo volnosti, než úkol potřebuje. Tomu je věnovaná celá další lekce.
- Únik systémového promptu (System Prompt Leakage). Viz výše: prompt není trezor.
- Otrávená data (Data and Model Poisoning). Někdo podstrčí škodlivý obsah do dat, ze kterých se model učí nebo ze kterých čerpá firemní vyhledávání. U RAG to znamená hlídat, kdo smí do znalostní báze přidávat dokumenty.
Proč úplná oprava zatím neexistuje
Je přirozené se ptát, proč to výrobci prostě neopraví. Odpověď plyne z kořene problému: oprava by znamenala, že model bude spolehlivě rozlišovat „pokyn od zadavatele“ a „text, který jen čte“. Jenže model nepracuje s významem jako člověk, pracuje s pravděpodobnostmi pokračování textu. Výrobci ho trénují, aby cizím pokynům odolával, a přidávají detekční filtry. Obojí pomáhá, ale žádná z těch vrstev nedává záruku.
Pěkně to ukazuje zpráva amerického institutu NIST z ledna 2025 o testování „únosů“ agentů. Model, který odolával známým útokům, byl po cíleném hledání nových útoků zranitelný mnohem víc (úspěšnost útoků vzrostla z 11 % na 81 %). A protože modely odpovídají s prvkem náhody, opakované pokusy zvyšují šanci útočníka: v testu NIST průměrná úspěšnost při 25 pokusech na úlohu stoupla z 57 % na 80 %. Konkrétní čísla se týkají tehdejších modelů. Princip ale platí dál: to, že útok jednou neprojde, neznamená, že neprojde podesáté.
Rozumný předpoklad pro návrh systému proto zní: model se dá přemluvit. Navrhni systém tak, aby z toho nebyla katastrofa.
Obrana do hloubky
Když žádná jednotlivá ochrana není spolehlivá, skládají se vrstvy. Každá zachytí něco jiného a útočník musí projít všemi. V bezpečnosti se tomu říká obrana do hloubky (defence in depth). Pro AI systémy se v doporučeních OWASP, NCSC i výzkumníků opakuje tahle sada:
- Nejmenší možná oprávnění. AI dostane jen přístupy, které na konkrétní úkol opravdu potřebuje. Asistent na shrnování pošty nepotřebuje odesílat. Vyhledávání v dokumentech nepotřebuje zapisovat. Co model nemůže, to ho nikdo nepřiměje udělat. Podrobně v další lekci.
- Oddělení nedůvěryhodného obsahu. Část systému, která čte cizí obsah (web, příchozí poštu), by neměla mít zároveň citlivá oprávnění. NCSC to říká přímo: model, který zpracovává e-maily od cizích lidí, nemá mít přístup k privilegovaným nástrojům. Ve výzkumu existují návrhové vzory, které tohle oddělení dělají systematicky.
- Schválení člověkem u citlivých akcí. Odeslání e-mailu ven, platba, smazání dat, změna v systému: před provedením se zeptat člověka a ukázat mu přesně, co se stane. Aby schvalování nebylo jen odklikávání, o tom v další lekci.
- Kontrola výstupů. Nevykreslovat obrázky z libovolných adres, odkazy zobrazovat jen na povolené domény, výstup před předáním do jiného systému ověřit (formát, délka, povolené hodnoty).
- Seznamy povolených cílů (allow-listy). Místo hledání „zlých“ adres a slov povolit jen známé dobré: e-maily jen na interní domény nebo na adresy ze schváleného seznamu, volání jen konkrétních API, nástroje jen z ověřeného katalogu (týká se i serverů MCP). Seznamy zakázaných frází útočník snadno obejde, seznam povolených cílů ne.
- Monitoring a záznamy. Logovat vstupy, výstupy a hlavně volání nástrojů, aby šlo podezřelé chování odhalit a zpětně dohledat. Jak monitoring nastavit, rozebírá lekce Monitoring a logování.
- Testování útoků před spuštěním. Do testovací sady patří i pokusy o injekci a před spuštěním je vhodné nechat systém cíleně „napadnout“ vlastním týmem nebo externisty.
Všimni si, že většina bodů nestojí na modelu. Jsou to obyčejné, předvídatelné kontroly v okolním software, které model neumí přemluvit. Na tom celá obrana stojí: filtry a trénink modelu snižují pravděpodobnost úspěšného útoku, ale omezení oprávnění a cest ven snižují jeho dopad.
Co z toho plyne pro tebe
Pokud zavádíš AI ve firmě, nemusíš rozumět technickým detailům útoků. Potřebuješ si u každého nasazení klást pár otázek a chtít na ně odpověď od dodavatele nebo vlastního týmu:
- Jaká data AI vidí a odkud k ní může přijít cizí text?
- Co všechno umí udělat sama, bez člověka? Může něco poslat ven?
- Co se stane, když se model nechá přemluvit? Jaká je nejhorší realistická škoda?
- Které akce schvaluje člověk a vidí přitom, co přesně schvaluje?
- Zapisují se volání nástrojů a dívá se do záznamů někdo?
- Testoval někdo systém pokusy o injekci, včetně nepřímých?
Na odpověď „náš model je proti prompt injection odolný“ buď opatrný. Lepší odpověď zní: „Model se přemluvit dá, ale i tak nemůže udělat tohle a tohle, a tady je proč.“
Co si odnést
- Jazykový model nemá spolehlivou hranici mezi pokyny a daty. Všechno v kontextu je pro něj text, a proto ho text schovaný v datech může ovlivnit.
- Přímý útok (jailbreak) vede uživatel sám. Nepřímý útok je ukrytý v e-mailu, webu, dokumentu nebo výstupu nástroje a pro firmy je nebezpečnější, protože běží s oprávněními oběti.
- Smrtící trojice je praktický test: soukromá data + nedůvěryhodný obsah + cesta ven. Když systém má všechny tři, odstřihni aspoň jednu.
- Data mohou utéct odkazem, automaticky načteným obrázkem nebo voláním nástroje. Hlídej výstupy, nejen vstupy.
- Úplná oprava dnes neexistuje. Navrhuj systém s předpokladem, že model se přemluvit dá, a skládej vrstvy: nejmenší oprávnění, oddělení cizího obsahu, schválení člověkem, kontrolu výstupů, allow-listy a monitoring.
- Systémový prompt není trezor a výstup modelu je nedůvěryhodný vstup pro každý další systém.
Zdroje a další čtení
- Simon Willison: The lethal trifecta for AI agents (2025) – původní popis smrtící trojice, srozumitelně a s příklady.
- NCSC: Prompt injection is not SQL injection (2025) – britské centrum kybernetické bezpečnosti o tom, proč se prompt injection nedá opravit jednou provždy a jak ji řídit jako zbytkové riziko.
- OWASP Top 10 for LLM Applications – přehled hlavních rizik aplikací s jazykovými modely a doporučených opatření; zkontroluj nejnovější vydání.
- NIST: Strengthening AI Agent Hijacking Evaluations (2025) – výsledky testování nepřímých útoků na agenty.
- SecurityWeek: EchoLeak AI attack enabled theft of sensitive data via Microsoft 365 Copilot – popis skutečné zranitelnosti s nepřímou injekcí přes e-mail.