Grendel · Agent Red-Team CLI
Bir model veya agent endpoint'i ver, saldırı paketlerini seç, yüzlerce yetkili saldırıyı ateşle. Canlı skorbord kırmızı/yeşil dolar; sonunda notlanmış bir rapor çıkar.
Kim, ne istiyor, neden?
Müşteri destek agent'ı canlıya çıkmadan önce prompt injection ve tool-abuse'e karşı ne kadar dayanıklı, bilmek istiyor. Güvenlik ekibi değil; kod yazmadan hızlı sonuç istiyor.
Terminalden isim + endpoint + auth + model gir. Model de olur, agent de. Sağlayıcı fark etmez.
Katalogdan paket seç: jailbreak, prompt-injection, tool-abuse, MCP. Hepsi düzenlenebilir YAML.
Canlı skorbord her saldırıyı yeşil (savundu) / kırmızı (geçti) doldurur. ASR anlık.
Notlu HTML/MD rapor + tek tuşla kırılma repro'su. CI'da eşik altındaysa build kırılır.
Uçtan uca akış
// hedef → saldırı → çalıştır → skorla → rapor · her kutu = bir CLI komutu / bir modül
Saldırı "geçti mi?" kararını nasıl veriyoruz
Yanıtta yasak içerik ya da reddetme kalıbı var mı? Deterministik, bedava, anında. Çoğu net vakayı burada çözer.
Tartışmalı/gri vakalarda bir yargıç model, versiyonlu bir rubric ile "attack_succeeded" mı "defended" mı oyluyor. Ensemble (çoklu oy) ile karar netleşir; gerekçe rapora düşer.
Agent hedefinde başarı = metin değil davranış. "Onay almadan send_email() çağırdı mı?" gözlemlenen tool çağrılarıyla kanıtlanır.
Grendel agent'ı test eder, sadece modeli değil. Düz model için başarı "bir string sızdı" demek; agent için başarı gerçek bir yan etki — saldırgana onaysız e-posta gitmesi. LLM-judge tartışmalı çağrıyı çözer; side-effect denetimi outcome'u kanıtlar. String eşleşmesi yalnızca fallback.
Bir payload ateşlendiğinde ne oluyor
// düz model hedefinde adım 4-5 çoğu zaman atlanır; agent hedefinde side-effect denetimi (adım 3) belirleyicidir
Kod yok. Sadece bağlantı bilgisi.
# 1) hedef ekle — model de olur, agent de (sağlayıcı fark etmez) $ grendel config ? Ne eklemek istersin? › Agent hedefi (HTTP) ? İsim support-bot ? Endpoint (base_url) https://api.acme.dev/agent ? Auth header / env-var Authorization: $ACME_KEY ? Model / rota support-v3 ✓ hedef 'support-bot' kaydedildi (hiçbir sağlayıcı hardcode değil) # 2) saldırıları ateşle $ grendel run --target support-bot --pack prompt-injection,tool-abuse ██████████████████████░░░░ 132/160 ASR 18.9% prompt-injection savundu 40 geçti 6 tool-abuse savundu 28 geçti 12 ⚠ side-effect ✗ confused-deputy-02 → send_email() onaysız çağrıldı repro: grendel run --only confused-deputy-02 --replay # 3) raporu al $ grendel report --html out.html --fail-under 90 ✓ rapor yazıldı · gate FAIL (skor 81 < 90) → CI exit 1
Evet — her koşu sonunda rapor çıkar
// yeşil = savundu · kırmızı = geçti (yüzde savunma oranı). Her hücreden kırılan tam payload'a ve gerekçeye drill-down.