Güvenlik
Bir tarayıcının saldırı yüzeyi ikiye ayrılır: bizim yazmadığımız motor ve bizim yazdığımız kabuk. İkisi çok farklı davranır, o yüzden ayrı ayrı anlatıyoruz. Sayfanın sonunda bu sürümün bilinen boşlukları var.
Motor: Chromium, V8, Skia
2026 boyunca Chrome'da, vahşi doğada sömürülen altı zero-day dahil onlarca bellek güvenliği açığı kapatıldı. Bu kodu biz yazmıyoruz ve düzeltemiyoruz; buradaki tek savunma motoru güncel tutmaktır.
Kuralımız bu yüzden net: Girginos Browser ömrünü tamamlamış bir Electron sürümüyle yayınlanmaz. Electron yalnızca son üç ana sürümü destekler ve sürüm sabiti her yayın öncesinde denetlenir. Şu an Electron 44.2.0 ve Chromium 152.0.7977.76 kullanılıyor.
Kabuk: bizim yazdığımız kod
Kabuk tarafındaki mimari kararlar şunlar:
- Her sekme ayrı bir WebContentsView. Sayfa içerikleri sandbox: true, contextIsolation: true ve nodeIntegration: false ile çalışır ve preload almaz.
- Arayüz penceresi de korumalı çalışır ve sekmelerle aynı oturumu paylaşır; böylece arayüzün kendi istekleri de engelleyiciden ve DNT başlıklarından geçer.
- IPC kanalları yalnızca arayüz penceresinin ana çerçevesinden kabul edilir. Ayar yazma işlemleri anahtar ve tip doğrulamasından geçer.
- İndirmeler kimlikle adreslenir; arayüzden gelen ham bir dosya yolu hiçbir zaman açılmaz.
- Sayfa kaynaklı gezinmeler yalnızca http(s) ve view-source:http(s) olabilir. file: ve chrome: yalnızca kullanıcı adres çubuğuna kendisi yazarsa açılır.
- Harici uygulamaya devir dar bir şema listesiyle sınırlı: mailto:, tel:, sms:, magnet:, ftp(s):, webcal:. Aynı anda tek onay kutusu açılır.
- Opak kaynaklar — data: ve about: gibi origin'i null olanlar — izin isteklerinde her zaman reddedilir.
- Yazım denetimi kapalı, çünkü Chromium sözlük dosyalarını bir Google sunucusundan indiriyor.
- Veriler geçici dosya ve yeniden adlandırma ile atomik olarak yazılır.
Saldırı vektörleri ve karşılıkları
| Sınıf | Örnek | Karşılık |
|---|---|---|
| Adres çubuğu sahteciliği | RLO/bidi, CR-LF, NUL, bank.com@evil.com, boşluk doldurma, IDN homograf | Görünmez karakterler ve boşluk kodlu bırakılır, kimlik bilgisi gizlenir, punycode gösterilir |
| Alan adı gizleme | accounts.google.com.giris.evil.com | Kayıtlanabilir alan koyu, gerisi soluk yazılır |
| Dahili sayfa taklidi | newtab.html, indirilmiş bir kopya | Tam adres eşleşmesi aranır; alt dizi araması yapılmaz |
| Tam ekran arayüz sahteciliği | sayfa tam ekrana geçip sahte araç çubuğu çizer | Sayfa görünümü hiçbir zaman kabuğun üstüne büyütülmez |
| Şema geçişi | file:, chrome:, blob:, view-source:file: | Sayfa kaynaklı gezinmede yalnızca http(s) |
| Harici uygulama çağrısı | ms-msdt:, search-ms:, ms-appinstaller: | Dar izin listesi ve tek onay kutusu |
| İndirme adı hilesi | evil.exe / evil.exe., sondaki nokta ve boşluk, RLO ile gizlenen uzantı | Uzantı kontrolünden önce normalleştirme; karar diskteki gerçek ada göre verilir |
| Engelleyici atlatma | izleyici.com., sondaki nokta | Host normalleştirmesi |
İmzalı güncelleme zinciri
Tehdit modeli, güncelleme sunucusunun ele geçirilmiş olabileceğini varsayar. Sıra şöyle işler:
- İmzalı manifest ve yanındaki imza dosyası çekilir.
- İmza, uygulamaya gömülü Ed25519 açık anahtarıyla manifestin ham baytları üzerinde doğrulanır. Geçmezse hiçbir alan okunmaz.
- Sürüm kapıları uygulanır: geri sürüme düşürme reddedilir; manifestin kendi son kullanma tarihi geçmişse reddedilir — bu, eski bir manifesti sonsuza dek servis edip güncellemeyi dondurma saldırısına karşıdır; gerekiyorsa ara sürüm zorunlu tutulur; indirme adresi https olmak zorundadır.
- İndirme aracının bulduğu sürüm ve paket özeti, imzalı manifesttekiyle birebir aynı olmalıdır.
- İndirme bitince paketin sha512 özeti imzalı özetle sabit zamanlı karşılaştırılır.
- Kurulum yalnızca kullanıcı onayıyla başlar.
Adımlardan biri başarısız olursa güncelleme yapılmaz. Özel anahtar hiçbir zaman sunucuda durmaz; sunucu ele geçirilse bile saldırgan geçerli bir manifest üretemez.
Testler
118 birim testi, 73 saldırı vektörü regresyonu ve 46 güncelleme doğrulama testi çalışıyor; arayüz ile ana süreç arasındaki IPC ve DOM sözleşmesi ayrıca sınanıyor. Bunların yanında yayın öncesinde ve yayın sonrasında, gerçek çıktılar ve canlı sunucu üzerinde uçtan uca doğrulama betikleri çalıştırılıyor.
Bilinen boşluklar
Aşağıdakiler 0.1.0'da eksik. Bunları saklamak ürünü olduğundan güvenli gösterirdi, o yüzden açıkça yazıyoruz.
- Mark-of-the-Web yok
- İndirilen dosyalara Zone.Identifier yazılmıyor, dolayısıyla Windows SmartScreen bu dosyalar için devreye girmiyor. Tarayıcının kendi uyarı kutusu var, ama işletim sistemi katmanı yok.
- Kod imzalama sertifikası yok
- Kurulum paketinin kod imzası doğrulanamıyor. İmzalı manifest bunu güncellemeler için kapatıyor, ama ilk kurulum açıkta kalıyor.
- Public Suffix List yok
- github.io gibi barındırma alanlarında site istisnaları ve adres çubuğu vurgusu olması gerekenden geniş kapsıyor.
- Sertifika hatası akışı Chromium varsayılanında
- Özel bir "yine de devam et" ekranı yazılmadı; hatalı sertifikada sayfa açılmıyor.
- Engelleme yalnızca alan adı düzeyinde
- CNAME ile gizlenen izleyiciler ve birinci taraf altından sunulan reklamlar yakalanmıyor; kozmetik filtre uygulanmıyor.