Взлом iPhone через SMS: интервью с Чарли МиллеромВведениеНедавно нам удалось пообщаться с экспертом в области безопасности Чарли Миллером (Charlie Miller) из Independent Security Evaluators по поводу недавно объявленной уязвимости iPhone, позволяющей хакеру получить контроль над iPhone с помощью последовательности определённых SMS.
THG. Спасибо, Чарли, что нашёл время пообщаться. Почему бы тебе не начать наше интервью с рассказа об уязвимости через SMS? Чарли Миллер. Ошибка iPhone связана с тем, что телефону сообщается об определённом количестве данных, но при этом посылается меньше данных, чем было заявлено. Функция, которая считывает данные, начинает возвращать "-1", указывая на ошибку, но другие элементы программного обеспечения не проверяют на наличие такой ошибки и считают, что "-1" - это данные сообщения. Этот пример показывает, насколько сложно писать безопасный код, поскольку по отдельности каждая часть программы выглядит правильной, но опасности кроются во взаимодействии!
В любом случае, в зависимости от отправляемых данных, может произойти много нехорошего. В какой-то момент можно заставить программу "вылететь", поскольку ей нужно инициализировать -1 байт (что является 0xffffffff - очень большое число). Подобная атака типа "отказ в обслуживании" может полностью закрыть телефону доступ в сеть оператора.
Во время моего доклада на BlackHat мы посылали подобное сообщение каждые 10 секунд добровольцу из аудитории, чтобы постоянно "выкидывать" его из сети. К сожалению, сообщения сохранились в очереди оператора, и телефон добровольца "выбивался" из сети и через несколько часов после доклада. Впрочем, потом телефон заработал нормально.
THG. Совет читателям: если Чарли будет искать следующего добровольца, не соглашайтесь. Как же вы отсылали сообщения? Через интерфейс SMS ещё одного iPhone или через какой-либо шлюз? Чарли Миллер. Для отсылки SMS через сеть оператора мы написали небольшую программу на атакующем iPhone, которая связывалась с модемом через команды GSM AT. Для тестов и поиска ошибок мы использовали довольно сложную инфраструктуру, которую написал мой содокладчик Коллин Малинер (Collin Mulliner): она позволяла тестировать работу с сообщениями SMS простой отправкой данных через TCP. Это предотвращало необходимость отсылки данных через сеть оператора и обходилось бесплатно. Кроме того, инфраструктура позволяла очень быстро протестировать большое количество сообщений.
THG. Как же вы перешли от "отказа в обслуживании" к полноценному эксплойту? Чарли Миллер. Самое худшее у программы заключается в работе с цепочкой сообщений. То есть когда нужно отослать сообщения длиной больше 140 байт. Можно отослать такое SMS в виде цепочки сообщений, а телефон затем восстановит из цепочки полное длинное сообщение. Доступ к массиву основывается на значении данных. В случае, когда программа считывает "-1", то происходит доступ к памяти до массива, а не в массиве. Если правильно всё подобрать (что нелегко), то можно использовать эту ошибку для захвата полного управления телефоном.
Полная атака состоит из более 500 сообщений, хотя жертва и не знает об их приёме, поскольку на телефоне они не отображаются. Большинство сообщений как раз и предназначены, чтобы правильно всё подобрать. Шестьдесят сообщений получают доступ к массиву за границами.
Уязвимость в подробностях
THG. То есть вы медленно пересылаете машинный код вашего полноценного приложения, причём более 140 байт за один раз? Чарли Миллер. Что-то типа того. Надо всё тщательно продумать, чтобы содержимое памяти было предсказуемым. Обычно раскладка памяти совершенно непредсказуемая. Но если сделать достаточно инициализаций определённого размера, то можно внести некоторую степень предсказуемости. Данная техника иногда называется "heap feng shui", она используется для создания эксплойтов, которые должны более надёжно срабатывать при наличии определённых условий. Например, мне нужно сделать так, чтобы данные появились как раз до массива, чтобы можно было получить к ним доступ до первого элемента.
Такая атака очень опасна по нескольким причинам. Одна из них связана с тем, что со стороны пользователя не требуется никакого взаимодействия. Обычно я создаю эксплойты в браузере, где пользователя нужно заставить перейти на нужный сайт. Здесь же я могу атаковать ваш телефон, когда он находится в кармане, на зарядке или где угодно. Вторая опасность: процесс, который обрабатывает сообщения SMS, а именно CommCenter, работает с привилегиями root без ограничений. Для сравнения, браузер работает с низкими привилегиями мобильного пользователя, да и у него есть "песочница", которая не позволяет делать разветвления или отсылать SMS.
THG. Как вы впервые открыли эту уязвимость? Чарли Миллер. Я обнаружил эту ошибку, отправляя на телефон тысячи неправильно составленных SMS, этот процесс известен как "fuzzing".
THG. Итак, ваша инфраструктура позволила получить прямой доступ к CommCenter? Тысячи? Вы просто отсылали тысячи случайных строк и следили за реакцией? Чарли Миллер. На самом деле инфраструктура работала между CommCenter и модемом телефона. Инфраструктура передавала всю информацию с модема на CommCenter, и при этом она могла подбрасывать SMS-сообщения. Таким образом, у CommCenter не было способа узнать, пришло сообщение от модема или от нас.
Данные не были полностью случайными. Лучше всего брать правильные данные, которые можно получить просто чтением спецификаций SMS, после чего добавлять в них небольшие аномалии. Тогда SMS-сообщение в целом будет корректно за исключением какой-либо мелочи. Повторяйте этот процесс для всех мелочей. Чтобы получить подобные тестовые случаи требуется приложить немало усилий.
THG. Итак, когда вы открыли уязвимость, какие усилия потребовались, чтобы перевести её в состояние эксплойта? Чарли Миллер. Написание эксплойта было очень сложным. Я привык писать эксплойты для браузеров, где довольно много контроля над окружением. Вы можете заставить браузер делать всё, что нужно с помощью JavaScript и HTML. Это позволяет атакующему распределять память очень предсказуемым образом. В данном же случае я был ограничен SMS по 140 байт, и процесс выполнял много действий между каждым сообщением. У меня ушло почти 2,5 недели, чтобы сделать всю работу, но результат труда оказался прекрасной наградой.
THG. 2,5 недели? Звучит солидно. Впрочем, это мизерное время по сравнению с тем, сколько iPhone находится на рынке. Была ли эта ошибка в программном обеспечении оригинального iPhone? Чарли Миллер. Ошибка, скорее всего, была всегда. Я отследил её до iPhone OS 2.2. И это очень пугает. Сколько присутствует других подобных ошибок, о которых знают злоумышленники? Я считаю себя умным, но есть многие хакеры, которые ещё умнее меня, и которые могут найти подобные ошибки.
THG. Как насчёт push-оповещений и голосовой почты? Они не используют SMS? Чарли Миллер. Не уверен насчёт push-оповещений, хотя это было бы вполне логично. SMS действительно используются для оповещения о поступлении новой голосовой почты, а также для указания на то, где телефон может получить сами звуковые файлы. SMS также используются и для оповещения о сообщениях MMS.
THG. Таким образом, потенциально push-оповещения или оповещения о поступлении новой голосовой почты тоже могут иметь "магические строчки"? Может ли злоумышленник заставить iPhone получить неверную голосовую почту, звуковые файлы которой будут взяты из какого-либо другого места? Чарли Миллер. Там нет "магических строчек", просто в данном случае SMS - это нечто большее, чем текстовые сообщения. Их можно использовать и для передачи данных. Некоторые операторы пересылают с помощью SMS рингтоны и обновления OTA, например. В заголовке данных есть байт, который сообщает устройству о типе сообщения, а уже затем устройство должно само уметь работать с данными разных типов. Цепочки сообщений, о которых я говорил раньше, как раз имеют идентификационный байт 00. У нормальных текстовых сообщений вообще нет заголовка данных. Другой тип данных сообщает о числе сообщений голосовой почты, ожидающих прослушивания. Наконец, ещё один тип данных говорит телефону о том, откуда брать звуковые файлы. Это также объясняет и то, почему я могу отослать 500 сообщений, и вы об этом не узнаете. Все эти сообщения SMS являются "данными", поэтому ваш телефон не отображает их, поскольку это не простые текстовые сообщения.
Многие пользователи пожелали узнать, как можно отключить приём SMS, когда мы объявили об этой ошибке. В большинстве случаев вы не сможете отключить приём SMS, поскольку он является ключевой функцией телефона, и сотовые операторы используют его для обеспечения многих функций, которые вам нужны.
В целях тестирования я попытался заставить iPhone взять звуковой файл с моего web-сервера, но, вероятно, инфраструктура AT&T позволяет брать файлы только с собственных серверов.
THG. Как ты думаешь, если бы Apple отдала код на аудит безопасности, то эта ошибка была бы обнаружена? Чарли Миллер. Хм... Ошибки сложно находить, именно поэтому многие платят мне за поиск ошибок. Данную ошибку нельзя назвать заметной, она появилась только после того, как я провёл достаточно большое число тестов "fuzzing", поэтому я бы не стал так сильно винить Apple.
THG. Похоже, нужно сделать некоторые выводы по безопасности. Программистов учат думать о границах при отладке или ошибочном вводе пользователя, но я думаю, что в данном случае нужно уделять больше внимания взаимодействию между разными модулями. Какие результаты дала твоя кампания “No Free Bugs”? Чарли Миллер. Тишина. Некоторые написали мне о своей поддержке, но дальше разговоров дело не пошло. Я думаю, что вина во многом лежит на мне, поскольку я не такой хороший организатор, и я очень занят своей работой и исследованиями, поэтому просто не смог уделить достаточного времени. Впрочем, я по-прежнему думаю, что если вендоры будут платить, то большее число людей займутся поиском ошибок. Хороший пример - как раз эта история с SMS. Только между нами: Коллин и я обнаружили одну ошибку в iPhone, Android и Windows Mobile. Затем мы остановили тесты. У нас появилась достаточная почва для обсуждений, но какими мотивами мы должны руководствоваться, чтобы продолжать исследование? Для нас это неоплачиваемое хобби, поэтому мы делаем минимальную работу, чтобы получить достаточно хорошие результаты для презентации на конференции. Если бы исследователям платили за поиск ошибок, они бы их искали и находили.
Ещё один пример: я больше не ищу ошибок, связанных с SMS, я двигаюсь дальше. Именно так сегодня и поступают исследователи. Почему я должен продолжать поиск этих очень опасных ошибок? Мне за это не платят, и после бурных обсуждений атак через SMS на BlackHat, на конференциях эта тема некоторое время не будет интересной. Именно поэтому я и начал кампанию “No More Free Bugs” - она должна мотивировать исследователей искать ошибки. Злоумышленники уже мотивированы финансовыми доходами, которые они получат, поэтому они продолжают исследование этих критически важных ошибок.
THG. Расскажи о проблемах с SMS под Windows Mobile и Android.
Чарли Миллер. Инфраструктура Коллина также работает под Android и WinMobile. Мы обнаружили те же ошибки "отказа в обслуживании" в Android (мы о них сообщили, они были исправлены) и довольно серьёзную ошибку в телефонах HTC WinMobile, которая связана с обработкой телефоном сообщений, содержащих указатель формата %n. Это совсем не смешно, поскольку вам не потребуются какие-либо специальные инструменты для отсылки вредоносного сообщения, просто наберите товарищу сообщение с %n, после чего TouchFlo (менеджер приложений) "вылетит" и не вернётся.
THG. Уважаемые читатели, пожалуйста, не используйте эту информацию во вред другим. Есть ли у процессоров ARM в iPhone какие-либо средства, подобные NX-биту, чтобы минимизировать риск атак методом переполнения буфера? Чарли Миллер. Да, у ARM есть бит XN (eXecute Never), который играет роль, аналогичную биту NX у процессоров x86. На iPhone данный бит ставится на "куче" (heap) и на стеке. Фактически, вы не можете отключить этот бит для страниц "кучи", даже если будете пытаться. У меня был отдельный доклад на BlackHat о том, как можно обойти эту защиту памяти в iPhone 2.2.1 и более ранних версиях, но ошибка была исправлена в версии 3.0, и пока я не знаю, как можно обойти защиту.
THG. Но в данном случае эта ошибка была связана с обработкой цепочки сообщений, а не с традиционным переполнением буфера? Чарли Миллер. Да, в любом эксплойте есть два фактора. Первый - это ошибка, и в данном случае она заключается к доступу в памяти до массива данных. Второй фактор - это то, что делать с этой ошибкой. Именно на этом этапе подключаются технологии защиты памяти. Если бы память не защищалась, то можно было бы разместить в ней код и запустить его. У iPhone 3 так уже сделать нельзя, нужно искать что-то другое.
Эта ошибка не является традиционным переполнением буфера, скорее она относится к классу ошибок нарушения целостности памяти. Программисты (и аудиторы кода) довольно поднаторели в изучении strcpy и memcpy. Однако всё может пойти в любой момент неправильно, если вы работаете с указателями. В данном случае произойдёт доступ к массиву вне границ, атакующий может испортить память, как и в случае традиционной атаки методом переполнения буфера.
Кстати, у Android стек SMS реализован на Java. Поэтому нельзя нарушить целостность памяти, вместо этого мы получим просто необрабатываемое исключение. Поэтому наши атаки там просто ограничены отказом в обслуживании.
THG. Apple и AT&T заявили, что взлом iPhone может привести к проблемам с ECID? Ты много знаешь об iPhone, это правда?
Чарли Миллер. Нет, просто AT&T пытается заработать как можно больше денег. Абсолютная чушь.
THG. Как насчёт заявления, что взломанный iPhone может привести к краху базовых станций - кто-нибудь проверял защиту ПО, которое работает в базовых станциях? Чарли Миллер. Это полная чушь. Вы можете отличить взломанное ядро от стандартного ядра iPhone, поскольку некоторые места изменились. В частности, отсутствует дополнительное взаимодействие с оператором. Но даже если бы ядро выполняло что-то безумное (что на деле не так), то я надеюсь, что базовые станции достаточно надёжные, чтобы выдержать это. Как и программное обеспечение iPhone должно справляться с любыми типами данных, которое оно получает, так и базовые станции тоже должны быть такими же. Я надеюсь, что операторы тщательно тестируют своё оборудование. Если же нет, то они всегда могут связаться со мной, и я буду рад помочь. Другими словами, если террористу для "падения" сотовой сети нужен только взломанный iPhone, то мы все в большой беде.
Кроме того, это ещё одна причина, по которой я предпочёл тестировать атаку SMS-сообщениями локально. Если бы я завалил сообщениями сеть оператора, то что-то могло "слететь". Даже если я сделал бы это непреднамеренно, то оператор мог бы посадить меня за это за решётку, а я там совсем не хочу оказаться!
THG. Наверное, если бы ты не тестировал безопасность какой-либо новейшей системы защиты оператора. Впрочем, что-то я пересмотрел слишком много голливудских фильмов. Как обычно, спасибо за то, что нашёл время на беседу! Чарли Миллер. Никаких проблем, обращайтесь ещё.
http://www.thg.ru/phone/iphone_sms_hack/