Независимый консультант по вопросам безопасности Стефан Эссер прославился
ранее в этом году, когда техника, которую он разработал для взлома iPhones, была
перенята JailbreakMe и другими джейлбрейкинговыми сервисами.

Британскому изданию The Register удалось "поймать"
немецкого исследователя на конференции безопасности Black Hat в Лас-Вегасе как
раз накануне его запланированной презентации под названием "Эксплуатация ядра
iOS". Вот основные моменты разговора, включая сведения о недокументированном
отладчике, доступ к которому можно получить только при помощи кастомизированного
коннектора:

В двух словах, о чем ваша презентация?

Идея заключается в том, что при выполнении удаленного кода, сталкиваешься с
большой проблемой, поскольку по-прежнему ничего не можешь сделать с iPhone из-за
всех этих защит. Чтобы отключить эти защиты, необходимо попасть в ядро. Если ты
не можешь этого сделать, ты не можешь запустить руткит. Таким образом, для
руткитов необходимы ядерные эксплойты.

Я объясню, как же на самом деле можно пробраться в ядро и как воспользоваться
его различными частями. Я покажу, что необходимо делать в ядре, где отключаются
эти функции безопасности. Большинство людей не знают, как эксплуатировать ядро.
Это краткий курс, демонстрирующий как это делается.

Ранее вы говорили, что одним из способов эксплуатации ядра iOS является
использование секретной функции. Что это?

Это отладчик ядра. В действительности он не используется. Разработчики не
должны иметь к нему доступа. Apple даже не дает нормального способа получения
доступа к нему для iOS разработчика. Он имеется в Mac OS, а в случае с iOS
просто остается в ядре. Он помогает злоумышленнику сделать эксплойт более
стабильным и облегчает его создание.

Это одобренный Apple отладчик, который используется для разработки драйверов
ядра на Mac OS. На iOS такие действия не предусмотрены, но Apple просто оставила
его внутри, возможно, полагая, что никто не сможет его использовать, по идее
необходимые для этого интерфейсы, как Ethernet и serial, не выходят "на
поверхность" из iPhone. По умолчанию, нет возможности установить связь с ним на
iPhone.

Как тогда вы получаете к нему доступ?

Если посмотреть на коннектор iPhone, там будут 2 контакта, похожих на те, что
используются для последовательной передачи данных. Какого-нибудь кабеля,
доступного всем, или чего-то, что использовало бы эти контакты, нет, но ты
можешь сделать свой кабель и передавать сигналы на iPhone по последовательному
соединению.

Значит ли это, что злоумышленник должен иметь физический доступ к iPhone,
который он хочет эксплуатировать?

Нет. Это только для разработки эксплойта. Это намного облегчает его
разработку.

Какого рода информацию предоставляет отладчик? Ту, что не получишь иными
путями?

Отладчик предоставляет тебе полный контроль над процессором в момент
эксплуатации, таким образом, ты можешь делать, что угодно. Ты можешь считывать
память, записывать память, читать регистры, изменять значения регистров. Время
разработки сократится, и больше не будет рыбалки в темноте. Это все равно что
яркий свет.

Вкратце, как происходит эксплуатация iOS устройства?

Когда ты имеешь отладчик ядра, ты начинаешь с бага в ядре. Когда имеешь баг,
первое, что необходимо сделать, это написать код триггера, который приведет к
сбою, потом ты либо анализируешь аварийный дамп, либо берешь отладчик и
пытаешься заставить программу перейти на тобой внедренный код.

Я также покажу, как при наличии heap overflow можно контролировать
расположение кучи, так что ты можешь написать эксплойт, использующий
переполнение динамически распределяемой области. Таким образом, когда ты
инициируешь переполнение буфера, ты можешь контролировать, что ты затираешь и
решить, как добиться выполнения кода в данной ситуации.

Как эти операции с iOS отличаются от работы с Unix, Linux, Windows или OS
X?

Существует много сходств, особенно между iOS и Mac OS. Во время презентации я
освещу некоторые различия, которые в некоторых случаях усложняют, а в некоторых
наоборот облегчают эксплуатацию iOS. Известно много техник, но они никогда не
применялись к iOS ранее. Существует больше доказательств, что это возможно, и
примеры, действующие на практике.

Как вы опишите эксплуатацию ядра iOS по отношению к другим? Это труднее?

Большое различие заключается в том, что iOS имеет цифровую подпись кода, так
что ты не можешь просто вставить туда какой-либо шелл-код или использовать
способ Windows — ROP [return-oriented programming] пейлоуд, который делает
память читаемой, перезаписываемой и выполняемой, и затем попасть туда. Это
невозможно в iOS. В iOS ты вынужден создавать весь эксплойт ядра на основе
возвратно-ориентированного программирования, что намного усложняет создание
истинного эксплойта.

Функции безопасности iPhone делают эксплуатацию ядра намного более трудной,
но как только ты попадаешь в ядро, внутри ядра нет никакой защиты от его
эксплуатации. Ядро предназначено для защиты пространства пользователя, но сама
ядро не имеет защиты внутри.

Если бы вы давали Apple совет, что бы вы сказали: "Удалить отладчик из iOS?"

На самом деле нет смысла держать его внутри. Я бы порекомендовал им с точки
зрения безопасности удалить его. Существуют также другие функции, которые в
действительности не используются, но упрощают разработку эксплойтов. Apple может
удалить такие моменты, что сделает эксплуатацию сложнее.

Например?

Существует функция в iOS и Mac OS, которая предоставляет некоторую информацию
о состоянии кучи. С данной информацией вся деятельность по контролю кучи
облегчается. Возможно обойтись и без этого, но с данной функцией эксплойт можно
сделать более стабильным и надежным.

Какие связи были у вас с Apple? Вы говорили с кем-нибудь в отделе
безопасности о своей работе?

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

Когда это было? Вы заинтересованы?

Сразу после того, как я выпустил первый эксплойт для джейлбрейка iPhone,
где-то в апреле. На данный момент я рассматриваю другие варианты.

Оставить мнение