新型攻击让黑客能从安卓手机窃取双重验证码
安卓设备存在新型攻击漏洞,可在30秒内秘密窃取双重验证码、位置时间线和其他私人数据。
这项名为Pixnapping的攻击由学术研究团队开发,需要受害者首先在安卓手机或平板电脑上安装恶意应用。该应用无需系统权限即可有效读取其他已安装应用在屏幕上显示的数据。Pixnapping已在谷歌Pixel手机和三星Galaxy S25手机上验证有效,经过修改后可能适用于其他型号。谷歌上月发布了缓解措施,但研究人员表示修改后的攻击版本在安装更新后仍然有效。
如同截取屏幕截图
Pixnapping攻击始于恶意应用调用安卓编程接口,导致验证器或其他目标应用将敏感信息发送到设备屏幕。然后恶意应用对攻击者感兴趣的单个像素运行图形操作。Pixnapping利用侧信道,允许恶意应用将这些坐标的像素映射为字母、数字或形状。
研究人员在信息网站上写道:“目标应用打开时可见的任何内容都可能被恶意应用使用Pixnapping窃取。聊天消息、2FA代码、电子邮件等都容易受到攻击,因为它们是可见的。如果应用有不可见的秘密信息(例如存储但从未显示在屏幕上的密钥),则该信息无法被Pixnapping窃取。”
这种新型攻击让人联想到GPU.zip,这是2023年的一种攻击,允许恶意网站读取其他网站显示的用户名、密码和其他敏感视觉数据。它通过利用所有主要供应商GPU中的侧信道工作。GPU.zip利用的漏洞从未修复。相反,浏览器通过限制打开iframe的能力来阻止攻击,iframe是一种HTML元素,允许一个网站(在GPU.zip的情况下是恶意网站)嵌入来自不同域的网站内容。
Pixnapping针对与GPU.zip相同的侧信道,特别是给定帧在屏幕上渲染所需的确切时间。
研究报告《Pixnapping:将像素窃取带出石器时代》的主要作者Alan Linghao Wang在采访中解释:“这允许恶意应用逐像素窃取其他应用或任意网站显示的敏感信息。从概念上讲,就好像恶意应用正在截取它不应该访问的屏幕内容。我们的端到端攻击简单地测量每个图形操作帧的渲染时间,以确定像素是白色还是非白色。”
Pixnapping的三个步骤
攻击发生在三个主要步骤中。第一步,恶意应用调用安卓API,向攻击者想要窥探的应用发出调用。这些调用还可用于有效扫描受感染设备以查找感兴趣的已安装应用。调用还可以导致目标应用显示其有权访问的特定数据,例如消息应用中的消息线程或特定站点的2FA代码。此调用导致信息发送到安卓渲染管道,这是获取每个应用像素以便在屏幕上渲染的系统。进行的安卓特定调用包括活动、意图和任务。
第二步,Pixnapping对目标应用发送到渲染管道的单个像素执行图形操作。这些操作选择应用想要窃取的目标像素坐标,并开始检查这些坐标的颜色是白色还是非白色,或者更一般地说,颜色是c还是非c(对于任意颜色c)。
Wang说:“例如,假设[攻击者]想要窃取作为Google Authenticator已知渲染2FA字符的屏幕区域一部分的像素。该像素要么是白色(如果那里没有渲染任何内容),要么是非白色(如果渲染了2FA数字的一部分)。然后,从概念上讲,攻击者希望导致一些图形操作,其渲染时间在目标受害者像素为非白色时较长,在白色时较短。恶意应用通过在步骤1中打开的受害者应用前面打开一些恶意活动(即窗口)来实现这一点。”
第三步测量每个坐标所需的时间量。通过结合每个坐标的时间,攻击可以一次一个像素地重建发送到渲染管道的图像。
正如Ars读者hotball在下方评论中所说:“基本上,攻击者在目标应用前面渲染一些透明内容,然后使用定时攻击利用GPU的图形数据压缩来尝试找出像素的颜色。这不像‘给我现在屏幕上显示的其他应用的像素’那么简单。这就是为什么它需要时间,并且可能太慢而无法适应Google Authenticator应用的30秒窗口。”
在在线采访中,论文合著者Ricardo Paccagnella更详细地描述了攻击:
步骤1:恶意应用调用目标应用导致一些敏感视觉内容被渲染。 步骤2:恶意应用使用安卓API“覆盖”该视觉内容,并导致侧信道(在我们的案例中为GPU.zip)作为步骤1中渲染的单个像素颜色的函数泄漏(例如,仅在像素颜色为c时激活)。 步骤3:恶意应用监控步骤2的副作用以推断,例如,那些像素的颜色是否为c,一次一个像素。
步骤2和3可以根据攻击者想要利用的侧信道以不同方式实现。在我们对谷歌和三星手机的实例中,我们利用了GPU.zip侧信道。当使用GPU.zip时,测量每帧的渲染时间足以确定每个像素的颜色是否为c。攻击的未来实例可能使用其他侧信道,其中控制内存管理和访问细粒度计时器可能是必要的(参见论文第3.3节)。Pixnapping那时仍然有效:攻击者只需要改变步骤2和3的实现方式。
执行攻击所需的时间量取决于几个变量,包括需要测量的坐标数量。在某些情况下,获取攻击者想要窃取的信息没有严格的截止日期。在其他情况下——例如窃取2FA代码——每一秒都很重要,因为每个代码仅在30秒内有效。研究人员在论文中解释:
“为了满足攻击的严格30秒截止时间,我们还将每个目标像素的样本数减少到16个(与早期攻击中使用的34或64相比),并将像素泄漏之间的空闲时间从1.5秒减少到70毫秒。为确保攻击者有完整的30秒来泄漏2FA代码,我们的实现等待新的30秒全局时间间隔的开始,使用系统时钟确定…我们使用端到端攻击从每台谷歌Pixel手机上的Google Authenticator泄漏100个不同的2FA代码。我们的攻击在Pixel 6、7、8和9上的试验中分别正确恢复了完整6位2FA代码的73%、53%、29%和53%。恢复每个2FA代码的平均时间对于Pixel 6、Pixel 7、Pixel 8和Pixel 9分别为14.3、25.8、24.9和25.3秒。由于显著噪声,我们无法在30秒内使用我们在三星Galaxy S25设备上的实现泄漏2FA代码。我们将如何调整我们的攻击以在此设备上工作留给未来工作。”
在电子邮件中,谷歌代表写道:“我们在9月安卓安全公告中发布了CVE-2025-48561的补丁,部分缓解了此行为。我们将在12月安卓安全公告中发布此漏洞的额外补丁。我们未发现任何野外利用的证据。”
Pixnapping是有用的研究,因为它证明了谷歌安全和隐私保证的局限性,即一个已安装的应用无法访问属于另一个应用的数据。然而,在现实世界场景中实施攻击以窃取有用数据的挑战可能很大。在青少年只需简单询问就能从财富500强公司窃取秘密的时代,更复杂和有限的攻击的效用可能价值较小。