- macOS का डिफ़ॉल्ट लोकल hostname यूज़र का नाम शामिल कर सकता है, इसलिए वेबसाइट बिना अनुमति mDNS name resolution के timing difference से नाम के candidates को सीमित कर सकती है
- हमलावर देश और gender के हिसाब से 50 लोकप्रिय नामों को device-name candidates के साथ जोड़ता है; प्रयोगों में औसतन 65% मामलों में macOS यूज़र का नाम सही मिला
- Browser JavaScript arbitrary UDP socket नहीं खोल सकता, लेकिन
fetch,iframe,Image,WebRTCrequests से.localaddress के response delay की तुलना कर सकता है - timezone, language, IP location, Safari का
navigator.language, screen resolution,screen.isExtendedजैसी जानकारी locale और device model candidates को घटाने में इस्तेमाल होती है - इसकी practical उपयोगिता कम है और browser developer tools के Network tab में आसानी से दिख सकती है, लेकिन वही mDNS discovery तरीका printer, smart TV, smart speaker और IoT devices detect करने में भी इस्तेमाल हो सकता है
macOS local hostname से नाम leak होने की संरचना
- macOS यूज़र का वास्तविक नाम permission request के बिना browser से अनुमानित किया जा सकता है; इसका core mDNS protocol और default local hostname format है
- किसी खास देश के gender-wise top 50 popular names की list भर इस्तेमाल करने पर भी औसतन 65% मामलों में macOS यूज़र का नाम सही detect हुआ
- Fingerprint इस technique को अपने product में इस्तेमाल नहीं करता, और cross-site tracking service भी provide नहीं करता
- सार्वजनिक चर्चा का उद्देश्य browser providers को ऐसी techniques जल्दी fix करने में मदद करना है
mDNS और Apple Bonjour कैसे काम करते हैं
- multicast DNS local network में devices के नाम register, discover और broadcast करने का protocol है
- printer जैसे devices
224.0.0.251reserved internal IP पर UDP registration packet भेजते हैं, औरHP_LaserJet_Printer.localजैसा hostname शामिल कर सकते हैं .localtop-level domain बताता है कि उस hostname को mDNS से resolve किया जाना चाहिए- router ऐसे packets को local network के दूसरे devices पर automatically broadcast करता है ताकि वे hostname cache कर सकें
- devices उसी reserved IP पर query packet भेजकर network में मौजूद हो सकने वाले किसी specific नाम के device को खोजते हैं
- example hostnames ये हैं
johns-mac-mini.localdavid-ZenBook-UX431DA-UM431DA.localjames-iphone.localcanon-mf644c.localbedroom-appletv.localdlinkrouter.local
- Apple devices में Apple Bonjour feature के हिस्से के रूप में mDNS व्यापक रूप से इस्तेमाल होता है
- default local hostname में यूज़र का नाम उजागर हो सकता है, और macOS में System Settings > Sharing से local hostname देखा या बदला जा सकता है
browser में mDNS hostname check करने का workaround
- mDNS UDP packets पर आधारित है, इसलिए browser JavaScript environment में इसे arbitrary UDP socket के जरिए सीधे इस्तेमाल नहीं किया जा सकता
- इसके बजाय browser द्वारा URL के hostname को resolve करने की कोशिश करने वाली प्रकृति का उपयोग करके timing attack किया जाता है
- proof of concept मौजूद
device-1.localऔर गैर-मौजूदdevice-2.localपर सामान्यfetchGET request भेजने के तरीके पर आधारित है - address resolve हो जाए तो browser port 80 पर TCP packet भेजता है, और यह port आम तौर पर बंद होने की संभावना अधिक होती है
- network level पर अलग-अलग errors दिखाई देते हैं
- मौजूद
device-1.local:ERR_CONNECTION_REFUSED - गैर-मौजूद
device-2.local:ERR_NAME_NOT_RESOLVED
- मौजूद
- JavaScript में दोनों errors एक ही
Failed to fetcherror में map होते हैं, इसलिए error type पर भरोसा नहीं किया जा सकता - local network तेज होता है, इसलिए valid mDNS hostname default connection timeout से कहीं जल्दी resolve हो जाता है
- example में valid address 4ms और invalid address 5 seconds में अलग हुआ
- यह approach proof of concept के लिए पर्याप्त रूप से consistent है और major browsers में similar ढंग से काम करता है
- असल में
fetchके अलावाiframe,Image,WebRTCजैसे network JavaScript APIs से भी DNS resolution timing attack किया जा सकता है
macOS username को brute-force करने का तरीका
- default macOS local hostname यूज़र का नाम और device name शामिल करता है, और format system language locale के हिसाब से बदलता है
- English:
<name>s-macbook-pro.local - French:
macbook-air-de-<name>.local - Russian:
mac-mini-<name>.local
- English:
- simple approach में top 1,000 names, top 10 locales और 5 common macOS device names को combine करने पर 50,000 hostnames check करने होंगे
- इस स्थिति में पूरी जांच में 1 घंटे से ज्यादा लग सकता है
- ज्यादा efficient strategy search range को single locale, single device और उस locale के 50 common names तक सीमित करना है
- range घटाने से accuracy कम होती है, लेकिन attack time घटता है और scenario ज्यादा realistic बनता है
- locale चुनने के लिए browser timezone, language और IP address location इस्तेमाल किए जा सकते हैं
- Safari
navigator.languageproperty से system locale expose करता है, और यह value आम तौर पर target hostname locale से match करती है - यूज़र का origin country पता करने के दूसरे workaround के रूप में पहले कवर की गई Apple ID region detection method है
- device candidates को screen resolution से narrow किया जा सकता है
- उदाहरण के लिए
1728x1117resolution के 16-inch MacBook Pro होने की संभावना अधिक है - extended screen को
screen.isExtendedproperty से detect किया जा सकता है - extended screen detect होने पर device candidates को सबसे common 3–5 Apple macOS devices पर वापस लाया जा सकता है
- उदाहरण के लिए
सीमाएँ और अन्य संभावित उपयोग
- यह attack अंतर्निहित कमजोरियों और कई limitations के कारण practical नहीं है
- जब तक website operator visitors को जानबूझकर deanonymize करना नहीं चाहता, इसे browser developer tools के Network tab में आसानी से detect किया जा सकता है
- इस method को installed applications detection के साथ combine करने पर, बिना permission यूज़र का वास्तविक नाम और इस्तेमाल हो रही professional applications की list के आधार पर job title दिखाने वाली malicious website बन सकने की संभावना है
- macOS चलाने वाले Apple devices मुख्य example हैं, लेकिन mDNS discovery technique कई तरीकों से extend हो सकती है
- local network scan के जरिए printers, smart TVs, smart speakers और अन्य home IoT devices detect करने के लिए भी इसका इस्तेमाल किया जा सकता है
- यह iPhone और iPad पर भी लागू हो सकता है, शर्त यह है कि Wi-Fi syncing या Safari remote debug feature enabled हो
1 टिप्पणियां
Hacker News की रायें
मैं macOS पर Little Snitch इस्तेमाल कर रहा/रही हूँ, और यह एक अच्छा UI है जिसे इस तरह सेट किया जा सकता है कि नेटवर्क request allow करने से पहले local user से साफ़ तौर पर पूछा जाए
https://www.obdev.at/products/littlesnitch/index.html
Remote login के दौरान कभी-कभी यह अटकता है, आम तौर पर जब SSH session NPM से NodeJS components लेने जैसी कोई नई चीज़ download करने की कोशिश करता है। Text terminal में SSH download रुक जाता है, और जब पता चलता है कि वजह Little Snitch है, तो नीचे वाले desk तक जाकर mouse हिलाकर monitor को जगाना, screensaver unlock करना और Little Snitch dialog में “Allow” दबाना पड़ता है
यानी यह अपने मकसद के हिसाब से ही काम कर रहा है। बस ऐसे tools में अक्सर local network requests को चुपचाप allow करने की default setting होती है, इसलिए नहीं जानता/जानती कि मूल लेख वाली शरारत मेरे setup में भी काम करेगी या नहीं
Apps चुपके से कौन-कौन से socket connections खोलती हैं, यह देखकर हैरानी होती है, इसमें banking apps भी शामिल हैं
https://havoc.app/package/netfence
https://news.ycombinator.com/item?id=35363343
Confirmदबाने तक 1.1.1.1 से असल connection नहीं बनताNetwork में Pi-hole जोड़ेंगे तो समय/पैसा/investment पर पछतावा नहीं होगा
क्या broader internet की websites को मेरे local network पर network requests करने से रोकने का कोई तरीका है? समझना मुश्किल है कि इसे default रूप से allow क्यों होना चाहिए
मेरा मतलब IE के Local Intranet Zone permissions को वापस लाने से नहीं है
लेकिन अगर https://192.168.2.1 पर कुछ चल भी रहा हो, तो जब तक 192.168.2.1 की service
Originके रूप में my-own-domain.com को allow नहीं करती, https://my-own-domain.com पर चल रही web app access नहीं कर सकतीhttps://brave.com/privacy-updates/27-localhost-permission/
HN पोस्ट: https://news.ycombinator.com/item?id=36574775
जब browser Discord channel invite page पर जाता है, तो यह इस port के जरिए localhost को request भेजता है और channel ID client को pass करता है। फिर app native “Join Channel” experience दिखा सकती है
मुझे यह तब पता चला जब incognito mode में भी यह काम करता रहा और browser Discord से logged out था, फिर भी यह behavior जारी रहा। अच्छा नहीं है। Desktop दुनिया में सभी applications की sandboxing में बहुत सुधार की जरूरत है
||local^$allइससे .local पर जाने वाली सभी requests block हो जाएंगी, जिसमें .local से ही आई requests भी शामिल हैं। अगर webserver चलाने वगैरह की वजह से foo.local को खुद से बात करने देना हो, तो हर domain के लिए अलग exception चाहिए:
@@||foo.local^$domain=foo.local,allया अगर पूरे .local पर भरोसा करके किसी भी foo.local को किसी भी bar.local से communicate करने देना हो, तो पूरे .local के लिए एक exception जोड़ सकते हैं:
@@||local^$domain=local,allसमय बीतने के साथ internet इस्तेमाल करना आम तौर पर Qubes box में, disposable Whonix/Tor VM से, JavaScript बंद करके करना ज़्यादा मन को सुकून देने लगा है
यह वाकई घिनौना है। हैरानी की बात नहीं, लेकिन इसका संभव होना ही कई मायनों में भयावह है
अगर fingerprint.com को नहीं जानते, तो ये लोग “deep user profiling” करते हैं। समझिए कि computer, browser, operating system अलग होने पर भी वही user ID बनाए रखते हैं। Main page पर demo है, और यह कितना सही पहचानता है, थोड़ा डरावना है
Demo को तोड़ने वाला uBlock Origin filter:
||fpjscdn.netइसी तरह के timing attack से browser में local machine और local network के दूसरे devices का port scan किया जा सकता है
https://github.com/Flu1dTeam/PortScanner
पहले eBay यह करते हुए पकड़ा गया था
https://blog.nem.ec/2020/05/24/ebay-port-scanning/
अच्छा है कि मैं device name हमेशा बदलकर रखता हूं
Apple की default naming एक privacy mistake है। पहले law enforcement में काम करने वाली एक महिला के साथ मेरी first date थी; वह अकेली आई थी और साफ था कि वह अपनी सुरक्षा को लेकर सजग थी, इसलिए उसने मेरा background check किया था और आसपास की community के कुछ लोगों को हमारी location भी बता रखी थी
दूसरी तरफ, मुझे उसका surname भी नहीं पता था, और मैंने इसे मजाक का विषय बनाया। dinner के बाद जब हम कार में बैठे, dashboard screen पर दिखा कि iPhone अपने-आप pair हो गया है, और उस iPhone का नाम उसके first name और surname पर था—यह देखकर मुझे दिलचस्पी हुई। मैंने उसे बताया नहीं, और drive खत्म होने तक उससे अंदाजा लगाने को कहा कि मुझे नाम कैसे पता चला
दिक्कत यह है कि car return करने से पहले अपना profile delete करना खुद को याद दिलाना ही सबसे मुश्किल होता है
ऊपर वाले example में valid address में 4 milliseconds, invalid address में 5 seconds लगते हैं
यह unexpected है। मुझे लगा था कि DNS lookup failure, successful DNS lookup के बाद आने वाले default connection timeout से कहीं तेज होगा
फिर भी s-mac-xxxx हमेशा थोड़ा अजीब choice लगा। खासकर यह देखते हुए कि company privacy को बड़ा selling point बनाती है। शायद उन्होंने उम्मीद की होगी कि लोग real name नहीं इस्तेमाल करेंगे, या यहां “user-friendliness” को प्राथमिकता दी गई होगी। privacy के लिहाज से Windows के randomly generated hostname बेहतर हैं
† सख्ती से कहें तो यह पूरी तरह सही नहीं है। अगर किसी device को पता है कि वह उस name का मालिक है, तो वह no कह सकता है
लेख अच्छी तरह लिखा गया है और रोचक है। खासकर “inherent weakness और बहुत सी limitations को देखते हुए यह attack practical नहीं है” जैसी बिना अतिशयोक्ति वाली tone पसंद आई
यह तरीका यह test करने देता है कि network में कोई specific hostname मौजूद है या नहीं
एक unique hostname हो तो शायद बड़ी समस्या न हो, लेकिन IoT दुनिया में आम fixed hostname या default hostname का क्या
website चुपचाप अंदाजा लगा सकती है कि user के पास कोई specific device है या नहीं। targeted attack में इस्तेमाल हो तो और भी बुरा। अगर network के कुछ devices के बारे में पता हो, तो यह अंदाजा लगाया जा सकता है कि connected user target network के अंदर है या नहीं
काश JavaScript बंद करने से end-user experience भी बंद न हो जाता
फिर भी लगता है कि privacy concerns की वजह से आगे चलकर इसे default रूप से बंद रखना पड़ेगा
शुक्र है, मेरे device names आम तौर पर “xxxs's MacBook Pro (34)” जैसे होते हैं। bug नहीं, feature है
user, hostnamehostnameसेट करें। जितने ज्यादा लोग ऐसा करेंगे, उतना बेहतररोचक है, लेख भी अच्छा लिखा है, और एक ठीक-ठाक proof of concept भी है। बढ़िया बनाया है
एक मजेदार countermeasure यह हो सकता है कि device hostname को atemptingurl.local जैसा कुछ बदल दें, ताकि attacker उस website को visit करना चाहे। उस page को इस तरह crafted रखा जाए कि वही technique attacker पर चलाए, और ऐसा message लौटाए:
“नमस्ते [hacker का device name]! आपकी machine information, IP address, geolocation और दूसरी fingerprint information collect कर ली गई है और [डरावने cyber agency का नाम डालें] को report कर दी गई है।” अगर सामने वाला seasoned veteran हो और script kiddie न हो, तब भी कम-से-कम उसे हंसा तो सकता है
लोगों को हंसने की वजहें और चाहिए :-)