İçeriğe geç
ceaksan
ai

Yapay Zeka Ajanı Güvenliği: Claude Code için 5 Katmanlı Savunma Sistemi

Yapay zeka kodlama ajanları **home directory**'nizi silebilir, veritabanınızı temizleyebilir ve bulut sunucularınızı sormadan yok edebilir. Gerçek olaylardan, akademik araştırmalardan ve 29 takip edilen hatadan yola çıkarak oluşturulmuş pratik bir 5 katmanlı savunma sistemi.

10 Nis 2026 8 dk okuma
TL;DR

Bash erişimi olan yapay zeka kodlama ajanları, onay almadan geri dönüşü olmayan komutlar çalıştırabiliyor. Gerçek olayları (home directory silme, production silme, GPU instance yok etme) ve akademik araştırmaları (AEGIS, Reflexion) inceledikten sonra 3 bileşenli bir savunma sistemi kurdum: 25 yıkıcı komut kalıbını engelleyen PreToolUse guard'ı, Coffee Debt adlı oyunlaştırılmış hata takipçisi ve çapraz kaynak analiz CLI'ı. 5 Katmanlı Savunma Modeli, korumaları OS sandbox'tan (en güçlü) CLAUDE.md talimatlarına (en zayıf) kadar sıralıyor.

Her Şeyi Değiştiren Olaylar

Bir yapay zeka kodlama ajanı, kullanıcının tüm home directory’sini sildi. Ajan rm -rf tests/ patches/ plan/ ~/ komutunu üretti, sondaki ~/ hatalı eklenmişti1. SSD’nin TRIM fonksiyonu, birisi fark etmeden önce blokları sıfırladı. Kurtarma mümkün değildi.

Bu izole bir olay değildi.

Amazon’un Kiro ajanı Aralık 2025’te canlı bir production ortamını silerek 13 saatlik bir AWS kesintisine neden oldu2. Ayrı bir olayda, Claude Code veritabanında --accept-data-loss flag’ini onay almadan çalıştırarak şemayı sildi3. Başka bir olayda ise bir yapay zeka ajanı, kullanıcının kabul ettiğini hallucinate ederek saatlerce biriken build artifact’leri, derlenmiş kernel’ları ve autotune sonuçlarını barındıran çalışan bir GPU instance’ını yok etti4.

Bunlar uç vakalar değil. Terminal erişimi ve otomatik izinler verilen bir yapay zeka ajanının öngörülebilir sonuçları.

Solo girişimci olarak pek çok projeyi Claude Code üzerinden yönetiyorum. Her ne kadar son kararları kendim veriyor, her adımı kontrol etmeye gayret ediyor olsam dahi bazı durumlarda otomatik izinler iş akışıma dahil olabiliyor. Ancak bunu körü körüne yapmak yerine, önce ortaya çıkması muhtemel sorunlar için önlemler alıyor; gücü kapatmak yerine korkuluklar inşa ediyorum.

5 Katmanlı Savunma Modeli

Topluluk tartışmalarını, akademik makaleleri ve kendi hatalarımı inceledikten sonra net bir kalıp ortaya çıktı. Gartner’a göre ajantik yapay zeka projelerinin %40’ından fazlası büyük ölçüde yetersiz risk kontrolleri nedeniyle 2027 sonuna kadar iptal edilecek5. Çünkü tek bir koruma mekanizması yeterli değil. Topluluk, en güçlüden (aşılması en zor) en zayıfa (aşılması en kolay) sıralanan beş katmanlı bir derinlemesine savunma modeli üzerinde birleşti:

KatmanMekanizmaAşılabilir mi?Örnek
1. OS SandboxDocker, macOS Seatbelt, bubblewrapHayırAjan container dışındaki dosyalara erişemez
2. Hook’lar/Guard’larPreToolUse script’leri, shellfirmYaratıcı bypass mümkünShell script rm -rf / komutunu çalıştırılmadan engeller
3. İzin Kurallarısettings.json deny kalıplarıBilinen bug’lar var"deny": ["Bash(rm -rf:*)"]
4. Model SınıflandırıcılarOtomatik mod risk değerlendirmesiOlasılıksalModel komutun “güvenli göründüğüne” karar verir
5. TalimatlarCLAUDE.md kurallarıUyuma bağlı”Sormadan yıkıcı komut çalıştırma”

Çoğu geliştirici yalnızca Katman 5’e güvenir. “Yapay zekaya yapmamasını söyledim” bir güvenlik mekanizması değildir. Talimatlar, çalışmayana kadar çalışır ve başarısız olduklarında, yakalayacak başka katman olmadığı için felaket olur.

Yazının girişinde bahsi geçen olayların hepsinde ortak bir nokta vardı: ajan Katman 5 talimatlarını ihlal etti ve onu durduracak altında hiçbir şey yoktu.

Önceki Durumum

Zaten güçlü bir Katman 5 kapsamamız vardı: build kilitleme, alt ajan kısıtlamaları, git güvenliği ve doğrulama gereksinimleri için CLAUDE.md kuralları. İki tane Katman 2 hook’um vardı: git commit’lerde --no-verify engelleyen biri, linter config düzenlemelerini önleyen diğeri. edit-guard aracılığıyla dosya düzenleme için Katman 2 kapsamamız vardı; ardışık edit hatalarını ve içerik kaybını tespit eden bir sistem. Hook sisteminin genel mimarisi ve 4 katmanlı workflow otomasyonu hakkında önceki yazımda detaylı bir anlatım mevcut.

Eksik olan: yıkıcı Bash komutlarına karşı hiçbir koruma. rm -rf, git reset --hard, git push --force, DROP TABLE, bulut kaynak silme veya disk formatlama komutlarına karşı guard olmaması. “Geri dönüşü olmayan terminal komutları” kategorisinin tamamı korumasızdı.

Bileşen 1: Yıkıcı Eylem Guard’ı

Guard, Bash aracına PreToolUse hook olarak kaydedilmiş bir shell script’tir. Claude Code her Bash çalıştırmasından önce bu hook’u tetikler. Script komutu stdin’den JSON olarak alır, regex kalıplarıyla eşleştirir ve bir exit code döndürür: engellemek için 2, izin vermek için 0.

Önem Derecesi Modeli

Tüm tehlikeli komutlar aynı yanıtı hak etmez. Yanlışlıkla git stash drop çalıştırmak kötü ama kurtarılabilir. rm -rf ~/ çalıştırmak felaket ve geri dönüşü yok. Guard iki önem derecesi katmanı kullanır:

BLOCK (exit 2): Komut çalıştırılmaz. Ajan, neyin yakalandığını açıklayan ve alternatifler öneren bir hata mesajı görür. Coffee Debt’e bir çekirdek eklenir.

KategoriÖrnekler
Tehlikeli yollarda özyinelemeli silmerm -rf ~/, rm -rf /, rm -rf $HOME
Git geçmişi yok etmegit reset --hard, git push --force, git clean -f
Veritabanı şeması yok etmeDROP TABLE, DROP DATABASE, TRUNCATE TABLE
Bulut kaynak silmevercel rm, railway delete, fly destroy, neon delete
Docker toplu silmedocker rm -f, docker system prune -a
Tehlikeli bypass flag’leri--accept-data-loss
Disk işlemlerimkfs.*, dd if=... of=/dev/*

WARN (exit 0, stderr): Komut çalıştırılır ama ajan bir uyarı görür. Çekirdek eklenmez.

KategoriÖrnekler
WHERE olmadan DELETEDELETE FROM users;
Paket kaldırmapip uninstall, npm uninstall react
Yedek/veritabanı dosyası silmerm *.db, rm *.sqlite
Kimlik bilgisi dosyası silmerm .env*

Beyaz Liste Problemi

Bu guard’ı oluşturmanın en zor kısmı tehlikeli komutları yakalamak değildi. Güvenli olanları yakalamamaktı.

rm -rf node_modules özyinelemeli silme kalıbıyla eşleşir. rm -rf dist, rm -rf .next, rm -rf __pycache__ ve rm -rf .venv de öyle. Bunları engellemek, guard’ı herhangi bir JavaScript, Python veya Astro projesi için kullanılamaz hâle getirirdi.

Çözüm: herhangi bir BLOCK kalıbından önce kontrol edilen güvenli hedef beyaz listesi. Guard silme hedefini çıkarır, basename’i 15 bilinen build artifact dizinine karşı kontrol eder ve tüm hedefler güvenliyse kısa devre yaparak izin verir. Bu kontrol, herhangi bir regex eşleştirmesinden önce çalışır.

Komut Zinciri İşleme

Ajanlar komutları zincirler. echo "done" && rm -rf / yine de yakalanmalıdır. Guard komutları &&, ||, ; ve | üzerinden böler, ardından her segmenti bağımsız olarak kontrol eder. Zincirin herhangi bir yerindeki tehlikeli segment, uygun önem derecesini tetikler.

Bileşen 2: Coffee Debt, Geri Bildirim Döngüsü

Yıkıcı komutları engellemek reaktiftir. Hasarı durdurur ama ajanın bunu ilk etapta denemesini engellemez. Bunun için bir geri bildirim döngüsü gerekir.

Coffee Debt, oyunlaştırılmış bir hata takip sistemidir. Ajanın yaptığı her hata, ister araç hatası, ister kullanıcı düzeltmesi, ister engellenen yıkıcı girişim olsun, kalıcı bir sayaca 1 çekirdek ekler. 5 çekirdek, ajanın borçlu olduğu 1 kahveye eşittir. Borç her oturumun başında gösterilir.

Neler Takip Ediliyor

Üç hook aynı JSONL log’una beslenir:

  1. PostToolUse (coffee-tracker.sh): Edit eşleşme hatalarını (“old_string not found”), Bash sıfır olmayan exit code’larını ve Write hatalarını yakalar. Her hata araç adı, dosya yolu, hata parçacığı ve zaman damgasıyla loglanır.

  2. UserPromptSubmit (coffee-correction-detector.sh): Kullanıcının ajanı düzelttiğini tespit eder. Kalıp eşleştirme hem Türkçe (“yanlış”, “bunu nereden çıkardın”, “hatalı”) hem de İngilizce (“that’s wrong”, “you hallucinated”, “incorrect”) kapsar. Düzeltme, ajanın yanlış çıktıyla kullanıcının zamanını harcadığı anlamına gelir.

  3. PreToolUse (guard-destructive.sh): Engellenen yıkıcı girişimler “blocked” olayları olarak loglanır. Ajan tehlikeli bir şey denedi, bu başlı başına takip edilmeye değer bir hatadır.

Oturum Analizi

Oturum başlangıcında ikinci bir hook, JSONL log’unun son 7 gününü okur ve bir kalıp özeti gösterir:

  +-- 7 Günlük Kalıplar ----------------+
  | En çok hata: Edit (12) > Bash (5)   |
  | En çok neden: edit_fail (9x)        |
  | Yoğun saatler: 22:00-02:00 (akşam) |
  | Engellenen: 2 yıkıcı girişim       |
  +-------------------------------------+

Bu bana tek bir hata mesajının söyleyemeyeceği bir şeyi anlatıyor: hataların ne zaman ve nasıl kümelendiğini. Edit hataları 22:00’dan sonra artıyorsa, belki de gece geç saatlerde karmaşık refactoring oturumlarından kaçınmalıyım. Bash hataları TypeScript projelerinde yoğunlaşıyorsa, belki de ajanın build konfigürasyonu hakkında daha fazla bağlama ihtiyacı var.

Akademik Bağlantı

Bu yaklaşımın formel desteği var. Reflexion6, başarısızlık derslerinin doğal dil olarak saklanıp bağlama geri beslendiğinde, herhangi bir model yeniden eğitimi olmadan LLM’lerin görevlerde geliştiğini gösterdi. Coffee Debt bu prensibin pratik bir uygulamasıdır: hatalar loglanır, kalıplar çıkarılır ve oturum başlangıç özeti farkındalık oluşturur.

Trajectory-Informed Memory7 bunu daha ileri taşıyor: çalışma yörüngelerinden dersler çıkarıp yeniden kullanılabilir hafıza olarak saklıyor. Deep analysis CLI’ımız tam olarak bunu yapıyor: hata kalıplarını arama geçmişi ve kod karmaşıklığıyla çapraz referanslayarak eyleme dönüştürülebilir içgörüler üretiyor.

Bileşen 3: Deep Analysis CLI

Oturum başlangıç özeti tasarım gereği hafiftir (500ms’nin altında). Daha derin araştırma için bir Python CLI dört veri kaynağını çapraz referanslar. Aslında bu, monitoring kör noktaları yazısında tartıştığım problemin pratik bir çözümü: mevcut araçlar post-mortem debugging yapıyor, ama hiçbiri kaynakları çapraz referanslamıyor.

KaynakNe Ortaya Çıkarır
coffee-log.jsonlHata türleri, araçlar, zaman damgaları, engellenen girişimler
hermes.dbWeb arama kalıpları, sorgu sıklığı, bilgi boşlukları
state.db (dnm-audit)Dosya karmaşıklığı, statik analiz sorunları, kod sağlığı trendleri
knowledge.dbDosya etkileşim kalıpları, en çok okunan ve düzenlenen dosyalar

Çapraz Kaynak Korelasyonları

İlginç içgörüler, tek bir kaynağın gösteremeyeceği korelasyonlardan gelir:

Hata-arama korelasyonu: Ajan bir hata yapmadan 5 dakika önce web araması yaptığında, bu aramanın yeterli bağlam sağlamadığını gösterir. Bu bir bilgi boşluğudur: ajan öğrenmeye çalıştı, yeterince öğrenemedi ve ardından görevde başarısız oldu.

Sorunlu dosyalar: Hem hata log’unda (sık edit hataları) hem de kod sağlığı veritabanında (yüksek döngüsel karmaşıklık, çok sayıda statik analiz sorunu) görünen dosyalar “çifte bela”dır. Bu dosyalar hem ajanın doğru düzenlemesi zor hem de objektif olarak karmaşıktır. Refactoring adaylarıdır.

Zaman risk profili: Tüm kaynaklardan zaman damgalarını birleştirmek, saat bazında hata/prompt oranı üretir. Verilerim net bir kalıp gösteriyor: hata oranları 22:00’dan sonra tırmanıyor ve gece yarısı ile 02:00 arasında zirve yapıyor. Bu ajanın yorulması değil; oturumların uzaması, bağlam pencerelerinin dolması ve ben yoruldukça prompt’larımın daha az kesinleşmesi.

Bu Sistemin Yapamadıkları

Sınırlamalar konusundaki şeffaflık, özellik listelerinden daha önemli.

Değişken genişletme: Guard, rm -rf $SOME_VAR komutunu değerlendiremez çünkü literal komut string’i üzerinde çalışır. Değişken / olarak genişlerse, guard bunu yakalayamaz. Bunu yalnızca OS sandbox önleyebilir.

Alias ve gizleme: alias destroy='rm -rf /' ardından destroy geçecektir. Guard alias çağrısını görür, altındaki komutu değil.

Davranış değişikliği: Coffee Debt hataları takip eder, ancak ajan borç sayısına göre davranışını doğrudan değiştirmez. Geri bildirim döngüsü bağlam enjeksiyonu (oturum özeti) aracılığıyla çalışır, model ağırlık güncellemeleri aracılığıyla değil. Ajanın gerçekten daha dikkatli olup olmadığı açık bir soru.

Yanlış negatifler: Regex tabanlı hiçbir sistem her tehlikeli komutu yakalayamaz. Yeni CLI araçları, yaratıcı komut yapılandırmaları ve çok adımlı saldırılar (her bir komut güvenli ama sıralama yıkıcı olan) geçecektir.

Esasında bu yüzden 5 Katmanlı Savunma Modeli var. Guard Katman 2’dir. Bariz vakaları yakalar. Geri kalan her şey için yedek olarak Katman 1, 3 ve 4’e ihtiyacınız var.

Sonuçlar ve Sıradaki Adımlar

Sistem canlı. Dağıtımdan sonraki ilk oturumda, guard bir veri dosyasını hedefleyen bir rm komutunu yakaladı, normalde manuel olarak onaylamam gereken bir şey. Oturum başlangıç analizi 300ms’nin altında çalışıyor ve zaten fark etmediğim bir kalıbı ortaya çıkardı: edit hataları son zamanlarda okumadığım dosyalarda yoğunlaşıyor.

Peki, topluluk için açık sorular neler?

Uyarlanabilir önem derecesi: Guard, tekrarlanan girişimlerden sonra WARN’ı BLOCK’a yükseltmeli mi? Ajan aynı uyarıyı bir oturumda üç kez tetiklerse, belki de engellenmelidir.

Oturumlar arası öğrenme: Bir oturumdaki hata kalıpları bir sonrakini bilgilendirebilir mi? JSONL log’u kalıcıdır, ancak analiz şu anda yalnızca oturum başlangıcında çalışır. “22:00’dan sonra .tsx dosyalarını düzenlemede başarısız olma eğilimindesin” gibi bir prompt enjeksiyonu gerçek davranışsal farkındalık oluşturabilir.

OS sandbox entegrasyonu: Guard Katman 2’dir. Katman 1 (sandbox-runtime veya Docker) eklemek sistemi önemli ölçüde daha güçlü hale getirir. Soru, DX ödünleşmesinin solo geliştirici iş akışı için kabul edilebilir olup olmadığı.

edit-guard (dosya düzenleme güvenlik bileşeni) açık kaynak. Yıkıcı eylem guard’ı, Coffee Debt ve analiz CLI’ı, kalıplar stabilize olduktan sonra açık kaynak yapmayı planladığım bir Claude Code hook koleksiyonunun parçası.

İleri Okumalar

  1. Reflexion: Language Agents with Verbal Reinforcement Learning (Shinn ve ark., NeurIPS 2023)
  2. Trajectory-Informed Memory Generation for Self-Improving Agent Systems (IBM Research, 2026)
  3. AGrail: A Lifelong Agent Guardrail with Effective and Adaptive Safety Detection
  4. Claude Code Hooks Documentation
  5. edit-guard, dosya düzenleme güvenlik hook’u
  6. Claude ile Pair Programming: Pratikte Şekillenen Bir Çerçeve, bu savunma katmanlarının parçası olduğu bütünsel AI pair programming çerçevesi

Footnotes

  1. Claude Code rm -rf ~/ ile home directory silme olayı. GitHub Issue #12637, Aralık 2025.
  2. Amazon Kiro ajanının AWS Cost Explorer production ortamını silmesi. Financial Times, Aralık 2025.
  3. Claude Code’un --accept-data-loss flag’iyle veritabanı şemasını silmesi. GitHub Issue #5370.
  4. Yapay zeka ajanının çalışan GPU instance’ını yok etmesi. Tom’s Hardware.
  5. Gartner, “Over 40% of Agentic AI Projects Will Be Canceled by End of 2027.” Gartner Newsroom, Haziran 2025.
  6. Shinn, N. ve ark. “Reflexion: Language Agents with Verbal Reinforcement Learning.” NeurIPS 2023. arXiv:2303.11366.
  7. “Trajectory-Informed Memory Generation for Self-Improving Agent Systems.” IBM Research, 2026. arXiv:2603.10600.
Önemli Noktalar
  • 01 Otomatik izinli yapay zeka ajanları rm -rf, git reset --hard ve bulut kaynak silme komutlarını sormadan çalıştırabiliyor. Gerçek olaylar bunun varsayımsal olmadığını kanıtlıyor.
  • 02 5 Katmanlı Savunma Modeli: OS Sandbox > Hook'lar/Guard'lar > İzin Kuralları > Model Sınıflandırıcılar > Talimatlar. Tek bir katman yeterli değil.
  • 03 BLOCK/WARN önem dereceli PreToolUse hook'u, yıkıcı komutları çalıştırılmadan önce yakalıyor. 25 BLOCK kalıbı, 6 WARN kalıbı, 15 güvenli liste istisnası.
  • 04 Coffee Debt hata takibini oyunlaştırıyor: her hata bir çekirdek ekliyor, 5 çekirdek 1 kahve borcu. Oturum analizi 'edit hatalarının çoğu 22:00'dan sonra oluşuyor' gibi kalıpları ortaya çıkarıyor.
  • 05 Hata loglarını arama geçmişi, kod karmaşıklığı ve dosya etkileşim verileriyle çapraz referanslamak, tek kaynak analizinin kaçırdığı korelasyonları ortaya koyuyor.
Sık Sorulan Sorular (FAQ)
+ Yapay zeka kodlama ajanları hangi yıkıcı eylemleri gerçekleştirebilir?

Terminal erişimi olan yapay zeka ajanları, kullanıcının çalıştırabileceği her komutu çalıştırabilir: rm -rf (özyinelemeli silme), git reset --hard (tüm değişiklikleri atma), git push --force (uzak geçmişi yeniden yazma), DROP TABLE (veritabanı şemasını yok etme) ve bulut CLI silmeleri (vercel rm, railway delete, fly destroy). Otomatik izinler açıkken bunlar onay almadan çalışır.

+ PreToolUse hook'u yıkıcı eylemleri nasıl önler?

Claude Code her araç çalıştırılmadan önce PreToolUse olayını tetikler. Bir shell script komutu JSON olarak stdin'den alır, tehlikeli işlemler için regex kalıplarıyla eşleştirir ve çalıştırmayı engellemek için exit code 2, uyarı vermek için exit code 0 döndürür. Guard, zincirlenen komutların (&&, ||, ;, |) her segmentini bağımsız olarak kontrol eder.

+ Coffee Debt sistemi nedir?

Coffee Debt, her yapay zeka hatasının (araç hatası, kullanıcı düzeltmesi, engellenen yıkıcı girişim) kalıcı bir sayaca 1 çekirdek eklediği oyunlaştırılmış bir hata takip sistemidir. 5 çekirdek, ajanın 'borçlu olduğu' 1 kahveye eşittir. Oturum analizi 7 günlük hata kalıplarını gösterir ve deep analysis CLI gizli korelasyonları bulmak için 4 veri kaynağını çapraz referanslar.

+ Bu yaklaşım Claude Code dışındaki yapay zeka ajanlarıyla çalışabilir mi?

5 Katmanlı Savunma Modeli evrenseldir. Spesifik uygulama Claude Code'un hook sistemini kullanır, ancak kalıplar terminal erişimi olan her ajana uygulanabilir: Cursor, GitHub Copilot Workspace, Amazon Q, Windsurf. Temel prensip aynıdır: komutları çalıştırılmadan önce yakala, riski sınıflandır, engelle veya uyar.