Атака на SIM OTA апдейты

Jul 23, 2013 22:10

Привет.

Мне тут пишут про то, что Карстен Нол нарыл очередную дыру (и таки да!). Правда, почему-то присылают при этом бестолковые ссылки типа вот этой.

Так вот, бестолковые ссылки читать не надо. Надо читать либо первоисточник, либо журналистов, которые умеют копать и думать самостоятельно.

Краткое изложение для тех, кому лень читать многабукв.Поскольку я ленив, я не стал перечитывать спеку на JavaCard, и буду вам рассказывать по памяти, рассчитывая на то, что если что - меня закидают шапками вежливо поправят знающие товарищи :)

В современных SIM-картах, в какую не плюнь, есть процессор и память, и как не удивительно - обкоцанная среда исполнения Java. Кому хочется пикантных подробностей - ищите в гугле по словам JavaCard или ходите по ссылкам, которые я давал на pro-gsm. При этом помните, что JavaCard - это не только про SIM-ки, а про все SmartCard-ы вообще (например, кредитки или всякие проездные).

А что же исполняется в этом Java runtime-а? А что, что туда положит заказчик SIM-карты, то есть оператор. Это может быть, например, прикольное или дебильное анимированное меню или "каталог сервисов" или еще что-то подобное.

Единственный канал связи с "внешним миром" у этого софта лежит через телефон, то есть данные можно принимать или отправлять по SMS (в обе стороны), USSD (в обе стороны) или через cell broadcast-ы (только принимать). Вплоть до версии 3 в JavaCard Spec не было возможности открывать сокеты (читай - интернета не было), но в версии 3 интернет таки завезли. Как находящиеся в оборте симки разбиваются по версиям JavaCard Spec, которая в них реализована - мне с наскоку найти не удалось.

Почему я заговорил про каналы связи? А потому, что оператору хочется время от времени обновлять этот софт или закидывать ему какие-то данные. Делается это обычно через каналы связи, которые оператор полностью контролирует - через SMS, реже - USSD или cell broadcast. Почему именно SMS? Потому, что USSD должен инициировать сам пользователь (т.е. нельзя сделать push), а cell broadcast - без обратной связи (непонятно, сколько симок реально обновилось).

UPD: Меня поправляют USSD push таки бывает (но, как я понимаю, не везде).

Чтобы обновить софт, или как-то еще порыться в потрохах симки, оператор отправляет специальный подписанный SMS. Этот SMS перехватывается SIM Toolkit-ом, подпись проверяется, содержимое извлекается и с ним что-то делается.

Так вот, Карстен обнаружил, что можно послать кривоподписанный SMS и получить в ответ сообщение об ошибке, в котором будет криптографически подписанная симкой часть. Если для используется DES, то можно взять его и сломать при помощи rainbow tables и получить в результате правильный секретный ключ. А им уже можно подписать правильный вредоносный SMS и наворотить дел.

Очевидно, что этот способ работает при выполнении определенных условий:
* SIM Toolkit принимает служебные сообщения с произвольного номера ИЛИ есть возможность подставить произвольный номер отправителя
* SIM Toolkit отправляет сообщения об ошибке, в которых есть зашифрованная часть
* Для шифрования используется DES (а не AES или что-то другое)

Из доступных материалов пока непонятно, насколько большую статистику собрал Карстен (и собирал ли). Статья в Форбс утверждает (со ссылкой на него), что атаке подвержено "большое количество" карточек, выпускаемых Gemalto и Oberture. Учитывая объемы этих производителей, даже уязвимость 10% от выпушенных карточек может обернуться многозначными цифрами. Операторы и производители карточек говорят, что на самом деле у них все шито-крыто, и масштабы бедствия сильно преувеличены.

Правы, что характерно, могут быть и те и другие.

31 июля Карстен будет выступать на конференции Black Hat, где обещается демонстрация вживую. Интересно, будут ли в выступлении статистика по кол-ву уязвимых карт и ее обоснование.

UPD: Продолжение

gsm

Previous post Next post
Up