Chromium'u Karantinaya Almak: Firejail ve KeePassXC IPC Tüneli

Sistem mimarisinde değişmez bir kural vardır: Bir uygulamanın dış dünyayla bağlantısı ne kadar fazlaysa, sistemin geri kalanı için oluşturduğu tehdit de o kadar büyüktür. Bugün modern bir web tarayıcısı aslında küçük bir işletim sistemidir ve bu kara deliği kendi haline bırakmak, sistemin geri kalanını bilerek tehlikeye atmak demektir.

Uzun zamandır ungoogled-chromium kullanıyorum. Ancak Google servislerinden ve arka plandaki telemetriden arındırılmış olması, tarayıcının çekirdeğindeki geniş erişim yetkilerini ortadan kaldırmıyor. Bu yüzden tarayıcıyı sistemin geri kalanından izole etmek için uzun süredir Firejail kullanıyorum.

Bu yazıda, tarayıcıyı karantinaya alırken neleri kırdığımı ve özellikle şifre yöneticisi (KeePassXC) ile olan hayati iletişimi güvenli bir şekilde nasıl onardığımı not düşmek istedim.

Firejail ile Karantina Mantığı

Tarayıcıyı Firejail ile başlattığımda olan şey basit: SUID tabanlı katı bir sandbox devreye giriyor. Linux çekirdeğinin sunduğu namespace ve seccomp-bpf özellikleriyle tarayıcıyı adeta kör ve sağır bırakıyoruz.

Böylece tarayıcıdaki bir zero-day zafiyeti sömürülse bile, saldırganın ulaşabileceği tek yer sadece indirdiğim PDF’lerin olduğu klasör oluyor.

Not: NixOS Üzerinde Firejail NixOS gibi deklaratif bir sistemde Firejail yapılandırması biraz daha farklıdır. Klasik Linux’lardaki gibi firejail chromium yazmak yerine, programs.firejail.wrappedBinaries bloğu üzerinden kendi derlediğim myUngoogled paketini doğrudan sarmalıyorum. Böylece sistemdeki kısayol her zaman istisnasız olarak karantinadan tetikleniyor.

İzolasyonun Bedeli: Kırılan Soketler

Güvenlik vidalarını her sıktığınızda konfordan feragat edersiniz. Firejail’in izolasyonunu devreye aldığım an beklediğim şey oldu: Tarayıcımdaki KeePassXC eklentisi veritabanına erişemez hale geldi. Ekranda sürekli “Cannot connect to KeePassXC” hataları dönmeye başladı.

Nedeni gayet açık: KeePassXC’nin tarayıcı eklentisi, arkadaki ana uygulamayla haberleşmek için bir Unix Domain Socket (IPC) kullanıyor. Bu soket genellikle /run/user/<UID>/org.keepassxc.KeePassXC.BrowserServer yolunda oluşur. Firejail, tarayıcının sistem dosyalarına (dolayısıyla bu sokete) dokunmasını engellediği için köprü yıkılmış oldu.

Güvenli Tünel (Whitelist) Açmak

Tarayıcının izolasyonunu tamamen bozmadan, sadece bu belirli soket üzerinden haberleşmeye izin vermem gerekiyordu. NixOS konfigürasyonumda, Firejail’in eklenti dosyasına (chromium-common.local) sadece ihtiyacım olan yolları beyaz listeye (whitelist) alacak şu kuralı ekledim:

# KeePassXC IPC Soketi için tünel aç
noblacklist ''${RUNUSER}/app
whitelist ''${RUNUSER}/app/org.keepassxc.KeePassXC
whitelist ''${RUNUSER}/kpxc_server
whitelist ''${RUNUSER}/org.keepassxc.KeePassXC.BrowserServer

# Sadece İndirilenler klasörüne okuma/yazma izni
noblacklist ''${DOWNLOADS}
whitelist ''${DOWNLOADS}

Yaptığım şey temelde tarayıcının hapishane duvarına sadece KeePassXC’nin veriyi uzatabileceği kadar küçük, kontrollü bir delik açmak. Tarayıcı hala sistemin geri kalanına tamamen kör, ancak gerektiğinde şifreleri yerel IPC soketi üzerinden güvenle çekebiliyor.

Kapanış

İzolasyon ve kullanılabilirlik her zaman bir tahterevalli gibidir. Bir uygulamayı tamamen izole edip kullanılamaz hale getirmek işin kolay kısmıdır. Zor olan, tehdit modelinize (threat model) uygun şekilde, sistemin günlük iş akışınızı bozmayacak o ince çizgiyi bulmaktır.

Bu kurulum, Chromium’un hızı ile yüksek güvenlik taleplerim arasında en makul dengeyi sağlıyor. Tarayıcının kendisini nasıl yapılandırdığım ve parmak izi (fingerprinting) engelleme taktiklerim ise bu serinin bir sonraki yazısının konusu olacak.


Referanslar:

  1. KeePassXC Browser Extension - Troubleshooting Guide
  2. Firejail Profiles Documentation
EOF.