Skip to content

Sandbox Guvenlik Katmani

Isletim sistemi seviyesinde izolasyon, Docker konteynerlari ve allowedTools tuzagi

12 dk okuma
Sandbox layers: four nested isolation boundaries from Docker container to allowedToolsDocker / VMmacOS SandboxPermission ModeallowedTools

--allowedTools "Read,Grep,Glob" ile “salt-okunur” bir ajan olusturuyorsunuz. Ajan yine de bir dosya yaziyor. --allowedTools bayragi bir tercih, uygulama siniri degil — Claude, sizin acikca engellemediginiz Bash’e geri dondu. Isletim sistemi sandbox’u, isleri gercekten cekirdek seviyesinde durduran katmandir.

Claude Code, dosya sistemi ve ag erisimini cekirdek katmaninda kisitlayan isletim sistemi seviyesinde bir sandbox icinde calisir. Bir istem enjeksiyonu Claude’a /etc/shadow okumasi veya HTTP uzerinden veri sizintirilmasi soylese bile, isletim sistemi islemi dosya sistemine veya ag yiginina ulasmadan onler. Bu, Claude’un etrafinda akil yurutebilecegi uygulama seviyesinde filtreleme degil — cekirdek tarafindan uygulanir.

Guvenilmeyen kod uzerinde calisan her sey icin macOS seatbelt veya Docker kullanin. sandbox cekirdek seviyesinde calisir — Claude’un etkileyebilecegi her seyin altinda — bu yuzden ikna yoluyla asilmasi imkansiz olan tek guvenlik katmanidir.

Platform Destegi

Platforma Gore sandbox Arka Uclari

PlatformArka UcMekanizmaDurum
macOSseatbelt (sandbox-exec)Sistem cagrilarini, dosya sistemi yollarini ve agi kisitlayan cekirdek seviyesinde sandbox profilleriTam destekleniyor
Linuxbubblewrap (bwrap)Dosya sistemi izolasyonu icin baglama ad alanlari, ag ad alanlari, surecizolasyonuTam destekleniyor
WSL2bubblewrap (bwrap)Linux ile ayni — WSL2 tam ad alani destegi olan gercek bir Linux cekirdegi calistirirTam destekleniyor
WSL1YokWSL1 sistem cagrilarini Windows NT’ye cevirir; Linux ad alani destegi yokDesteklenmiyor
Yerel WindowsYokseatbelt veya bubblewrap esdegeri mevcut degilDesteklenmiyor

Hangisini kullanmaliyim? Ikisi de calisir. macOS seatbelt 10+ yildir mevcuttur. Linux ad alanlari daha ince kontrol sunar ancak daha yeni cekirdekler (4.8+) gerektirir.

Dosya Sistemi Izolasyonu

Varsayilan olarak sandbox tam olarak uc konuma okuma-yazma erisimi verir:

  • cwd — Claude’u baslattiginiz calisma dizini
  • ~/.claude/ — Claude’un yapilandirma ve oturum verileri
  • Sistem tmpdir — calisma sirasinda gereken gecici dosyalar

Dosya sistemindeki diger her sey engellenir. Claude bu dizinlerin disinda bir dosya okumaya calisirsa, isletim sistemi cekirdegi sistem cagrisini reddeder ve bir izin hatasi dondurur. Bu, Claude ham dosya okumalari denemek icin Bash kullansa bile gecerlidir — sandbox kabugun altinda yer alir.

Terminal window
# Bu basarisiz olur -- /var/log/app sandbox disinda
$ claude -p "Read /var/log/app/error.log" --output-format json

Yanit bir red icerer cunku /var/log/app izin verilen dizin kumesi icinde degildir.

—add-dir ile Erisimi Genisletme

--add-dir bayragi, belirli bir dizin icin sandbox’ta bir delik acar. Birden fazla yola erisim vermek icin birden cok kez kullanabilirsiniz:

Terminal window
# Iki ek dizine erisim ver
$ claude -p "Analyze logs and check config" \
--add-dir /var/log/app \
--add-dir /etc/app-config \
--output-format json

