Testarea automată a unui agent AI împotriva Prompt Injection folosind Microsoft PyRIT

Configurare noua (How To)

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.

Tip solutie

Permanent

Voteaza

(10 din 17 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?