Bluetooth車載バッテリーモニターが位置データを抜き取っていた
(haxrob.net)- 車両バッテリーの状態を確認する BM2アプリ が、GPS座標だけでなく周辺のWi-Fiや携帯通信基地局の情報まで収集してリモートサーバーへ送信していた
- データは製品/アプリ開発元 Leagend の
bm2.quicklynks.comサーバーと、位置情報サービスSDK開発元 AMap のサーバーへ送られており、それぞれAlibaba Cloud香港と北京のホストであることが確認された - Google Playで 100K+ ダウンロード のアプリだったが、初期のアプリストアのプライバシー表示は「データ共有なし」「データ収集なし」「送信中の暗号化」など、実際の動作と一致していなかった
- AndroidではBluetoothスキャンに位置情報権限が必要なため、ユーザーが機器を使うには事実上位置情報権限を許可せざるを得ず、iOSアプリは位置情報権限を拒否してもバッテリーモニター機能が動作した
- 2023年7月25日のアップデート後、AMap SDK は主要2大アプリストア版から削除されたが、GPS位置データは引き続きAlibaba Cloud香港サーバーへ送信され、iPhoneアプリはユーザーの住所も送信していた
バッテリーモニターアプリが送信した位置データ
- 対象製品は車載バッテリー端子に接続し、スマートフォンとペアリングして 電圧/パーセント を表示し、クランキングテストを実行するBluetoothバッテリーモニター
- オーストラリアの家電量販店Jaycar ElectronicsでPowerTechブランド製品を購入して分析したところ、Leagendの Bluetooth 4.0 Battery Monitor をリブランドした製品とみられる
- 同系統製品はRepcoのCenturyブランド、
ZX-1689、Li Battery Monitorといった名称でも確認されている - Androidアプリ BM2 はGoogle Playで 100K+ ダウンロード と1.55K件のレビューを記録している
- iPhone向けBM2アプリも、ネットワークトラフィックの確認結果から、リモートサーバーへ 位置データ を送信していた
送信先と収集範囲
- アプリはバッテリー電圧だけでなく、GPS座標、周辺の携帯通信基地局データ、周辺Wi-Fiアクセスポイント情報を収集していた
- 当時確認された位置データの送信先は2系統あった
- Leagend/BM2アプリサーバー:
bm2.quicklynks.com,47.244.125.231, Alibaba Cloud香港 - AMap SDKサーバー:
dualstack-cgicol.amap.com,106.11.130.194, Alibaba Cloud北京
- Leagend/BM2アプリサーバー:
- AMapはAlibabaが買収した中国のデジタル地図プロバイダーであり、このSDKはGPSだけでなく携帯電話が収集可能な他の位置関連データも取得していた
- 2023年7月25日のアップデート以降、主要2大アプリストア版アプリから AMap SDK が削除された
- 中国本土サーバーへ送られていたGPS、Wi-Fi、基地局データの収集は停止した
- GPS位置データは引き続きAlibaba Cloud香港サーバーへ送信されている
- iPhoneアプリはユーザーの 住所 も確認して送信していた
アプリストアのプライバシー表示と実際の動作
- 2023年6月27日時点で、BM2アプリ開発者はGoogle PlayとApple App Storeのプライバシー表示を更新し、正確な位置データ の収集を明記した
- それ以前のGoogle Play表示は実際のアプリ動作と一致していなかった
- 「第三者とのデータ共有なし」: バッテリー統計とともに緯度・経度が
quicklynks.comサーバーへ送信され、クラッシュ解析はumeng.comへ、Wi-Fi・基地局・GPS座標はAMapへ送信されていた - 「データ収集なし」: 位置データとバッテリー関連データが収集されていた
- 「送信中の暗号化」: BM2クラウドサーバーへ送られるデータは 暗号化されていないHTTP で送信されていた
- 「第三者とのデータ共有なし」: バッテリー統計とともに緯度・経度が
- プライバシーポリシーの詳細文言には「Hong Kong」と「location information」が含まれていた
Androidの権限が生んだ構造的問題
- Androidアプリは動作のために位置情報権限を要求し、権限を与えないとハードウェア機器を利用できない
- Android 6.0以降、BluetoothおよびWi-Fiスキャンで周辺の外部機器のハードウェア識別子へアクセスするには
ACCESS_FINE_LOCATIONまたはACCESS_COARSE_LOCATION権限が必要になる - BM2アプリに本当に必要なのはBLEスキャンだが、広い位置情報権限によってGPS・基地局・Wi-Fiデータへのアクセスまで可能になり、濫用の余地を残していた
- Android 12以降では BLUETOOTH_SCAN 権限だけでBLEスキャンが可能
- Googleの文書によれば、
ACCESS_FINE_LOCATIONにandroid:usesPermissionFlags="neverForLocation"を指定できるが、Bluetoothスキャン結果を物理的位置の推定に使わない場合に限られる
ネットワークトラフィックで確認された内容
- Mitmproxy のWireGuardモードを使ってモバイルアプリのトラフィックを確認した
- BM2はHTTPSを使っていないため、証明書のインストールなしでもAndroidとiOSで 緯度・経度の送信 を確認できた
- アプリがバッテリーモニター機器に接続した後、
http://bm2.quicklynks.com:8080/api/bm2/userDevice/upload?にPOSTリクエストを送る - リクエストには緯度・経度フィールドに加え、バッテリー電圧サンプル、ハードウェアMACアドレス、
nickname、serialNoが含まれていた - 当時のDNSおよびIP情報の照会結果では
bm2.quicklynks.comは47.244.125.231と確認され、IP情報は香港Sham Shui PoのAlibaba系ASを示していた
AMap SDKが扱っていた位置シグナル
- AMap SDKはGPS、Wi-Fi、携帯通信基地局データを収集していた
- 携帯通信データには Cell Global Identity が含まれる
MCC: Mobile Country CodeMNC: Mobile Network CodeMCC + MNC: PLMN、携帯通信事業者識別LAC: 地域内の基地局グループCI: 地域内の基地局送受信機識別- 4Gでは
TACが使われる
- Wi-Fiデータには
BSSIDMACアドレスとSSIDアクセスポイント名が含まれる - AMapデータはディスクに書き込まれたりインターネットへ送信されたりする前に、暗号化されたシリアライズ済みバイナリblob の形で処理されていた
- 位置データは一時的なAESキーで暗号化され、そのAESキーは公開RSAキーで再暗号化される
- この方式は証明書ピンニングに依存していない
- アプリの改変や対応するRSA秘密鍵がない限り、中間者によるネットワーク検査で内容を見るのは難しい
ハードウェアとテスト環境
- ハードウェア内部は単純で、電圧レギュレーターとTexas Instruments CC2541 Bluetooth Low Energy MCUが中心
- CC2541 CPUは8ビットIntel 8051ベースで、後継のCC系はARM Cortexアーキテクチャを採用している
- CC系SoCは専用のオンチップデバッグインターフェースをサポートしており、JTAGやSWDは見当たらない
- 機器はOTAアップデートをサポートしており、firmwareをHTTPで返すRESTエンドポイントがpart 3で文書化されている
- 電流検出用の shunt やその他の電流測定回路は見当たらず、ハードウェア構成は非常に単純
- テストは小型の鉛蓄電池12V、BM2バッテリーモニター、root化したAndroid端末で実施された
- AMapの位置データは物理的な移動が検知された場合にのみメモリからデータベースへ記録されるため、Frida と Objection を使ってランタイム計測を行った
動的・静的分析手順
- GPS座標はFridaで
android.location.Location.getLatitudeとgetLongitudeをフックして任意の値に置き換えられる - Objection の Wallbreaker プラグインで、アプリのヒープメモリ内にあるGPS、通信事業者基地局、Wi-Fiデータのインスタンスを確認した
- APKは端末上で
adb shell pm pathによりパスを取得して抽出し、JADX でデコンパイルした AndroidManifest.xmlにはFINE_LOCATIONのほか、CAMERA、IMAGE_CAPTURE、ACTION_VIDEO_CAPTURE、MODIFY_AUDIO_SETTINGS、RECORD_AUDIOといった権限も見られたが、これらの機能が使われているかは追加調査が必要- アプリのエントリーポイントは
com.stub.StubAppで、qihoo.utilの商用パッカーが使われていた - frida-dexdump で実行中メモリから元のDalvik実行バイトコードをダンプし、
dex2jarとJADXで読めるJavaコードへ変換した - BM2アプリ本体には追加の難読化はなかったが、
amap位置情報サービスSDKは難読化されており、JADXのdeobfuscation機能で一部のクラス名を復元した
1件のコメント
Hacker News のコメント
BLE 車載バッテリーモニターをリバースエンジニアリングしてみた結果。このアプリは Google Play だけでダウンロード数が10万件を超えている。
調べてみると、GPS、携帯電話基地局のセル ID、Wi-Fi ビーコンのデータを香港と中国本土のサーバーへ継続的に送っていた。Google と Apple のアプリストアページには、個人データを収集したり第三者へ送信したりしないと書かれている。
接続デバイスのアプリを分析しようとしている人への、いくつかのヒントになればと思う。
https://www.amazon.de/dp/B0BLG9Z462
画像の3枚目をクリックすると比較表が出てくるが、BM6 だけの特別機能であるかのように見せているものの、実際には単なるアプリ機能にすぎない点が興味深い。
デバイスの QR コード [0] はこのアプリを指している: https://play.google.com/store/apps/details?id=com.dc.bm6
そこで https://link.quicklynks.com/bm3.html や https://link.quicklynks.com/bm4.html のような他の URL も確認したところ、後者は https://www.leagend.com/ にリダイレクトされ、この YouTube チャンネルを運営している: https://www.youtube.com/channel/UCqkvyOFP5cXQ02f3h1Ns42Q
[0] http://link.quicklynks.com/bm6.html
スマホのバッテリーまで常に消耗させながら、計器盤がすでに知らせてくれる内容をスマホ画面で見ることに、それだけの価値があるのかも分からない。固定式バッテリーなら、普通にアナログ電圧計のダイヤルを使えばいいのではと思う。
最近は、アプリなしで動くスタンドアロン機器を見つけるのが難しすぎる。たとえば、アプリなしで本体ボタンから色を選べる LED ランプを探すのも大変で、1つ見つけはしたが、アプリなしで色を循環させることは依然としてできなかった。
人々がこういうくだらないものを好んでいなければ、まともな電子製品をまた見つけるのはもっと簡単だったはずだ。
Android で、ユーザーがアプリの 1) 起動時の実行 2) バックグラウンド実行を止められない理由が分からない。少なくともユーザー承認が必要な権限であるべきではないかと思う。
こういう形でデータを吸い上げるアプリのかなりの数を止められるはずで、Google も共犯だと思う。
https://grapheneos.org/
アプリが位置情報の有効化を要求できることは知っているが、アプリが一方的にオンにできることに驚いたし、それを止める方法も見つけられなかった。
こうした理由から、どのスマホも信頼しにくいと感じる。
こうした事例があるからこそ、デジタルプライバシーとそれを守る法律のための戦いをやめてはいけない。
「隠すことがない」かどうかの問題ではなく、第三者が明示的な認識と同意なしに監視し、個人データを売れないようにする問題だ。
今は全面的なデータ戦争の真っただ中にあり、強く抵抗しなければならない。
悪意ある行為者に実質的に何の代償もないのに、こういうことが標準のようになってしまっているのが腹立たしい。
この記事を見て、GrapheneOS を使っていてよかったと感じた。ここ数か月、日常用として使っているが、すべてのアプリはインストール時にネットワーク権限を明示的に許可または拒否される。
こういうローカルアプリには絶対にネットワーク権限を与えないし、いつも気味悪く感じていたキーボードアプリにも与えていない。
笑えるレベルではなく、ユーザーのプライバシーと安全に露骨に敵対している。
OSは、インターネットアクセスをユーザーが許可または取り消せる権限にすべき。Androidには昔そういうものがあった気がするし、iOSにはモバイルデータ通信以外にはなかったように思う。
Bluetoothを使うと主張するデバイスを買ったのに、実際にはインターネットアクセスが必要なら返品する。
同意しなければアプリを入手できなかった。一部の権限はいまでもその方式で、多くの権限は許可/取り消し方式に変わった。
インターネットアクセスはいまでも権限ではあるが、Google Playがもう尋ねなくなったので、すべてのアプリが持てる。ただしmanifestで要求していなければ動作しない。
https://netguard.me/
初心者にはドメインを表示し、Appleが何らかの方法で許可リストに入れたドメインなら緑色で表示できる。許可リストにもブロックリストにもないなら黄色で表示するか、色が紛らわしいなら名前だけ見せてもよい。
ブロックリストにある宛先へリクエストするアプリは、追加審査までApp Storeで止めればよい。
上級ユーザーはタップしてペイロードやヘッダーなどの詳細を見られるようにするとよい。この機能は本当に必要で、追加するのもそれほど難しくなさそうに見える。
[1]: https://developer.apple.com/documentation/bundleresources/en...
アプリストア提供者は「個人データは収集されず、第三者にも送信されません」のような文言をそもそもなくすべきだと思う。
代わりに「このアプリにはネットワーク関連の権限があり、任意のデータを任意の場所へ送信できます」または「アプリ制作者は第三者にデータを渡さないと主張していますが、当社にはそれを検証する方法がまったくありません」と警告すべき。
現実的に、AppleやGoogleには何が第三者なのか分からない。中国や香港のサーバーがファーストパーティかもしれないし、誰に分かるというのか。アプリ制作者以外には誰にも分からない。
中国共産党は特定個人のデータにはそれほど関心がないかもしれないが、集計データには非常に大きな関心を持つ。また、長年かけて収集した米国政府職員数百万人分のデータのように、特定の標的と結び付いたときに非常に有用になる [0][1]。
開かれた貿易と交流が中国の民主主義と自由につながるという「偉大な実験」は完全に失敗した。結果的には、世界的拡張を狙う冷酷な独裁をさらに強くしただけだった。中国と取引すべきではない。
[0] https://en.wikipedia.org/wiki/Office_of_Personnel_Management...
[1] https://www.nbcnews.com/tech/security/china-spent-years-coll...
監視する装置も結局、監視対象そのものをゆっくり消耗させるという点に気付くべき。最終的にはモニターをまた積極的に監視しなければならない羽目になる。
このBLEデバイスは車のバッテリーをゆっくり、しかし確実に消耗させる。いつか警告を送ってきたらバッテリーを充電しなければならないが、そのうち警告を送ることすらやめるだろう。
そのうえスマホのデータも吸い上げて中国へ送り、スマホのバッテリーも消耗させる。祝日に贈る最悪のプレゼントとしてこれ以上のものは思い浮かびにくく、まれに見る三重の消費者脅威だ。
真面目に言うと、自己放電のほうがこのモニターよりおおよそ一桁大きい。
Androidには、実機で偽のGPSデータを与えられる機能が必要。理由もなくGPSを要求するアプリに役立つだろう。
懐中電灯アプリをオンにするのにGPSが必要なら問題ない。現在地はキリマンジャロ山だ。
アプリ開発者はポップアップで「Bluetoothを動作させるには許可を押してください」といった形でユーザーに説明しようともする。
ここまで来ると、こうしたデバイスが大量のデータを収集して本社へ送っていると仮定するのが妥当。TP-Linkルーターもすべてを中国へ送っていたとしても驚かない。
ただし中国だけに限った話ではなく、いま使っているiPhoneもすべてのキー入力と位置データを米国へ送っている可能性がある。
TP-Linkルーターがすべてをリモートサーバーへ送っていると疑うなら、トラフィックを監視すればよい。
プライバシーとデータ収集にこだわることを友人たちに笑われたときは、まさにこういう事例を見せています。
悪意のある理由でこうしたことをしていると信じる根拠はありませんが、実際には知る術がありません。おそらく単なる無知や無能なのかもしれません。
デバイスメーカーが収集する位置データの量は相当なものです。もし収益化しているのなら、エンドユーザーに開示していない状態でも悪意があると見なせるのか気になります。
アプリが使用している AMap SDK は、さらに多くの位置データを収集します。ここでは位置情報サービスと地図ソフトウェアの精度を高める目的である可能性が高いと感じており、それ自体を悪意あるものとは見ていません。
ただし、こうした挙動がユーザーや開発者に開示されていなかったなら話は別です。サイトは中国語なのですが [1]、詳細な規約まで読んで確認する人がいるのかも分かりません。
[1] https://lbs.amap.com/api/lightweight-android-sdk/download
以前、あらゆるウェブサイトの Facebook「Like」ボタンを無害だと思っていたら、同意なしにどれほど広範に追跡されていたのかを知ったことを思い出します。
中国の典型的なやり方は、表向き無害に見える方法で意図的にデータを集めるか、後で悪用できるセキュリティ上の抜け穴を意図的に大きく開けたままにしておくことです。見つかると「申し訳ありません、すぐに修正します」と言います。
さらに悪いのは、こうした行動に何の結果も伴わない点です。Google、EU、FTC のうち誰かが罰金を科すべきです。