Saf bir uzak tarayıcı birçok kullanıcı arasında tek bir tarayıcı süreci paylaşır. Bir oturumda kurulan çerezler bir sonrakinde görünür; localStorage verisi oturum sınırlarını aşar; bir kullanıcının kimlik doğrulama durumu başkası tarafından devralınabilir. Korunan uygulamanın kendisi iyi davranıyor olsa bile, paylaşılan tarayıcı her uygulama düzeyi erişim kontrolünü atlatan bir yan kanal haline gelir.
Bir de gezinme var. Tek bir iç gösterge tablosuna sadece görüntüleme yetkisi olan bir kullanıcı, o gösterge tablosunun içinde bir oltalama bağlantısına tıklıyor, kişisel bir hesap için yeni bir sekme açıyor veya niyet etmediği bir dış bağlantıyı takip ediyor. Tarayıcı katmanında zorlama olmadan oturum korunan uygulamadan kaçar — ve şimdi korunan uygulamanın oturum kimliği, kullanıcının kimliği ve aktif tarama durumu, tarayıcının gittiği yere görünür hale gelir.
Tarayıcı bağlamı izolasyonu her ikisini de kapatır. Her oturum paylaşılan durumu olmayan kendi tarayıcı bağlamında çalışır. Tarayıcının kendisi oturumun ulaşabileceği domain'lerin bir allowlist'ini zorlar ve kullanıcının başka yere gitmek için kullanabileceği her kanalı engeller — yeni sekmeler, pop-up'lar, izin verilmeyen domain'lere bağlantı tıklamaları, sayfanın kendisi tarafından programatik gezinme.
Her oturum render motorunun içinde kendi tarayıcı bağlamını alır — diğer her oturumun durumundan tamamen ayrı. Sıkı bir domain allowlist gezinme katmanında durur — istek kesme, tek-sayfa-uygulama gezinme polling'i ve bağlantı-tık kesme birlikte oturumun izin verilmediği bir domain'e hiç ulaşmadığından emin olur. Altta, render edilen piksellerin kendisi, oturumu okumaya veya etkileşime girmeye çalışan otomasyon araçlarını bozan sürekli alt düzey modifikasyonlar taşır.
Her kullanıcı oturumu kendi izole tarayıcı bağlamında açılır — kendi çerez kavanozu, kendi yerel depolaması, kendi oturum durumu olan yepyeni bir profil. Aynı korunan uygulamada iki kullanıcının tamamen bağımsız tarayıcıları vardır; bir oturumdan hiçbir şey diğerine görünmez. Oturum bitişi bağlamı tamamen yok eder; hiçbir durum sağ kalmaz.
Her gezinme girişimi yürütülmeden önce yakalanır. İstek katmanı izin verilmeyen domain'leri ağ düzeyinde engeller; sayfa içindeki bağlantı tıklamaları render katmanında yakalanır; tek-sayfa-uygulama gezinmeleri (pushState, replaceState) polling ile yakalanır. Oturum, kullanıcı kasten denese de sayfa kendi başına denese de allowlist dışındaki bir domain'e ulaşamaz.
Kiosk tarzı tarayıcı kullanıcının yeni sekme açmasına, pop-up oluşturmasına veya sağ tık bağlam menüsünü kullanmasına izin vermez. Kullanıcının korunan uygulamadan kaçmak için kullanabileceği her kanal tarayıcı yapılandırmasında kapanır. Kullanıcı kendisi için açılmış oturumun içinde çalışır — daha fazlası değil.
Görünür içeriğin altında, render edilen piksel akışı sürekli alt düzey modifikasyonlar taşır — rastgele gürültü, ince renk kaymaları, mikro öğe yer değiştirmesi, piksel altı titreşim. Bunlar kullanıcının gördüğünü etkilemez, ama resmi giriş kanalı dışından oturumu okumaya veya etkileşime girmeye çalışan otomasyon araçlarını (Selenium, Puppeteer script'leri, ekran kazıyıcılar) bozar.
Aşağıdaki her davranış korunan servis bazında yapılandırılır ve korunan uygulamanın kodunda değil, tarayıcı katmanında zorlanır. Korunan uygulamanın bunların varlığından haberdar olması gerekmez — sınır uygulamanın çalışma zamanından görünmez.
Her oturum kendi tarayıcı bağlamında çalışır — oturuma kendi çerez kavanozunu, kendi yerel depolamasını, kendi service worker kaydını, kendi izinlerini, kendi oturum durumunu veren Chromium düzeyinde bir yapı. Aynı korunan uygulamadaki iki oturum tarayıcı düzeyinde hiçbir şey paylaşmaz.
Her gezinme isteği — ana belge, alt belge, fetch, XHR — hedef domain'i oturumun allowlist'ine karşı kontrol eden bir kesiciden geçer. İzin verilmeyen domain'ler bağlantı kurulmadan önce engellenir. Kullanıcının tıklaması ile gezinmenin kontrol edilmesi arasında yarış durumu yoktur.
Modern tek-sayfa-uygulamalar bir ağ isteği yapmadan pushState veya replaceState çağırarak gezinir. Basit bir istek kesici bunları yakalayamaz. ZeroLeak ayrıca sayfanın içinde kısa bir aralıkla mevcut URL'yi polling yapar, böylece izin verilmeyen yollara SPA gezinmeleri saniyeler içinde yakalanıp geri alınır.
İzin verilmeyen hedefli bağlantı öğeleri, window.open() çağrıları, programatik konum değişiklikleri — hepsi yürütülmeden önce render edilen sayfa içinde yakalanır. Takip edemeyeceği bir bağlantıya tıklayan kullanıcı, ağ isteği zaten başladıktan sonra değil tık anında engellenir.
Tarayıcı, yeni bir tarama hedefi oluşturma girişiminin — kullanıcı, sayfa veya bir script tarafından — anında yakalanıp atılacak şekilde yapılandırılmıştır. Oturum her zaman tam olarak bir görünür sekmeye sahiptir, o da korunan uygulamanın sekmesidir.
Her oturum kullanıcı etkileşimini izler. Kullanıcı yapılandırılan timeout'tan daha uzun süre boştaysa, oturum nazikçe sonlandırılır, tarayıcı bağlamı yok edilir ve (yapılandırıldığında) bir webhook koordinatörü bilgilendirir, böylece hedef politika güncellenebilir. Bellek tüketen terk edilmiş izole tarayıcılar yok.
Oturum başına izolasyon ve gezinme sınırının ötesinde, render edilen piksel akışının kendisi sürekli alt düzey modifikasyonlar taşır. Amaçları otomasyon araçlarını bozmaktır — aksi takdirde oturum ekranını okuyup öğeleri tanımlayıp resmi olmayan kanallar üzerinden etkileşime girecek olan script'leri — sayfanın insan kullanıcıya nasıl göründüğünü veya davrandığını etkilemeden.
Bir canvas overlay render edilen sayfa boyunca sürekli olarak düşük şiddetli rastgele gürültü çizer. İnsan gözü en fazla hafif bir doku algılar; ekranı okumaya çalışan OCR ve template-matching script'leri güvendikleri tutarlı piksel sınırlarını kaybeder. Gürültü şiddeti ve yenileme oranı korunan servis bazında yapılandırılabilir.
Yarı saydam bir overlay, render edilen sayfa boyunca yavaşça değişen rastgele bir renk tint'i uygular. Beyaz ve siyah alanlar göze hala etkili olarak beyaz ve siyah görünür ama gerçek piksel değerleri kayar. Renk imzalarına karşı eşleşme yapan görü tabanlı otomasyon araçları referanslarını kaybeder.
Ekran filtresi olarak çok hafif bir sürekli blur uygulanır. Her kare yüksek frekanslı detayında hafifçe farklıdır, bu da OCR ve desen eşleyicilerin sabit özellik noktaları bulmasını zorlaştırır. Kullanıcı normal okuma mesafesinde blur'u algılamaz.
Sayfa öğeleri normal konumlarına göre 1-3 piksel rastgele yerinden oynatılır. Kayma insan algısının altındadır ama mutlak ekran koordinatlarıyla öğe bulan script'leri bozar. Otomasyon araçları bir kareden diğerine sabit bir öğe konumuna güvenemez.
Kısa bir aralıkla, render edilen tüm yüzey birkaç piksel kaydırılır — okumayı bozmayacak kadar küçük, girdi simülasyonu için tutarlı mutlak piksel koordinatlarına bağımlı otomasyon araçlarını yenmeye yetecek kadar büyük. Selenium tarzı replay saldırıları sabit noktalarını kaybeder.
Oturumlar arası durum sızıntısı veya istenmeyen gezinmenin fiziksel sistemleri etkileyebileceği kritik altyapı arayüzleri. Oturum başına izolasyon aynı konsoldaki iki operatörün birbirlerinin oturumunu göremeyeceğini garanti eder; sıkı allowlist ise hiçbirinin operasyonel konsoldan bir dış bağlantıya geçmeyeceğini sağlar.
Birçok kullanıcı tarafından erişilen iç gösterge tabloları, denetim arayüzleri, raporlama araçları — yükleniciler ve dış denetçiler dahil. Her oturum kendi tarayıcısıdır, erişim politikası gezinme katmanında zorlanır, ve render katmanı savunmaları ekranı kazımaya çalışan herkesin otomasyonuna direnir.
Oturum başına bağlam, bir veri odasını görüntüleyen bir yüklenicinin farklı bir veri odasındaki farklı bir yüklenicinin çerezlerini, arama geçmişini veya oturum kimliklerini göremeyeceği anlamına gelir. Allowlist veri odası oturumunun asla daha geniş internete gitmemesini sağlar.
Birden çok araştırmacının sıkı açıklama sınırları altında hasta verisine eriştiği çalışma portalları. Oturum başına izolasyon sınırı tarayıcı katmanında zorlar; allowlist gezinme katmanında zorlar; render savunmaları veri ekran kanalı üzerinden kazımaya çalışan herkesin otomasyonuna direnir.
Aynı korunan uygulamada iki oturumu yan yana çalıştıracağız, aralarında hiçbir şey sızmadığını göstereceğiz, allowlist dışına gitmeye çalışacağız ve oturumu dış bir otomasyon aracıyla sürmeyi deneyeceğiz — ne olduğunu göstereceğiz.