О реализации отпечатков стандарта СТО БР БФБО-1.7-2023

В этой статье расскажем о технических аспектах реализации Стандарта Банка России БФБО-1.7-2023 по составлению цифровых отпечатков устройств (device fingerprints) для их использования в банках и финансовых сервисах
Стандарт Банка России СТО БР БФБО-1.7-2023

Содержание

Стандарт Банка России СТО БР БФБО-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 fingerprints

Общие параметры для отпечатков мобильных операционных систем

Далее Стандарт приводит общие параметры отпечатков для мобильных приложений как на 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 fingerprints

Отпечатки iOS устройств

В следующем разделе Стандарт приводит параметры отпечатка для iOS устройств. Не будем разбирать их подробно, поскольку все они достаточно просты и доступны для получения. Параметры основаны на используемых на устройстве шрифтах, их стандартных размерах, языковых настройках, типе устройства и приведенном выше Identifier For Vendor.

Как отмечено в Стандарте, для iOS приложений доступен сбор значительно меньшего количества технических параметров для формирования отпечатка, чем на Android. В связи с этим, в списке приведен практически весь перечень параметров, которые доступны для сбора на iOS устройствах.

будущее идентификаторов android устройств

Цифровые отпечатки для 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) для получения отпечатков на разных типах устройств. Такой подход позволит стандартизировать и ускорить внедрение соответствующих Стандарту цифровых отпечатков за счет упрощения их реализации и внедрения разработчиками ПО.

 

Для уведомлений о новых статьях и обсуждения:

Поделитесь записью в соцсетях: