- macOS’un varsayılan yerel ana makine adı kullanıcı adını içerebildiğinden, web siteleri izin almadan mDNS ad çözümleme sürelerindeki farkları kullanarak ad adaylarını daraltabilir
- Saldırganlar ülke ve cinsiyete göre en popüler 50 adı cihaz adı adaylarıyla birleştirir; deneylerde macOS kullanıcılarının adını ortalama vakaların %65’inde doğru tahmin etti
- Tarayıcı JavaScript’i rastgele UDP soketi açamaz, ancak
fetch,iframe,Image,WebRTCistekleriyle.localadreslerinin yanıt gecikmelerini karşılaştırabilir - Saat dilimi, dil, IP konumu, Safari’nin
navigator.languagedeğeri, ekran çözünürlüğü vescreen.isExtendedgibi bilgiler yerel ayar ve cihaz modeli adaylarını azaltmak için kullanılır - Pratikliği düşük ve geliştirici araçlarındaki ağ sekmesinde kolayca fark edilebilir; ancak aynı mDNS keşif yöntemi yazıcı, akıllı TV, akıllı hoparlör ve IoT cihazlarını tespit etmek için de kullanılabilir
macOS yerel ana makine adında adın sızmasına yol açan yapı
- macOS kullanıcılarının gerçek adı, izin istemeden tarayıcıdan tahmin edilebilir; bunun temelinde mDNS protokolü ve varsayılan yerel ana makine adı biçimi vardır
- Belirli bir ülkedeki cinsiyete göre en popüler 50 ad listesini kullanmak bile macOS kullanıcılarının adını ortalama vakaların %65’inde doğru tespit eder
- Fingerprint bu tekniği ürününde kullanmaz ve siteler arası izleme hizmeti de sunmaz
- Kamuya açık tartışmanın amacı, tarayıcı sağlayıcılarının bu tür teknikleri hızla düzeltmesine yardımcı olmaktır
mDNS ve Apple Bonjour nasıl çalışır?
- multicast DNS, yerel ağda cihaz adlarını kaydetmek, keşfetmek ve yayınlamak için kullanılan bir protokoldür
- Yazıcı gibi cihazlar, ayrılmış dahili IP
224.0.0.251adresine UDP kayıt paketleri gönderir veHP_LaserJet_Printer.localgibi ana makine adları içerebilir .localüst seviye alan adı, ilgili ana makine adının mDNS ile çözümlenmesi gerektiğini belirtir- Yönlendirici bu paketleri yerel ağdaki diğer cihazlara otomatik olarak yayınlayarak ana makine adlarının önbelleğe alınmasını sağlar
- Cihazlar, aynı ayrılmış IP’ye sorgu paketleri göndererek ağda bulunabilecek belirli adlı cihazları arar
- Örnek ana makine adları şöyledir
johns-mac-mini.localdavid-ZenBook-UX431DA-UM431DA.localjames-iphone.localcanon-mf644c.localbedroom-appletv.localdlinkrouter.local
- Apple cihazlarında mDNS, Apple Bonjour özelliğinin bir parçası olarak yaygın biçimde kullanılır
- Varsayılan yerel ana makine adında kullanıcı adı görünebilir; macOS’ta yerel ana makine adı System Settings > Sharing bölümünden kontrol edilebilir veya değiştirilebilir
Tarayıcıdan mDNS ana makine adlarını kontrol etmenin dolaylı yolu
- mDNS, UDP paketlerine dayalı olduğundan tarayıcı JavaScript ortamında rastgele UDP soketleriyle doğrudan kullanılamaz
- Bunun yerine, tarayıcının URL’deki ana makine adını çözümlemeye çalışma özelliğinden yararlanılarak bir zamanlama saldırısı yapılır
- Kavram kanıtı, var olan
device-1.localve var olmayandevice-2.localadreslerine sıradanfetchGET istekleri gönderme yöntemini kullanır - Adres çözümlenirse tarayıcı 80 numaralı porta TCP paketi gönderir; bu portun çoğu durumda kapalı olması muhtemeldir
- Ağ düzeyinde farklı hatalar görülür
- Var olan
device-1.local:ERR_CONNECTION_REFUSED - Var olmayan
device-2.local:ERR_NAME_NOT_RESOLVED
- Var olan
- JavaScript’te iki hata da aynı
Failed to fetchhatasına eşlendiğinden hata türünün kendisine güvenilemez - Yerel ağ hızlı olduğu için geçerli bir mDNS ana makine adı, varsayılan bağlantı zaman aşımından çok daha hızlı çözümlenir
- Örnekte geçerli adres 4 ms, geçersiz adres ise 5 saniye olarak ayrışır
- Bu yaklaşım kavram kanıtı için yeterince tutarlıdır ve başlıca tarayıcılarda benzer şekilde çalışır
- Pratikte
fetchdışındaiframe,Image,WebRTCgibi ağ JavaScript API’leriyle de DNS çözümleme zamanlama saldırısı yapılabilir
macOS kullanıcı adını kaba kuvvetle bulma yöntemi
- Varsayılan macOS yerel ana makine adı kullanıcı adını ve cihaz adını içerir; biçim sistem dili yerel ayarına göre değişir
- English:
<name>s-macbook-pro.local - French:
macbook-air-de-<name>.local - Russian:
mac-mini-<name>.local
- English:
- Basit bir yaklaşımla en popüler 1.000 ad, en popüler 10 yerel ayar ve yaygın 5 macOS cihaz adı birleştirilirse 50.000 ana makine adının kontrol edilmesi gerekir
- Bu durumda tam tarama 1 saatten uzun sürebilir
- Daha verimli strateji, arama kapsamını tek bir yerel ayar, tek bir cihaz ve o yerel ayarda yaygın 50 adla sınırlamaktır
- Kapsam daraltıldığında doğruluk düşer, ancak saldırı süresi azalır ve daha gerçekçi bir senaryo ortaya çıkar
- Yerel ayar seçimi için tarayıcı saat dilimi, dil ve IP adresi konumu kullanılabilir
- Safari, sistem yerel ayarını
navigator.languageözelliğiyle açığa çıkarır; bu değer genellikle hedef ana makine adı yerel ayarıyla eşleşir - Kullanıcının ülkesini bulmak için başka bir dolaylı yöntem olarak daha önce ele alınan Apple ID region detection yöntemi vardır
- Cihaz adayları ekran çözünürlüğüyle daraltılabilir
- Örneğin
1728x1117çözünürlüğünün 16 inç MacBook Pro olma olasılığı yüksektir - Harici ekran
screen.isExtendedözelliğiyle tespit edilebilir - Harici ekran algılanırsa cihaz adayları en yaygın 3–5 Apple macOS cihazına geri döndürülebilir
- Örneğin
Sınırlamalar ve diğer olası kullanımlar
- Bu saldırı, yapısal zayıflıkları ve çeşitli sınırlamaları nedeniyle pratik değildir
- Bir web sitesi işletmecisi ziyaretçileri kasıtlı olarak anonimlikten çıkarmak istemiyorsa, tarayıcı geliştirici araçlarının ağ sekmesinde kolayca tespit edilebilir
- Bu yöntem installed applications detection ile birleştirildiğinde, izin almadan kullanıcının gerçek adını ve kullandığı profesyonel uygulamalar listesine dayalı unvanını gösteren zararlı bir web sitesi oluşturma olasılığı vardır
- macOS çalıştıran Apple cihazları ana örnek olsa da mDNS keşif tekniği çeşitli şekillerde genişletilebilir
- Yerel ağ taramasıyla yazıcıları, akıllı TV’leri, akıllı hoparlörleri ve diğer ev tipi IoT cihazlarını tespit etmek için de kullanılabilir
- iPhone ve iPad’lere de uygulanabilir; bunun koşulu Wi-Fi eşzamanlama veya Safari uzaktan hata ayıklama özelliğinin etkin olmasıdır
1 yorum
Hacker News görüşleri
macOS’te Little Snitch kullanıyorum; ağ isteklerine izin vermeden önce yerel kullanıcıya açıkça sormak üzere ayarlanabilen iyi bir arayüzü var
https://www.obdev.at/products/littlesnitch/index.html
Uzaktan oturum açmışken ara sıra yakalanıyorum; genelde SSH oturumu, NPM’den NodeJS bileşenleri almak gibi yeni bir şey indirmeye çalıştığında oluyor. Metin terminalindeki SSH indirmesi duruyor; sebebin Little Snitch olduğunu anlayınca alt kattaki masama gidip fareyi oynatarak monitörü uyandırmam, ekran koruyucuyu açmam ve Little Snitch iletişim kutusunda “Allow” düğmesine basmam gerekiyor
Yani amaçlandığı gibi çalışıyor. Yalnız bu tür araçlar çoğu zaman yerel ağ isteklerine varsayılan olarak sessizce izin verecek şekilde ayarlandığından, asıl yazıdaki numaranın benim ortamımda da işe yarayıp yaramayacağını bilmiyorum
Uygulamaların gizlice hangi soket bağlantılarını açtığını görmek şaşırtıcı; buna banka uygulamaları da dahil
https://havoc.app/package/netfence
https://news.ycombinator.com/item?id=35363343
Confirmdüğmesine basana kadar 1.1.1.1’e gerçek bir bağlantı kurulmazAğınıza Pi-hole eklerseniz harcadığınız zamandan/paradan/yatırımdan pişman olmazsınız
Daha geniş internetteki web sitelerinin yerel ağıma ağ isteği yapmasını engellemenin bir yolu var mı? Bunun neden varsayılan olarak izinli olması gerektiğini hayal etmek zor
IE’nin Local Intranet Zone izinlerini geri getirelim demiyorum
Ama https://192.168.2.1 üzerinde bir şey çalıştırıyor olsanız bile, 192.168.2.1’deki servis
Originolarak my-own-domain.com’a izin vermediği sürece https://my-own-domain.com üzerinde çalışan web uygulaması ona erişemezhttps://brave.com/privacy-updates/27-localhost-permission/
HN yazısı: https://news.ycombinator.com/item?id=36574775
Tarayıcı bir Discord kanal davet sayfasına gittiğinde, bu port üzerinden localhost’a istek gönderip kanal ID’sini istemciye iletiyor. Böylece uygulama yerel “Join Channel” deneyimini gösterebiliyor
Gizli modda da çalıştığını ve tarayıcı Discord’dan çıkış yapmış durumdayken bile bu davranışın sürdüğünü görünce fark ettim. İyi değil. Masaüstü dünyasında tüm uygulamaların sandbox’lanmasının ciddi biçimde iyileştirilmesi gerekiyor
||local^$allBu, .local’ın kendisinden gelen istekler dahil .local’a giden tüm istekleri engeller. Web sunucusu çalıştırmak gibi nedenlerle foo.local’ın kendi kendisiyle iletişim kurmasına izin vermek istiyorsanız her alan adı için ek istisna gerekir:
@@||foo.local^$domain=foo.local,allYa da .local’ın tamamına güvenip herhangi bir foo.local’ın herhangi bir bar.local ile iletişim kurmasına izin vermek istiyorsanız .local’ın tamamı için tek bir istisna ekleyebilirsiniz:
@@||local^$domain=local,allZaman geçtikçe interneti çoğunlukla bir Qubes makinesinde, tek kullanımlık Whonix/Tor VM içinde, JavaScript kapalıyken kullanmak daha içime siniyor
Bu gerçekten iğrenç. Şaşırtıcı değil ama bunun mümkün olması bile birçok açıdan korkunç
fingerprint.com’u bilmiyorsanız, “derin kullanıcı profillemesi” yapıyorlar. Bilgisayar, tarayıcı ve işletim sistemi farklı olsa bile aynı kullanıcı kimliğini koruyabiliyorlar diye düşünebilirsiniz. Ana sayfada bir demo var; ne kadar isabetli tahmin ettiği biraz ürkütücü
Demoyu bozan uBlock Origin filtresi:
||fpjscdn.netBenzer türde bir zamanlama saldırısıyla tarayıcıdan yerel makine ve yerel ağdaki diğer cihazlar üzerinde port taraması yapılabiliyor
https://github.com/Flu1dTeam/PortScanner
eBay’in geçmişte bunu yaparken yakalandığı olmuştu
https://blog.nem.ec/2020/05/24/ebay-port-scanning/
Cihaz adını her zaman değiştirmiş olmam iyi olmuş
Apple’ın varsayılan adlandırması bir gizlilik hatası. Bir zamanlar kolluk kuvvetlerinde çalışan biriyle ilk randevuya çıkmıştım; tek başına gelen bir kadındı ve kendini korumaya açıkça önem veren biriydi. Benim hakkımda geçmiş araştırması yaptığını ve çevresindeki topluluktan birkaç kişiye de konumumuzu bildirdiğini söylemişti
Buna karşılık ben onun soyadını bile bilmiyordum ve bunu şaka konusu yaptım. Akşam yemeğinden sonra arabaya bindiğimizde, gösterge paneli ekranında iPhone’un otomatik eşleştiği göründü; iPhone adı da kişinin adı ve soyadıydı, bu ilgimi çekti. Bunu ona söylemedim; yolculuğun sonuna kadar adını nasıl bildiğimi tahmin etmesini istedim
Sorun şu ki, aracı iade etmeden önce kendi profilimi silmem gerektiğini kendime hatırlatmak en zor kısmı
Yukarıdaki örnekte geçerli adres 4 milisaniye, geçersiz adres ise 5 saniye sürüyor
Bu şaşırtıcı. DNS sorgusu başarısızlığının, başarılı bir DNS sorgusundan sonra gelen varsayılan bağlantı zaman aşımından çok daha hızlı olmasını beklerdim
Yine de s-mac-xxxx bana hep biraz tuhaf bir tercih gibi gelmişti. Özellikle gizliliği büyük bir satış noktası olarak öne çıkaran bir şirket olduğu düşünülürse daha da öyle. Gerçek adın kullanılmayacağını ummuş olabilirler ya da burada “kullanıcı dostluğu” öncelik kazanmış olabilir. Gizlilik açısından Windows’un rastgele üretilmiş ana makine adları daha iyi
† Kesin konuşursak tamamen doğru değil. Bir cihaz o adın kendisine ait olduğunu biliyorsa hayır diyebilir
Yazı iyi yazılmış ve ilginç. Özellikle “doğasında bulunan zayıflıklar ve birçok sınırlama düşünüldüğünde bu saldırı pratik değil” gibi abartısız tonu hoşuma gitti
Bu yöntem, ağda belirli bir ana makine adının var olup olmadığını test etmeyi sağlıyor
Tek bir benzersiz ana makine adıysa büyük sorun olmayabilir; peki IoT dünyasında yaygın olan sabit ana makine adları veya varsayılan ana makine adları ne olacak?
Bir web sitesi, kullanıcının belirli bir cihaza sahip olup olmadığını gizlice tahmin edebilir hale geliyor. Hedefli saldırılarda kullanılırsa daha da kötü. Ağdaki bazı cihazları biliyorsanız, bağlanan kullanıcının hedef ağın içinde olup olmadığını tahmin edebilirsiniz
JavaScript’i kapatmak, son kullanıcı deneyimini de kapatmasaydı keşke
Yine de gizlilik endişeleri yüzünden ileride varsayılan olarak kapalı tutmak zorunda kalacakmışım gibi geliyor
Neyse ki benim cihaz adlarım genelde “xxxs's MacBook Pro (34)” gibi oluyor. Bu bir bug değil, özellik
user, ana makine adınıhostnameolarak ayarlayalım. Bunu ne kadar çok kişi yaparsa o kadar iyiİlginç, yazı da iyi yazılmış ve düzgün bir kavram kanıtı da var. İyi iş çıkarmışlar
Eğlenceli bir karşı önlem olarak cihazın ana makine adını atemptingurl.local gibi bir şeye değiştirip saldırganın o web sitesini ziyaret etmek istemesini sağlayabilirsiniz. O sayfa aynı tekniği saldırgana uygulayacak şekilde özenle hazırlanır ve şöyle bir mesaj döndürür:
“Merhaba [hacker’ın cihaz adı]! Makine bilgileriniz, IP adresiniz, coğrafi konumunuz ve diğer parmak izi bilgileriniz toplanarak [korkutucu siber kurum adı ekleyin] kurumuna bildirilmiştir.” Deneyimli bir uzman olup script kiddie olmasa bile en azından güldürebilir
İnsanların gülmek için daha fazla sebebe ihtiyacı var :-)