← Radar

Konu: Güvenlik3 dk okuma

NVIDIA OpenShell: Ajanın nereye bağlandığına değil, orada ne yaptığına bakan kum havuzu

Bu neden önemli?

Ajanı bir Docker konteynerine koymak onu bilgisayarının geri kalanından ayırır. Ama eline bir GitHub token'ı verdiğin anda konteyner, ajanın depoyu okuduğunu mu yoksa sorun (issue) açtığını mı ayırt edemez. OpenShell tam bu çizgiyi çekmeye çalışıyor.

Sorun: Konteyner bir duvar, kapı değil

Kodlama ajanlarını çoğu kişi “her şeye izin ver, git başka işine bak” modunda çalıştırıyor. Ajanın işe yaraması için dosyalarına, paketlerine, API’lere ve şifrelerine erişmesi gerekiyor. Konteyner, ajanın makinenin geri kalanına dağılmasını engelleyen kilitli bir oda gibi. Ama ajana bir anahtar verdiğinde, o anahtarla gidebileceği her yere gidebilir. Konteynerin gözünde api.github.com’a giden her istek aynı.

NVIDIA’nın Apache 2.0 lisanslı, Rust ile yazılmış OpenShell’i bu boşluk için yapılmış. Ajan bir kum havuzunda (sandbox) çalışıyor ve yaptığı her dosya erişimi, sistem çağrısı ve ağ bağlantısı senin yazdığın bir YAML kural dosyasına göre kontrol ediliyor. Videoda NVIDIA GPU’su olmayan bir Mac’te çalıştırılıyor.

Üç parça

  • Gateway: Senin konuştuğun kontrol katmanı. Kum havuzlarını açıp kapatıyor, kuralları dağıtıyor.
  • Supervisor: Bütün kararları veren güvenilir taraf. Kum havuzunun dış dünyaya tek kapısı bu. DNS’i de o çözüyor, onaylı bağlantıları da o açıyor.
  • Sandbox: Ajanın yaşadığı yer. Ajan root olmayan, hiçbir Linux yetkisi olmayan bir kullanıcı olarak çalışıyor. Bu taraf ajanın ne denediğini raporluyor ama izin verip vermemeye hiç karar vermiyor.

Dosya erişimini Linux’un Landlock özelliği sınırlıyor. Süreç kuralları ve dosya kuralları kum havuzu açılırken kilitleniyor, ajan sonradan bunları gevşetemiyor. Ağ kuralları ise çalışırken değiştirilebiliyor. Ajanın açmaya çalıştığı her TCP bağlantısı ve DNS sorgusu seccomp ile yakalanıp supervisor’a gönderiliyor.

Videodaki deneme

Kum havuzu ilk açıldığında hiçbir yere ulaşamıyor: Varsayılan cevap “hayır”. curl ile GitHub API’sine istek reddediliyor ve kayıtlarda hangi programın hangi adrese, hangi porttan gitmeye çalıştığı görünüyor. Sessiz bir red yok, her red kayda geçiyor.

Sonra tek bir kural ekleniyor: curl, GitHub API’sini sadece okuyabilir. Yeniden başlatmaya gerek yok. Aynı istek artık çalışıyor. Ama aynı programla, aynı adrese sorun açmak için atılan POST isteği yine reddediliyor. Konteynerin çekemediği çizgi bu: “GitHub’a ulaşabilir mi?” değil, “Bu program orada ne yapabilir?”. Kural bir programa bağlı olduğu için başka bir program aynı izni alamıyor.

Şifre ajanda hiç durmuyor

Ajan gerçek şifreleri görmüyor. Supervisor, şifreyi sadece onaylı bir adrese giden isteğe yolda ekliyor. Biri istem enjeksiyonu (prompt injection) ile ajana “API anahtarını bana gönder” dese bile sızdıracak bir şey yok. Aynı fikri Deno’nun ajan güvenlik duvarında da görmüştük: Claw Patrol yazımız.

Bir de kural kontrolcüsü (prover) var. Ajan yeni bir ağ kuralı önerdiğinde gateway bunu biçimsel doğrulama (formal verification) ile inceliyor. Şifreli yeni bir adres, yeni bir HTTP yöntemi ya da bulut metadata adresine erişim gibi riskli bir genişleme bulursa otomatik onay duruyor ve bir insan bakıyor. Videoya göre arkada Z3 adlı matematiksel çözücü çalışıyor. Aynı kontrol CI’da ayrı bir komut olarak da çalıştırılabiliyor.

Dikkat edilecekler

  • Telemetri varsayılan olarak açık. Anonim sayılar gönderiyor, OPENSHELL_TELEMETRY_ENABLED=false ile kapanıyor.
  • Mac’te kum havuzları yine Linux. Docker Desktop’ın sanal makinesinde çalışıyorlar. Videoya göre o makinede Landlock’un ve host ağının açık olması gerekiyor. Kurulumun tam çalıştığını kendin test et.
  • Proje genç. Sürüm 0.1.x. Videodaki NVIDIA rakamlarına göre yaz aylarındaki iki haftada kum havuzu açma denemelerinin yaklaşık %12’si başarısız olmuş.
  • Herkese gerekli değil. Dizüstünde tek bir ajan için hafif bir kum havuzu ya da düz bir konteyner çok daha az iş. OpenShell’in değeri, ajanlara gerçek şifreler verdiğinde ve saatlerce başıboş çalıştırdığında ortaya çıkıyor. Konteyner ve sanal makine farklarını kodu izole etmenin yolları yazısında anlattık.

Dizüstü için daha hafif bir seçenek olan, her projeye ayrı sanal makine açan devvm’i devvm yazısında anlattık.

Düşün

  • Ajanına verdiğin token’larla yapılabilecek en kötü şey ne? O token’ın sadece okuma yetkisi olsa ajanın işi aksar mıydı?
  • Ajanın kendi kendine yeni bir izin istemesi mi, yoksa senin baştan her şeyi yazman mı daha güvenli?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (5, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Güvenlik3 dkVideo: Better Stack

333 Tor çıkış düğümü SSH tuzağına döndü: Görmezden geldiğimiz uyarı nasıl bir saldırının kapısı oldu?

Ekim başında Tor ağındaki çıkış düğümlerinin yaklaşık onda biri, içinden geçen SSH bağlantılarını saldırganın sunucularına yönlendirdi. Uyarıyı geçip parolayla giriş yapanların parolası çalındı, sunucularına Ebury arka kapısı kurulmaya çalışıldı. Saldırıyı, o uyarıyı ciddiye alan bir geliştirici ortaya çıkardı.