Bluetooth कार बैटरी मॉनिटर लोकेशन डेटा चुरा रहा था
(haxrob.net)- वाहन की बैटरी स्थिति जांचने वाला BM2 ऐप न सिर्फ GPS coordinates, बल्कि आसपास के Wi-Fi और mobile cell tower जानकारी भी इकट्ठा कर remote server पर भेज रहा था
- डेटा product/app developer Leagend के
bm2.quicklynks.comserver और location service SDK developer AMap के server पर गया; ये क्रमशः Alibaba Cloud Hong Kong और Beijing hosts के रूप में पहचाने गए - Google Play के अनुसार यह 100K+ downloads वाला ऐप था, लेकिन शुरुआती app store privacy labels में “data sharing नहीं”, “data collection नहीं”, “data in transit encrypted” जैसे दावे असली व्यवहार से मेल नहीं खाते थे
- Android में Bluetooth scan के लिए location permission जरूरी होने से, device इस्तेमाल करने के लिए user को व्यवहार में location permission देनी पड़ती थी; iOS ऐप में location permission deny करने पर भी battery monitor function काम करता था
- 25 जुलाई 2023 के update के बाद AMap SDK दोनों बड़े app store versions से हटा दिया गया, लेकिन GPS location data अब भी Alibaba Cloud Hong Kong server पर भेजा जाता है और iPhone ऐप user का street address भी भेजता है
बैटरी मॉनिटर ऐप ने जो लोकेशन डेटा भेजा
- लक्ष्य product एक Bluetooth battery monitor है, जिसे वाहन की battery terminals से जोड़कर smartphone से pair किया जाता है और यह voltage/percentage दिखाता है व crank test चलाता है
- Australia के electronics retailer Jaycar Electronics से PowerTech brand product खरीदकर विश्लेषण किया गया; यह Leagend के Bluetooth 4.0 Battery Monitor का rebranded product लगता है
- इसी series के products Repco के Century brand,
ZX-1689,Li Battery Monitorजैसे नामों से भी पहचाने जाते हैं - Android ऐप BM2 के Google Play पर 100K+ downloads और 1.55K reviews थे
- iPhone के लिए BM2 ऐप ने भी network traffic जांच में remote server पर location data भेजा
भेजने की मंज़िलें और collection scope
- ऐप battery voltage के साथ-साथ GPS coordinates, आसपास के mobile cell tower data और आसपास के Wi-Fi access point information भी collect करता है
- उस समय पहचाने गए location data transmission targets दो श्रेणियों में थे
- Leagend/BM2 app server:
bm2.quicklynks.com,47.244.125.231, Alibaba Cloud Hong Kong - AMap SDK server:
dualstack-cgicol.amap.com,106.11.130.194, Alibaba Cloud Beijing
- Leagend/BM2 app server:
- AMap Alibaba द्वारा अधिग्रहित एक Chinese digital map provider है, और उसका SDK GPS के अलावा phone द्वारा collect किए जा सकने वाले दूसरे location-related data भी लेता है
- 25 जुलाई 2023 के update के बाद दोनों बड़े app store apps से AMap SDK हटा दिया गया
- AMap के mainland China servers पर जा रहे GPS, Wi-Fi और cell tower data collection बंद हो गए
- GPS location data अब भी Alibaba Cloud Hong Kong server पर भेजा जाता है
- iPhone ऐप user का street address भी पता करके भेजता है
App store privacy labels और असली व्यवहार
- 27 जून 2023 तक BM2 ऐप developer ने Google Play और Apple App Store के privacy labels update कर precise location data collection स्पष्ट किया
- उससे पहले Google Play label ऐप के असली व्यवहार से मेल नहीं खाता था
- “तीसरे पक्षों के साथ data sharing नहीं”: battery statistics के साथ latitude/longitude
quicklynks.comserver पर भेजे गए, crash analyticsumeng.comपर, और Wi-Fi/cell tower/GPS coordinates AMap पर भेजे गए - “data collection नहीं”: location data और battery-related data collect किए गए
- “data in transit encrypted”: BM2 cloud server को भेजा गया data unencrypted HTTP से भेजा गया
- “तीसरे पक्षों के साथ data sharing नहीं”: battery statistics के साथ latitude/longitude
- privacy policy की detailed wording में “Hong Kong” और “location information” शामिल थे
Android permissions से बनी structural समस्या
- Android ऐप चलने के लिए location permission मांगता है, और permission न देने पर hardware device इस्तेमाल नहीं किया जा सकता
- Android 6.0 से Bluetooth और Wi-Fi scanning के जरिए आसपास के external devices के hardware identifiers तक पहुंचने के लिए
ACCESS_FINE_LOCATIONयाACCESS_COARSE_LOCATIONpermission जरूरी है - BM2 ऐप को असल में BLE scan की जरूरत है, लेकिन व्यापक location permission GPS, cell tower और Wi-Fi data access तक संभव बनाकर misuse की गुंजाइश छोड़ देती है
- Android 12 और उससे ऊपर में केवल BLUETOOTH_SCAN permission से BLE scan संभव है
- Google documentation के अनुसार
ACCESS_FINE_LOCATIONमेंandroid:usesPermissionFlags="neverForLocation"specify किया जा सकता है, लेकिन यह तभी लागू होता है जब Bluetooth scan results को physical location infer करने में इस्तेमाल न किया जाए
Network traffic में पुष्टि हुई बातें
- Mitmproxy के WireGuard mode का उपयोग करके mobile app traffic जांचा गया
- BM2 HTTPS का उपयोग नहीं करता, इसलिए certificate install किए बिना भी Android और iOS पर latitude/longitude transmission की पुष्टि की जा सकती है
- ऐप battery monitor device से connect होने के बाद
http://bm2.quicklynks.com:8080/api/bm2/userDevice/upload?परPOSTrequest भेजता है - request में latitude/longitude fields के साथ battery voltage samples, hardware MAC address,
nickname,serialNoशामिल होते हैं - उस समय DNS और IP information lookup के परिणाम में
bm2.quicklynks.com47.244.125.231के रूप में पहचाना गया, और IP information Hong Kong के Sham Shui Po में Alibaba-related AS दिखाती थी
AMap SDK ने जिन location signals को handle किया
- AMap SDK GPS, Wi-Fi और mobile cell tower data collect करता है
- mobile data में Cell Global Identity शामिल है
MCC: Mobile Country CodeMNC: Mobile Network CodeMCC + MNC: PLMN, mobile carrier identificationLAC: किसी क्षेत्र में cell towers का groupCI: किसी क्षेत्र में cell tower transceiver identification- 4G में
TACइस्तेमाल होता है
- Wi-Fi data में
BSSIDMAC address औरSSIDaccess point name शामिल होते हैं - AMap data disk पर लिखे जाने या internet पर भेजे जाने से पहले encrypted serialized binary blob के रूप में process होता है
- location data temporary AES key से encrypt होता है, और उस AES key को public RSA key से फिर encrypt किया जाता है
- यह तरीका certificate pinning पर निर्भर नहीं करता
- app modification या matching RSA private key के बिना man-in-the-middle network inspection से content देखना मुश्किल है
Hardware और test environment
- hardware अंदर से simple है और voltage regulator तथा Texas Instruments CC2541 Bluetooth Low Energy MCU पर केंद्रित है
- CC2541 CPU 8-bit Intel 8051 पर आधारित है, जबकि बाद की CC series ARM Cortex architecture इस्तेमाल करती है
- CC series SoC dedicated on-chip debugging interface support करता है, और JTAG या SWD नहीं दिखता
- device OTA update support करता है, और firmware को HTTP से return करने वाला REST endpoint part 3 में documented है
- current sensing के लिए shunt या कोई दूसरा current measurement circuit नहीं दिखता, इसलिए hardware configuration बहुत simple है
- testing एक छोटे lead-acid 12V battery, BM2 battery monitor और rooted Android handset के साथ की गई
- AMap location data physical movement detect होने पर ही memory से database में record होता है, इसलिए Frida और Objection का उपयोग करके runtime instrumentation किया गया
Dynamic और static analysis procedure
- GPS coordinates को Frida से
android.location.Location.getLatitudeऔरgetLongitudehook करके arbitrary values में बदला जा सकता है - Objection के Wallbreaker plugin से app heap memory में GPS, carrier cell tower और Wi-Fi data instances की पुष्टि की गई
- APK को device से
adb shell pm pathके जरिए path लेकर extract किया गया, और JADX से decompile किया गया AndroidManifest.xmlमेंFINE_LOCATIONके अलावाCAMERA,IMAGE_CAPTURE,ACTION_VIDEO_CAPTURE,MODIFY_AUDIO_SETTINGS,RECORD_AUDIOजैसी permissions दिखीं, लेकिन ये features इस्तेमाल होते हैं या नहीं, इसके लिए आगे जांच जरूरी है- app entry point
com.stub.StubAppहै, औरqihoo.utilcommercial packer इस्तेमाल हुआ है - frida-dexdump से running memory से original Dalvik executable bytecode dump किया गया, और
dex2jarव JADX से readable Java code में convert किया गया - BM2 app body में अतिरिक्त obfuscation नहीं था, लेकिन
amaplocation service SDK obfuscated था और JADX के deobfuscation feature से कुछ class names recover किए गए
1 टिप्पणियां
Hacker News की रायें
यह BLE कार बैटरी मॉनिटर को reverse engineer करने का नतीजा है। इस ऐप के Google Play पर ही 100,000 से ज़्यादा डाउनलोड हैं।
पता चला कि यह GPS, मोबाइल फोन बेस स्टेशन cell ID, और Wi-Fi beacon डेटा को लगातार Hong Kong और Mainland China के servers पर भेज रहा था। Google और Apple App Store pages पर लिखा है कि यह निजी डेटा collect नहीं करता या किसी third party को नहीं भेजता।
उम्मीद है कि connected device apps का analysis करने वालों के लिए ये कुछ tips काम आएंगे।
https://www.amazon.de/dp/B0BLG9Z462
images में तीसरी पर क्लिक करने पर comparison table दिखता है। दिलचस्प बात यह है कि इसे BM6 की खास feature की तरह पैकेज किया गया है, जबकि असल में यह सिर्फ app feature है।
device QR code [0] इस ऐप की ओर इशारा करता है: https://play.google.com/store/apps/details?id=com.dc.bm6
इसलिए मैंने https://link.quicklynks.com/bm3.html और https://link.quicklynks.com/bm4.html जैसे दूसरे URLs भी देखे; बाद वाला https://www.leagend.com/ पर redirect होता है और यह YouTube channel चलाता है: https://www.youtube.com/channel/UCqkvyOFP5cXQ02f3h1Ns42Q
[0] http://link.quicklynks.com/bm6.html
phone battery लगातार खर्च करते हुए, dashboard जो पहले से बता रहा है वही phone screen पर देखना क्या इतना worth it है, पता नहीं। अगर fixed battery है तो बस analog voltmeter dial इस्तेमाल कर सकते हैं, ऐसा लगता है।
आजकल ऐसा standalone device ढूंढना बहुत मुश्किल है जो app के बिना काम करे। उदाहरण के लिए, ऐसा LED lamp ढूंढना भी मुश्किल था जिसमें app के बिना body button से रंग चुना जा सके; एक मिल भी गया, लेकिन app के बिना color cycling अभी भी संभव नहीं था।
अगर लोग इस तरह की बकवास पसंद न करते, तो फिर से normal electronics ढूंढना आसान होता।
समझ नहीं आता कि Android में user किसी app को 1) startup पर चलने 2) background में चलने से क्यों नहीं रोक सकता। कम से कम यह user-approved permission तो होनी चाहिए।
इससे ऐसे काफी apps रोके जा सकते थे जो इस तरह data चूसते हैं; मुझे लगता है Google भी इसमें accomplice है।
https://grapheneos.org/
मुझे पता है कि app location data enable करने की request कर सकता है, लेकिन यह हैरान करने वाला था कि app एकतरफा इसे on कर सकता है, और मुझे इसे रोकने का तरीका भी नहीं मिला।
ऐसी वजहों से किसी भी phone पर भरोसा करना मुश्किल लगता है।
ऐसे cases की वजह से digital privacy और उसे protect करने वाले कानूनों की लड़ाई बंद नहीं करनी चाहिए।
यह “छिपाने को कुछ नहीं है” वाला मामला नहीं है, बल्कि यह रोकने का मामला है कि third parties आपकी साफ जानकारी और consent के बिना surveillance करें और personal data बेचें।
अभी हम पूरी तरह data war के बीच में हैं, और इसका मजबूत विरोध करना होगा।
चिढ़ इस बात से होती है कि malicious actors को असल में कोई cost नहीं चुकानी पड़ती, और ऐसी चीजें standard जैसी बन गई हैं।
यह लेख देखकर अच्छा लगा कि मैं GrapheneOS इस्तेमाल कर रहा हूं। कई महीनों से daily driver के तौर पर इस्तेमाल कर रहा हूं, और हर app को install करते समय network permission साफ तौर पर allow या deny की जाती है।
ऐसे local apps को मैं कभी network permission नहीं देता, और keyboard apps को भी नहीं देता जिनको लेकर मुझे हमेशा uneasy feeling रहती थी।
यह सिर्फ हास्यास्पद नहीं है, बल्कि user privacy और safety के प्रति खुलकर hostile है।
ऑपरेटिंग सिस्टम को इंटरनेट एक्सेस को ऐसी permission बनाना चाहिए जिसे यूज़र allow या revoke कर सके। Android में शायद पहले ऐसा कुछ था, और iOS में मोबाइल डेटा के अलावा शायद नहीं था
अगर मैंने कोई ऐसा डिवाइस खरीदा जो Bluetooth इस्तेमाल करने का दावा करता है, लेकिन असल में उसे इंटरनेट एक्सेस चाहिए, तो मैं उसे वापस कर दूंगा
अगर सहमत नहीं होते, तो ऐप नहीं मिल सकता था। कुछ permissions अब भी उसी तरह हैं, और कई permissions allow/revoke मॉडल में बदल चुकी हैं
इंटरनेट एक्सेस अब भी एक permission है, लेकिन Google Play अब इसके बारे में पूछता नहीं, इसलिए हर ऐप के पास यह हो सकती है। हालांकि manifest में request न की जाए तो यह काम नहीं करती
https://netguard.me/
शुरुआती यूज़र्स को domains दिखाए जा सकते हैं, और अगर domain Apple ने किसी भी तरीके से allowlist में डाला हो तो उसे हरे रंग में दिखाया जा सकता है। अगर वह न allowlist में हो न blocklist में, तो पीले रंग में दिखाया जा सकता है, या रंग भ्रमित करें तो सिर्फ नाम दिखा दें
जो ऐप blocklist में मौजूद जगहों पर requests करता है, उसे अतिरिक्त review तक App Store से रोक देना चाहिए
advanced users के लिए tap करके payload और headers जैसी details देखने की सुविधा होनी चाहिए। इस feature की वाकई जरूरत है और इसे जोड़ना इतना मुश्किल भी नहीं लगता
[1]: https://developer.apple.com/documentation/bundleresources/en...
App Store providers को शायद “personal data collect नहीं किया जाता या third parties को भेजा नहीं जाता” जैसे वाक्य पूरी तरह हटा देने चाहिए
इसकी जगह warning देनी चाहिए: “इस ऐप के पास network-related permissions हैं, इसलिए यह जो data चाहे जहां चाहे भेज सकता है” या “ऐप maker दावा करता है कि वह third parties को data नहीं देगा, लेकिन हमारे पास इसे verify करने का बिल्कुल कोई तरीका नहीं है”
हकीकत में Apple या Google यह नहीं जान सकते कि third party क्या है। China और Hong Kong के servers first party भी हो सकते हैं—कौन जाने। ऐप maker के अलावा किसी को नहीं पता
Chinese Communist Party को किसी खास व्यक्ति के data में शायद ज्यादा दिलचस्पी न हो, लेकिन aggregated data में उसकी बहुत बड़ी दिलचस्पी होती है। साथ ही, जब यह किसी खास target से जुड़ता है—जैसे कई वर्षों में collect किए गए लाखों अमेरिकी सरकारी कर्मचारियों के data से—तो यह बहुत उपयोगी हो जाता है [0][1]
खुले व्यापार और आदान-प्रदान से China में democracy और freedom आएगी, यह “महान प्रयोग” पूरी तरह fail हो गया। नतीजा यह हुआ कि दुनिया भर में विस्तार चाहने वाली एक निर्मम dictatorship और मजबूत ही हुई। China के साथ व्यापार नहीं करना चाहिए
[0] https://en.wikipedia.org/wiki/Office_of_Personnel_Management...
[1] https://www.nbcnews.com/tech/security/china-spent-years-coll...
यह समझना होगा कि निगरानी करने वाला डिवाइस भी आखिरकार जिस चीज की निगरानी कर रहा है, उसे धीरे-धीरे consume करता है। अंत में monitor की भी फिर से active निगरानी करनी पड़ती है
यह BLE device car battery को धीरे-धीरे, लेकिन निश्चित रूप से drain करता है। किसी दिन यह warning भेजेगा कि battery charge करनी है, लेकिन जल्द ही warning भेजना भी बंद कर देगा
ऊपर से यह phone data भी खींचकर China भेजेगा, और phone battery भी drain करेगा। त्योहार पर देने के लिए इससे खराब gift सोचना मुश्किल है; यह दुर्लभ तीन-स्तरीय consumer threat है
गंभीरता से कहें तो self-discharge इस monitor से लगभग एक order of magnitude ज्यादा होता है
Android में real device पर fake GPS data देने की सुविधा चाहिए। यह उन apps के लिए उपयोगी होगा जो बिना वजह GPS मांगते हैं
अगर flashlight app को चालू होने के लिए GPS चाहिए, तो कोई बात नहीं। मेरी current location Mount Kilimanjaro है
app developers popup के जरिए user को यह समझाने की कोशिश भी करते हैं कि “Bluetooth काम करे, इसके लिए allow दबाएं”
इस मोड़ पर यह मान लेना वाजिब है कि ऐसे devices बड़े पैमाने पर data collect करके headquarters को भेज रहे हैं। TP-Link router भी सब कुछ China भेज रहा हो तो हैरानी नहीं होगी
हालांकि यह सिर्फ China तक सीमित बात नहीं है; अभी इस्तेमाल हो रहा iPhone भी सभी keystrokes और location data अमेरिका भेज रहा हो सकता है
अगर शक है कि TP-Link router सब कुछ remote server को भेज रहा है, तो traffic monitor कर लेना चाहिए
जब दोस्त privacy और data collection को लेकर मेरी सनक का मज़ाक उड़ाते हैं, तो मैं उन्हें ठीक ऐसे ही उदाहरण दिखाता हूँ
यह मानने का कोई आधार नहीं है कि वे यह काम दुर्भावनापूर्ण कारणों से कर रहे हैं, लेकिन असल में इसे जानने का कोई तरीका नहीं है। शायद यह सिर्फ़ साधारण अज्ञानता या अक्षमता भी हो सकती है
device manufacturers जितनी location data collect करते हैं, वह काफी ज़्यादा है। अगर वे इसे monetize कर रहे हैं, तो सोचता हूँ कि क्या end users को बताए बिना ऐसा करना भी दुर्भावनापूर्ण माना जा सकता है
app जिस AMap SDK का इस्तेमाल करता है, वह इससे कहीं ज़्यादा location data collect करता है। यहाँ लगता है कि मकसद location services और map software की accuracy बढ़ाना हो सकता है, और मैं इसे अपने-आप में दुर्भावनापूर्ण नहीं मानता
लेकिन अगर यह व्यवहार users और developers को disclose नहीं किया गया है, तो बात अलग हो जाती है। site चीनी में है [1], और पता नहीं कोई detailed terms तक पढ़कर इसकी पुष्टि करेगा भी या नहीं
[1] https://lbs.amap.com/api/lightweight-android-sdk/download
याद आता है कि पहले सभी websites पर Facebook “Like” button को harmless माना जाता था, और बाद में पता चला कि सहमति के बिना कितने व्यापक रूप से tracking हो रही थी
चीन का typical तरीका यह है कि ऊपर से harmless दिखने वाले तरीकों से जानबूझकर data इकट्ठा किया जाए, या ऐसी security holes जानबूझकर खुली छोड़ दी जाएँ जिनका बाद में दुरुपयोग हो सके। पकड़े जाने पर कहते हैं, “माफ़ कीजिए, हम तुरंत ठीक कर देंगे”
इससे भी बुरी बात यह है कि ऐसे behavior का कोई परिणाम नहीं होता। Google, EU, FTC में से किसी को तो जुर्माना लगाना चाहिए