Уязвимости в iOS

image-loader.svg

Операционные системы — это сложное, многоуровневое программное обеспечение. ОС отвечает за работу памяти, периферийных устройств и всего того, к чему привыкли пользователи. Без операционной системы управление любыми вычислительными устройствами может стать достаточно тяжелой задачей. Долгое время понятие полноценной ОС было ассоциировано с ОС Windows, Linux и другими проектами, которые привычно видеть на серверах и пользовательских рабочих местах. Сегодня же операционные системы шагнули дальше и они распространились и на мобильные устройства.

Одним из примеров таких ОС является семейство iOS, которое появились в результате синтеза IPhoneOS и ОС Darwin. iOS использует достаточно уникальный подход к обеспечению безопасности. Для того, чтобы гарантировать безопасность ОС, для нее разрабатываются устройства, содержащих большое количество механизмов защиты. Программистам, которые создают программы для данных ОС, запрещается в полной мере пользоваться низкоуровневым функционалом, который доступен в системе. Поэтому они вынуждены работать с теми интерфейсами и библиотеками, которые рекомендуют сами создатели iOS. Это создает иллюзию, что при написании программного обеспечения нельзя допустить ошибок, позволяющих скомпрометировать данные пользователя или саму ОС.

На данный момент существует ограничение на установку программного обеспечения на устройства с iOS. Установка может быть осуществлена только из одного магазина — «App Store». Эта особенность породила сообщество, которое постоянно исследует новые версии ОС для того, чтобы предоставить доступ пользователям к закрытым функциям ОС. Процесс открытия такого доступа называется jailbreak.

Jailbreak — это процесс, при котором для получения привилегированного доступа используются различные уязвимости в ОС. Для разработки эксплойтов используются уязвимости как программного обеспечения iOS, так и прошивка самого железа устройств, также она может включать в себя создание bootkit-ов.

В статье будет рассказано о самых интересных уязвимостях операционной системы iOS за последние 3 года.

Статистика

Одной из отличительных особенностей операционной системы iOS является скорость выхода новых версий. Скорость не означает качество, и поэтому новые версии ОС могут существовать в beta версии несколько месяцев, а порой даже иметь несколько beta версий. За период с 2019 по 2021 год на устройствах Apple работало как минимум 5 версий ОС от 10 до 15, но это только major версии, между ними были обновление с фиксами, которые решали проблемы с работой ОС и её безопасностью.

Быстрый поиск по бюллетеням безопасности Apple показал, что количество уязвимостей в iOS снижается. Хотя их достаточно много:

image-loader.svg

Год

Количество зарегистрированных и опубликованных CVE

2019

357

2020

297

2021

216

Данные взяты со страниц support.apple. Больше половины уязвимостей, которые приведены в статистике, являются уязвимостями, приводящими к повреждению памяти. Эти уязвимости наиболее опасны, так как в оперативной памяти могут находиться данные, которые используются программами и самой ОС. Хорошо, если это будут лишь временные данные, но если это будут настройки для разграничения доступа и настройки самой ОС, то последствия могут быть непредсказуемы.

Большое количество проблем с работой с памятью в iOS не случайны. Эта операционная система использует язык программирования, который получился вследствие эволюции языка программирования C. Да, это сейчас совершенно другой язык, у него есть много механизмов защиты от ошибок, но они всё еще встречаются как в самой ОС, так и в приложениях, которые установлены в ОС по умолчанию.

Что значит уязвимость для любой ОС? Нарушение прав разграничения доступа к хранимым данным, нарушение работоспособности всей ОС. Что значит уязвимость для iOS? Нарушение работоспособности и открытие полного функционала операционной системы. Операционная система iOS славится тем, что большинство функций не предоставляется пользователю, поэтому любая уязвимость может стать трамплином для снятия всех ограничений.

Уязвимости

iOS — это ОС с закрытым исходным кодом несмотря на то, что Apple открывали часть исходников, которые относятся к ядру операционной системы. Процедура исправлений уязвимостей остается непрозрачным процессом. Бывает так, что уязвимость публикуется, под нее выпускается патч, а потом, спустя релиз, эта уязвимость снова появляется, потому что заново были отменены изменения. Так случилось с уязвимостью CVE-2018-4344. Эта уязвимость просуществовала практически 9 лет. Была запатчена (предположительно) в версии iOS iOS 11.4.2. Кстати, исправление не решило проблему, а превратило в iOS 12 Memory Leak и только в iOS 13 уязвимость была исправлена полностью.

Уязвимость находится в системном вызове lio_listio и может приводить к условию Race Condition. И, как результат, использование этой уязвимости может привести к освобождению памяти по одному и тому же адресу несколько раз, что в свою очередь приведет к UAF уязвимости.

Изначально уязвимость описывалась как Dos, который нельзя было использовать для выполнения jailbreak, но спустя время команда, которая создала один из популярных jailbreak — unc0ver, использовала модификацию уязвимости для атаки на ОС вплоть до iOS 13.

CVE-2021-1782 была исправлена после того, как было установлено, что эта уязвимость используется злоумышленниками для атаки на пользовательские устройства. О деталях атак ничего неизвестно, команда unc0ver сообщила, что использует уязвимость для jailbreak всех версий ОС вплоть до iOS 14.3.

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

Именно в этом режиме и была найдена уязвимость, которая не может быть исправлена программно. Уязвимость была добавлена в набор инструментов, который называется checkm8. Для использования этого эксплойта нужно иметь физический доступ к устройству. Этот метод стал одним из ключевых для создания другого атуального jailbreak — checkra1n.

Выводы

Даже операционные системы, которые проектируются как защищенные, могут быть атакованы с использованием программных и аппаратных уязвимостей. Об этом стоит помнить при разработке программного обеспечения для этой ОС, поскольку как только приложение попадет на устройство с jailbreak, то обратная разработка алгоритма будет лишь вопросом времени. Поэтому нужно следовать всем рекомендациям безопасного программирования и использовать Best Practicies для использования платформы.

Перевод статьи подготовлен в преддверии старта специализации «iOS Developer».

Также приглашаем всех желающих на бесплатный вебинар по теме: Новые инструменты Swift, для работы с асинхронностью Async/Away/Actor

© Habrahabr.ru