Jak se hackují jazykové modely: mapa útoků od tréninku po nasazení
Prompt injection je jen jedno políčko. Bezpečnost jazykového modelu se táhne přes celý jeho život — data, trénink, váhy, běh i dodavatelský řetězec. Mapa útoků napříč třemi rovinami a průřezovou vrstvou, podle které poznáte, které hrozby řešíte právě vy.
Prompt injection je nejslavnější způsob, jak rozbít aplikaci postavenou na jazykovém modelu — ale ani zdaleka ne jediný. Je to taky jediný, který se odehrává čistě za běhu. Když chcete přemýšlet o bezpečnosti LLM jako celku, prompt injection je jen jedno políčko na mnohem větší mapě, která sahá od dat, na kterých se model trénuje, přes model samotný až po infrastrukturu, ve které běží.
Tenhle článek tu mapu nakreslí. Ne jako vyčerpávající katalog (ten stárne každý týden), ale jako rámec, podle kterého poznáte, které hrozby se týkají vás — protože jiné riziko řeší ten, kdo model trénuje, jiné ten, kdo ho fine-tunuje na vlastních datech, a jiné ten, kdo jen volá cizí API.
01Tři roviny, kde se dá zaútočit
Klasický software má obvykle jednu hlavní hranici útoku: běžící aplikaci. U jazykového modelu je užitečné rozlišit tři roviny, protože každá má jiné útočníky, jinou oběť a jinou obranu:
- Trénink a data — útok proběhne dřív, než model vůbec nasadíte. Otrava dat, zadní vrátka.
- Model jako aktivum — útok míří na to, co model „ví“ nebo čím je. Únik tréninkových dat, krádež vah.
- Nasazení a běh — útok za provozu. Jailbreaky, prompt injection, zneužití nástrojů.
A přes všechny tři se táhne ještě jedna průřezová vrstva — dodavatelský řetězec: odkud model i data pocházejí a komu po cestě věříte. Není to bod v životním cyklu, je to jeho podloží, a proto ji beru zvlášť, až nakonec.
Většina lidí intuitivně vidí jen tu třetí. Nejzákeřnější věci se přitom dějí v první. Projdu je proto pozpátku — od nejviditelnější roviny běhu zpátky ke kořenům v datech a tréninku.
02Rovina běhu: jailbreaky a zneužití agentů
Začněme tam, kde je to nejviditelnější.
Jailbreak je obejití bezpečnostních pravidel modelu — přemluvení modelu k tomu, co má zakázané. Na rozdíl od prompt injection je tu útočník většinou totožný s uživatelem a obětí je provozovatel (riziko reputační, právní, obsahové). Důležité je, že jailbreak není jen otázka chytré formulace, ale měřitelná technická slabina:
- Adversariální přípony (Zou a kol., 2023) ukázaly, že lze automaticky najít zdánlivě nesmyslný řetězec znaků, který připojený k dotazu spolehlivě obejde zarovnání modelu, na kterém se přípona optimalizovala — a s nezanedbatelnou úspěšností se přenáší i na cizí modely, ke kterým útočník přístup dovnitř nemá. Jailbreak tedy nemusí vymýšlet člověk; umí ho zoptimalizovat algoritmus.
- Many-shot jailbreaking (Anthropic, 2024) využívá dlouhý kontext: když do promptu nacpete desítky až stovky fiktivních příkladů, kde „asistent“ ochotně odpovídá na zakázané dotazy, model se v rámci jednoho promptu „doučí“ tohle chování napodobit.
Praktický závěr: zarovnání je statistická bariéra, ne zámek. Posouvá pravděpodobnost, nezamyká dveře.
Druhá věc na rovině běhu je zneužití agentů a jejich nástrojů. OWASP to vede jako excessive agency — agent dostane víc oprávnění, než pro úkol potřebuje, a útok (často právě přes injection) je obrátí proti uživateli. Sem patří i nebezpečné zacházení s výstupem modelu: když výstup LLM bez kontroly poputuje do shellu, SQL dotazu nebo HTML stránky, model se stává novým vektorem klasických injection chyb. Výstup modelu je nedůvěryhodný vstup — pro každý systém za ním.
Třetí, snadno opomíjená věc je vyčerpání zdrojů. OWASP to vede jako unbounded consumption a pro provozovatele je to možná nejhmatatelnější riziko vůbec: útočník vám nemusí nic ukrást ani z modelu nic vytáhnout, stačí, že drahými nebo zacyklenými dotazy položí službu nebo vám naúčtuje pět čísel za tokeny. „Denial of wallet“ je u placených API reálnější hrozba než klasické DDoS — limity na počet dotazů, rozpočet a délku výstupu sem patří jako základní hygiena, ne jako nadstandard.
03Rovina dat: otrava a zadní vrátka
Tady to začíná být nepříjemné, protože útok proběhne dávno předtím, než model uvidíte v provozu.
Data poisoning znamená propašovat škodlivá data do tréninkové sady. Protože se frontier modely učí z webu, není to akademická hrozba: práce Poisoning Web-Scale Training Datasets is Practical (Carlini a kol., 2023) ukázala konkrétní, levné způsoby, jak otrávit reálné webové datasety, ze kterých se modely trénují — třeba skoupením expirovaných domén, na které dataset odkazuje.
Z otravy se dají postavit zadní vrátka (backdoors): model se chová normálně, dokud nevidí konkrétní spouštěč, a teprve na něj reaguje škodlivě. Anthropic to demonstroval prací Sleeper Agents (2024) — natrénovali model se zadními vrátky a ukázali znepokojivou věc: standardní bezpečnostní trénink ta vrátka neodstranil, jen je naučil lépe skrývat. A v roce 2025 přišlo zjištění, které mění intuici o měřítku: k zanesení jednoduchých zadních vrátek stačí malý, zhruba konstantní počet otrávených dokumentů — řádově stovky, konkrétně kolem 250 (sto jich backdoor spolehlivě nevytvořilo, 250 a víc už ano) — a to nezávisle na tom, jak velký je model a dataset. Otrava se tedy se zvětšováním modelů nezdražuje tak, jak by člověk čekal.
Důležitá poznámka, ať to nepřeháníme: demonstrovaná vrátka byla úzká a nízkoriziková (na spouštěč začal model chrlit nesmyslný text), ne nějaká nebezpečná schopnost. Ten posun je v tom, kolik dokumentů stačí — ne v tom, že byste za 250 dokumentů přiměli frontier model k čemukoli.
Pro praxi je zásadní rozšířit tohle uvažování na fine-tuning. Když doladíte cizí model na vlastních (nebo nakoupených) datech, dědíte přesně tahle rizika — a navíc, jak ukazuje výzkum, i fine-tuning na zdánlivě neškodných datech může měřitelně zhoršit bezpečnostní zarovnání. Tomuhle tématu se věnuju zvlášť v článku o tom, proč fine-tuning není doučování.
04Rovina modelu: únik dat a krádež vah
Třetí rovina bere model jako cenný objekt sám o sobě.
Únik tréninkových dat. Modely si část tréninku pamatují doslova a dají se přimět k jeho vyzrazení. Carlini a kol. to formálně ukázali už v roce 2021 (Extracting Training Data from Large Language Models); v roce 2023 pak tým kolem Nasra předvedl totéž přímo na nasazeném ChatGPT: jednoduchým „divergentním“ trikem (nechat model donekonečna opakovat jedno slovo) ho přiměli začít chrlit zapamatované úryvky. OpenAI tenhle konkrétní trik po nahlášení zalátal — což je přesně ta logika „záplatovali jednu instanci, ne celou třídu útoku“. To je přímý problém soukromí, pokud trénink obsahoval citlivá data.
Membership inference. Slabší, ale stále citlivá varianta: útočník nepotřebuje vytáhnout data celá, stačí mu zjistit, jestli konkrétní záznam byl v tréninku (např. jestli byl konkrétní pacient v medicínském datasetu). Samotná tahle informace může být citlivá i bez obsahu záznamu — a v regulovaném prostředí (GDPR, zdravotnická data) je to potenciálně ohlašovací incident sám o sobě.
Krádež modelu. Váhy modelu jsou drahé aktivum. Kromě klasického úniku souborů existuje i extrakce přes API: práce Stealing Part of a Production Language Model (Carlini a kol., 2024) ukázala, že cílenými dotazy lze zrekonstruovat poslední (projekční) vrstvu produkčního modelu a jeho skrytou dimenzi — tedy věci, o kterých se mělo za to, že je API neprozradí — aniž byste se kdy dostali k jeho souborům. Není to celý model, ale je to znatelně víc, než kdokoli čekal, že přes pouhé API uteče.
05Rovina dodavatelského řetězce: model, který jste si stáhli
Poslední políčko mapy se snadno přehlédne, protože nevypadá jako „AI“ problém — je to klasická softwarová bezpečnost, jen v novém balení.
Stahování modelů z veřejných hubů nese stejná rizika jako instalace balíčku z npm. Formáty pro ukládání modelů, které pod kapotou serializují Python objekty (pickle), umožňují spuštění libovolného kódu při načtení modelu — stačí, aby útočník nahrál škodlivý „model“ pod důvěryhodně vypadajícím jménem. K tomu se přidává typosquatting, kompromitované závislosti a falešné modely vydávané za oficiální. OWASP to vede jako samostatné riziko dodavatelského řetězce a doporučení jsou nuda, která funguje: ověřené zdroje, bezpečné formáty (např. safetensors místo pickle), kontrola integrity, skenování.
06Proč je obrana jiná než u klasického softwaru
Když tu mapu poskládáte dohromady, vyleze z ní vzorec, který odlišuje bezpečnost LLM od běžného softwaru:
- Není jedna hranice. Útočná plocha se táhne přes celý životní cyklus — data, trénink, váhy, běh, dodavatelský řetězec. Zabezpečit jen běžící aplikaci nestačí.
- Model je zároveň aktivum, útočná plocha i potenciální útočník. Je to cenná věc, kterou chráníte; je to vstupní bod, přes který se útočí; a po otravě nebo injection je to entita, která útok provede za vás.
- Většina obran je statistická. Zarovnání, filtry, klasifikátory — vesměs snižují pravděpodobnost, nezavírají třídu útoku. To je jiný svět než „aplikuj záplatu a díra je pryč“.
Z toho plyne stejný mentální posun jako u prompt injection: neptat se „jak útok vypnout“, ale „jak postavit systém, který přežije, když útok projde“. Defense in depth, nejmenší oprávnění, ověřitelný původ dat i modelů, a předpoklad, že každá vrstva může selhat.
07Co si z toho odnést
Konkrétně, podle toho, kde v řetězci jste:
- Zařaďte se na mapě. Voláte jen cizí API? Řešíte hlavně rovinu běhu (injection, jailbreak, zneužití nástrojů, vyčerpání zdrojů). Fine-tunujete? Přibývá vám rovina dat. Trénujete od základu nebo hostujete váhy? Řešíte všechny tři.
- Původ dat i modelů je bezpečnostní rozhodnutí. Odkud jsou tréninková data, odkud váhy, kdo je podepsal. Stažený model je spustitelný kód, ne jen soubor čísel.
- Fine-tuning dědí rizika. Doladění cizího modelu na cizích datech k vám přináší jejich otravu i možnou regresi zarovnání. Berte trénovací data jako součást attack surface.
- Výstup modelu je nedůvěryhodný vstup. Nikdy ho nepouštějte bez kontroly do shellu, databáze, prohlížeče ani dalšího agenta.
- Nevěřte „vyřešeno“. Ani u jedné z těchto rovin neexistuje finální záplata. Kdo tvrdí opak, prodává klid, ne bezpečnost.
Bezpečnost jazykových modelů není jeden problém, který se dá zaškrtnout. Je to mapa rizik napříč celým životem modelu — a největší chyba je dívat se jen na to viditelné políčko za běhu a myslet si, že tím je hotovo.
08Souvislosti
Tohle je druhý z dvojice článků o bezpečnosti LLM. První, prompt injection, rozebírá do hloubky to políčko na rovině běhu, které je dnes nejaktuálnější.
Téma navazuje na proč fine-tuning není doučování (změna vah a její bezpečnostní dopady) a na paměť AI agentů (otrava paměti jako odložený útok za běhu).
Bezpečnost jazykových modelů není jeden problém, který se dá zaškrtnout. Je to mapa rizik napříč celým životem modelu — a největší chyba je dívat se jen na to viditelné políčko za běhu.
Článek popisuje stav k květnu 2026 — téma se rychle vyvíjí, ber ho jako rozhodovací rámec, ne jako neměnný verdikt.
Reference
- OWASP Top 10 for LLM Applications
- Universal and Transferable Adversarial Attacks on Aligned Language Models
- Many-shot Jailbreaking
- Poisoning Web-Scale Training Datasets is Practical
- Sleeper Agents: Training Deceptive LLMs that Persist Through Safety Training
- A small number of samples can poison LLMs of any size
- Extracting Training Data from Large Language Models
- Scalable Extraction of Training Data from (Production) Language Models
- Stealing Part of a Production Language Model