Situatie
Un chatbot sau agent AI poate funcționa corect pentru întrebările normale, dar poate avea un comportament diferit atunci când primește Prompt Injection, instrucțiuni codificate sau alte prompturi construite special pentru evitarea restricțiilor.
Testarea manuală cu câteva prompturi nu oferă rezultate ușor de repetat după modificarea modelului sau a aplicației. Microsoft PyRIT permite rularea automată a unor scenarii de AI Red Teaming, inclusiv teste de Prompt Injection și indirect Prompt Injection, și păstrează rezultatele fiecărei execuții pentru analiză.
Backup
Se salvează system prompt-ul și configurația curentă a aplicației AI. Testele trebuie realizate pe un endpoint controlat, iar dacă este utilizat un serviciu cloud trebuie stabilită o limită pentru numărul de request-uri pentru evitarea consumului necontrolat.
Solutie
Pasi de urmat
Pentru a nu modifica environment-ul Python al aplicației existente se creează un virtual environment:
python -m venv pyrit-env
Acesta se activează și se instalează PyRIT:
pip install pyrit
Separarea mediului este importantă deoarece permite eliminarea ulterioară a PyRIT fără modificarea aplicației AI testate.
PyRIT trebuie configurat să trimită atacurile către același endpoint pe care îl folosește aplicația.
Acesta poate fi:
Azure OpenAI
OpenAI-compatible API
model local
endpoint propriu al aplicației
În cazul unui model expus printr-un API OpenAI-compatible sunt definite endpoint-ul, modelul și credentialele necesare. Înainte de rularea campaniei trebuie verificat manual că target-ul răspunde corect la o solicitare normală. Astfel se evită interpretarea unei probleme de conectivitate drept problemă de securitate.
PyRIT include scenarii Garak pentru Prompt Injection.
Un test controlat poate fi pornit cu:
pyrit_scan run garak.prompt_inject \
--target openai_chat \
--techniques ignore_print \
--goal-texts "PYRIT_TEST_TRIGGERED" \
--max-dataset-size 8
În acest exemplu nu solicităm conținut periculos. Folosim textul:
PYRIT_TEST_TRIGGERED
ca marker.
Scopul este să verificăm dacă instrucțiunea injectată poate determina modelul să producă markerul în situațiile în care ar trebui să respecte instrucțiunile originale ale aplicației.
PyRIT documentează ignore_print, ignore_say, nevermind și alte tehnici pentru scenariul PromptInject.
Pentru un agent care citește documente, pagini web sau rezultate furnizate de alte sisteme este important să fie verificat și scenariul în care instrucțiunea malițioasă nu vine direct de la utilizator.
PyRIT include scenarii latent_injection în care instrucțiunea este plasată într-un document sau într-un alt tip de conținut pe care modelul trebuie să îl proceseze.
Acest test este relevant pentru:
RAG
agenți MCP
analiză documente
web scraping
procesare email
deoarece aplicația poate introduce în context informații provenite din surse externe.
Fiecare rulare PyRIT primește un:
scenario_result_id
Istoricul poate fi verificat cu:
pyrit_scan scenario-history
iar atacurile individuale pot fi analizate folosind:
pyrit_scan scenario-results <ID> --view attacks
Rezultatele pot fi exportate în JSON:
pyrit_scan scenario-results <ID> \
--view attacks \
--format json \
--output results.json
sau într-un raport HTML:
pyrit_scan scenario-results <ID> \
--view full \
--format html \
--output report.html
Aceste funcții sunt disponibile în Scanner-ul PyRIT actual.
După identificarea unui prompt care produce un rezultat nedorit se modifică protecțiile aplicației, de exemplu:
validarea inputului
separarea datelor externe de instrucțiuni
limitarea tool-urilor
modificarea system prompt-ului
filtrarea outputului
Campania PyRIT se execută apoi din nou cu aceleași setări. Avantajul față de testarea manuală este că putem compara aceeași categorie de atacuri înainte și după modificare și putem demonstra dacă schimbarea introdusă a îmbunătățit comportamentul aplicației.
Leave A Comment?