Подробные статьи о технологиях, определяющих будущее.

Ваше фитнес-приложение — инструмент слежки

Как фитнес-приложения вроде Strava сливают геоданные, от военных баз до авианосцев. Уроки 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-данные скрываются. Это хорошая функция, но появилась она на несколько лет позже, чем следовало. Если ваше приложение записывает геолокацию, позвольте пользователям задавать области, где запись подавляется или данные искажаются. Большинство пользователей будут задавать такую зону вокруг дома и работы, что устраняет самые чувствительные закономерности.

Деталь реализации: сдвиг начала и конца маршрута на случайное смещение недостаточен, если форма маршрута уникальна. Человек, который каждый день пробегает одну и ту же петлю в 5 км, создаёт узнаваемую фигуру даже при скрытых конечных точках. Лучшие подходы: обрезать первые и последние N метров маршрута или привязывать конечные точки к сетке, чтобы исключить точный вывод местоположения.

Думайте об атаках через агрегацию

Отдельные точки данных могут быть безобидными. Агрегированные закономерности — нет. Когда вы создаёте функции, которые объединяют или визуализируют данные нескольких пользователей — тепловые карты, таблицы лидеров, популярные места, — подумайте, какие закономерности возникнут. Тепловая карта, подсвечивающая секретный объект, — это атака через агрегацию, даже если ничьи данные напрямую не раскрыты.

Защита: задавать минимальные пороги для агрегации (не показывать данные тепловой карты для областей с менее чем N уникальными пользователями), исключать чувствительные географические зоны и проверять визуализации на неожиданное раскрытие закономерностей перед публикацией. Техники дифференциальной приватности — добавление калиброванного шума к агрегированным запросам — могут помочь, хотя их сложно корректно реализовать.

Аудит передачи данных

Каждый API-эндпоинт, отдающий геоданные, каждая функция экспорта данных, каждая интеграция с третьей стороной — это канал, через который могут утечь чувствительные данные. Опишите свои потоки данных. Знайте точно, куда уходят геоданные пользователей, кто к ним имеет доступ и при каких условиях. Если вы делитесь данными с партнёрами или рекламодателями, прямо сообщайте пользователям, что именно и кому вы передаёте.

Общая картина: минимизация данных

Главный вопрос: нужны ли вашему приложению данные, которые оно собирает? Нужны ли беговому приложению GPS-координаты с интервалом в одну секунду? Для визуализации маршрута — да. Для расчёта дистанции и темпа хватит меньшей детализации. Для оценки калорий достаточно общей дистанции и перепада высот.

Минимизация данных — сбор только тех данных, которые нужны для конкретной функции, которой пользуется человек, — самая надёжная защита от утечек. Данные, которые вы не собираете, нельзя взломать, истребовать по суду, продать или объединить в систему слежки. Это противоречит инстинкту роста — собирать всё и разбираться с применением потом, — но это единственный по-настоящему надёжный подход.

Лучший способ защитить данные пользователей — не лучшее шифрование и не более строгий контроль доступа. А отсутствие самих данных.

Индустрия фитнес-приложений усвоила этот урок на собственном горьком опыте, и некоторые компании до сих пор этого не сделали. Военные по-прежнему пользуются Strava на авианосцах. Сотрудники спецслужб по-прежнему логируют пробежки возле засекреченных объектов. Данные по-прежнему уходят на серверы, в API и к брокерам данных, которые могут сложить из них закономерности, которые никакой пользователь не собирался раскрывать. Как разработчики, мы можем либо строить системы, которые по умолчанию защищают пользователей от этих рисков, либо строить системы, которые эксплуатируют их невнимательность. Экипаж авианосца не принимал решения о безопасности, когда открывал приложение для бега. Это сделали разработчики приложения годами раньше, когда выбирали настройки по умолчанию.