Атака на SIM OTA апдейты
2013-07-23 10:10 pmПривет.
Мне тут пишут про то, что Карстен Нол нарыл очередную дыру (и таки да!). Правда, почему-то присылают при этом бестолковые ссылки типа вот этой.
Так вот, бестолковые ссылки читать не надо. Надо читать либо первоисточник, либо журналистов, которые умеют копать и думать самостоятельно.
Краткое изложение для тех, кому лень читать многабукв.Поскольку я ленив, я не стал перечитывать спеку на 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: Продолжение
Мне тут пишут про то, что Карстен Нол нарыл очередную дыру (и таки да!). Правда, почему-то присылают при этом бестолковые ссылки типа вот этой.
Так вот, бестолковые ссылки читать не надо. Надо читать либо первоисточник, либо журналистов, которые умеют копать и думать самостоятельно.
Краткое изложение для тех, кому лень читать многабукв.Поскольку я ленив, я не стал перечитывать спеку на 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: Продолжение
(no subject)
Date: 2013-07-23 09:49 pm (UTC)(no subject)
Date: 2013-07-24 12:09 am (UTC)странно, что используется один и тот же ключ для 2 разных целей 2 сторонами
> насколько большую статистику собрал Карстен (и собирал ли).
1000 симок вроде
> атаке подвержено "большое количество" карточек, выпускаемых Gemalto и Oberture
а разве опсосы не могут фильтровать идущие по ним СМСы?
если такие спец смсы заблокировать на гейте... и на станциях...
(no subject)
Date: 2013-07-24 01:06 am (UTC)Плюс видимо из-за ограниченных вычислительных мощностей для подписи используются симметричные алгоритмы (что-то типа HMAC), вместо честной ЭЦП на асимметричных алгоритмах типа RSA ?
(no subject)
Date: 2013-07-24 05:06 am (UTC)Если можно вопрос, к чему были упомянуты сокеты? Ведь vulnerability, как я понял, связана с SMS.
(no subject)
Date: 2013-07-24 06:02 am (UTC)(no subject)
Date: 2013-07-24 07:01 am (UTC)(no subject)
Date: 2013-07-24 05:57 am (UTC)А какой в этом смысл? Ведь ответ тогда уйдёт на этот произвольный номер?
(no subject)
Date: 2013-07-24 10:19 am (UTC)(no subject)
Date: 2013-07-24 01:34 pm (UTC)или речь идёт о перехвате смс-ответов где-то на уровне канала?
(no subject)
Date: 2013-07-24 10:18 am (UTC)Потому как в сочетании с вышеописанным это уже имеет практический смысл.
Ты случайно не в курсе?
(no subject)
Date: 2013-07-24 04:32 pm (UTC)Могу что-то наврать, читал 100 лет назад.
(no subject)
Date: 2013-07-24 04:38 pm (UTC)(no subject)
Date: 2013-07-24 10:26 am (UTC)offtopic:
https://twitter.com/tsw2k/status/359722399484223488 что, правда? ЗАЧЕМ?
(no subject)
Date: 2013-07-24 02:43 pm (UTC)(no subject)
Date: 2013-07-24 02:56 pm (UTC)(no subject)
Date: 2013-07-24 03:14 pm (UTC)(no subject)
Date: 2013-07-26 10:09 pm (UTC)Его можно было сломать с помощью примерно 50к запросов на
генерацию триплетов.
Вот и начали как первую степень защиты
делать ограничение по счетчику запросов.
(no subject)
Date: 2013-07-28 11:35 am (UTC)- Для 2G это команда RUN GSM ALGO
- Для 3G это AUTHENTICATE
Причем эти команды отправляются на карту не только при изначальной регистрации, а при совершении звонка, отправки СМС итд итп, настраивается это на стороне сети оператора.
Типичное значение этого authentication counter равно 100 000 и в среднем хватает на 3 года эксплуатации, но это сильно зависит от условий эксплуатации.
Уязвимость в SIM-картах
Date: 2013-07-24 10:45 am (UTC)Связь карт с внешним миром
Date: 2013-07-28 11:41 am (UTC)