Вы можете бежать, но не можете спрятаться. Удивительно, насколько невинные технологические особенности имеют скрытую темную сторону. Так же и с API батареи. Созданный, чтобы помочь вам справиться с нехваткой энергии, теперь кажется, что его можно использовать для отслеживания вас, даже если вы не хотите, чтобы вас отслеживали.
Battery API — это HTML5 API, одобренный W3C и реализованный в большинстве браузеров. Идея была достаточно простой и на первый взгляд совершенно безобидной. Приложению полезно знать состояние батареи устройства, на котором оно работает, чтобы отложить действия по разряжению батареи, такие как использование Wi-Fi, Bluetooth или, что еще хуже, телефонной сети. Это казалось такой хорошей идеей, что W3C передал спецификацию API без каких-либо мер предосторожности, таких как запрос разрешения у пользователя. Это означает, что любой веб-сайт или веб-приложение, которое вы посещаете, может определять состояние батареи устройства, которое вы используете, без вашего ведома.
Что может пойти не так?
По словам бельгийских исследователей Лукаша Олейника, Гунеса Акара, Клода Кастеллуччиа и Клаудии Диас, которые представили документ, в котором описывается, как это происходит, проблема в том, что API батареи может использоваться в качестве еще одного вектора отпечатков пальцев. API может возвращать информацию об уровне, времени зарядки и времени разряда. Свойство level представляет собой значение с плавающей запятой от 0 до 1, время указывается в целых секундах. Исследователи обнаружили, что сообщаемый статус фиксировался примерно на 30 секунд, что позволяло использовать его в качестве идентификатора в течение коротких периодов времени — достаточно, чтобы отслеживать переход с одного веб-сайта на другой.
Также можно использовать время разряда и заряда аккумулятора. Время разряда дает около 39922 значений, что в сочетании с уровнем заряда батареи дает 14172310 возможных идентификаторов. Вероятность столкновения между двумя пользователями, обращающимися к сайту, с точки зрения состояния батареи, поэтому мала, и это может быть использовано для идентификации действий пользователей.
Настоящая важность этого краткосрочного идентификатора заключается в том, что его можно использовать для отслеживания изменений в файлах cookie. Если пользователь повторно входит на сайт в частном режиме или очищает файлы cookie, то API батареи можно использовать для их отслеживания в течение относительно короткого времени, необходимого для внесения изменений.
Если этого было недостаточно, в некоторых случаях можно найти более долгосрочный трекер. Используя данные батареи, можно оценить значение емкости батареи — значение EnergyFull. Очевидно, что со временем это меняется медленно и, таким образом, дает возможность идентифицировать пользователей при повторных посещениях. Однако на данный момент этот метод работает только для Firefox в Linux из-за способа вычисления уровня заряда.
Решение состоит в том, чтобы попросить производителей браузеров не сообщать об уровне заряда батареи слишком точно. Это было реализовано в Firefox для Linux, который больше не предоставляет достаточно информации для расчета емкости батареи. Лучшим решением может быть запрос у пользователя разрешения на предоставление информации о состоянии батареи, но большинство невиновных пользователей просто согласятся.
В конце концов, какой вред может принести сайт, знающий уровень заряда вашей батареи?