G.O.S.S.I.P 阅读推荐 2026-09-18 复活吧,僵尸银行卡!

· 2026-09-18 20:59 · 1 阅读

原创 G.O.S.S.I.P 2026-09-18 20:59 上海

捡一张过期的银行卡,然后挥霍一空~

大概是半年前,在知乎上看到公交地铁爱好者讨论关于上海地铁龙阳路磁悬浮的帖子里面有人提到有一个漏洞——可以用那种过期但是支持NFC的银行卡去乘磁悬浮,按照扣费逻辑,刷卡机当时并不会立即结算,而是要等到乘客出站之后一段时间再去和银行清单,但这时候发现卡过期了已经晚了:正常情况下你可以冻结这个账号,可人家本来就是个过期的银行卡,也无所谓冻结不冻结了。

来到今年的USENIX Security,来自美国的研究人员同样把关注点聚焦到了过期的非接触式银行卡上,他们调查了收款商、银行、POS机和银行卡的整体支付流程中的细节,揭示了在某些情况下使用过期的非接触式银行卡(信用卡)依然能成功消费的安全漏洞:

先来看一段视频:

在视频中,一张本已过期两年的卡,在正常情况下刷卡会被拒绝,但是只要用了一个中转设备(实施了经典的relay attack)就能成功支付,这究竟是为什么?

上图是银行卡的“御三家”(Europay、Mastercard、Visa,合称EMV)常见的(非接触)银行卡收款流程,银行卡(或者集成在手机中的Secure Element)首先要通过近距离通信和POS终端完成一系列的交互,然后把一些交互数据藉由POS机发送给收单方,收单方拿到数据再把它转发给银行,确认支付信息,最终完成交易。这里面最大的安全问题来自银行卡与POS机之间的数据交互:作者研究发现,在银行卡和POS机之间的数据交互过程中,并非所有数据都得到了严格的密码学安全防护,攻击者正是利用了这一弱点,通过在银行卡和POS机之间搭建中转站(这个词放在今天很应景啊)来转发数据并实施中间人攻击(如下图所示),就可以完成特定的安全攻击。

具体落到今天论文的研究场景——过期银行卡的使用,本文的作者发现,在银行卡与POS机进行交互的过程中(具体的协议如下图所示),有一部分数据是需要银行卡通过内置的密钥来进行处理,保证其机密性和完整性。

但是,像“银行卡有效期”这个信息,对于不同的卡以及其对应的收单流程(每种银行卡对应的收单流程,在卡片这一侧有一个特定的模组与之对应,文中称为Kernel),对待银行卡有效期的处理态度也不尽相同。作者调研了多组不同的Kernel,最后把目光锁定在了Visa对应的Kernel上。

不知道出于什么原因,在Visa卡实际使用的Kernel中,存在非常多的小毛病,这些小毛病组合起来就产生了严重的后果:首先,在交易过程中,银行卡有效期并不是需要进行签名保护的,而只是在收款流程中简单地要求POS机进行检查;而且在实际的数据内容里面,包含了两个不同的字段,都指向“银行卡有效期”,这两个字段如果不一致,其他的一些银行卡机构(比如Mastercard)可能会拒绝交易,但是Visa这边可能是出于一些考虑,还引入了一个额外的验证——即使本地检查失败,银行卡还可以要求POS机去请求远程服务器执行一次额外的检查,并以远程服务器的检查结果为最终结果(嗯,引入了VAR);最后,银行卡里面用来验证远程回复数据的数字证书的有效期往往超过了银行卡本身的有效期,如果一张银行卡有效期已过,但是里面包含的数字证书有效期还没到,这张银行卡就会傻乎乎地继续执行交易数据交互,而无视“自己已经过期”这一事实。

作者基于上面的分析,提出了“僵尸卡攻击”(Zombie Card Attack),这种攻击利用了银行卡和POS机之间的数据可以被攻击者进行中间人篡改的特性,修改了数据交互中的一个而不是全部两个银行卡有效期字段,这个被修改的字段使得攻击者绕过了POS机的检查,而另一个(因为完整性保护)没法修改的字段并没有让交易中断,而是触发了二次验证,此时由于银行卡中包含的证书还有效,银行卡也还能接收远程服务器的验证信息并继续交易。最为重要的是,用过信用卡的同学们都知道,信用卡过期了以后更换的新卡,卡号一般来说都不换的,也就暗示用户账户是和原来保持一致的,因此用一张旧的卡片触发的交易,指向的账户其实大概率是还能用的,这样就帮助攻击者执行了非法交易。

作者对三家银行的不同卡片进行了测试(除了Visa用的Kernel 3,还有Discover用的Kernel 6进行了对照),测试结果表明,过期的Visa卡(假设你捡到了一张别人扔掉的过期卡)确实是可以被用来在不同的交易场景和交易金额中“复活”的:

最后作者也探讨了一下导致这个问题的可能原因:比如Visa很可能会更重视卡片的兼容性,考虑到那种忘记在信用卡到期后及时换新卡的用户(嗯,说的就是我们),可能会一定程度上允许共享同一个支付账户的新卡和旧卡都同时支持交易。作者也顺便讨论了一下现在的手机数字钱包(嘿嘿老外并不知道支付宝和微信支付吧),说现在的数字钱包都很安全,因为它们更新有效期和数字证书都只需要在线升级一下就好,也许这种万恶的实体卡才是漏洞的根本原因吧!


论文:https://www.usenix.org/system/files/usenixsecurity26-anwar.pdf

跳转微信打开