Предлагаю заглянуть в мир телекома и технологии 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 (пакета и модулей) и путь, по которому находятся компоненты.
В базовом виде достаточно загрузить:
Header
Directory
Import
Applet
Class
Method
StaticField
Export (опционально)
ConstanPool
Reflocation
StaticResources (для v2.2)
На практике около 50% размера исходного файла не попадает в передаваемые данные.
RAM
Существуют несколько вариантов установки апплета:
Установить апплет во время производства карт на заводе, если они еще не заказаны.
Загрузить апплет, используя 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:
-
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:
Комментарии (14)
K36
10.11.2021 21:02Могут ли апплеты на SIM карте использоваться как шпионские трекеры или получить доступ к ОС или ФС аппарата? Имеют ли они выход в интернет или GSM сеть?
mr_elzor Автор
10.11.2021 21:42+1К OS и FS нет. Весь диалог с апплетами построен через отправку C-APDU и получение R-APDU.
Но у апплета есть возможность иницировать отправку SMS, USSD, открытия браузера на нужной странице, совершения голосового вызова.
Доступ в интернет в общем смысле отсутствует, но есть возможность работы по TCP с http ota (доступ настраивается отдельно, используется TLS-PSK свой для каждой карты), в том числе инициализация сессии самим апплетом по таймеру (настраивается отдельно).
Но для всех операций нужны ключи безопасности и настроенный SMSC.K36
11.11.2021 10:00Но для всех операций нужны ключи безопасности и настроенный SMSC.
Т.е. SIM сама по себе (предположим, производитель встроил в нее вредоносные апплеты) не может без ведома и участия пользователя инициировать GSM (SMS, USSD, вызов) или TCP соединение?
mr_elzor Автор
11.11.2021 11:41Может инициировать по таймеру, но к единственному endpoint http-ota endpoint (который контролируется оператором связи), а не на любой адрес в публичной сети.
Данная возможность не очень часто используется, в основном для задач управления апплетами используется прямая инициализации сессии. Через SMS транспорт отправляется триггер установки соединения. Естественно, это secured packet и естественно доступ только через ключи безопасности, которые уникальны для каждой карты (KIC, KID, KICKey, KIDKey)
K36
11.11.2021 12:40Спасибо за информацию.
В E-SIM, как я понимаю, никакой явы и апплетов нет?
mr_elzor Автор
12.11.2021 09:20Даже для eSim необходима физическая карта. Но задачи eSim это скорее про RFM (remote file management), чем про RAM. Хотя с помощью RAM для eSim заливаются апплеты управления IMSI, в случае когда необходим так называемый Multi IMSI.
XenRE
13.11.2021 12:37Что мешает эмулировать esim полностью в софте, хоть в ОС?
mr_elzor Автор
13.11.2021 14:52Чтобы найти подробный ответ на вопрос, можно почитать про smart cards. Если коротко, то все упирается в безопасность итогового решения.
XenRE
14.11.2021 16:14Ну то есть ничего принципиально не мешает? Почему тогда пишите что необходимо именно физическая карта?
P.S. Чью безопасность? Проприетарный чип, не контролируемый ОС, способный посылать смс, совершать звонки (wtf?) и способный выполнять скинутый ему удаленно произвольный код как-то не особо ассоциируется с безопасностью.mr_elzor Автор
14.11.2021 21:09чуть ниже дал ссылку на отличный доклад, который ответит на ваши вопросы и даст общее понимание базовых вещей
mr_elzor Автор
13.11.2021 14:53Всем кто заинтересовался темой SIM решений, рекомендую ознакомиться с докладом Антона Трошина: https://www.youtube.com/watch?v=CumGQSX6_ws
XenRE
Статье катастрофически нехватает технических подробностей, начиная с того, как вообще устроен обмен с сим-картой. А с текущим содержимым статью можно было бы сократить до заголовка и списка спецификаций.
Вот есть у меня картридер и подопытная симка, даже получалось вытащить из нее тексты СМС и телефоны, но я понятия не имею как работать с апплетами, и статья толком ничего не проясняет. Например куда вообще посылать команду GET STATUS P1/P2 = 10/00 если я хочу увидеть список апплетов? Базовый протокол у симки вообще бинарный. И что означают эти магические числа?
Можно конечно долго курить стандарты (которые в данном случае похожи на макаронного монстра), гуглить или писать тулзы и наверное добиться результата — но тогда смысл от такой статьи?
Хотелось бы почитать толковую статью про работу со смарт-картами, но попадаются какие-то огрызки :(.
mr_elzor Автор
Мир проприетарных технологий он такой, welcome) В моей статье как раз дан вектор куда копать, не более
mr_elzor Автор
JFI: для разработки апплетов и отладки OTA очень удобно использовать SIMtrace2 плату