Google объяснила, как шпионское ПО Pegasus удалённо взламывало iPhone
Специалистам по кибербезопасности Google Project Zero удалось получить доступ к эксплойту ForcedEntry («Принудительный вход»), при помощи которого израильская компания NSO Group получала доступ к данным в iPhone без прямого участия пользователей.
О том, что шпионское ПО этой компании успешно в течение нескольких лет следило за пользователями iOS и Android, стало известно в июле 2021 года. Тогда авторы крупного расследования о Pegasus заявляли, что целями шпионского ПО являются журналисты, активисты, предприниматели и чиновники.
Как выяснили специалисты Google Project Zero, эксплойт ForcedEntry является чуть ли не самым сложным в истории, так как содержит более 70 000 сегментных команд. Метод предназначен для взлома iPhone, однако известно, что NSO Group продаёт аналогичные программы и для Android-устройств.
Атака начинается с обычного сообщения, которое приходит в любой обычный мессенджер, например, iMessage. Чтобы отправить такое сообщение, достаточно знать лишь номер телефона или Apple ID потенциальной жертвы. Сообщение содержит GIF-файл — такого типа файлы поддерживаются iMessage.
Однако для того, чтобы «гифки» могли воспроизводиться циклично, у Apple предусмотрен специальный конвейер обработки, парсер в котором (CoreGraphics) преобразует GIF-файл в новый, а системная библиотека (ImageIO) выполняет проверку его текстового расширения — однако реальный формат не проверяется.
[IMGIFUtils copyGifFromPath:toDestinationPath:error]
Это и позволяет отправить файл, например, PDF, расширение которого изменено на .gif. Почему PDF? Потому что такой формат умеет запускать JavaScript. У Apple была предусмотрена соответствующая защита от выполнения кода с такими поддельными файлами, однако в NSO Group смогли её обойти.
Для этого в PDF-файл добавили изображения в древнем формате JBIG2, который ищет повторяющиеся символы и заменяет их одной картинкой. В процессе декомпрессии исходные данные могли искажаться из-за того, что кодировщик может путать похожие символы.
Для этого в формат добавили сжатие без потерь. JBIG2 в результате стал хранить разницу между символами. Для воссоздания первоначального изображения формат начал обращаться к использованию логических операторов по типу AND, OR, XOR и XNOR.
После тщательной обработки контекстно-зависимой части декомпрессора, злоумышленники смогли переполнить часть сегментов, перезаписать указатели, а также получить доступ к логическим операциям и выйти за пределы буфера.
Напомним, как сообщалось в июле 2021 года, при помощи Pegasus успешно были взломаны 37 смартфонов, которые принадлежат журналистам, правительственным чиновникам и правозащитникам по всему миру. Авторы расследования упомянули о списке с номерами телефонов людей, за которыми якобы велась слежка с помощью Pegasus.
Журналисты идентифицировали в нём порядка 1000 человек из более чем 50 стран, в число которых входят несколько членов арабской королевской семьи, 65 крупных бизнесменов, 85 активистов-правозащитников, 189 журналистов и более 600 политиков, в том числе несколько глав государств и премьер-министров.
Также в списке потенциальных целей для слежки с помощью Pegasus был обнаружен и телефонный номер Павла Дурова. Источник, близкий к команде Telegram, тогда рассказал «Коду Дурова», что информация о наличии номера в базе была ещё в 2018 году. Дуров позднее лично подтвердил факт наличия своего телефонного номера в базе NSO Group.