Patlama alanı
Bir projeye npm install dediğinde, bilgisayarına başkalarının yazdığı yüzlerce paket iniyor. Bunlardan biri ele geçirilmiş olabilir. Son aylarda bu tür tedarik zinciri saldırıları (güvendiğin bir paketin içine zararlı kod gizlenmesi) sık sık gündeme geldi. Üstelik artık yapay zekâ ajanları da senin adına paket kurup komut çalıştırıyor.
Syntax’tan CJ bu videoda şu soruyu soruyor: Kötü kod çalışırsa nereye kadar ulaşabilir? Buna “blast radius”, yani patlama alanı deniyor. Amaç, patlama alanını olabildiğince küçük tutmak.
Dört temel fikir
- En az yetki (least privilege): Bir program sadece işi için gereken dosyalara ve izinlere erişebilmeli. Bir web projesinin SSH anahtarlarını ya da tarayıcı şifrelerini okumasına gerek yok.
- Dışarı çıkış filtresi (egress filtering): Zararlı kod genelde çaldığı bilgiyi internet üzerinden bir yere göndermeye çalışır. Ortamın hangi adreslere bağlanabileceğini sınırlarsan, çalınan bilgi dışarı çıkamaz.
- Geçici ortamlar (ephemeral environments): İşin bitince silinen ortamlar. Bir şey bulaşsa bile ortamla birlikte çöpe gider.
- Katmanlı savunma (defense in depth): Tek bir önleme güvenme. Birkaç katmanı üst üste koy ki biri aşılırsa diğeri dursun.
Konteynerler aynı çekirdeği paylaştığı için bir çekirdek açığı kutunun dışına taşabiliyor; Copy Fail bunun yakın bir örneği.
Araçlar: Hafiften ağıra
Konteynerler. Docker gibi araçlarla projeyi kendi küçük kutusunda çalıştırırsın. Kutu, bilgisayarının geri kalanını varsayılan olarak görmez. Dev Containers adlı açık standart ise bu kutuyu tam bir geliştirme ortamına çeviriyor. Editörün kutunun içine bağlanıyor, sen de her şey kendi bilgisayarındaymış gibi çalışıyorsun.
Yapay zekâ ajanları için kum havuzu. Docker Sandboxes, kodlama ajanlarını ayrı bir mikro sanal makinede çalıştırıyor. Ajan paket kurabiliyor, dosya değiştirebiliyor. Ama sadece ona açıkça verdiğin şeylere dokunabiliyor.
Sanal makineler. Bilgisayarının içinde tamamen ayrı bir bilgisayar gibi çalışır. Konteynerden daha güçlü bir ayrım sağlar. Mac’te UTM ya da VirtualBox gibi uygulamalarla kurulabilir. Komut satırını seviyorsan Lima hafif Linux sanal makineleri açıyor. Colima da bunun üstüne kurulup Docker’ı Mac’te çalıştırmanın basit bir yolunu sunuyor.
Tamamen ayrı makine. Kodu kendi bilgisayarında değil, buluttaki bir sunucuda (VPS) ya da GitHub Codespaces gibi bulut geliştirme ortamlarında çalıştırabilirsin. Bir şey ters giderse, etkilenen sadece o uzak makine olur.
Paranoya seviyesi. Sadece iş için ayrı bir dizüstü bilgisayar, USB’den açılıp kapatınca hiçbir iz bırakmayan bir işletim sistemi (live OS) ya da internete hiç bağlanmayan (air-gapped) bir makine. Çoğu kişi için fazla ama bazı işlerde gerçekten kullanılıyor.
Konteynerin neden tam bir güvenlik sınırı olmadığını ve mikro sanal makineleri bu yazıda ayrıntılı anlattık.
Nereden başlamalı?
Her şeyi bir günde yapmana gerek yok. Tanımadığın bir projeyi ya da bir yapay zekâ ajanını çalıştırırken onu bir konteynere veya sanal makineye koymak bile patlama alanını ciddi şekilde küçültür.
Düşün
- Bilgisayarındaki hangi dosyalar ele geçirilse senin için en kötüsü olurdu? Şu an kurduğun bir paket onlara ulaşabilir mi?
- Güvenlik ile rahatlık arasında nerede duruyorsun? Her projeyi ayrı bir kutuda çalıştırmak sana değer mi?
Videoyu izle
Kaynaklar (9, İngilizce)
- Syntax: every developer should know this (video) (yeni sekmede açılır)
- Wikipedia: Defense in depth (computing) (yeni sekmede açılır)
- Wikipedia: Egress filtering (yeni sekmede açılır)
- Development Containers (yeni sekmede açılır)
- Docker Docs: Docker Sandboxes (yeni sekmede açılır)
- Lima (yeni sekmede açılır)
- Colima (yeni sekmede açılır)
- UTM (yeni sekmede açılır)
- GitHub Codespaces (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.