Yüklü Chrome uzantılarında sahip değişikliğini tespit edin
(github.com/classvsoftware)- Under New Management, yüklü tarayıcı uzantılarının geliştirici bilgilerinin Chrome Web Store veya Firefox Addons üzerinde değişip değişmediğini düzenli olarak kontrol eden bir uzantıdır
- Geliştirici bilgileri değişirse uzantı simgesinde kırmızı bir rozet göstererek kullanıcının sahiplik değişikliğini fark etmesini sağlar
- Gereklilik, uzantı geliştiricilerinin sık sık satın alma teklifi alması ve devralan tarafın çoğu durumda mevcut kullanıcıları kötüye kullanmayı hedeflemesi sorunundan doğmuştur
- Kullanıcılar, yüklü uzantılarının sahipliğinin değiştiğini ve tehlikeye girmiş olabileceğini bilmeyebilir; bu araç onlara karar verme fırsatı sunar
- Tarayıcılar uzantı pazar yeri alan adlarında değişiklik yapmaya kısıtlamalar getirdiği için geliştirici bilgisi kontrolü ExBoost API sunucusuna devredilir
Uzantı sahipliği değişikliğini tespit etme
- Under New Management, yüklü uzantıların geliştirici bilgilerinin Chrome Web Store veya Firefox Addons mağazasında değişip değişmediğini aralıklı olarak kontrol eder
- Değişiklik varsa uzantı simgesinde kırmızı bir rozet görünür ve kullanıcı sahiplik değişikliğini fark edebilir
- Amaç, kullanıcılara kullandıkları yazılım hakkında bilgiye dayalı karar verme fırsatı sunmaktır
Neden gerekli
- Uzantı geliştiricileri, uzantılarını satın almak isteyenlerden sürekli teklifler alır
- README, neredeyse tüm durumlarda alıcının mevcut kullanıcıları kandırmayı amaçladığını belirtiyor
- Kullanıcılar, yüklü uzantılarının sahipliğinin değiştiğini ve şu anda tehlikeye girmiş olabileceğini fark etmeyebilir
Kurulum yöntemi
- Chrome kurulumu: Chrome Web Store
- Firefox kurulumu: Firefox Add-ons
- Ya da prebuilt release dosyasını indirip
.zipdosyasını açtıktan sonradistdizinini tarayıcıya yükleyebilirsiniz
Kaynaktan derleme
- Under New Management, Plasmo kullanır
pnpm install: bağımlılıkları kurarpnpm dev: yerelde çalıştırırpnpm build --zip: sürüm derlemesipnpm build --target=firefox-mv3: Firefox için derleme
Neden harici bir sunucu gerekli
- Tarayıcılar, uzantı pazar yeri alan adlarını değiştirme konusunda özel kurallar uygular
- Örneğin
chromewebstore.google.comiçindeclarative_net_requestkuralı tanımlanamaz - Bu yüzden geliştirici bilgisi kontrol işi ExBoost API sunucusuna devredilir
1 yorum
Hacker News yorumları
Uzantı ID’si, geliştiricinin uygulama mağazasına ilk yüklediği sırada birlikte yüklediği özel anahtardan türetilir; sonraki yükleme ZIP’inin içinde farklı bir
key.pemvarsa ID değişir.Ancak
key.pemyoksa uzantı ID’si aynı kalır. Bu yüzden ID değişirse sahibinin değişmiş olma ihtimali vardır, ama asıl sahip özel anahtarı yeni sahibine devretmiş de olabilir. Google her yüklemede özel anahtar istemediği için yeni sahip, o anahtar olmadan da değişiklikleri dağıtabilir.Uzantı ekosistemi ilginç; bu alanda araçlar da geliştiriyorum. Belirli bir uzantıyı hedefleyip bir GitHub deposu oluşturmak, her güncellemeyi depodaki değişiklik olarak kaydetmek ve ardından statik analiz araçlarıyla kullanıcı girdisinin
evalya dapostMessagegibi tehlikeli sink’lere akıp akmadığını izleyen çalışma zamanı taint analizi çalıştırmak istiyorum: https://github.com/milesrichardson/crxmonPazarlık sırasında uzantıyı kaldırıp tüm kaynak kodunu vererek kendisinin dağıtmasını sağlayacağımı söyledim; karşı taraf ise Opera uzantı hesabı kimlik bilgilerini de devretmemi bekliyordu. Sonunda anlaşmadan vazgeçtim. Bu tür araçların bir ölçüde faydalı olduğuna katılıyorum ama uzantılar için bir kötü amaçlı yazılım tarayıcısı daha iyi olurdu.
Geliştirici uzantıyı ya da manifest’i özel anahtarla imzalamalı, açık anahtarı paylaşmalı ya da yüklemeye dahil etmeli. Güncellemeler de aynı özel anahtarla imzalanmaya devam etmeli; anahtar değişmediği sürece ilk yüklemedeki açık anahtarla aynı özel anahtarın kullanılıp kullanılmadığı doğrulanabilir. Sonraki yüklemelerde açık anahtarın yer alıp almaması özünde önemli değildir. Özel anahtarı satarsanız ya da paylaşırsanız başka biri meşru şekilde imzalanmış güncellemeler oluşturabilir; ama bu, imzalayanın özel anahtarı gizli tutmamasından kaynaklanan bir risktir. Google ya da herhangi biri özel anahtarı paylaşırsa uzantının köken garantisi çöker.
Ama Google’ın özel anahtar olmadan da yeni sahibin değişiklikleri dağıtmasına izin vermesinin gerçekten mümkün olup olmadığını merak ediyorum. Chrome Web Store en ufak konularda bile çok katıyken böyle bir şeyi umursamıyor olması tuhaf.
Sadece test kullanıcılarına açtığım 3 uzantı kullanıyorum; bunları birden fazla makineye kolay kurmak için geliştirici modu ya da
rsync/robocopykullanmadan çalışıyorum. Ancak bu hafta sonu Chrome, yalnızca bir makinede hepsini “Chrome Web Store’da listelenmiyor ve kullanıcının bilgisi dışında eklenmiş olabilir” gerekçesiyle devre dışı bıraktı. Zorla etkinleştirmek de mümkün değil; mağazada “devre dışı” deyip “şimdi etkinleştir” gösteriyor, ama yalnızca banner kayboluyor ve sayfayı yenileyince yeniden beliriyor. İlgili Chrome profili izin listesindeki hesapla oturum açmış durumda.Chrome Web Store sayfasındaki rozet, geliştirici hesabıma yönelik bir yaptırım olmadığını ve durumunun iyi olduğunu gösteriyor. İzin listesindeki e-posta ile oturum açmamış olsaydım o sayfayı da göremezdim. Böyle “çok umursayıp” da anahtarsız güncellemeye izin verdiklerini kabul etmek aklıma yatmıyor.
CWS mevcut bir uzantının ID’sini asla değiştirmemeli. Çünkü ID uzantıyı benzersiz şekilde tanımlar. ID değişirse Chrome istemcisi o uzantı için güncelleme isteyemez; CWS ve Chrome, kullanıcıları bir uzantıdan başka bir uzantıya taşıma özelliğini desteklemez.
Bildiğim kadarıyla CWS, ilk gönderimden sonra ZIP içinde
key.pemvarsa bunu reddeder. Uzantı ID’si değiştiyse o artık aynı uzantı değildir. Yeni sahibin PEM olmadan da değişiklikleri dağıtabileceği genel olarak doğru; ama geliştirici CWS’ye gönderdiği uzantıyı kendisi imzaladıysa PEM olmadan güncelleme yapamaz. Açıkçası bunun hâlâ mümkün bir özellik olup olmadığını bilmiyorum; eskiden geliştiricilerin kendi yüklemelerinde kullandıkları özel anahtarı kaybedip kurulu kullanıcı tabanını yok etmelerine yol açan dev bir tuzaktı.Neredeyse herkes, fiyat doğruysa sonunda kabul eder; kişiden kişiye değişen tek şey ne kadar istemeleri gerektiğidir.
Birkaç ay önce YouTube reklamlarını hızlıca geçiren ücretsiz, açık kaynaklı bir eklenti yapıp burada paylaşmıştım ve ilk sayfaya çıkmıştı.
Bir hafta içinde, Show HN gönderime yorum yazmış olan biri bunu kopyalayıp kendi sürümünü Reddit’te tanıttı; viral oldu ve 300 binden fazla kullanıcıya ulaştı: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
Ücretsiz, açık kaynaklı bir eklentiye neden PR göndermek yerine kopyaladığını merak etmiştim; birkaç hafta sonra çeşitli sitelerde bunu 5 haneli bir tutara satmaya çalışıyordu. Hâlâ sahibi olabilir, ama Chrome Store’da kayıtlı geliştiricinin de ilk yayımlandığı zamana göre değişmiş olması göze çarpıyordu.
Arka planı tamamen anlamadım, ama söz konusu eklenti aslında 50 satırlık basit bir JavaScript’ten ibaret. Birinin bunu çaldığını söylemek epey iddialı. Fikrin kendisinin değeri yok; bu fikrin çok yeni olduğunu iddia etmek de zor. Karşı tarafın ilham aldığını varsaysak bile kimin önce ne yaptığına dair zaman sırası çok net değil.
Ancak YouTube ve Chrome’un bunun ne kadar süre çalışmasına izin vereceği ayrı bir mesele; onlar da bundan hoşlanmayabilir.
“…bütün dünya şarkını söylüyorsa / ve bütün resimlerin asılıysa / bir zamanlar senin olan şeyin artık herkesin olduğunu hatırla / bu doğru ya da yanlış demek değil / istersen buna istediğin kadar tutunabilirsin / ama huzursuz olan yalnızca sen olursun…” — Wilco’nun “What Light” şarkısı
Gerçekten çok kullanışlı, ama başkalarının da dediği gibi bu bir tarayıcı yerleşik özelliği olmalı.
Kaynak koduna henüz derinlemesine bakmadım; sahiplik değişikliği olduğunda otomatik olarak haber verip vermediğini merak ediyorum. Gerçek zamanlı olması gerekmiyor, ama başlangıçta haber veriyor mu, yoksa elle bir kontrol komutu mu çalıştırmak gerekiyor?
Birkaç ay önce de bu konu gündeme gelmişti: https://news.ycombinator.com/item?id=36233068
O zamanki üst yorumda söylendiği gibi, Firefox ve Chrome’un böyle durumlarda otomatik eklenti yükseltme politikasını değiştirmesi iyi olur. Eklenti sahiplik değişikliğini açıklarsa yükseltme için kullanıcı onayı istenmeli; açıklamazsa kullanıcı bunu kötü amaçlı olarak bildirebilmeli. Ayrıca başlıkta muhtemelen “Show HN” yer almalı.
Bundan daha güçlü bir bildirimin fazla müdahaleci olacağına karar verdim.
Bu, satış sırasında ürünün ya da şirketin değerini düşürür. Kullanıcı dostu, ama faturaları ödemek zorunda olan üreticiler için pek dostça değil.
Bu şaka konusu değil.
Birkaç yıl boyunca oldukça popüler bir açık kaynaklı Chrome eklentisinin sahibiydim; toplam bağışlar bir aylık kahve masrafını bile karşılamadı.
Buna karşılık, eklentiyi satmam için gelen teklifler hem çok sayıdaydı hem de tutarlar çılgındı; açıkça kötü niyetli amaçlar için olanlar, hatta bunu düpedüz söyleyenler bile vardı. Hepsini reddettim, ama böyle bir durumda özgün geliştiricinin ahlakının tek güvenlik ve gizlilik mekanizması olmasını beklemek aklı başında bir değerlendirme değil.
Hedefe epey katılıyorum ve teknik sınırlamaları da anlıyorum; ancak kullanıcının tüm eklenti listesini eklenti odaklı bir reklam ağına göndermesi biraz şüpheli
Dış sunucuya ihtiyaç duyulmasının nedeni olarak, tarayıcının
chromewebstore.google.comgibi eklenti mağazası alan adlarını değiştirmeye özel kurallar koyması nedeniyle geliştirici bilgisi kontrolünün ExBoost API sunucusuna devredildiği belirtiliyorhttps://www.extensionboost.com/
ExBoost, daha fazla kullanıcı ve yorum isteyen tarayıcı eklentileri için bir iş birliği ağı olarak tanımlanıyor. Yöntem, eklenti arayüzüne bir ExBoost slotu koyup benzer eklentilerin tanıtımını veya yorum isteğini göstermek
Yüklediğim bir eklentinin API sonucuna bakınca geliştiriciyle ilgili meta veriler çıkıyor.
chrome.management.get(id)Chrome API’sini denedim ama bu bilgiyi döndürmedi;manifest.jsoniçeriğini programatik olarak almanın da bir yolu yok gibi görünüyor. Dolayısıyla bu eklentinin şu anda yapmak istediği şey için gerçekten harici bir kaynak gerekiyorhttps://github.com/classvsoftware/under-new-management/blob/...
https://api.extensionboost.com/v1/developer?extension_ids=gh...
Kendi kodlarını benim eklentime koymamı istiyorlardı ve “sen benimkini göster, ben de seninkini göstereyim. Maliyet 0, herkes kazanır” diyordu. Şüpheli göründüğü için spam’e attım; dolandırıcılardan aldığım diğer spam e-postalardan farklı görünmüyordu
Firefox eklentileri için Mozilla’nın Önerilen Eklentiler Programı var ve kapsama alınmadan önce kurum içi güvenlik uzmanları tarafından sıkı bir teknik incelemeden geçirildiği söyleniyor: https://support.mozilla.org/en-US/kb/recommended-extensions-...
Ancak destek belgesinden, tüm güncellemelerin yayımlanmadan önce incelenip incelenmediği net anlaşılmıyor. Her seferinde inceleniyorsa popüler eklentiler için bu sorunu bir ölçüde çözer; ama acil bir güvenlik güncellemesi gerektiğinde ne kadar gecikme olacağını da merak ediyorum
Şu an kişisel politikam olarak yalnızca bu tür küratörlüğü yapılmış eklentilerin tüm sitelerde ve sekmelerde çalışmasına izin veriyorum
Ne kadar popüler ya da tanınmış bir kuruluş olursa olsun, kuralları tekrar tekrar ihlal ediyorsa veya marketplace işlevlerini baypas etmeye çalışıyorsa yasaklanabileceği bir yapıdan söz ediyorum
Gerçekten kötü niyetli durumlarda, eklenti devredilirken çoğu zaman Google geliştirici hesabının kimlik bilgileri bizzat satılıyor; bu durumda bunu tespit edemez
Uzun zaman önce adblock yüklemiştim ve çok sevmiştim
Yeni bir makine alıp yeniden kurmam gerekti; o zaman ilk kez izinlere baktım ve aklım başımdan gitti. Reklamları engellemek için gördüklerimi görebilmesi gerektiği mantıken doğru, ama bunu hiç ciddi ciddi düşünmemiştim
Şimdi Pi-hole kullanıyorum ve hiç eklenti kullanmıyorum
Yine de isteyenler için seçenek olması güzel; herkesin risk profili ve endişeleri farklı
Bazı eklentiler açık kaynaklı ve güvenilir; ama pek çoğu öyle değil ve insanlar doğrulamakta zorlanıyor gibi görünüyor
Engelleme listesini sağlıyorsunuz, tarayıcı doğrudan engelliyor. Firefox’ta da mümkün mü bilmiyorum: https://developer.apple.com/documentation/safariservices/cre...
Kötü amaçlı bir eklenti alıcısı olsam bundan kaçınmak için geliştirici adını aynen bırakmam yeterli olmaz mı? Yoksa Chrome Extension Store geliştirici adını sıkı biçimde mi yönetiyor?
Örneğin kötü niyetli bir devlet aktörü, çok sayıda tarayıcı erişimi elde etmek için uBlock’un yazarına on milyonlarca dolar teklif edebilir. Ekonomisi nasıldır bilmiyorum, ama daha niş eklentiler çok daha ucuza hedef alınabilir
Bu sorunun Chrome’da diğer tarayıcılara göre daha kötü olup olmadığını merak ediyorum
Kullandığım tek tarayıcı uzantısı, sınav gözetim yazılımı HonorLock ve kullanmam zorunlu. Uzantı yalnızca Chrome’a özel olduğu için HonorLock yüzünden ara sıra Chrome kullanıyorum. Kurulum bağlantısını Safari’de açınca Chrome’u yüklememi söylüyor: https://app.honorlock.com/install/extension
Chrome uzantılarında, HonorLock’un kullanım senaryosunu mümkün kılan ama aynı zamanda bu yazıdaki aracı daha kullanışlı hâle getiren bir özellik olup olmadığını merak ediyorum