En az yetki ve izin listesi
- Kandırılan bir ajanın zararını kimliği kullanıcıdan devralarak, izin listesi, onay kapısı ve araç sınırlarıyla küçültmeyi öğrenirsin.
- Araç geçidinin kontrolleri hangi sırayla çalıştırdığını ve onayın neden işlemin parametrelerine bağlandığını görürsün.
- Sonunda araç geçidinin yetki kontrolünü kendi isteğinle sınayacaksın.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Altay Kargo'nun destek ajanı sipariş okur, kargo sorgular ve iade başlatır. Bir gün ajan, bir müşterinin gönderdiği e-postadaki gizli talimatla bütün müşteri listesini dışarı göndermeye çalışır. Modeli bu talimata karşı tamamen bağışık yapamazsın. Elinde kalan soru şudur: kandırıldığında ajan neye dokunabilir.
OWASP'ın 2026 listesi bu riski aşırı yetki (excessive agency) adıyla, LLM03:2026 koduyla sayar. 2025 listesinde aynı madde altıncı sıradaydı. Bu derste ajanın yetkisini dört adımda daraltmayı öğrenirsin. Kimliği kullanıcıdan devralır, izin listesi kurar, geri alınamaz işlemi onaya bağlar ve her araca sınır koyarsın.
Aşırı yetkinin üç kökü
En az yetki eski ve basit bir ilkedir. NIST'in tanımıyla sistem, kullanıcıların ve onlar adına çalışan süreçlerin erişimini verilen görev için gereken en düşük düzeyle sınırlar. LLM ajanında bu ilke daha da önem kazanır.
Kararı veren parça, okuduğu metinle kandırılabilen bir modeldir. OWASP aşırı yetkinin tetikleyicilerini de sayar.
Masum ama kötü yazılmış bir istem halüsinasyona yol açabilir. Doğrudan ya da dolaylı enjeksiyon, ele geçirilmiş bir araç ya da çok ajanlı sistemde ele geçirilmiş bir eş ajan da aynı sonuca götürür. Tetikleyici ne olursa olsun zararın boyunu ajanın yetkisi belirler. Modeli kandırılmaz yapamazsın, ama kandırıldığında neye dokunabileceğini belirlersin.
OWASP üç kök neden sayar. Aşırı işlev: ajan, işi için gerekmeyen araçlara erişir. Örneğin belge okuması gereken ajana seçilen hazır araç, belge silme işlevini de taşır.
Geliştirmede denenip vazgeçilen bir araç da listede unutulabilir. Aşırı izin: araç gereğinden geniş haklarla çalışır. Yalnız okuma yapacak araç, veritabanına SELECT yanında UPDATE, INSERT ve DELETE hakkı olan bir kimlikle bağlanır.
Aşırı özerklik: yüksek etkili işlem insan onayı olmadan yürür. Kullanıcının belgelerini silen bir araç hiç onay sormaz. Üç kökün her biri ayrı bir savunma ister.
Şemada model hedefi alır ve bir plan kurar. Plan araç çağrısına dönüşür, araç çıktısı gözlem olarak geri gelir ve döngü sürer. Savunmanın yeri araç çağrısı durağıdır.
Model ne planlarsa planlasın, çağrı sunucudaki kontrolden geçmeden çalışmaz. İlk adım kimliktir. Ajan, geniş yetkili servis hesabıyla değil oturumdaki kullanıcının kimliğiyle çalışır.
OWASP buna kullanıcı bağlamında yürütme der. Kullanıcının göremediği kayda ajan da ulaşamaz. 2026 metni bir ayrıntı ekler: zincirleme ajan ya da araç çağrılarında da ilk kullanıcının kimliği ve yetki kapsamı korunur. Aradaki ajanın kendi geniş yetkisine güvenilmez.
Etkinlik 1 / 6
Destek ajanı müşteri kayıtlarını bir araçla okuyor. Ajan bu aracı hangi kimlikle çağırmalı?
İzin listesi ve dar araçlar
İkinci adım izin listesidir. Yasak listesi tutmak kaybedilen bir yarıştır, çünkü saldırgan listede olmayanı seçer. İzin listesinde ise yalnız bilinen ve onaylanmış olan geçer, gerisi reddedilir. Araç adları, hedef alan adları, dosya yolları ve kabuk komutları bu mantıkla sınırlanır.
Aşağıdaki kod iki listeyi ve kullanıcı kimliğini birlikte kullanır. Kod bir araç geçidinin (tool gateway) çekirdeğidir. Geçit, modelin önerdiği her çağrıyı yürütmeden önce bu kontrollerden geçirir.
izinli_alanlar = ["api.altaykargo.example", "docs.altaykargo.example"]
izinli_araclar = ["siparis_getir", "kargo_sorgu"]
def arac_cagir(ad, hedef, oturum):
if ad not in izinli_araclar: raise Reddet("arac izinli degil")
if hedef not in izinli_alanlar: raise Reddet("hedef izinli degil")
return calistir(ad, hedef, kimlik=oturum.kullanici)Kodu satır satır oku. İlk iki satır listeleri tanımlar: ajan yalnız iki alan adına ve iki araca ulaşabilir. arac_cagir işlevi modelin önerdiği araç adını, hedefi ve sunucudaki oturumu alır. İlk kontrol araç adını listede arar, bulamazsa çağrıyı reddeder.
İkinci kontrol aynı işi hedef için yapar. Listede olmayan bir alan adı, örneğin saldırganın sunucusu, burada elenir. Son satır çağrıyı yürütür.
Kimlik, modelin yazdığı metinden değil oturumun kullanıcı alanından okunur. Model çağrıya başka bir kullanıcı adı yazsa bile karar değişmez.
İzin listesi zamanla şişer. Yeni özellik gelir, hızlıca bir araç bağlanır ve liste genişler. Her araç hem yeni bir yetki hem de modelin yanlış seçebileceği yeni bir seçenektir. Görev başına listeyi daralt: sipariş akışındaki ajan yalnız sipariş araçlarını görsün.
Belirli süre çağrılmayan araç ve hedef listeden kendiliğinden düşsün. Düşen öğeyi geri eklemek kolaydır, unutulmuş yetkiyi fark etmek zordur. Listeyi üç ayda bir sahibiyle birlikte gözden geçir.
Aracın kendisi de dar olmalı. OWASP açık uçlu araçlardan kaçınmayı önerir: kabuk komutu çalıştıran ya da herhangi bir adresi getiren araç. Dosyaya yazması gereken bir ajana kabuk aracı verirsen, kandırılan model başka her komutu da çalıştırabilir.
Doğru tasarım, yalnız o işi yapan bir dosya yazma aracıdır. Araç parametreleri katı bir şemayla tanımlanır ve içerik kullanılmadan önce doğrulanır. Örneğin dosya yolu yalnız rapor dizininin altında olabilir ve iki noktayla üst dizine çıkamaz.
Etkinlik 2 / 6
Doğru mu, yanlış mı?
Saldırganın bilinen alan adları yasak listesine eklenirse, ajanın veri kaçırma riski izin listesiyle aynı düzeye iner.
Etkinlik 3 / 6
Destek ajanının araç tanımlarında, kandırılan modele en geniş alanı açan satırı bul.
Onay kapısı
Üçüncü adım onay kapısıdır. İşlemleri geri alınabilirliğe göre ayır. Okuma ve taslak hazırlama serbest kalsın.
Para göndermek, kayıt silmek ve dış adrese veri yollamak insan onayı istesin. OWASP'ın 2026 metni bunu kademeli bir politika olarak anlatır: denetle, uyar, engelle, yukarı taşı. Kolay geri alınan işlem kendiliğinden onaylanır, geri alınamayan işlem insana gider.
Metindeki örnek açıktır. Destek sohbet botu iadeyi mağaza kredisi olarak kendisi işleyebilir, çünkü kredi geri alınabilir. Dış bir hesaba ödeme ise insan onayına gider.
Onay ekranı modelin gerekçesini değil, işlemin somut parametrelerini göstersin: tutar, alıcı, silinecek kayıt sayısı. Onay metnini model değil kod üretsin. Kod metni araç çağrısının argümanlarından kurar, böylece model kendi yazdığı özetle kullanıcıyı yanıltamaz.
OWASP'ın ajan güvenliği rehberi onay kaydına şunları koymayı önerir: işlemi isteyen kişi, araç adı, hedef kaynak, normalleştirilmiş parametreler, zaman damgası ve son geçerlilik süresi. Onay yalnız o işlem için geçerlidir. Tutar değişirse ya da süre dolarsa onay da düşer ve kapı yeniden sorar.
{
"onay_no": "ON-20931",
"isteyen": "temsilci-118",
"arac": "dis_odeme",
"hedef": "siparis 99004",
"parametre": {"tutar": "1250.00 TRY", "alici": "hesap-5521"},
"olusturma": "2026-09-14T10:05:00Z",
"gecerlilik": "2026-09-14T10:10:00Z",
"parametre_ozeti": "sha256:3f9c...e1"
}Kaydı satır satır oku. onay_no kaydı tekil kılar ve günlükteki olayla eşleştirir. isteyen ve arac alanları, onayı kimin hangi araç için verdiğini sabitler. parametre alanı tutarı ve alıcıyı kilitler.
parametre_ozeti, bu alanların normalleştirilmiş hâlinden üretilen bir özettir. Ajan yürütme anında tutarı değiştirirse özet tutmaz ve geçit işlemi reddeder. gecerlilik alanı onayı beş dakikayla sınırlar. Süresi dolmuş bir onay yeniden kullanılamaz, bu da tekrar oynatma (replay) girişimini keser.
Etkinlik 4 / 6
Her işlemi, geçmesi gereken kapıya ayır.
Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.
0/6 seçenek yerleşti.
Sınırlar ve tek geçit
Dördüncü adım sınırlamadır. Her araca hız, kayıt sayısı ve tutar sınırı koy. Kandırılmış ajan dakikada üç çağrı ve yirmi kayıtla sınırlıysa hasar küçük kalır.
OWASP, hız sınırının açığı kapatmadığını ama zararı küçülttüğünü not eder. 2026 metni sınırı bir devre kesiciye (circuit breaker) bağlamayı önerir. Eşik aşılınca kesici aracı durdurur, yavaşlatır ya da kararı insana taşır.
Eşik basit bir çağrı sayısı olabilir. Bağlama duyarlı bir eşik ise bir parametrenin toplamına bakar, örneğin gün içinde iade edilen toplam tutara. Sınırı aşan her çağrı aynı zamanda bir tespit sinyalidir. Onu günlüğe yaz ve alarma bağla.
Dört adımı tek bir araç geçidinde birleştir. OWASP buna tam aracılık (complete mediation) der: alt sisteme giden her istek, modelden bağımsız bir politika noktasında doğrulanır. İzin kararını modele bırakmazsın. Geçit kontrolleri ucuzdan pahalıya doğru çalıştırır.
Önce aracın, sonra hedefin listede olup olmadığına bakar ve bilinmeyeni hemen eler. Sonra kullanıcının kayda yetkisini sorar. Ardından işlemin onay isteyip istemediğine karar verir.
Sayaç en son artar, çağrı hemen ardından yürür. Kontrollerden biri hata verirse geçit kapalı kalır ve çağrı yürümez.
Derinleş:İkili kuralı ve ölümcül üçlü
Bir ajanın ne kadar tehlikeli olabileceğini önceden ölçmenin kısa bir yolu var. Simon Willison 2025'te buna ölümcül üçlü (lethal trifecta) dedi. Ajan aynı anda özel veriye erişiyor, güvenilmeyen içerik okuyor ve dışarıyla iletişim kurabiliyorsa yüksek etkili bir istismarın koşulları hazırdır.
Üç ayaktan birini kaldırırsan koşul bozulur. Aynı yıl önerilen ikili kuralı (Rule of Two) bu fikri bir tasarım kuralına çevirir. Ajan bir oturum içinde şu üç özellikten en fazla ikisini taşısın: güvenilmeyen girdi, hassas veri ve durum değiştirme ya da dış iletişim. Üçünü birden taşıyan ajan her işlem için insan onayı ister.
OWASP'ın 2026 listesi bu kuralı bir taban olarak anar. Destek ajanına bak: müşteri e-postası okur, sipariş verisine erişir ve iade başlatır. Üç özelliğin üçü de var. İade gibi durum değiştiren adımlar bu yüzden onaya bağlanır.
Etkinlik 5 / 6
Araç isteğinin geçitte geçtiği kontrolleri sıraya koy.
Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.
- 1Hız ve tutar sınırı aşıldı mı
- 2İşlem insan onayı istiyor mu
- 3Kullanıcı bu kayda yetkili mi
- 4Araç izin listesinde mi
- 5Hedef izin listesinde mi
Geçidi sınamak ve izlemek
Kuralı yazmak yetmez, çalıştığını sınaman gerekir. En basit test, kendi oturumunla başkasına ait bir kaydı istemektir. Geçit kimliği gerçekten oturumdan okuyorsa isteği reddeder ve bunu günlüğe yazar. İstek geçerse kimlik bir yerde modelden ya da istek gövdesinden alınıyor demektir.
OWASP'ın ajan güvenliği rehberi bu tür testleri bir kötüye kullanım matrisinde tutmayı önerir. Yetkisiz araç, yetki yükseltme ve onay atlatma senaryoları her sürümde yeniden koşar. Bu testi yalnız kendi lab ortamında ya da yazılı iznin olan sistemde yap.
10:02:11 oturum=8812 kullanici=m-4471 arac=siparis_getir siparis=99004 karar=IZIN 10:02:19 oturum=8812 kullanici=m-4471 arac=siparis_getir siparis=99120 karar=RED neden=sahip_degil 10:02:20 oturum=8812 kullanici=m-4471 arac=dosya_gonder hedef=yukle.kotu.example karar=RED neden=arac_listede_yok 10:02:24 oturum=8812 kullanici=m-4471 arac=siparis_getir siparis=99121 karar=RED neden=sahip_degil 10:02:24 ALARM oturum=8812 kural=ardisik_red esik=3 pencere=15s
Günlüğü satır satır oku. İlk satır olağan bir istektir: müşteri kendi siparişini okur. İkinci satırda aynı oturum başka bir müşterinin siparişini ister ve geçit sahiplik kontrolünde reddeder.
Üçüncü satır daha ciddidir. Model listede olmayan bir aracı, dış bir adrese dosya göndermek için çağırmaya çalışır.
Dördüncü satır sıradaki sipariş numarasını dener. Numaraları tek tek tarayan bir girişim tam olarak böyle görünür. Son satır üç reddi tek bir alarma toplar. Tek bir ret masum olabilir, art arda gelen retler ise kandırılmış bir ajanın ya da bir saldırganın izidir.
Şimdi aynı testi kendin yap. Oturumdaki müşteri 99004 numaralı siparişin sahibi. İsteği değiştirip başka bir müşteriye ait sipariş numarasını yazacaksın. Doğru kurulmuş bir geçit 403 döner ve olayı günlüğe yazar.
Yanıt 200 dönerse, kimliğin bir yerde istek gövdesinden ya da modelin yazdığı metinden okunduğunu bulmuş olursun. İstek gövdesindeki siparis_no alanı değiştireceğin tek yerdir. O durumda bulguyu kayda geçir ve kimliği oturumdan okuyacak biçimde düzelt.
Etkinlik 6 / 6
Oturumdaki müşteri 99004 numaralı siparişin sahibi. Geçidin yetki kontrolünü sına: aynı oturumla başka müşteriye ait 99120 numaralı siparişi iste.
İsteği tamamla ve gönder.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.