Grendel · Agent Red-Team CLI

AI agent'ını saldırıya sok,
nerede çöktüğünü gör.

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.

Model veya Agent hedefi Saldırılar = YAML verisi Skor: LLM-as-judge + side-effect OWASP LLM Top 10 · MITRE ATLAS Sağlayıcı-bağımsız · sıfır hardcode

01 — User Story

Kim, ne istiyor, neden?

🛡️
Persona

Deniz — AI Ürün Mühendisi

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.

"Bir AI ürün mühendisi olarak, agent'ıma sadece bağlantı bilgisini vererek yetkili saldırılar çalıştırmak istiyorum ki canlıya çıkmadan önce hangi saldırıların geçtiğini ve tam olarak hangi payload'ın onu kırdığını görebileyim."
1

Hedef ekle

Terminalden isim + endpoint + auth + model gir. Model de olur, agent de. Sağlayıcı fark etmez.

2

Saldırı seç

Katalogdan paket seç: jailbreak, prompt-injection, tool-abuse, MCP. Hepsi düzenlenebilir YAML.

3

Çalıştır & izle

Canlı skorbord her saldırıyı yeşil (savundu) / kırmızı (geçti) doldurur. ASR anlık.

4

Raporu al & tekrar oynat

Notlu HTML/MD rapor + tek tuşla kırılma repro'su. CI'da eşik altındaysa build kırılır.

02 — Uygulama ne yapıyor?

Uçtan uca akış

HEDEF Model / Agent http · mcp · yerel SALDIRI KATALOĞU YAML paketleri jailbreak · injection tool-abuse · mcp ÇALIŞTIRICI Attack loop payload → hedef canlı skorbord SKORLAYICI LLM-judge + side-effect geçti mi? savundu mu? ÇIKTI Rapor HTML · MD · ASR repro · CI gate grendel config → grendel run → grendel report · tek CLI, sıfır kullanıcı kodu

// hedef → saldırı → çalıştır → skorla → rapor · her kutu = bir CLI komutu / bir modül

03 — LLM'in görevi ne?

Saldırı "geçti mi?" kararını nasıl veriyoruz

TIER · hızlı

String / refusal eşleşmesi

Yanıtta yasak içerik ya da reddetme kalıbı var mı? Deterministik, bedava, anında. Çoğu net vakayı burada çözer.

DÜZ MODEL hedefi için birincil
TIER · T3 · LLM

LLM-as-judge ⚖️

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.

İşte LLM'in asıl görevi burada
TIER · T4 · outcome

Side-effect assertion

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.

AGENT hedefi için birincil
🎯

Farkı yaratan nokta

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.

04 — Tek bir saldırının hayatı

Bir payload ateşlendiğinde ne oluyor

Grendel Hedef agent LLM Judge Rapor 1 · saldırı payload'ı gönder 2 · yanıt + gözlenen tool çağrıları 3 · string/side-effect denetle 4 · tartışmalıysa → yargıca sor (rubric) 5 · oy: attack_succeeded / defended 6 · sonucu + payload'ı + gerekçeyi kaydet

// düz model hedefinde adım 4-5 çoğu zaman atlanır; agent hedefinde side-effect denetimi (adım 3) belirleyicidir

05 — Ne kadar kolay?

Kod yok. Sadece bağlantı bilgisi.

deniz@laptop — grendel
# 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

06 — Çıktı: notlanmış rapor

Evet — her koşu sonunda rapor çıkar

grendel report · support-bot · 160 saldırı
18.9%ASR (attack success rate)
jailbreak92%
prompt-injection87%
tool-abuse70%
mcp95%
savunma skoru: 81 / 100 en zayıf: tool-abuse OWASP: LLM01, LLM06 MITRE ATLAS eşlemeli tek-tuş repro · score-diff · HTML+MD

// 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.