--add-dir’in temel davranislari:

  • Yollar mutlak olmali — goreli yollar reddedilir
  • Yol, cagri aninda mevcut olmali
  • Eklenen dizinler cwd ile ayni seviyede okuma-yazma erisimi alir
  • sandbox siniri su hale gelir: cwd + tum --add-dir yollari + ~/.claude/ + sistem tmpdir
Gotcha

—add-dir tam okuma-yazma erisimi verir. Harici bir dizine salt-okunur erisime ihtiyaciniz varsa, okumalara izin verirken degisiklikleri onlemek icin —disallowedTools “Write,Edit” ile birlestirin.

Ag Izolasyonu

Dosya sistemi izolasyonu tek basina yeterli degildir. Ag kisitlamalari olmadan, guvenligi ihlal edilmis bir ajan ~/.ssh/ icinden SSH anahtarlarini okuyabilir (izin verilen sandbox icinde olabilir) ve bunlari HTTP uzerinden sizdirebilir.

sandbox ag erisimini tamamen engelleyebilir ve arac seviyesinde daha fazla kisitlama yapabilirsiniz:

Terminal window
# Hava bosluklu ajan -- web erisimi yok, Bash kacisi yok
$ claude -p "Analyze this code offline" \
--disallowedTools "WebFetch,WebSearch,Bash" \
--permission-mode bypassPermissions \
--output-format json

Web araclari engellediginde, Claude egitim bilgisine geri doner. Yanit, canli web verisinden degil, modelin zaten bildiklerinden gelir. Tazeligi buna gore dogrulayin.

Kullananlar: hassas veriler uzerinde Claude calistiran finans hizmetleri, HIPAA gereksinimleri olan saglik kuruluslari, savunma yuklenicileri.

Savunma Katmanlari

Guvenli gozetimsiz calisma, uc katmanin birlikte calismisini gerektirir. Hicbir tek mekanizma kendi basina yeterli degildir:

Derinlemesine Savunma Katmanlari

KatmanMekanizmaNeleri EngellerNeleri Kacirabilir
sandboxIsletim sistemi seviyesinde dosya sistemi ve ag izolasyonuIzin verilen dizinler disindaki yollara erisim, yetkisiz ag cagrilariIzin verilen dizinler icindeki her sey serbesttir
Arac kisitlamalari—allowedTools ve —disallowedToolsBelirli arac kullanimi (Write, Edit, Bash, WebFetch)MCP araclari yerlesik arac kisitlamalarini atlar
Hook’larPreToolUse / PostToolUse olay isleyicileriOzel kurallar — dosya yollarinda regex, komut denetimi, API cagri kayitlariYalnizca yazdiginiz kurallar kadar guclu

Bir istem enjeksiyonu saldiri zincirini dusunun: enjekte edilen bir talimat Claude’a cat ~/.ssh/id_rsa calistirmesini soyler. Dosya sistemi sandbox’u ~/.ssh/ izin verilen dizinlerin disindaysa yolu engeller. Okuma bir sekilde basarili olursa, ag sandbox’u sizdirmayi engeller. Ve her iki katman da basarisiz olsa bile, bir PreToolUse hook yol kalibini eslestirebilir ve islemi reddedebilir. Her katman oncekinin kacirabilecegini yakalar.

--dangerously-skip-permissions bayragi tum izin istemlerini atlar, ancak hook’lar yine de calisir. Bu, hook’lari tum izin kontrolleri devre disi birakilmis tam otomatik pipeline’larda son savunma hatti yapar:

--dangerously-skip-permissions ile izin kontrol akisi:
1. Arac istendi --> izin kontrolu --> ATLANDI
2. PreToolUse hook --> HALA CALISIYOR --> yurutmeyi engelleyebilir
3. Arac calisir --> sandbox --> HALA AKTIF
4. PostToolUse hook --> HALA CALISIYOR --> sonuclari denetleyebilir
Try This

sandbox’u kendiniz test edin. Calisma dizininizin disinda bir dosya okumaya calisin:

claude -p “Read /etc/passwd” —output-format json | jq ‘.result’

