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

Комментарии (14)


  1. XenRE
    10.11.2021 19:37
    +2

    Статье катастрофически нехватает технических подробностей, начиная с того, как вообще устроен обмен с сим-картой. А с текущим содержимым статью можно было бы сократить до заголовка и списка спецификаций.
    Вот есть у меня картридер и подопытная симка, даже получалось вытащить из нее тексты СМС и телефоны, но я понятия не имею как работать с апплетами, и статья толком ничего не проясняет. Например куда вообще посылать команду GET STATUS P1/P2 = 10/00 если я хочу увидеть список апплетов? Базовый протокол у симки вообще бинарный. И что означают эти магические числа?
    Можно конечно долго курить стандарты (которые в данном случае похожи на макаронного монстра), гуглить или писать тулзы и наверное добиться результата — но тогда смысл от такой статьи?
    Хотелось бы почитать толковую статью про работу со смарт-картами, но попадаются какие-то огрызки :(.


    1. mr_elzor Автор
      10.11.2021 19:50

      Мир проприетарных технологий он такой, welcome) В моей статье как раз дан вектор куда копать, не более


    1. mr_elzor Автор
      10.11.2021 19:57

      JFI: для разработки апплетов и отладки OTA очень удобно использовать SIMtrace2 плату


  1. K36
    10.11.2021 21:02

    Могут ли апплеты на SIM карте использоваться как шпионские трекеры или получить доступ к ОС или ФС аппарата? Имеют ли они выход в интернет или GSM сеть?


    1. mr_elzor Автор
      10.11.2021 21:42
      +1

      К OS и FS нет. Весь диалог с апплетами построен через отправку C-APDU и получение R-APDU.
      Но у апплета есть возможность иницировать отправку SMS, USSD, открытия браузера на нужной странице, совершения голосового вызова.
      Доступ в интернет в общем смысле отсутствует, но есть возможность работы по TCP с http ota (доступ настраивается отдельно, используется TLS-PSK свой для каждой карты), в том числе инициализация сессии самим апплетом по таймеру (настраивается отдельно).
      Но для всех операций нужны ключи безопасности и настроенный SMSC.


      1. K36
        11.11.2021 10:00

        Но для всех операций нужны ключи безопасности и настроенный SMSC.

        Т.е. SIM сама по себе (предположим, производитель встроил в нее вредоносные апплеты) не может без ведома и участия пользователя инициировать GSM (SMS, USSD, вызов) или TCP соединение?


        1. mr_elzor Автор
          11.11.2021 11:41

          Может инициировать по таймеру, но к единственному endpoint http-ota endpoint (который контролируется оператором связи), а не на любой адрес в публичной сети.


          Данная возможность не очень часто используется, в основном для задач управления апплетами используется прямая инициализации сессии. Через SMS транспорт отправляется триггер установки соединения. Естественно, это secured packet и естественно доступ только через ключи безопасности, которые уникальны для каждой карты (KIC, KID, KICKey, KIDKey)


          1. K36
            11.11.2021 12:40

            Спасибо за информацию.

            В E-SIM, как я понимаю, никакой явы и апплетов нет?


            1. mr_elzor Автор
              12.11.2021 09:20

              Даже для eSim необходима физическая карта. Но задачи eSim это скорее про RFM (remote file management), чем про RAM. Хотя с помощью RAM для eSim заливаются апплеты управления IMSI, в случае когда необходим так называемый Multi IMSI.


  1. XenRE
    13.11.2021 12:37

    Что мешает эмулировать esim полностью в софте, хоть в ОС?


    1. mr_elzor Автор
      13.11.2021 14:52

      Чтобы найти подробный ответ на вопрос, можно почитать про smart cards. Если коротко, то все упирается в безопасность итогового решения.


      1. XenRE
        14.11.2021 16:14

        Ну то есть ничего принципиально не мешает? Почему тогда пишите что необходимо именно физическая карта?
        P.S. Чью безопасность? Проприетарный чип, не контролируемый ОС, способный посылать смс, совершать звонки (wtf?) и способный выполнять скинутый ему удаленно произвольный код как-то не особо ассоциируется с безопасностью.


        1. mr_elzor Автор
          14.11.2021 21:09

          чуть ниже дал ссылку на отличный доклад, который ответит на ваши вопросы и даст общее понимание базовых вещей


  1. mr_elzor Автор
    13.11.2021 14:53

    Всем кто заинтересовался темой SIM решений, рекомендую ознакомиться с докладом Антона Трошина: https://www.youtube.com/watch?v=CumGQSX6_ws