Root Mührü: Chromium Sandbox ve Downloads Tuzak Kapısı
Tehdit Modeli ve Nefes Borusu Zaafiyeti
Ungoogled Chromium gibi tarayıcıları firejail ile izole ettiğimizde uygulamanın ana sistemle bağını tamamen koparırız. Ancak dışarıdan dosya indirebilmek için Downloads klasörünü beyaz listeye alıp açık bırakmak zorundayız.
Bu klasör otonom fidye yazılımları veya tarayıcı üzerinden gelen uzaktan kod çalıştırma saldırıları için sistemde kalan tek nefes borusudur. Hedefimiz bu nefes borusunu sadece biz fiziksel olarak tıkladığımız an açılacak ve geri kalan tüm zamanlarda beton gibi kapalı kalacak dinamik bir tuzak kapısına çevirmekti.
Mount Namespace Yanılgısı
İlk akla gelen çözüm klasörü dinamik olarak bind-mount ile bağlayıp işimiz bitince umount yapmaktı. Ancak Linux mount namespaces mimarisi bu çözümü imkansız kıldı.
Firejail bir uygulamayı başlattığında home dizini üzerine izole bir RAM disk mount eder ve izin verdiğimiz klasörleri içeri bağlar. Dışarıdan ana sistemde mount veya umount yaparsanız içeride kendi izole namespace alanında yaşayan firejail bu değişikliği göremez. Tarayıcı dosyayı indirdiğini sanır ama dosya ana makineye değil firejail içindeki geçici RAM diske yazılır. Tarayıcı kapandığında veriler tamamen yok olur.
Bu mimariyi çalıştırmanın tek yolu her indirme işleminden önce tarayıcıyı tamamen kapatıp baştan başlatmaktı. Bu da günlük kullanım için kabul edilemezdi.
Symlink ve Kernel Seviyesi Kilit
Namespace bariyerini aşmanın yolu mount noktalarıyla oynamak yerine doğrudan dosya sisteminin derinliklerine inmektir. Dosya sahiplikleri ve izinleri doğrudan diskin inode verilerine yazılır ve tüm namespace alanlarına anında etki eder.
Mevcut Downloads klasörünü tamamen sildik ve kalıcı BTRFS dizininde yaşayan ana kasaya giden şeffaf bir sembolik bağa çevirdik:
ln -s ~/.local/share/SecureDownloads ~/Downloads
Ancak asıl detay klasörü nasıl kilitlediğimizde yatıyor. Düz bir okuma izni ataması yeterli değildi. Firejail içinden sisteme sızan bir zararlı çalışırsa ana sistemdeki kullanıcıyla aynı yetkilere sahip olacağı için kendi kendine yazma yetkisi atayarak kilidi kırabilirdi.
Bu yüzden mimariyi çok katmanlı savunma stratejisiyle sıfır güven seviyesine çıkardık.
UID Mührü ve Kernel Garantisi
Klasör kilitliyken sahipliğini chown root:root komutuyla tamamen root kullanıcısına devrettik. Linux kernel mimarisindeki CAP_CHOWN kuralı gereği yetkisiz hiçbir süreç sahibinin kendisi olmadığı bir klasörün yetkilerini değiştiremez veya sahibini root üzerinden alamaz. Derlenmiş bir C zararlısı doğrudan os.chown çağrısı yapsa bile kernel bariyerine çarpar.
Firejail Blacklist Sıkılaştırması
İçeri sızan zararlının sudo kullanarak yetki yükseltmesini engellemek için firejail profiline doğrudan bir engelleme listesi ekledik.
blacklist /run/wrappers/bin/sudo
blacklist /run/wrappers/bin/pkexec
Böylece sandbox içindeki bir proses sistemdeki yetki yükseltme araçlarına olan erişimini donanımsal olarak kaybetti.
Sıkı Sudoers Kuralı
Şifre girmeden kasayı açıp kapatabilmek için sudoers dosyasına bir kural ekledik. Metin eşleştirme risklerini sıfırlamak için hiçbir değişken kullanmadan sadece o spesifik klasörü işaret eden tam dosya yolunu belirttik:
{ command = "/run/current-system/sw/bin/chown root\\:root /home/xmrah/.local/share/SecureDownloads"; options = [ "NOPASSWD" ]; }
Sonuç
Artık Quickshell veya terminal üzerinden vault komutunu çalıştırdığımızda sistem saniyeler içinde arka planda UID yetkilerini root ve xmrah arasında devrediyor.
Orijinal Downloads klasörü sadece bir yansımadan ibaret. Kasa kapalıyken chown root:root kuralı geçerlidir. Tehditler indirme yapmaya çalıştığında doğrudan engellenir. Kasa açıkken sahiplik size geçer ve firejail içindeki tarayıcı yeniden başlatmaya gerek kalmadan anında yazma yetkisine kavuşur. İşiniz bitince kilidi kapatırsınız.