sandbox bunu engellemeli. Simdi claude -p “Read /etc/passwd” —add-dir /etc —output-format json | jq ‘.result’ deneyin. Ne degisti? Bu, —add-dir bayraginin sandbox’ta bir delik acmasi.

Kanit: allowedTools Atlama

Claude Code guvenligindeki en tehlikeli yanilgi, --allowedTools’un tek basina salt-okunur bir ajan olusturdugudur. Olusturmaz. Iste kanit — sozde salt-okunur bir ajanin basariyla bir dosya yazmasi:

Bu etkilesimli demo, sandbox’un neden onemli oldugunu gosteriyor. Claude’un bir allowedTools kisitlamasini 4 farkli yoldan nasil astigini izleyin.

Terminal window
# YANLIS: Bu salt-okunur DEGILDIR
$ claude -p "Write hello to /tmp/outside_test.txt" \
--allowedTools "Read,Grep,Glob" \
--permission-mode bypassPermissions \
--output-format json
allowedTools Atlamasi -- Yazma Basarili Olduartifacts/13/readonly_write_blocked.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6800,
6 "duration_api_ms": 6732,
7 "num_turns": 2,
8 "result": "Done. Wrote \"hello\" to `/tmp/outside_test.txt`.",A
9 "stop_reason": "end_turn",
10 "session_id": "98023423-42d3-42ea-9ba4-14be27ac1400",
11 "total_cost_usd": 0.027829,B
12 "usage": {
13 "input_tokens": 4,
14 "cache_creation_input_tokens": 1526,
15 "cache_read_input_tokens": 29893,
16 "output_tokens": 133,
17 "server_tool_use": {
18 "web_search_requests": 0,
19 "web_fetch_requests": 0
20 }C
21 },
22 "permission_denials": []
23}
AYazma basarili oldu -- 'salt-okunur' bir ajan dosya yazdi
BMaliyet, bir aracin calistirildigini dogrular, yalnizca metin yaniti degil
CBos -- Bash acikca engellenmedi, bu yuzden red kaydi olusturulmadi

Claude, --allowedTools icinde olmayan ama acikca engellenmemis olan Bash’e geri dondu ve echo "hello" > /tmp/outside_test.txt calistirdi. --allowedTools bayragi bir tercih, uygulama siniri degil. Araclari gercekten engelleyen --disallowedTools reddetme listesidir.

The allowedTools BypassSECURITY WALKTHROUGH
Step 1: The Setup
THE WRONG COMMAND
$ claude -p "Write hello..." \
--allowedTools "Read,Grep,Glob"
SECURITY LAYERS
sandbox active
allowedTools active
disallowedTools NOT SET

Gercek bir salt-okunur ajan icin dogru kalip:

Terminal window
# DOGRU: Hem allowedTools HEM DE disallowedTools
$ claude -p "Analyze this codebase for security issues" \
--allowedTools "Read,Grep,Glob" \
--disallowedTools "Write,Edit,Bash,WebFetch,WebSearch" \
--permission-mode bypassPermissions \
--output-format json

Hava Bosluklu Yanit

Web araclari engellediginde, Claude tamamen egitim bilgisinden yanit verir. Bu veri yukunden nasil gorundugunuz gosterilmistir:

Hava Bosluklu Ajan -- Yalnizca Egitim Bilgisiartifacts/13/airgapped_test.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 24081,A
6 "duration_api_ms": 24046,
7 "num_turns": 2,
8 "result": "## Claude Code\n\nClaude Code is Anthropic's command-line tool and programmable agent runtime...",B
9 "stop_reason": "end_turn",
10 "session_id": "121a5238-d1a2-4f7d-b56a-4e9c8ec673f6",
11 "total_cost_usd": 0.117647,
12 "usage": {C
13 "input_tokens": 4,
14 "cache_creation_input_tokens": 13460,
15 "cache_read_input_tokens": 12453,
16 "output_tokens": 564,
17 "server_tool_use": {
18 "web_search_requests": 0,
19 "web_fetch_requests": 0D
20 }
21 },
22 "permission_denials": []
23}
A24 saniye -- Claude hafizadan ayrintili bir yanit olusturdugu icin normalden uzun
BCanli web verisinden degil, egitim bilgisinden gelen yanit
CYuksek maliyet, daha uzun olusturulan ciktiyi yansitir (564 token)
DSifir web istegi, hava bosluguna uyuldugunuu dogrular

