Стандарт Банка России СТО БР БФБО-1.7-2023 (далее — Стандарт) направлен на обеспечение безопасности банков и финансовых сервисов с использованием технологии цифровых отпечатков устройств. В данной статье расскажем о технических аспектах реализации Стандарта на практике.
В Стандарте приведены списки параметров устройств, которые необходимы для формирования цифрового отпечатка. Типы отпечатков разделены на те, которые доступны в браузере и в мобильных приложениях на Android и iOS.
Собранные параметры устройства сохраняются в заданной последовательности в формате JSON. После этого полученная строка на стороне кредитной организации или некредитной финансовой организации преобразуется в хэш с помощью алгоритма в соответствии с ГОСТ Р 34.11-2018 «Информационная технология. Криптографическая защита информации. Функция хэширования». Также данный алгоритм хэширования известен под неофициальным названием Стрибог. Результат хэширования используется в качестве цифрового отпечатка устройства.
Параметры для цифровых отпечатков браузеров
В Стандарте приведен набор параметров устройства, используемых для получения цифрового отпечатка браузера. Рассмотрим их подробнее:
Audiocontext Data
Существует несколько способов получить «аудио отпечатки» в браузере. Судя по приведенном в документе примеру, имеется в виду сумма наборов частот с помощью метода getFloatFrequencyData. Результат может отличаться от конкретной реализации метода.
Canvas Data
Отпечаток на основе canvas является одним из самых популярных при формировании браузерных отпечатков. Браузер получает инструкции по созданию изображения, которое будет отличаться на разных устройствах. Результат обладает высокой стабильностью и уникальностью, хотя может совпадать на похожих устройствах. Результат может отличаться от конкретной реализации метода.
CPU
Вероятно, используется свойство navigator.hardwareConcurrency, которое содержит количество логических (не всегда соответствует количеству физических) процессоров на устройстве.
Java Enabled
Возможность выполнения в браузере приложений, написанных на Java. В современных браузерах отсутствует, поскольку поддержка Java плагина была прекращена в популярных браузерах много лет назад.
Language
Язык, поддерживаемый браузером. Язык браузера возможно получить несколькими методами, поэтому требуется уточнение метода его получения.
Memory
Количество используемой памяти поддерживается браузерами на основе Chromium, но отсутствует в Firefox и Safari. Для целей противодействия получению отпечатков размер памяти округляется до одного из значений: 0.25, 0.5, 1, 2, 4, 8.
Screen Color Depth
Характерная для экрана глубина цвета.
Screen Height, Screen Width
Высота и ширина экрана устройства.
Time Zone
Часовой пояс в виде минут, на основе метода getTimezoneOffset.
User-Agent
В Стандарте указано получение User Agent из HTTP заголовка. Вероятно, для простоты сбора возможно использовать значение из свойства navigator.userAgent.
WebGL Data
Аналогично Canvas Data, но изображение создается с использованием работы видеокарты. Результат может отличаться от конкретной реализации метода.
WebGL Renderer, WebGL Vendor
Название драйвера и производителя видеокарты. В будущем может быть недоступно для сбора без прямого разрешения пользователя для целей противодействия отслеживанию пользователей через цифровые отпечатки.
Общие параметры для отпечатков мобильных операционных систем
Далее Стандарт приводит общие параметры отпечатков для мобильных приложений как на Android, так и на iOS. Разделим их на несколько групп.
Bluetooth – MAC Address, MAC-address, Wifi – MAC Address
На современных версиях операционных систем Android и iOS информация о MAC адресах недоступна для получения в обычных приложениях.
MAC addresses are globally unique, not user-resettable, and survive factory resets. For these reasons, to protect user privacy, on Android versions 6 and higher, access to MAC addresses is restricted to system apps. Third-party apps can’t access them.
https://developer.android.com/training/articles/user-data-ids#mac-addresses
In iOS 7 and later, if you ask for the MAC address of an iOS device, the system returns the value 02:00:00:00:00:00.
https://developer.apple.com/library/archive/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html
ICCID, IMEI, IMSI, PhoneNumber, SerialNumber
На современных версиях Android и iOS данные параметры недоступны для получения. Номер телефона приложения обычно получают при его вводе пользователем.
Android 10 (API level 29) adds restrictions for non-resettable identifiers, which include both IMEI and serial number. Your app must be a device or profile owner app, have special carrier permissions, or have the READ_PRIVILEGED_PHONE_STATE privileged permission in order to access these identifiers.
https://developer.android.com/training/articles/user-data-ids#best-practices-android-identifiers
В iOS отсутствуют API для получения постоянных идентификаторов, таких как IMEI или серийного номера устройства. В качестве SerialNumber для iOS может выступать Identifier For Vendor, который будет разным для разных приложений.
Device Model
Модель устройства, доступна для получения.
Device Name
Имя устройства. На Android требуется прямое разрешение пользователя (например, для получение имени устройства через Bluetooth адаптер). На iOS 16 и более поздних имя устройства будет стандартным для обычных приложений. Есть способ получить его настоящее значение, но это подходит очень узкому кругу приложений.
OS Name, OS Version
Название ОС (Android, iOS) и ее версия доступны для получения.
Screen Resolution
Размеры экрана доступны для получения, но следует учесть, что при повороте экрана ширина и высота меняются местами. Возможно проводить их нормализацию для таких случаев. Например, всегда приводить к виду: сначала большее значение, затем меньшее.
DeviceID
Идентификатор устройства. Может быть уникальным для приложения, но различаться для разных приложений. Для Android возможно использовать ANDROID_ID. Для iOS дублирует значение Identifier For Vendor.
Locale
Языковые настройки устройства. Для Android доступно для сбора. Для iOS дублирует значение systemLocale.
Time zone
Часовой пояс. Для Android доступно для сбора. Для iOS дублирует значение defaultTimeZone
Latitude, Longitude
Координаты геолокации устройства. Для их использования в цифровом отпечатке устройства есть два нюанса:
1. Из-за движения пользователя и неточности определения геолокации данные значения практически всегда будут менятся между их получением приложением.
2. Магазины приложений требуют веских причин для отслеживания геолокации пользователя. Не все приложения подходят под нужные критерии.
Отпечатки iOS устройств
В следующем разделе Стандарт приводит параметры отпечатка для iOS устройств. Не будем разбирать их подробно, поскольку все они достаточно просты и доступны для получения. Параметры основаны на используемых на устройстве шрифтах, их стандартных размерах, языковых настройках, типе устройства и приведенном выше Identifier For Vendor.
Как отмечено в Стандарте, для iOS приложений доступен сбор значительно меньшего количества технических параметров для формирования отпечатка, чем на Android. В связи с этим, в списке приведен практически весь перечень параметров, которые доступны для сбора на iOS устройствах.
Цифровые отпечатки для Android
В последнем разделе приведены параметры для сбора на Android устройствах.
Build.*
Большинство параметров из списка относятся к информации о сборке данной версии ОС. Все они доступны для сбора.
DisplayMetrics.density, DisplayMetrics.densityDpi, DisplayMetrics.scaledDensity
Параметры с данными о плотности пикселей экрана, доступны для сбора.
Package.Manager.getSystemAvailableFeatures, Package.Manager.getSystemSharedLibraryNames
Список доступных свойств системы и ее общих библиотек. Доступны для сбора через PackageManager. В Стандарте указано получение списков, но длина приводится в размере 3 символов. Вероятно, имелось в виду количество свойств и библотек, а не их полный список.
StatFs.getTotalBytes
Размер файловой системы. Необходимо уточнение, какие именно разделы следует включать. Для оценки размера доступны разные директории, которые можно получить через методы getDataDirectory, getExternalStorageDirectory, getRootDirectory, getStorageDirectory класса Environment. Возможно, лучший результат будет давать сумма размеров разделов data (на который устанавливаются приложения) и root (на котором установлена ОС).
Telephony Manager.Group Identifier Level1
Требует прямого разрешения пользователя на чтение информации о телефоне. Данное разрешение READ_PHONE_STATE отсутствует у большинства приложений.
Заключение
Стандарт Банка России СТО БР БФБО-1.7-2023 регламентирует составление и использование цифровых отпечатков устройств. Данный Стандарт позволяет повысить безопасность учетных записей легитимных пользователей и создает дополнительные трудности для мошенников. Стандарт содержит все технические составляющие, но для его практической реализации необходимо уточнить ряд вопросов, чтобы избежать ошибок, неточностей и вариативности в полученных отпечатках.
1. Для браузеров указано значение параметра в виде пустой строки при невозможности его сбора. Подходит ли подобная логика для отпечатков мобильных устройств?
2. Как поступить с параметрами, которые постоянно (например, геолокация) или часто (например, User-Agent браузера) меняются? При изменении таких параметров будет меняться и итоговый отпечаток в виде хэша.
3. Необходим алгоритм получения параметров отпечатка Audiocontext Data, Canvas Data, WebGL Data, поскольку их результат напрямую зависит от алгоритма их составления.
4. Каким образом следует организовать работу с браузерами, которые содержат расширения, которые рандомизируют или противодействуют снятию отпечатков? На подобных устройствах отпечаток будет меняться при каждом его получении.
5. Необходимо уточнить формат значений некоторых параметров, поскольку в зависимости от типа данных будет меняться итоговый хэш отпечатка. Например, параметр CPU для браузеров приведен как «browserCPU»:2 (число), но в формате данных указан тип данных: строка.
6. В каком порядке следует расположить общие и уникальные параметры для мобильных ОС? Сначала список общих, затем уникальных, либо отдельные списки размещаются в различных ключах (разделах), либо они смешиваются и сортируются по ключу в алфавитном порядке?
7. Возможно, из отпечатков следует исключить некоторые параметры, которые не используются на современных устройствах, и добавить другие параметры, которые добавят уникальности цифрового отпечатка устройства.
8. Часть данных вопросов возможно решить при помощи составления готовых примеров библиотек (SDK) для получения отпечатков на разных типах устройств. Такой подход позволит стандартизировать и ускорить внедрение соответствующих Стандарту цифровых отпечатков за счет упрощения их реализации и внедрения разработчиками ПО.