Tavsiyemiz
Filtreler
Hizmet Kategorileri
Sağlık
blog-image tavsiyemiz

Tarayıcı Uzantıları Nasıl Tespit Edilir?

Tarayıcı Uzantıları Nasıl Tespit Edilir?

author
Gözen Esmer
31/10/2024

Tarayıcılarda indirilen uzantılarda çeşitli güvenlik açıkları zaman zaman ortaya çıkabilmektedir. Bu güvenlik açıklarından önce bizim bu uzantıların nerede bulunduğunu bilmemiz gerekiyor.


Bu bilgiler bazen çok değerli olabilir. Saldırganlar, bundan en iyi şekilde yararlanmaya çalışırlar. Örnekler:


Tarayıcı uzantısı ayrıntıları, istemcinin başkalarının izlerini takip etmesine yardımcı olabilir, örneğin: “Bu istemci bir Google Translate tarayıcı uzantısı kullanıyor. Bu istemci diğerlerini kullanmaz.”


Eklenti bilgileri, hedeflenen istemci istismarına da yardımcı olabilir, örneğin: “Bu istemci, çalışan A, B ve C açıklarından yararlanarak parola yöneticisinin 2.0.6 sürümüne sahiptir.”

Eklenti kimliği, tarayıcıyı ele geçirmek için şu şekilde kullanılabilir: “Bu geliştiricinin Gmail hesabına zarar verildi; onu kötü amaçlı bir güncelleme göndermek için kullanalım.”

Google Chrome ve Mozilla Firefox, testler yapacağımız iki tarayıcıdır. İlgili web mağazalarından yükleyebileceğiniz en kapsamlı çeşitli tarayıcı eklentileri koleksiyonuna sahiptirler.


Google Chrome’un uzantı sorgularını işleme biçimi, chrome-extension:// URI şemasıdır. Bu URI operatörü, bir tarayıcı uzantısıyla ilgili her şeyi yönetir. Chrome’da bulunan tüm uzantılarla aynı şekilde çalışır:


chrome-extension://<UZANTI KİMLİĞİ>/<İSTENİLEN KAYNAK>


Tıpkı herhangi bir sıradan URL operatörü gibi – file:///, https://, http://, vb. – kaynaklarını doğrudan tarayıcıya yükleyebiliriz.


1. Adım: Chrome Tarayıcı Uzantısı Kimliği Nerede Bulunur?



Ancak bunlardan herhangi birini yapmadan önce, tespit etmeye çalıştığımız uzantı için uzantı kimliğine ihtiyacımız var. Bunu şu şekilde elde ediyoruz:


Chrome’daki herhangi bir uzantıyı Google Chrome web mağazasında arayabilir ve uzantının kimliğini yukarıdaki ekran görüntüsünde olduğu gibi URL’de bulabiliriz. Bu, chrome-extension:// operatörüyle kullanacağımız kimlik ile aynıdır.


2. Adım: Tarayıcı Uzantısını Sorgulama



Kimliği elde ettiğimize göre, etkileşim için uygun olup olmadığını görmek için uzantı içinde yer alan bir dosya/web kaynağına ihtiyacımız var. Her Chrome uzantısının kök dizininde manifest.json adında bir dosya vardır. Bu dosya, yüklü Chrome uzantısının sürümü, bazı dosya yolları gibi bilgileri içerir.



Manifest JSON dosyasının, tarayıcı içinde oluşturduğunuzda nasıl göründüğünü buradan öğrenebilirsiniz. Bu örnek, bir Chrome uzantısı olan Google Translate’den alınmıştır. Bu sayfayı oluşturma isteği şuna benzer:


chrome-extension: //aapbdbdomjkkjkaonfhkkikfgjllcleb/manifest.json


Diffeo’yu yüklediyseniz ve bu URL’yi Chrome tarayıcınızın içinden yüklerseniz, manifest.json dosyasını içinde tanımlanan tüm özelliklerle birlikte yükler. Bu, uzantının sürümünü içerir.


3. Adım: Tarayıcı Uzantısı Kontrol Listesi Oluşturma


Şimdi soru şu oluyor: Eklenti popülaritesine göre yeterince Chrome uzantısı kimliği toplayacak olsaydık, yüklü her uzantının manifest.json’unu isteyebilir ve en azından bunun hangi sürüm olduğunu öğrenebilir miydik?


Bu amaçla, “ext” adında bir JavaScript dizisi tanımladım, buradan fetch () kullanarak manifest.json dosyasını almaya çalışacak; ve sonra JSON nesnesini ayrıştırın ve her şeyi uzantının kendisinden sonra adlandırılan dizinin dizininde depolayın.


Daha sonra tüm uzantıları yükleyeceğim ve her birini açtıktan sonra programlı olarak tespit edip edemeyeceğime bakacağım.



Çalıştığı görülüyor. Konsoldan da şu şekilde görülüyor:



Biri dışında tüm uzantılar isteği reddetti. Manifest.json talebimi reddetmeyen bir uzantıdan, depolanan JSON nesnesinin tamamını sorguladık.


İçeriden tanımlanan birçok değişkene dikkat ediniz. Uzantı açıklaması, sürüm numarası ve blob URI şeması gibi değişkenler içerirler. İlginçtir ki, uzantı tarafından kullanılan web kaynakları (* .html, * .js, * .css, ve diğerleri).



Öyleyse neden diğer tüm uzantılar istemci tarafı isteği reddetti? Görünüşe göre Google’daki insanlar izleme için kullanılan bu yöntemi biliyorlar ve müşterilerin uzantılarla iletişim kurabileceği kapsamı sınırlamışlar.


İsteğe izin veren uzantıda öne çıkan, JSON değişkeninin “web_accessible_resources” içeriğidir. İnceliyoruz:



Web’den erişilebilen kaynaklar, istemcinin tarayıcı içinden hangi dosya kaynaklarına erişmesine izin verildiğini sınırlamaktan sorumludur. Bu uzantı, değişkenlerden biri olarak “/ *” kullanarak bu etkileşimi tanımlar.


Bu belirli tanımla ilgili sorun, “/ *” joker karakterinin, manifest.json (/manifest.json adresinde bulunur) dahil olmak üzere uzantı içindeki her kaynağı içermesidir. Böylece sorguya neden yanıt verdiğini anlayabilirsiniz.


4. Adım: Google Gotcha’dan Sneaky Peeks ve Prodding’e


Artık Google’ın öngörüsü sayesinde bir uzantıdan herhangi bir web kaynağı talep edemeyeceğimizi biliyoruz. Yapabileceğimiz şey, bizim için uygun olanı talep etmektir.


Her bir uzantıya girip manifest.json adresini ziyaret ettiğimizde, web’den erişilebilen kaynaklar özelliğini okuyabiliriz. Bu şekilde, web kaynaklarını bulabilir ve uygun olup olmadıklarını görmelerini isteyebiliriz.


Bu isteği JavaScript’te nasıl işliyoruz? İstemciden bizim için uygun olan web kaynağına bir GET isteği oluşturmak için JQuery / AJAX’ı kullanabiliriz. Bu aynı zamanda uzantı başına bunun duruma göre bir uygulama olduğu ve çok özel / kodlanmış olduğu anlamına gelir. Parametreler de zamanla değişebilir. Şimdilik, neyin mümkün olduğunu görelim:



Burada her uzantıya gönderilen isteği değiştirdik. İstemci tarafından erişilebilen bir web kaynağı içerir. Web kaynağı bildirime izin veriyorsa, işlemek ve sürüm numarasının ne olduğunu bulmaya çalışıyoruz. Eğer izin vermiyorsa, izin verdiği başka bir şey istiyoruz.


İstek yapılırken, döndürülen durum 200 ise, uzantı yüklenir ve tarayıcı ortamında bulunur. Bir 404 döndürürse, uzantı ya kapalıdır ya da yoktur.


Ya ikisi de geri dönmezse? Bu durumda Chrome, isteğimizle uğraşıyor ve muhtemelen onu, kullanıcının yükleyip yüklemediğini belirleyemeyeceğimiz sürekli bir durumda bırakıyor.



Adım 5: Tell-tale Error ile Deneme


Chrome’un JavaScript konsolunun attığı hataları, bir müşterinin makinesinde bir uzantı bulunup bulunmadığının belirlenmesi için ele alırsak, her birini duruma göre tanımlamaya yardımcı olan bir çerçeve oluşturabiliriz.


Google, özellikle Chrome için, uzantı kimliği mevcut olduğu sürece uzantılardan/uzantılara doğrudan aramaları destekler. Google, API’nin “bir uzantı ile içerik komut dosyaları arasında veya uzantılar arasında mesaj alışverişi desteği içerdiğini” ana hatlarıyla açıklamaktadır. Bu tür taleplerin nasıl yapılacağı burada açıklanmaktadır .


Yalnızca Chrome uzantı API’sini kullanarak uzantıları tespit etmeye çalışırken JavaScript şöyle görünecektir:


var myPort = chrome.extension.connect ('Extension_ID', Object_to_send);


Sonuç: “Fazla Paylaşılan” Uzantılara Dikkat Ediniz



Uzantılar güçlü araçlar olabilir, ancak çoğu güvenlik ve mahremiyete fazla düşünülmeden geliştirilir. Bazı durumlarda, uzantılar herhangi bir bağlamda kaynaklarına erişime izin verir ve bu, bireysel kullanıcılar ve onlar aracılığıyla tüm ağ için bir risk oluşturabilir.


Bu gönderi, uzantıları tespit etmenin yalnızca bir yöntemini özetlemektedir. Aynı sonuçları elde etmenin başka yöntemleri de vardır.