Tarayıcı uzantıları nasıl tespit edilir?
>>Chrome Tarayıcı Uzantısı Kimliği Nerede Bulunur?
>>Tarayıcı Uzantısını Sorgulama
>>Tarayıcı Uzantısı Kontrol Listesi Oluşturma
>>Google Gotchadan Sneaky Peeks ve Proddinge
>>Tell-tale Error ile Deneme
Konu içeriği;
>>Chrome Tarayıcı Uzantısı Kimliği Nerede Bulunur?
>>Tarayıcı Uzantısını Sorgulama
>>Tarayıcı Uzantısı Kontrol Listesi Oluşturma
>>Google Gotchadan Sneaky Peeks ve Proddinge
>>Tell-tale Error ile Deneme
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 Chromeun 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. Chromeda bulunan tüm uzantılarla aynı şekilde çalışır:
Tıpkı herhangi bir sıradan URL operatörü gibi file:///, https://, http://, vb. kaynaklarını doğrudan tarayıcıya yükleyebiliriz.
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:
Chromedaki 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 URLde bulabiliriz. Bu, chrome-extension:// operatörüyle kullanacağımız kimlik ile aynıdır.
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 Translateden alınmıştır. Bu sayfayı oluşturma isteği şuna benzer:
chrome-extension: //aapbdbdomjkkjkaonfhkkikfgjllcleb/manifest.json
Diffeoyu yüklediyseniz ve bu URLyi 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.
Ş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.jsonunu 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 Googledaki 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:
Webden 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.
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, webden erişilebilen kaynaklar özelliğini okuyabiliriz. Bu şekilde, web kaynaklarını bulabilir ve uygun olup olmadıklarını görmelerini isteyebiliriz.
Bu isteği JavaScriptte 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.
Chromeun 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, APInin 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ı APIsini kullanarak uzantıları tespit etmeye çalışırken JavaScript şöyle görünecektir:
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 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 Chromeun 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. Chromeda bulunan tüm uzantılarla aynı şekilde çalışır:
Kod:
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:
Chromedaki 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 URLde 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 Translateden alınmıştır. Bu sayfayı oluşturma isteği şuna benzer:
chrome-extension: //aapbdbdomjkkjkaonfhkkikfgjllcleb/manifest.json
Diffeoyu yüklediyseniz ve bu URLyi 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.jsonunu 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 Googledaki 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:
Webden 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 Gotchadan Sneaky Peeks ve Proddinge
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, webden erişilebilen kaynaklar özelliğini okuyabiliriz. Bu şekilde, web kaynaklarını bulabilir ve uygun olup olmadıklarını görmelerini isteyebiliriz.
Bu isteği JavaScriptte 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.
5.Adım: Tell-tale Error ile Deneme
Chromeun 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, APInin 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ı APIsini kullanarak uzantıları tespit etmeye çalışırken JavaScript şöyle görünecektir:
Kod:
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.
https://sibertehdit.com/tarayici-uzantilari-nasil-tespit-edilir/ (Türkçe kaynak)
https://blog.authentic8.com/how-to-detect-browser-extensions/ (İngilizce kaynak)
Son düzenleme: