(U)SIM-карты: обновление апплетов по воздуху

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Photo by @metelevan
Photo by @metelevan

Предлагаю заглянуть в мир телекома и технологии OTA — Over-the-air («обновления по воздуху») и разобраться в работе RAM (Remote Application Management) - одной из важнейших частей технологии OTA. Узучая процесс удаленной загрузки и установки приложений на SIM-карту телефона мы узнаем сложно ли взломать карту или отдельное приложение на ней.

В прошлой статье мы познакомились с базовыми понятиями протокола SMPP и разработали простейшее Erlang/Elixir клиент-серверное приложение на его основе. В комментариях к ней был поднят вопрос про целесообразность интеграции через SMPP для не телеком-проектов. В FunBox мы разрабатываем продукты для мобильных операторов, поэтому некоторые моменты могут показаться сложными или чересчур индустриальными. В статье я попытался максимально просто донести базовые вещи, которые помогут начать изучение OTA-технологий.

(U)SIM / UICC. Что же работает в наших телефонах

SIM-карта — модуль идентификации абонента. Казалось бы, для надежной идентификации достаточно простого сессионного ключа и правил его обновления. В сетях 1G было еще проще: абонентов идентифицировали по ESN — заводскому номеру сотового телефона.

Но прогресс не стоит на месте, и требования к функциональности и безопасности привели нас к тому, что мы имеем сейчас. Современная SIM-карта — это аппаратно-программный комплекс, реализующий базовый функционал смарт-карт, описанный в ISO 7816, и дополнительный слой, относящийся к мобильным сетям, определенный многочисленными спецификациями ETSI, 3GPP, GlobalPlatform, JavaCard и GSMA. Подавляющее большинство SIM-карт фактически являются универсальными интегральными схемами (UICC), реализующими стандарт Oracle Java Card и спецификацию смарт-карт. Таким образом, SIM-карты представляют собой законченные вычислительные платформы с процессором, оперативной памятью, постоянным хранилищем данных и интерфейсами подключения. Благодаря им мы можем запускать приложения, написанные на Java. 

SIM Toolkit (STK)

Стандарт SIM Toolkit (STK) разработали, чтобы облегчить процесс предоставления дополнительных услуг мобильным абонентам. Благодаря STK расширился набор функций, в которых задействованы SIM-карты. Кроме фоновой аутентификации абонентов, SIM-карта теперь может участвовать в выполнении видимых для пользователя приложений, например:

  • для отображения текущего баланса (услуга «Живой баланс» у Мегафона);

  • денежных переводов (M-Pesa);

  • настройки перенаправления вызовов;

  • авторизации в сторонних сервисах и приложениях (Mobile ID).

На одной карте могут находиться несколько полезных приложений. Для каждого приложения, доступного для работы через OTA , на карте существуют идентификатор TAR и параметры безопасности: MSL, ключи, счетчик (привязка идет по SD — Security Domain). Про механизмы защиты мы поговорим позже.

CAP

Перейдем к практике. Допустим, у нас уже есть апплет и нам необходимо загрузить его абонентам. 

Апплеты поставляются в виде файлов в формате CAP. По факту это ZIP-архив с регламентированным набором директорий и файлов. Формат достаточно простой. Передавать CAP как есть не стоит. В JCRE определен порядок загрузки компонентов. Прочитав META_INF/MANIFEST.MF, можно узнать AID(пакета и модулей) и путь по которому находятся компоненты.

В базовом виде достаточно загрузить:

  1. Header.

  2. Directory.

  3. Import.

  4. Applet.

  5. Class.

  6. Method.

  7. StaticField.

  8. Export (опционально).

  9. ConstanPool.

  10. Reflocation.

  11. StaticResources (для v2.2).

На практике около 50% размера исходного файла не попадает в передаваемые данные.

RAM

Существуют несколько вариантов установки апплета:

  1. Установить апплет во время производства карт на заводе, если они еще не заказаны. 

  2. Загрузить апплет, используя OTA и функции RAM.

Рассмотрим второй вариант подробнее. Для работы нам понадобится OTA-платформа, обеспечивающая транспорт APDU из сети оператора в приложение карты и обратно, и компонент, реализующий функции RAM, который непосредственно отвечает за формирование C-APDU и анализ R-APDU.

OTA предполагает возможность использования разных транспортов: USSD, SMS-CB (Cell Broadcast), SMS-PP, BIP (CAT_TP, HTTP OTA). Наиболее популярным является SMS. Однако, при наличии поддержки BIP (Bearer Independent Protocol),  использование IP-сети является более надежной OTA-технологией(HTTP(s) OTA). При этом работа с IP-сетью со стороны SIM-карты происходит с помощью набора BIP команд реализованных в STK.

Важно правильно настроить SMSC. Иногда оператор отключает возможность передачи SM, содержащих STK-заголовки, либо разрешает трафик только с определенным PID, либо накладывает дополнительные ограничения, например трафик для PID = 127 (peer to peer SMS) обычно заблокирован.

Фазы загрузки и установки апплета