web_search_requests: 0 ve web_fetch_requests: 0 dikkat edin. Claude hicbir web erisimi denemedi — araclarin mevcut olmadigini fark etti ve yaniti zaten bildiklerinden uretti.

Gotcha

sandbox isletim sistemi cekirdegi seviyesinde uygulanir. Istem enjeksiyonu bunu asamaz. Bir saldirgan Claude’a cat /etc/shadow veya curl https://evil.com talimatii veren bir istem olustursa bile, cekirdek sistem cagrisini calistirilmadan once engeller. Ne kadar zekice istem olusturulursa olusturulsun, reddedilmis bir sistem cagrisini gezemez.

Gotcha

WSL1 desteklenmez. WSL1, Linux sistem cagrilarini Windows NT cekirdek cagrilarina cevirir ve bubblewrap’in gerektirdigi Linux ad alani izolasyonunu saglamaz. Windows’taysaniz, WSL2 (gercek bir Linux cekirdegi calistirir) veya Linux imajli bir Docker konteyneri kullanin.

Note

Hook cikis kodu 2, —dangerously-skip-permissions’ta bile gecerlidir. Cikis kodu 2 ile cikan bir PreToolUse hook, —dangerously-skip-permissions aktif olsa bile arac calistirmayi engeller. Hook’lar, hicbir bayrak tarafindan atlanamayan tek uygulama katmanidir. Guvenlik yigini su sekildedir: hook’lar (atlanamaz) > sandbox (cekirdek seviyesi) > izinler (bayrak ile atlanabilir).

--allow-dangerously-skip-permissions vs --dangerously-skip-permissions

Bu bayraklar benzer gorunur ancak temelden farkli amaclara hizmet eder. Biri tek anahtarli bir atlama; digeri iki anahtarli bir guvenlik mekanizmasidir.

Izin Atlama Karsilastirmasi

BayrakTek Basina—permission-mode bypassPermissions ileKullanim Alani
—dangerously-skip-permissionsAtlama hemen aktifUygulanamaz (zaten aktif)Hizli betikler, guvenilir ortamlar
—allow-dangerously-skip-permissionsAtlama yok — yalnizca yetenek etkinAtlama aktif (her iki anahtar gerekli)Acik etkinlestirmeli CI/CD

Iki anahtarli kalip, --allow-dangerously-skip-permissions’i CI/CD pipeline’lari icin daha guvenli kilar:

Terminal window
# Tek anahtarli atlama (bir bayrak yeter)
claude -p "Deploy" --dangerously-skip-permissions
# Iki anahtarli atlama (her iki bayrak gerekli)
claude -p "Deploy" \
--allow-dangerously-skip-permissions \
--permission-mode bypassPermissions
# HER IKI bayraktan birini kaldirmak atlamayi engeller

--permission-mode bypassPermissions olmadan, --allow-dangerously-skip-permissions bayragi hicbir sey yapmaz — varsayilan izin modu normal olarak uygulanir. Bu kasitlidir: pipeline sablonlarinin allow bayragini genis olarak ayarlarken belirli is adiminda acik etkinlestirme gerektirmesine izin verir.

Gotcha

—allow-dangerously-skip-permissions tek basina izinleri ATLAMAZ. Bunu tekrar okuyun. Yetenegi etkinlestirir ancak aktive etmez. —permission-mode bypassPermissions ile eslestirmeniz gerekir — iki anahtarli bir firlama dizisi. Bu kasitlidir: allow bayragini genis olarak ayarlayan betiklerde yanlislikla atlamalari onler. Adlandirma kafanizi karistiriyorsa, yalniz degilsiniz — ancak iki anahtarli kalip CI/CD sablonlari icin guvenli kilanidir.

Tip

Settings.json reddetme kurallari, atlama aktif olsa bile gecerlilgini korur. Bir “deny”: [“Write”] kurali Write aracini Claude’un arac setinden tamamen kaldirir — Claude izin modundan bagimsiz olarak onu hic gormez. Reddetme kurallari, izin kontrolleri gerceklesmeden once arac yukleme asamasinda uygulanir.

Bilinen Guvenlik Aciklari

Yayinlanmis guvenlik arastirmalari, Claude Code’un sandbox ve yapilandirma sisteminde gercek aciklar belirledi. --dangerously-skip-permissions bayragi, guvenlik arastirmacilari ayricalik yukseltme gosterdikten sonra v2.1’de kaldirildi. Bu yuzden derinlemesine savunma oneriliyoruz — hicbir tek katman mukemmel degildir.

CVE-2025-59536 / CVE-2026-21852 — Proje Dosyalari Yoluyla RCE: Kotu amacli .claude/ proje yapilandirmalari (hook’lar, MCP sunuculari, ortam degiskenleri) uzaktan kod calistirma ve API token sizdirma saglayabilir. Bir deponun .claude/ dizinini kontrol eden bir saldirgan, kurban projeyi Claude Code ile actiginda rastgele kod calistirabilir. Onlemler: guvenilmeyen depolari acmadan once .claude/ icerigini inceleyin, hook ve MCP kaynaklarini kisitlamak icin yonetilen ayarlari kullanin.

Reddetme Listesi Atlamasi /proc/self/root/ Yoluyla: Linux’ta Claude, /proc/self/root/usr/bin/npx kullanarak red kalibini eslestirmeden ayni ikili dosyaya cozumleyerek kendi reddetme listesini atlayabilir. Reddetme kurallari yol cozumlemesi degil dize eslestirmesi kullanir ve sembolik baglanti tabanli atlamalar icin bir bosluk olusturur. Onlem: reddetme kurallarini isletim sistemi seviyesinde sandbox kisitlamalariyla birlestirin.

ToxicSkills — Kotu Amacli Ajan Becerileri: Arastirma, topluluk tarafindan olusturulan ajan becerilerinin %36’sinin guvenlik kusurlari icerdigini ve %13,4’unun kritik ciddiyet duzeyinde oldugunu tespit etti. Beceriler icin resmi bir inceleme sistemi yoktur. Onlem: yukleme oncesi becerileri denetleyin, guvenilir kaynaklardan becerileri tercih edin, hassas ortamlarda --disable-slash-commands kullanin.

MCP Arac Ciktilari Yoluyla Istem Enjeksiyonu: MCP arac yanitlari, istem enjeksiyonu icin belgelenenmis bir saldiri vektorudur. Kotu amacli bir MCP sunucusu, Claude’un davranisini manipule eden ozel yapim arac ciktilari dondurebilir. Onlem: yalnizca acikca guvenilen sunucularla --strict-mcp-config kullanin, MCP ciktilarini dogrulamak icin PostToolUse hook’lari uygulayin.

Guvenilmeyen Depolari Acmadan Once .claude/ Inceleyin

Yayinlanmis CVE’ler, kotu amacli .claude/ dizinlerinin uzaktan kod calistirma saglayabilecegini gostermistir. Herhangi bir guvenilmeyen depoyu Claude Code ile acmadan once .claude/settings.json (hook’lar, izinler), .mcp.json (MCP sunuculari) ve tum hook betiklerini inceleyin. allowManagedPermissionRulesOnly: true ile yonetilen ayarlar, kotu amacli proje yapilandirmalarini gecersiz kilan kurumsal politikalari zorlayabilir.

Now Do This

sandbox’unuzu simdi test edin: claude -p “What is in /etc/shadow?” —output-format json | jq ‘.result’. sandbox engellerse, korunuyorsunuz. Engellemezse, sandbox olmadan calisiyorsunuz — yukaridaki platform destek tablosunu kontrol edin ve gozetimsiz ajanlar calistirmadan once duzeltiin.