Исследователи из Google Project Zero обнаружили разработанный израильской компанией NSO Group эксплойт для iOS, позволявший получить доступ к устройству и его данным. Для его запуска достаточно отправить на устройство жертвы файл с расширением GIF, который формирует в памяти гаджета виртуальный компьютер из более чем 70 тысяч логических вентилей.
NSO Group специализируется на разработке шпионского программного обеспечения Pegasus, позволяющего взламывать смартфоны на iOS и Android. После взлома злоумышленники могут получать со смартфона данные с микрофона и камеры, пароли и другую конфиденциальную информацию. Особенность Pegasus среди прочего заключается в том, что оно, как правило, работает с актуальными версиями программного обеспечения благодаря тому, что разработчики NSO постоянно исследуют операционные системы на предмет уязвимостей и разрабатывают сложные схемы их эксплуатации. Так, в 2016 году исследователи из The Citizen Lab обнаружили эксплойт в виде SMS с ссылкой, просто кликнув на которую жертва, не зная того, запускала взлом.
Теперь исследователи из Google Project Zero обнаружили новую атаку от NSO, которая, во-первых, вообще не требует действий от жертвы и работает в фоне, а во-вторых, устроена очень необычным образом. Новый эксплойт работает через сообщения в iMessage. Для запуска атаки злоумышленнику необходимо отправить на смартфон жертвы файл с расширением GIF. Для того, чтобы анимация была зацикленной, iMessage берет исходный файл и рендерит в новый файл эту же анимацию, но с пометкой о повторном проигрывании. На самом деле вместо GIF-файла злоумышленник, использующий эксплойт, присылает на устройство файл PDF, который и пытается рендерить компонент iMessage.
В PDF-файле находится JBIG2-поток. JBIG2 — это старый стандарт сжатия бинарных изображений, часто применявшийся ранее в сканерах и факсах. Для эффективного сжатия сканов с потерями он использует распознавание похожих форм. К примеру, он может найти одну и ту же букву во всем тексте и вместо того, чтобы хранить информацию о всех, просто запомнить одну и на местах остальных ссылаться на нее. В JBIG2 есть и возможность сжатия без потерь. При таком режиме в файл записывается одно полное изображение символа и не только ссылки на него, но и разница — то есть те пиксели, которые нужно добавить или вычесть из этого образцового изображения. Важная деталь этого метода заключается в том, что разница вычисляется отдельными шагами с помощью логических операторов НЕ, И, ИЛИ и исключающего ИЛИ (XOR).
Разработчики из NSO нашли уязвимость, позволяющую получить доступ к чтению и записи в любые участки памяти, но для нормальной работы эксплойта ему нужно узнать смещения адресов в памяти. И на этом этапе происходит то, за что исследователи из Project Zero назвали эксплойт «невероятным» и «одним из самых технически сложных» за их карьеру: разработчикам из NSO удалось реализовать с помощью базовых логических операций при накладывании разницы в JBIG2-потоке полный по Тьюрингу виртуальный компьютер из более чем 70 тысяч логических вентилей. На этом виртуальном компьютере выполняется код для поиска смещений памяти и побега из песочницы, который в свою очередь фактически дает злоумышленнику полный доступ к устройству, в том числе к запуску произвольного кода.
Специалисты из Google Project Zero заранее проинформировали Apple о своей находке, поэтому компания исправила описанную уязвимость 13 сентября в iOS 14.8.
Это не первая крупная атака на iOS, которую нашли исследователи из Project Zero. В 2019 году они рассказали об обнаружении группы сайтов, которые устанавливали на смартфоны жертв программу, получавшую root-права и загружавшую конфиденциальные данные на сервера злоумышленников. Примечательно, что неизвестные создатели сайтов несколько раз модифицировали эксплойты, поэтому они работали с актуальными версиями iOS на протяжении более чем двух лет.
Григорий Копиев