Атака Pixnapping, определяющая содержимое экрана для перехвата 2FA-кодов в Android

Группа исследователей из четырёх американских университетов разработала технику атаки Pixnapping (CVE-2025-48561), позволяющую из непривилегированных Android-приложений, не запрашивающих дополнительных полномочий, определить содержимое, выводимое на экран другими приложениями. В качестве примера практического применения атаки продемонстрировано определение кодов двухфакторной аутентификации, показываемых приложением Google Authenticator. Так же показано как можно применить атаку для извлечения конфиденциальных данных, выводимых на экран при работе с Gmail, Signal, Venmo и Google Maps.

Для определения содержимого экрана задействован метод попиксельного анализа, реализованный в 2023 году той же командой исследователей в атаке по сторонним каналам GPU.zip и впервые описанный ещё в 2013 году. Суть метода в том, что из-за присутствующих в GPU оптимизаций, отрисовка пикселя с цветом, повторяющим уже выведенный на экран цвет, выполняется быстрее, чем пикселя с иным цветом. Оценивая разницу во времени при отрисовке пикселей можно воссоздать уже имеющееся на экране содержимое и сформировать подобие скриншота.

Атака Pixnapping сводится к вызову целевого приложения, выводу поверх него своего окна и попиксельному перебору содержимого с анализом времени выполнения графических операций над каждым пикселем. Подобный перебор позволяет с высокой вероятностью определить, какие пиксели имеют белый цвет фона, а какие участвуют в отображении символов. Для скрытия манипуляций с пикселями от пользователя производится наложение слоёв с масками – во время атаки визуально на экране продолжает показываться содержимое окна приложения, из которого производится атака.

Для активации атакуемого приложения и попадания пикселей из его окна в конвейер отрисовки осуществляется переключение между Android-активностями при помощи intent-запросов. Поверх окна атакуемого приложения отображаются полупрозрачные окна, выделяющие отдельные пиксели и инициирующие выполнение с ними графических операций при помощи API Window Blurs. Для измерения точного времени отрисовки пикселя применяются callback-вызовы, привязанные к VSync.


Ограничением ранее предложенного метода GPU.zip была низкая производительность – при атаке на браузер определение имени, под которым пользователь в другой вкладке вошёл в Wikipedia, требовало 30 минут на GPU AMD Ryzen 7 4800U и 215 минут на GPU Intel i7-8700 при точности 97-98%. Для того, чтобы уложиться в 30-секундный интервал обновления кодов в Google Authenticator метод был усовершенствован и оптимизирован. Число проверок каждого пикселя было сокращено с 64 до 16, а задержка между обработкой пикселей уменьшена с 1.5 секунд до 70 миллисекунд. Сканирование производилось не всего экрана, а только области, в которой Google Authenticator показывает код.

Метод был опробован на смартфонах Pixel 6, 7, 8 и 9 с версиям Android 13-16 для определения ста шестизначных кодов двухфакторной аутентификации, сгенерированных в Google Authenticator. Точность определения кодов на отмеченных смартфонах составила 73%, 53%, 29% и 53%, а время определения – 14.3, 25.8, 24.9 и 25.3 секунд, соответственно. На смартфоне Samsung Galaxy S25 исследователям не удалось уложиться в 30-секундный интервал из-за шума, вносимого работой других приложений, но на устройстве были показаны варианты атаки на другие приложения, для которых не было ограничений по времени. Используемые в атаке механизмы не специфичны для отдельных моделей смартфонов и атака потенциально затрагивает любые Android-устройства.

Компания Google в сентябрьских патчах уязвимостей добавила в Android начальную защиту от атаки, основанную на запрете применения операции размытия к большому числу слоёв. В ответ исследователи нашли возможность обойти данное ограничение, поэтому Google планирует реализовать более полную защиту в декабрьском обновлении Android. Производители GPU пока не объявляли о намерении устранить канал утечки, несмотря на то, что метод атаки известен уже более 12 лет.

Release. Ссылка here.