2 puan yazan GN⁺ 2024-03-07 | 1 yorum | WhatsApp'ta paylaş
  • 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

Kaynaktan derleme

  • Under New Management, Plasmo kullanır
  • pnpm install: bağımlılıkları kurar
  • pnpm dev: yerelde çalıştırır
  • pnpm build --zip: sürüm derlemesi
  • pnpm 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.com için declarative_net_request kuralı tanımlanamaz
  • Bu yüzden geliştirici bilgisi kontrol işi ExBoost API sunucusuna devredilir

1 yorum

 
GN⁺ 2024-03-07
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.pem varsa ID değişir.
    Ancak key.pem yoksa 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 eval ya da postMessage gibi tehlikeli sink’lere akıp akmadığını izleyen çalışma zamanı taint analizi çalıştırmak istiyorum: https://github.com/milesrichardson/crxmon

    • Eskiden Opera için yaptığım bir uzantı ilk sayfaya çıkıp popüler olmuştu; biri de epey yüksek bir bedelle satın almak istedi.
      Pazarlı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.
    • Bu, açık anahtar altyapısının (PKI) çalışma biçimiyle aynı değil. Chrome uzantılarında gerçekten özel anahtarın PEM dosyası olarak yüklenmesi gerekip gerekmediğinden şüpheliyim.
      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.
    • Uzantı ID’si değişirse yeni sürümü açıkça yüklemeniz gerekir; otomatik güncellenmez.
      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/robocopy kullanmadan ç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.
    • Anlattığınız yöntem mümkün olsa da, uzantı ID’sinin oluşturulmasının zorunlu ya da yaygın yolu bu değil. Genellikle geliştirici ilk gönderimde yalnızca ZIP dosyasını yükler; Chrome Web Store da herkese açık dağıtım için imzalamada kullanılacak özel anahtarı oluşturup saklar.
      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.pem varsa 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ı.
    • Biri kötü niyetle bir uzantı satın alıyorsa özel anahtarı da isteyecektir.
      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.

    • Diğer tarafın hikâyesine bakınca bağlam biraz değişiyor: https://news.ycombinator.com/item?id=38463233
      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.
    • “Bir dahaki sefere tanıtımı daha agresif yapacağım” demişti; bence bunu bu sefer de yapabilir. Eklenti hâlâ var, yani şimdi de tanıtılabilir.
      Ancak YouTube ve Chrome’un bunun ne kadar süre çalışmasına izin vereceği ayrı bir mesele; onlar da bundan hoşlanmayabilir.
    • Sonucun iyiye bağlanmasını umarım; olmazsa Jeff Tweedy’nin tutumu yardımcı olabilir.
      “…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ı
    • HN kullanıcı adını metin olarak asla yazmayıp sadece görsele koymasının nedenini merak ediyorum. Bu yorumda ya da blog yazısında, kopyalayan kullanıcının adını açıkça söylediğinde nasıl bir tehdit modeli varsaydığını bilmiyorum.
    • Buna “zuckered”a uğramak deniyor gibi.
  • 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ı.

    • Bunu yapan kişiyim. Kontrol her saat otomatik olarak çalışıyor ve değişiklik algılanırsa eklenti simgesinin üzerinde bir rozet gösteriliyor.
      Bundan daha güçlü bir bildirimin fazla müdahaleci olacağına karar verdim.
    • Şirket sahipliği değişti diye kullanıcıların yükseltmeyi açıkça onaylamasını gerektiren bir hız kesici tümsek koyarsanız, kullanıcıların kayda değer bir oranı kopup gider.
      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.

    • Gerçekten kötü niyetli olanlar yazıdaki araçla tespit edilmeyecektir. Çünkü onlar yalnızca eklenti sahipliği ve kodunu değil, geliştirici hesabının devrini de isterler.
  • 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.com gibi eklenti mağazası alan adlarını değiştirmeye özel kurallar koyması nedeniyle geliştirici bilgisi kontrolünün ExBoost API sunucusuna devredildiği belirtiliyor
    https://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

    • İyi yakalamışsın. Biraz kurcalayınca, şimdilik tarayıcıyla ilişkili meta verileri göndermediğini, yalnızca virgülle ayrılmış eklenti ID listesini gönderdiğini gördüm. Elbette IP kolayca kullanılabilir
      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.json iç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 gerekiyor
      https://github.com/classvsoftware/under-new-management/blob/...
      https://api.extensionboost.com/v1/developer?extension_ids=gh...
    • ExBoost da asıl gönderi yazarının projesi gibi görünüyor. İyi niyetle yorumlarsak, eklenti ID’si verildiğinde sahip gibi meta verileri kazımak için gereken veriler zaten ellerinde olduğundan o API sunucusunu kullanmış olabilirler
    • Eğlencesine birkaç küçük eklenti yapmıştım; birkaç hafta önce ExBoost’tan “Collaboration To Grow Our Extensions” başlıklı bir e-posta aldım
      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
    • Bu tür bir projede beklemediğim bir bağlantı. Şaşırtıcı
    • Neden harici bir servise bağlanması gerektiğini anlamıyorum. Sahip değişince eklenti ID’sinin değiştiğini sanıyordum; o zaman yerelde ID’leri takip edip yeni bir ID görünce göstermek yeterli olmaz mı? Bir şeyi yanlış anlamış olabilirim
  • 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

    • Tüm güncellemeleri inceliyorlar. uBlock Origin gibi çok popüler eklentiler bile ara sıra takılıyor
      Ş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
    • Kulağa, kuralları olan ve bunların uygulandığı, biraz zahmetli bir “marketplace” olsa iyi olurdu demek gibi geliyor
      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

    • Geliştirici hesabının tamamını satmaya en başta izin var mı ki?
  • 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

    • Pi-hole, reklamları ve takipçileri uBlock Origin kadar etkili engelleyemiyor
      Yine de isteyenler için seçenek olması güzel; herkesin risk profili ve endişeleri farklı
    • Manifest V3 ile gelen izin değişikliklerinin nedenlerinden biri de zaten eklentilerin erişebileceği kapsamı azaltmak
      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
    • Safari’de içerik engelleyicilerin hiçbir izin olmadan çalışmasını sağlayan özel bir arayüz var
      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...
    • Burada sözü edilen adblock eklentisinin hangisi olduğunu merak ediyorum. Örneğin uBlock yerel engelleme listesi kullanıyor
    • Mobilde ne yapıyorsun?
  • 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?

    • Dürüst olmayan bir eklenti geliştiricisinin şifreyi gayriresmî olarak devredip “aa, hacklenmişim” diyerek şüpheli bir alıcıya işin içinden sıyrılmasını pratikte engellemek zor
      Ö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
    • Muhtemelen Chrome Web Store Hizmet Şartları ihlali olma olasılığı yüksek
  • 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

    • Chrome en popüler tarayıcı olduğu için seçilmiş bir uzantı saldırı vektörü olmasından ibaret
    • Sadece HonorLock kullandığına göre, AdBlock olmadan nasıl yaşadığını bilmiyorum