← Teknoloji Radarı

Güvenlik

Kötü bir paket bilgisayarına girerse: Kodu izole etmenin yolları

Bir projeye zararlı bir paket sızarsa, bütün bilgisayarın tehlikeye girebilir. Konteynerlerden sanal makinelere, kodu kendi alanına kapatmanın temel fikirleri ve araçları.

Bu neden önemli?

Bugün bir projede yüzlerce paket var ve yapay zekâ ajanları senin adına komut çalıştırıyor. Bir şey ters gittiğinde hasarın küçük kalması, baştan doğru kurulmuş bir düzene bağlı.

every developer should know this · Syntax, YouTube (İngilizce). Tıklayınca video yüklenir.

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

  1. 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.
  2. 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.
  3. Geçici ortamlar (ephemeral environments): İşin bitince silinen ortamlar. Bir şey bulaşsa bile ortamla birlikte çöpe gider.
  4. Katmanlı savunma (defense in depth): Tek bir önleme güvenme. Birkaç katmanı üst üste koy ki biri aşılırsa diğeri dursun.

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.

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?

Bu yazıdaki araçlar Araç Kutusu'nda: Colima, Dev Containers, Docker Sandboxes, GitHub Codespaces, UTM