- Ứng dụng BM2 dùng để kiểm tra tình trạng ắc quy xe đã thu thập không chỉ tọa độ GPS mà còn cả thông tin Wi‑Fi xung quanh và trạm gốc di động, rồi gửi về máy chủ từ xa
- Dữ liệu được gửi tới máy chủ
bm2.quicklynks.comcủa Leagend, đơn vị phát triển sản phẩm/ứng dụng, và máy chủ của AMap, đơn vị phát triển SDK dịch vụ định vị; các máy chủ này lần lượt được xác nhận là host trên Alibaba Cloud tại Hồng Kông và Bắc Kinh - Trên Google Play, đây là ứng dụng có 100K+ lượt tải xuống, nhưng phần khai báo quyền riêng tư ban đầu trên cửa hàng ứng dụng với các dòng như “không chia sẻ dữ liệu”, “không thu thập dữ liệu”, “mã hóa khi truyền” lại không khớp với hành vi thực tế
- Trên Android, quét Bluetooth cần quyền vị trí nên để dùng thiết bị, người dùng gần như buộc phải cấp quyền vị trí; còn ứng dụng iOS vẫn hoạt động chức năng giám sát ắc quy ngay cả khi từ chối quyền vị trí
- Sau bản cập nhật ngày 25/7/2023, AMap SDK đã bị gỡ khỏi bản ứng dụng trên cả hai kho ứng dụng lớn, nhưng dữ liệu vị trí GPS vẫn tiếp tục được gửi tới máy chủ Alibaba Cloud tại Hồng Kông, và ứng dụng iPhone còn gửi cả địa chỉ đường phố của người dùng
Dữ liệu vị trí mà ứng dụng giám sát ắc quy đã gửi đi
- Sản phẩm được nói tới là thiết bị giám sát ắc quy Bluetooth, gắn vào cực ắc quy ô tô rồi ghép đôi với điện thoại thông minh để hiển thị điện áp/phần trăm và chạy kiểm tra đề máy
- Phân tích được thực hiện trên một sản phẩm mang thương hiệu PowerTech mua từ nhà bán lẻ điện tử Jaycar Electronics của Úc; có vẻ đây là bản đổi thương hiệu của Bluetooth 4.0 Battery Monitor từ Leagend
- Các sản phẩm cùng dòng còn được nhận diện với tên thương hiệu Century của Repco,
ZX-1689,Li Battery Monitor - Ứng dụng Android BM2 đã ghi nhận 100K+ lượt tải xuống và 1.55K đánh giá trên Google Play
- Kết quả kiểm tra lưu lượng mạng cho thấy ứng dụng BM2 trên iPhone cũng gửi dữ liệu vị trí tới máy chủ từ xa
Đích gửi và phạm vi thu thập
- Ứng dụng không chỉ thu thập điện áp ắc quy mà còn cả tọa độ GPS, dữ liệu trạm gốc di động xung quanh và thông tin điểm truy cập Wi‑Fi lân cận
- Khi đó, các đích truyền dữ liệu vị trí được xác nhận thuộc hai nhóm
- Máy chủ của Leagend/BM2 app:
bm2.quicklynks.com,47.244.125.231, Alibaba Cloud Hồng Kông - Máy chủ của AMap SDK:
dualstack-cgicol.amap.com,106.11.130.194, Alibaba Cloud Bắc Kinh
- Máy chủ của Leagend/BM2 app:
- AMap là nhà cung cấp bản đồ số Trung Quốc đã được Alibaba mua lại; SDK này không chỉ lấy GPS mà còn lấy các dữ liệu liên quan đến vị trí khác mà điện thoại có thể thu thập
- Sau bản cập nhật ngày 25/7/2023, AMap SDK đã bị gỡ khỏi ứng dụng trên cả hai kho ứng dụng lớn
- Việc thu thập dữ liệu GPS, Wi‑Fi và trạm gốc từng được gửi tới máy chủ tại Trung Quốc đại lục của AMap đã dừng lại
- Dữ liệu vị trí GPS vẫn tiếp tục được gửi tới máy chủ Alibaba Cloud tại Hồng Kông
- Ứng dụng iPhone còn kiểm tra và gửi cả địa chỉ đường phố của người dùng
Khai báo quyền riêng tư trên app store và hành vi thực tế
- Tính đến ngày 27/6/2023, nhà phát triển ứng dụng BM2 đã cập nhật phần khai báo quyền riêng tư trên Google Play và Apple App Store để nêu rõ việc thu thập dữ liệu vị trí chính xác
- Trước đó, phần hiển thị trên Google Play không khớp với hành vi thực tế của ứng dụng
- “Không chia sẻ dữ liệu với bên thứ ba”: cùng với thống kê ắc quy, kinh độ và vĩ độ đã được gửi tới máy chủ
quicklynks.com; dữ liệu phân tích sự cố được gửi tớiumeng.com; còn Wi‑Fi, trạm gốc và tọa độ GPS được gửi tới AMap - “Không thu thập dữ liệu”: ứng dụng có thu thập dữ liệu vị trí và dữ liệu liên quan đến ắc quy
- “Mã hóa khi truyền”: dữ liệu gửi tới máy chủ đám mây BM2 được truyền qua HTTP không mã hóa
- “Không chia sẻ dữ liệu với bên thứ ba”: cùng với thống kê ắc quy, kinh độ và vĩ độ đã được gửi tới máy chủ
- Trong phần chi tiết của chính sách quyền riêng tư có xuất hiện các cụm “Hong Kong” và “location information”
Vấn đề cấu trúc do quyền trên Android tạo ra
- Ứng dụng Android yêu cầu quyền vị trí để hoạt động; nếu không cấp quyền thì không thể sử dụng thiết bị phần cứng
- Từ Android 6.0, để truy cập định danh phần cứng của các thiết bị bên ngoài xung quanh thông qua quét Bluetooth và Wi‑Fi, ứng dụng cần quyền
ACCESS_FINE_LOCATIONhoặcACCESS_COARSE_LOCATION - Điều BM2 thực sự cần là quét BLE, nhưng quyền vị trí rộng hơn lại cho phép truy cập cả dữ liệu GPS, trạm gốc và Wi‑Fi, tạo ra khả năng bị lạm dụng
- Từ Android 12 trở lên, chỉ cần quyền BLUETOOTH_SCAN là có thể quét BLE
- Theo tài liệu của Google, có thể chỉ định
android:usesPermissionFlags="neverForLocation"choACCESS_FINE_LOCATION, nhưng chỉ áp dụng khi kết quả quét Bluetooth không được dùng để suy luận vị trí vật lý
Những gì được xác nhận từ lưu lượng mạng
- Lưu lượng của ứng dụng di động được kiểm tra bằng chế độ WireGuard của Mitmproxy
- Do BM2 không dùng HTTPS, có thể xác nhận việc gửi kinh độ và vĩ độ trên cả Android và iOS mà không cần cài chứng chỉ
- Sau khi ứng dụng kết nối với thiết bị giám sát ắc quy, nó gửi yêu cầu
POSTtớihttp://bm2.quicklynks.com:8080/api/bm2/userDevice/upload? - Trong yêu cầu có các trường kinh độ, vĩ độ cùng với mẫu điện áp ắc quy, địa chỉ MAC phần cứng,
nickname,serialNo - Kết quả tra cứu DNS và IP khi đó cho thấy
bm2.quicklynks.comtrỏ tới47.244.125.231, và thông tin IP hiển thị đây là AS thuộc Alibaba tại Sham Shui Po, Hồng Kông
Các tín hiệu vị trí mà AMap SDK xử lý
- AMap SDK thu thập dữ liệu GPS, Wi‑Fi và trạm gốc di động
- Dữ liệu di động bao gồm Cell Global Identity
MCC: Mobile Country CodeMNC: Mobile Network CodeMCC + MNC: PLMN, định danh nhà mạng di độngLAC: nhóm trạm gốc trong khu vựcCI: định danh bộ thu phát của trạm gốc trong khu vực- Trên 4G,
TACđược sử dụng
- Dữ liệu Wi‑Fi bao gồm địa chỉ MAC
BSSIDvà tên điểm truy cậpSSID - Dữ liệu AMap được xử lý dưới dạng blob nhị phân tuần tự hóa đã mã hóa trước khi được ghi xuống đĩa hoặc truyền qua Internet
- Dữ liệu vị trí được mã hóa bằng khóa AES tạm thời, rồi khóa AES đó lại được mã hóa tiếp bằng khóa RSA công khai
- Cách này không phụ thuộc vào certificate pinning
- Nếu không sửa ứng dụng hoặc không có khóa riêng RSA tương ứng, rất khó xem nội dung bằng cách kiểm tra mạng kiểu trung gian
Phần cứng và môi trường thử nghiệm
- Bên trong phần cứng khá đơn giản, xoay quanh bộ điều áp và MCU Bluetooth Low Energy Texas Instruments CC2541
- CPU CC2541 dựa trên Intel 8051 8-bit; các dòng CC về sau dùng kiến trúc ARM Cortex
- SoC dòng CC hỗ trợ giao diện gỡ lỗi on-chip chuyên dụng, không thấy JTAG hay SWD
- Thiết bị hỗ trợ cập nhật OTA, và part 3 có tài liệu về endpoint REST trả về firmware qua HTTP
- Không thấy shunt đo dòng hay mạch đo dòng nào khác, cho thấy cấu hình phần cứng rất đơn giản
- Thử nghiệm được tiến hành với ắc quy chì-axit 12V cỡ nhỏ, thiết bị giám sát ắc quy BM2 và một thiết bị Android đã root
- Dữ liệu vị trí AMap chỉ được ghi từ bộ nhớ vào cơ sở dữ liệu khi phát hiện có di chuyển vật lý, nên đã dùng Frida và Objection để thực hiện instrument ở thời gian chạy
Quy trình phân tích động và tĩnh
- Có thể dùng Frida để hook
android.location.Location.getLatitudevàgetLongitude, rồi thay GPS bằng giá trị tùy ý - Với plugin Wallbreaker của Objection, có thể xác nhận trong heap bộ nhớ của ứng dụng các instance dữ liệu GPS, trạm gốc nhà mạng và Wi‑Fi
- APK được trích xuất từ thiết bị bằng cách lấy đường dẫn qua
adb shell pm path, sau đó decompile bằng JADX - Trong
AndroidManifest.xml, ngoàiFINE_LOCATIONcòn thấy các quyền nhưCAMERA,IMAGE_CAPTURE,ACTION_VIDEO_CAPTURE,MODIFY_AUDIO_SETTINGS,RECORD_AUDIO, nhưng cần điều tra thêm để biết các chức năng đó có thực sự được dùng hay không - Điểm vào của ứng dụng là
com.stub.StubApp, và có sử dụng packer thương mạiqihoo.util - Dùng frida-dexdump để dump bytecode thực thi Dalvik gốc từ bộ nhớ khi ứng dụng đang chạy, rồi chuyển bằng
dex2jarvà JADX thành mã Java có thể đọc được - Bản thân ứng dụng BM2 không có thêm lớp làm rối mã, nhưng SDK dịch vụ định vị
amapthì đã bị obfuscate, và tính năng deobfuscation của JADX đã khôi phục được một phần tên lớp
1 bình luận
Các ý kiến trên Hacker News
Đây là kết quả reverse engineering một bộ giám sát ắc quy ô tô BLE. Ứng dụng này có hơn 100.000 lượt tải chỉ riêng trên Google Play.
Hóa ra nó liên tục gửi dữ liệu GPS, cell ID của trạm gốc điện thoại và dữ liệu beacon Wi-Fi về các máy chủ ở Hồng Kông và Trung Quốc đại lục. Trên trang ứng dụng của Google và Apple App Store, họ nói rằng không thu thập dữ liệu cá nhân hay gửi cho bên thứ ba.
Hy vọng đây sẽ là vài gợi ý cho những ai muốn phân tích ứng dụng của thiết bị kết nối.
https://www.amazon.de/dp/B0BLG9Z462
Khi nhấn vào ảnh thứ ba sẽ thấy bảng so sánh; điều thú vị là họ đóng gói nó như thể đây là chức năng đặc biệt riêng của BM6, nhưng thực ra chỉ là chức năng của ứng dụng.
Mã QR của thiết bị [0] trỏ tới ứng dụng này: https://play.google.com/store/apps/details?id=com.dc.bm6
Vì vậy tôi cũng kiểm tra các URL khác như https://link.quicklynks.com/bm3.html và https://link.quicklynks.com/bm4.html; URL sau chuyển hướng tới https://www.leagend.com/ và họ vận hành kênh YouTube này: https://www.youtube.com/channel/UCqkvyOFP5cXQ02f3h1Ns42Q
[0] http://link.quicklynks.com/bm6.html
Tôi cũng không chắc việc liên tục tiêu hao cả pin điện thoại, chỉ để xem trên màn hình điện thoại thứ mà bảng đồng hồ đã báo, có đáng không. Nếu là ắc quy cố định thì chẳng phải cứ dùng một đồng hồ đo điện áp analog dạng kim là được sao?
Dạo này quá khó để tìm các thiết bị độc lập hoạt động mà không cần ứng dụng. Ví dụ, tôi cũng từng khó tìm một chiếc đèn LED có thể chọn màu bằng nút trên thân mà không cần app; cuối cùng tìm được một cái, nhưng vẫn không thể chuyển vòng màu nếu không có app.
Nếu mọi người không chuộng mấy thứ nhảm nhí này, có lẽ sẽ dễ tìm lại các đồ điện tử bình thường hơn.
Tôi không hiểu vì sao trên Android người dùng lại không thể chặn ứng dụng 1) chạy khi khởi động 2) chạy nền. Ít nhất đây phải là quyền cần người dùng phê duyệt chứ.
Như vậy có thể chặn được khá nhiều ứng dụng hút dữ liệu kiểu này; tôi xem Google cũng là đồng phạm.
https://grapheneos.org/
Tôi biết ứng dụng có thể yêu cầu kích hoạt dữ liệu vị trí, nhưng khá ngạc nhiên khi ứng dụng có thể tự ý bật nó, và tôi cũng không tìm được cách chặn.
Vì những lý do như vậy, tôi thấy khó tin tưởng bất kỳ chiếc điện thoại nào.
Những trường hợp như thế này là lý do không được ngừng đấu tranh cho quyền riêng tư số và các luật bảo vệ nó.
Đây không phải vấn đề “tôi chẳng có gì để giấu”, mà là vấn đề ngăn bên thứ ba giám sát và bán dữ liệu cá nhân khi không có sự nhận biết và đồng ý rõ ràng.
Hiện chúng ta đang ở giữa một cuộc chiến dữ liệu toàn diện, và cần phản kháng mạnh mẽ.
Thật bực mình khi những chuyện như thế này đã trở thành chuẩn mực, trong khi kẻ xấu gần như không phải trả giá gì.
Đọc bài này tôi thấy may vì đang dùng GrapheneOS. Tôi đã dùng nó làm máy hằng ngày vài tháng nay; mọi ứng dụng khi cài đặt đều phải được cho phép hoặc bị từ chối quyền mạng một cách rõ ràng.
Tôi tuyệt đối không cấp quyền mạng cho những ứng dụng cục bộ kiểu này, và cũng không cấp cho các ứng dụng bàn phím vốn luôn khiến tôi thấy không yên tâm.
Không chỉ ở mức nực cười, mà là công khai thù địch với quyền riêng tư và an toàn của người dùng.
Hệ điều hành nên biến quyền truy cập Internet thành một quyền mà người dùng có thể cho phép hoặc thu hồi. Android hình như từng có thứ như vậy, còn iOS dường như không có gì ngoài dữ liệu di động
Nếu tôi mua một thiết bị tự nhận là dùng Bluetooth nhưng thực ra lại cần truy cập Internet, tôi sẽ trả lại
Nếu không đồng ý thì không thể tải ứng dụng. Một số quyền đến nay vẫn theo kiểu đó, còn nhiều quyền đã chuyển sang kiểu cho phép/thu hồi
Truy cập Internet vẫn là một quyền, nhưng Google Play không còn hỏi nữa nên mọi ứng dụng đều có thể có quyền này. Tuy nhiên nếu không yêu cầu trong manifest thì nó sẽ không hoạt động
https://netguard.me/
Với người mới, có thể hiển thị tên miền; nếu đó là tên miền được Apple đưa vào danh sách cho phép theo cách nào đó thì hiển thị màu xanh. Nếu không nằm trong danh sách cho phép cũng không nằm trong danh sách chặn thì hiển thị màu vàng, hoặc nếu màu sắc dễ gây nhầm lẫn thì chỉ cần hiển thị tên cũng được
Ứng dụng gửi yêu cầu đến danh sách chặn thì có thể bị chặn khỏi App Store cho đến khi được rà soát thêm
Người dùng nâng cao có thể chạm vào để xem chi tiết như payload và header. Tính năng này thật sự cần thiết và có vẻ cũng không quá khó để bổ sung
[1]: https://developer.apple.com/documentation/bundleresources/en...
Có lẽ các nhà cung cấp app store nên bỏ hẳn những câu như “không thu thập dữ liệu cá nhân hoặc không truyền dữ liệu cho bên thứ ba”
Thay vào đó nên cảnh báo: “Ứng dụng này có các quyền liên quan đến mạng, nên có thể gửi bất kỳ dữ liệu nào đến bất kỳ nơi nào nó muốn” hoặc “Nhà phát triển ứng dụng tuyên bố sẽ không cung cấp dữ liệu cho bên thứ ba, nhưng chúng tôi hoàn toàn không có cách nào xác minh điều đó”
Thực tế là Apple hay Google không thể biết đâu là bên thứ ba. Máy chủ ở Trung Quốc và Hồng Kông cũng có thể là bên thứ nhất, ai mà biết được. Ngoài nhà phát triển ứng dụng ra thì không ai biết
Đảng Cộng sản Trung Quốc có thể không quá quan tâm đến dữ liệu của một cá nhân cụ thể, nhưng họ rất quan tâm đến dữ liệu tổng hợp. Ngoài ra, khi kết hợp với các mục tiêu cụ thể, chẳng hạn dữ liệu của hàng triệu nhân viên chính phủ Mỹ được thu thập trong nhiều năm, nó trở nên cực kỳ hữu ích [0][1]
“Thí nghiệm vĩ đại” rằng thương mại và giao lưu cởi mở sẽ dẫn Trung Quốc đến dân chủ và tự do đã thất bại hoàn toàn. Kết quả chỉ là làm mạnh thêm một chế độ độc tài tàn nhẫn muốn bành trướng toàn cầu. Không nên làm ăn với Trung Quốc
[0] https://en.wikipedia.org/wiki/Office_of_Personnel_Management...
[1] https://www.nbcnews.com/tech/security/china-spent-years-coll...
Cần nhận ra rằng thiết bị giám sát rốt cuộc cũng từ từ tiêu hao chính đối tượng mà nó giám sát. Cuối cùng lại đến mức phải chủ động giám sát ngược lại cái màn hình đó
Thiết bị BLE này sẽ từ từ nhưng chắc chắn làm hao pin ô tô. Một ngày nào đó nó gửi cảnh báo thì bạn phải sạc pin, nhưng rồi chẳng bao lâu sau nó sẽ ngừng cả việc gửi cảnh báo
Hơn nữa nó còn hút dữ liệu điện thoại để gửi về Trung Quốc, và cũng làm hao pin điện thoại. Khó nghĩ ra món quà tệ hơn để tặng dịp lễ, và đây là một mối đe dọa ba tầng đối với người tiêu dùng hiếm thấy
Nói nghiêm túc thì mức tự xả lớn hơn thiết bị giám sát này khoảng một bậc độ lớn
Android cần có tính năng cung cấp dữ liệu GPS giả trên thiết bị thật. Nó sẽ hữu ích với những ứng dụng đòi GPS chẳng vì lý do gì
Nếu ứng dụng đèn pin cần GPS để bật thì không vấn đề gì. Vị trí hiện tại là núi Kilimanjaro
Nhà phát triển ứng dụng còn cố giải thích với người dùng bằng popup kiểu “hãy bấm cho phép để Bluetooth hoạt động”
Đến mức này thì hợp lý khi giả định rằng các thiết bị như vậy đang thu thập lượng lớn dữ liệu và gửi về trụ sở. Tôi cũng sẽ không ngạc nhiên nếu router TP-Link đang gửi mọi thứ về Trung Quốc
Nhưng chuyện này không chỉ giới hạn ở Trung Quốc; chiếc iPhone bạn đang dùng cũng có khả năng đang gửi mọi lần gõ phím và dữ liệu vị trí về Mỹ
Nếu nghi ngờ router TP-Link đang gửi mọi thứ đến máy chủ từ xa, bạn chỉ cần giám sát lưu lượng
Khi bạn bè chế giễu sự ám ảnh về quyền riêng tư và việc thu thập dữ liệu, tôi sẽ đưa ra đúng những ví dụ như thế này
Không có căn cứ để tin rằng họ làm việc này vì mục đích ác ý, nhưng thực tế là không có cách nào biết được. Có lẽ chỉ đơn giản là do thiếu hiểu biết hoặc kém năng lực
Lượng dữ liệu vị trí mà các nhà sản xuất thiết bị thu thập là rất đáng kể. Nếu họ đang kiếm tiền từ đó, tôi tự hỏi liệu có thể xem là ác ý không khi họ không công khai điều này với người dùng cuối
AMap SDK mà ứng dụng sử dụng thu thập còn nhiều dữ liệu vị trí hơn nữa. Ở đây, tôi cảm thấy mục đích có nhiều khả năng là để nâng cao độ chính xác của dịch vụ định vị và phần mềm bản đồ, và bản thân việc đó không hẳn là ác ý
Tuy nhiên, nếu hành vi này không được công khai với người dùng và nhà phát triển thì lại là câu chuyện khác. Trang web bằng tiếng Trung [1], nên cũng không rõ có ai sẽ đọc kỹ các điều khoản chi tiết để kiểm tra hay không
[1] https://lbs.amap.com/api/lightweight-android-sdk/download
Điều này làm tôi nhớ đến chuyện trước đây từng nghĩ nút Facebook “Like” trên mọi trang web là vô hại, rồi sau đó mới biết mình đã bị theo dõi rộng đến mức nào mà không hề đồng ý
Cách làm điển hình của Trung Quốc là cố tình thu thập dữ liệu theo cách bề ngoài trông vô hại, hoặc cố ý để rộng những lỗ hổng bảo mật mà sau này có thể bị lợi dụng. Khi bị phát hiện thì nói “xin lỗi, chúng tôi sẽ sửa ngay”
Tệ hơn nữa là những hành vi như vậy không phải chịu hậu quả nào. Một bên nào đó trong Google, EU hoặc FTC nên áp tiền phạt