Весь процесс загрузки и установки происходит в режиме обмена командами (C-APDU) и ответами на них (R-APDU).

  • Проверка карты
    Проверка установленных приложений

    Чтобы не загружать апплет, если он уже загружен или установлен, стоит отправить команду GET STATUS P1/P2 = 10/00, возвращающую список загруженных пакетов и модулей, и GET STATUS P1/P2 = 40/00, возвращающую список установленных приложений. Чтобы сократить размер ответа карты, существует опция фильтрации по RID.

    Проверка доступных ресурсов карты

    Зачем тратить впустую время и передавать какие-то данные, если у карты недостаточно места для хранения модулей или недостаточно памяти для исполнения приложения? Чтобы получить информацию о доступных ресурсах карты, мы можем отправить GET STATUS P1/P2 = FF/21. Таким образом, еще до загрузки данных мы отфильтруем из рассылки карты, которые уже содержат необходимое приложение, или же карты, у которых недостаточно ресурсов для выполнения функций приложения.

  • Инициализация загрузки
    После того как мы проверили карту, можно приступить к загрузке приложения. С помощью команды INSTALL[for load] мы сообщаем RAM (приложению на карте), что начинаем загрузку. После исполнения этой команды карта готова к приему компонентов нашего апплета.

  • Загрузка
    На этом этапе полезное содержимое, полученное на этапе обработки исходного CAP-файла, разбивается на части. Каждую часть отправляем отдельной командой LOAD. Из заголовка команды карта извлекает номер части и флаг окончания загрузки.

  • Установка
    Если все команды в цепочке LOAD завершились успехом, мы можем выполнить установку нашего приложения с помощью отправки INSTALL[for load and make selectable]

HTTP(s) транспорт

Все команды можно отправить по SMS, но это медленно и ненадежно. Гораздо выгоднее использовать HTTP(s)-OTA — компонент, предоставляющий HTTP-транспорт для доставки C-APDU и получения R-APDU. При этом весь обмен происходит по HTTPS и безопасен. В качестве механизма, регулирующего доступ к этому интерфейсу, выступает TLS-PSK. Часто для каждой карты задается свой PSK, который привязан к PSK_IDENTITY или ICCID.

OTA и механизмы безопасности

Наверняка многие читатели ждут ответ на вопрос про безопасность SIM-карт. У кого-то, возможно, даже возникла мысль, что написать апплет и установить его на карту очень просто. Но увы, существуют ограничения в виде набора данных безопасности карты.  Для обращения к любому приложению через OTA они будут индивидуальными: это и ключи для симметричного шифрования, и алгоритм шифрования, и индекс ключа, и счетчик команд для защиты от replay attack и случайного дублирования сообщений в сети.

Смарт-карты задумывались как безопасный инструмент и по факту это так: у нас нет прямого доступа к файловой системе или оперативной памяти карты извне, мы не можем прочитать хранящиеся на ней приложения — их можно только установить, обновить или удалить. Протокол взаимодействия с картой стандартизирован и безопасен. Стоит заметить, что существует возможность управления файлами на карте при помощи функций RFM (Remote File Management), при этом для доступа нам нужны ключи шифрования карты и соблюдение всех требований безопасности, аналогичных предъявляемым к RAM.

Однако в случае DES-шифрования смарт-карты не дают 100% гарантии безопасности. Так, в 2013 Карстен Ноль сообщил об успешной атаке на OTA и SIM-карты. При этом существует возможность снизить или совсем устранить возможность взлома, применяя более стойкий 3DES и современный и надежный AES. 

Главный совет для работы с OTA

Спецификации и стандарты для OTA находятся в открытом доступе. Основная проблема лежит в другой плоскости — чтобы разрабатывать и эксплуатировать OTA-решения, необходимо преодолеть целый ряд сложностей:
    - Подробно изучить механизмы безопасности карт и их программную реализацию: определиться с ключами и режимом шифрования.
    - Разработать SIM-OTA-платформу, которая предоставит SMS-транспорт для C-APDU и R-APDU.
    - Решить, нужен ли вам функционал HTTP-OTA. Если ваши карты поддерживают HTTP-OTA, то использование HTTP-транспорта ускорит массовые рассылки приложений.
    - Создать тестовое окружение для валидации ваших OTA-решений. Скорее всего, предстоит написать тестовый SMSC, научиться извлекать APDU из зашифрованных сообщений и многое другое.
    - Иметь SIM-карты c поддержкой необходимых функций и доступ к правильно настроенному SMSC оператора.

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


Список спецификаций для реализации RAM

  • GlobalPlatform:

    • GlobalPlatform Card Specification.

    • GlobalPlatform CardRemote Application Management over HTTPCard Specification v2.2 – Amendment B.

  • ETSI (SmartCard, UICC):

    • ETSI TS 102 240 UICC Application Programming Interface and Loader Requirements; Service description.

    • ETSI TS 102 241 UICC Application Programming Interface (UICC API) for Java Card.

    • ETSI TS 101 220 ETSI numbering system for telecommunication application providers.

    • ETSI TS 102 225 Secured packet structure for UICC based applications.

    • ETSI TS 102 226 Remote APDU structure for UICC based applications (Ch.8 - Remote Application Management).

  • Sun/Oracle JavaCard:

    • Java Card VM.

    • Java Card Runtime Environment.

Источник: https://habr.com/ru/post/588262/


Интересные статьи

Интересные статьи

Кто бы что ни говорил, но я считаю, что изобретение велосипедов — штука полезная. Использование готовых библиотек и фреймворков, конечно, хорошо, но порой стоит их отложить и создать ...
В новый год с новой АТС! Правда, не всегда есть время или желание разбираться в тонкостях перехода между версиями, собирая информацию из разных источников. В этой статье мы собрали всю информацию...
На сегодняшний день у сервиса «Битрикс24» нет сотен гигабит трафика, нет огромного парка серверов (хотя и существующих, конечно, немало). Но для многих клиентов он является основным инструментом ...
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...