フィットネスアプリは監視ツールと化している
StravaなどのフィットネスアプリがGPSデータで軍事基地や空母の位置を漏らす問題を解説。開発者が学ぶべきOPSECの教訓とは。

フランスの新聞が最近、フィットネスアプリで公開されているデータを使い、フランス唯一の空母であるCharles de Gaulleの位置をリアルタイムで追跡しました。欧州でも特に戦略的に重要な軍事資産の一つです。乗組員が飛行甲板を周回して走り、そのたびにStravaが一歩一歩を記録していたのです。どこを見ればよいかを知っている人なら、艦の位置、針路、速度がすべて見えてしまう状態でした。
これはハッキングではありません。脆弱性を突いたわけでも、セキュリティ機構を回避したわけでもありません。データはデフォルトで公開されており、ユーザーが自らの意思で共有していただけです。ジョギングのルートが原子力推進の軍艦の展開パターンをどれだけ明かしてしまうのか、彼らは考えてもいなかったのでしょう。同じ種類の問題は2018年にも機密軍事基地を露呈させました。Stravaのグローバルヒートマップにアフガニスタンやシリアのランニングルートが光の点として浮かび上がったのです。この教訓はまだ生かされていません。
「無害」なデータの問題点
フィットネスアプリの位置情報は、単独で見ればまったく無害に思えます。ランニングに行った、自転車で通勤した、プールで何往復もした。しかし長期間にわたって集計すると、決して無害とはいえないパターンが浮かび上がってきます。
- 自宅と職場の位置。最も頻繁な出発地点と到着地点は、ほぼ間違いなくあなたの自宅と会社です。自分で教えたことがなくても、ランニングルートを記録しているアプリは住所と勤務先を把握しています。
- 日々のスケジュール。平日は毎朝6時に走っていますか?それならデータから、家が無人になる時間帯がわかります。火曜日に出張が多いなら、不在のパターンも記録されています。
- 機微な場所。軍関係者、情報機関の職員、政府職員、企業の幹部など、機密施設で働いたり訪れたりする人は誰でも痕跡を残します。機密施設で一度ワークアウトしただけでも、その施設が存在することと、そこへのアクセス権があることが明らかになります。
- 人間関係。グループランやルートの共有、セグメントのランキングから、誰と一緒に運動しているかがわかります。諜報の文脈では、機微な施設に勤務する個人の人間関係マップが作られかねません。
空母の事例は衝撃的ですが、同じ原理は一般の人にも当てはまります。ストーカーがフィットネスアプリのデータを使って被害者の居場所を突き止めたこともあります。空き巣は家が無人になる時間帯を特定できます。雇用主は勤務時間外の従業員の動きを監視できてしまいます。データは詳細で粒度が細かく、多くの場合は無料アカウントがあれば誰でも閲覧できるのです。
データが漏れる仕組み
フィットネスアプリは複数の経路で位置情報を漏らします。わかりやすいものもあれば、気づきにくいものもあります。
公開されたアクティビティプロフィール
多くのアプリはプロフィールをデフォルトで公開にしています。ランニング、サイクリング、水泳の記録は、GPSの軌跡付きの地図とともに誰でも見ることができます。Stravaのデフォルト設定は年々改善されてきましたが、初期の緩い設定のときにアカウントを作り、そのまま設定を見直していないユーザーはたくさんいます。Stravaで軍事基地、データセンター、政府機関の近くのアクティビティを検索してみると、本来見えるべきでない情報が出てくることがよくあります。
ヒートマップと集計データ
個々のアクティビティを非公開にしていても、集計データから機微なパターンが明らかになることがあります。すべての記録されたアクティビティの密度を示すStravaのグローバルヒートマップは、紛争地域にある前線基地の平面図を浮かび上がらせたことで有名です。何もない砂漠に、明るい活動の点が基地の形で現れたのです。個々のユーザーは匿名でしたが、全体のパターンは明白でした。
セグメントのランキング
Stravaのセグメントは、ユーザーが定義した道路やトレイルの区間で、最速タイムを競うものです。これは永続的な位置のマーカーになります。空母の飛行甲板にあるセグメントは、そのルートを走ったすべてのユーザーを特定します。プロフィールを非公開にしていても、セグメントのランキングにはユーザー名、タイム、日付が表示されます。ほかの公開情報と突き合わせれば、個人を特定できてしまいます。
APIアクセスとデータブローカー
フィットネスアプリは、APIや提携、データブローカーとの関係を通じて、サードパーティにデータを共有することがよくあります。プロフィールを非公開にしていても、データは医療保険会社、広告主、データアグリゲーターに流れ、ほかのデータセットと組み合わされる可能性があります。フィットネスアプリの位置情報が、法執行機関、情報機関、民間調査会社に販売される商用データベースに含まれていたケースもあります。
一般の開発者が学ぶべきOPSECの教訓
位置情報や、機微なパターンを明らかにしかねないデータを扱うアプリケーションを作っているなら、フィットネスアプリの失敗から具体的な教訓を得られます。
デフォルトは非公開に
当たり前に聞こえますが、多くのフィットネスアプリは利用者やユーザー数の拡大を優先し、長年この原則を破ってきました。位置情報を収集するアプリなら、デフォルトは非公開にし、共有は利用者が明示的にオプトインする形にすべきです。「公開がデフォルトで、非公開にするオプションは設定の奥深くに埋まっている」では不十分です。本当に非公開がデフォルトである必要があります。
// Bad: default to public, user must opt out
const userSettings = {
profileVisibility: 'public',
activityVisibility: 'public',
showOnHeatmap: true,
shareWithPartners: true
};
// Good: default to private, user must opt in
const userSettings = {
profileVisibility: 'private',
activityVisibility: 'private',
showOnHeatmap: false,
shareWithPartners: false
};
// Better: explain what each setting actually means
const privacySettings = {
profileVisibility: {
value: 'private',
description: 'Only people you approve can see your profile',
riskLevel: 'Your name and activity history are visible'
},
activityVisibility: {
value: 'private',
description: 'Only you can see your activities',
riskLevel: 'GPS routes show where you live, work, and travel'
}
};
プライバシーゾーンを実装する
Stravaは最終的に「プライバシーゾーン」を追加しました。機微な場所の周辺では、GPSデータを隠す仕組みです。良い機能ですが、導入が何年も遅れました。位置情報を記録するアプリなら、記録を抑制したり、データをぼかしたりする領域をユーザー自身が指定できるようにしましょう。ほとんどのユーザーは自宅と職場の周辺に設定するはずで、それだけでも最も機微なパターンはほぼ消せます。
実装上の注意点として、ルートの始点と終点にランダムなずれを加えるだけでは不十分な場合があります。毎日同じ5kmのコースを走る人は、端点を隠してもルートの形から特定されてしまいます。より良い方法は、ルートの最初と最後のN メートルを切り落とすか、端点をグリッドにスナップさせて正確な位置を推定できないようにすることです。
集計による攻撃を考慮する
個々のデータポイントは無害でも、集計されたパターンは無害とは限りません。ヒートマップ、ランキング、人気の場所といった、複数のユーザーのデータを組み合わせたり可視化したりする機能を作るときは、どのようなパターンが現れるかを考えてください。機密施設を浮かび上がらせるヒートマップは、個々のユーザーのデータが漏れていなくても集計による攻撃になります。
対策としては、集計に最小人数のしきい値を設けること(ユニークユーザーがN人未満の領域はヒートマップに表示しない)、機微な地理的領域を除外すること、公開前に可視化に予期しないパターンが含まれていないか確認することが挙げられます。集計クエリに調整したノイズを加える差分プライバシーの手法も有効ですが、正しく実装するのは複雑です。
データ共有を監査する
位置データを返すAPIエンドポイント、データのエクスポート機能、サードパーティとの連携は、どれも機微なデータが漏れうる経路です。データフローをマッピングしてください。ユーザーの位置データがどこへ送られ、誰がアクセスでき、どのような条件で使われるのかを正確に把握しましょう。パートナーや広告主とデータを共有するなら、何をいつ誰と共有するのかをユーザーに明確に伝えてください。
より大きな視点:データの最小化
根本的な問いは、そのアプリが収集しているデータを本当に必要としているかどうかです。ランニングアプリは1秒間隔のGPS座標が必要でしょうか?ルートの可視化には必要です。しかし距離やペースの計算なら、より低い解像度で十分です。カロリー推定に必要なのは、総距離と標高の変化だけです。
データの最小化、つまりユーザーが使っている特定の機能に必要なデータだけを収集することは、データ漏洩に対する最も強力な防御策です。収集していないデータは、漏洩も、召喚状による開示も、販売も、監視パターンへの集計もされようがありません。とにかく全部集めておいて、用途はあとで考えるという成長志向の発想とは相容れませんが、真に堅牢なアプローチはこれしかありません。
ユーザーデータを守る最良の方法は、より強力な暗号化や厳格なアクセス制御ではありません。そもそもデータを持たないことです。
フィットネスアプリ業界はこの教訓を痛い目に遭って学びましたが、今もまだ理解していない企業があります。軍関係者は今も空母でStravaを使い、情報機関の職員も機密施設の近くでランニングを記録し続けています。データは今もサーバーやAPI、データブローカーへ流れており、彼らは個々のユーザーが明かすつもりもなかったパターンを組み立てることができてしまいます。開発者として、私たちはユーザーをこうしたリスクからデフォルトで守るシステムを作ることもできますし、ユーザーの無関心に付け込むシステムを作ることもできます。空母の乗組員は、ランニングアプリを開いたときにセキュリティ上の判断をしたわけではありません。その判断を下したのは、何年も前にデフォルト設定を選んだアプリの開発者なのです。


