第三章:协议层攻击——ARQC生成机制、交易重放攻击、中间人攻击与离线授权绕过

协议层攻击,说白了就是欺负EMV协议在设计时留下的“小漏洞”。我做了这么多年安全,发现一个规律:越是复杂的协议,越容易在交互细节上出问题。EMV的芯片卡和终端之间,要来回握手、校验、加密,每一步都可能被攻击者钻空子。

这一章,我挑四个最经典的攻击面来讲:ARQC生成机制、交易重放、中间人攻击(中继攻击)、离线交易授权绕过。嗯,每一个我都亲手复现过,踩过的坑也不少。

3.1 ARQC生成机制——动态签名的“阿喀琉斯之踵”

ARQC(Application Request Cryptogram)是EMV交易中最重要的安全元素。它本质上是芯片对交易数据的一个数字签名,用来证明“这笔交易是这张卡在此时此地发起的”。

但ARQC的生成,依赖几个关键输入:

  • ATC(应用交易计数器):每次交易递增,防止重放
  • UN(不可预测数):终端生成的随机数
  • 交易金额、货币代码、交易类型等
  • 会话密钥(Session Key):由卡片主密钥和ATC派生

这里有个关键点:UN(不可预测数)是由终端生成的。你想想看,如果终端被篡改,或者攻击者能控制UN,会发生什么?

核心漏洞:如果攻击者能预测或控制UN,就可以提前计算ARQC,从而实现交易重放或伪造。

我在项目中遇到过一种情况:某款POS终端固件存在漏洞,UN生成算法使用了弱随机数(比如基于时间戳的低位)。攻击者只要抓取一次交易,就能推算出后续的UN序列。嗯,这相当于把门锁的密码写在了门上。

ARQC的生成流程,我用一张图来展示:

ARQC生成与验证流程 芯片卡 主密钥 MK ATC = N 终端/POS 生成 UN 金额、货币等 ① UN + 交易数据 ② ARQC = MAC(UN||金额||ATC) 发卡行后台 验证 ARQC ③ 转发 ARQC + 交易数据 ④ ARPC(响应)

避坑指南:我曾经在测试一款支付终端时,发现它生成的UN竟然有80%的概率落在同一个数值区间。原因?随机数种子用的是毫秒级时间戳的低16位。这种漏洞在合规测试里很难被发现,但实战中就是致命伤。

3.2 交易重放攻击——同一个ARQC能用两次吗?

交易重放攻击,说白了就是攻击者截获一次合法的ARQC,然后在另一笔交易中重复使用。EMV协议设计了ATC来防止这种情况——每次交易ATC递增,ARQC的密钥也随之变化。

但理想很丰满,现实很骨感。我见过几种绕过方式:

  1. ATC回滚攻击:如果卡片允许写入ATC(某些老卡或测试卡),攻击者可以把ATC重置到之前的值,然后重放旧的ARQC。
  2. 离线交易场景:在离线模式下,终端无法实时校验ATC的单调性。攻击者可以多次提交同一笔离线交易。
  3. UN碰撞攻击:如果终端生成的UN重复,且ATC相同,ARQC就会完全一样。

警告:不要以为ARQC是动态的就万事大吉。我见过一个真实案例:某支付系统在离线模式下,终端只校验ARQC的格式是否正确,却不校验ATC是否递增。结果攻击者用同一张卡、同一个ARQC,在多个离线终端上刷了上百次。

为什么会这样?因为离线模式下,终端没有实时连接发卡行,无法验证“这个ATC是否已经被用过”。它只能相信卡片提供的ARQC是合法的。你想想看,这相当于让小偷自己登记偷了多少钱。

3.3 中间人攻击(中继攻击)——让卡片和终端“互相欺骗”

中继攻击是协议层攻击里最“优雅”的一种。攻击者不需要破解密钥,也不需要篡改卡片,只需要在卡片和终端之间插入一个“代理”,实时转发数据。

具体怎么做?

  • 攻击者A拿着一个“假终端”靠近受害者的卡片
  • 攻击者B拿着一个“假卡片”靠近真实的POS终端
  • A和B之间通过无线(Wi-Fi/蓝牙/4G)实时通信
  • 假终端把真实终端的指令转发给真卡,再把真卡的响应转发回真实终端

结果就是:真实终端以为自己刷的是攻击者的卡,但实际上刷的是受害者的卡。交易金额、时间、地点都可以被攻击者控制。

关键点:中继攻击不破坏任何密码学算法,它只是“延长”了通信距离。EMV协议本身没有设计“距离绑定”机制,所以无法区分是正常交易还是中继攻击。

我记得有一次在实验室里复现这个攻击,最让我头疼的不是协议本身,而是延迟。EMV对响应时间有严格限制(通常几百毫秒),如果中继链路延迟太高,交易就会超时失败。后来我们优化了通信协议,把延迟压到了50ms以内,才成功复现。

3.4 离线交易授权绕过——当“信任”变成漏洞

离线交易是EMV为了应对网络不可用场景而设计的。在离线模式下,终端不连接发卡行,而是依靠卡片自身的判断来授权交易。

但离线授权的安全性,完全取决于卡片和终端的本地配置。我见过几种典型的绕过方式:

攻击方式 原理 实战案例
修改终端限额 离线交易有金额上限(如500元),攻击者修改终端配置可绕过 某加油站POS被物理篡改,离线限额被改为999999
降级攻击 强制终端使用离线模式,即使网络可用 攻击者屏蔽终端网络,触发离线回退
伪造终端证书 离线模式下终端不验证卡片证书,攻击者可用假卡 某公交支付系统被伪造卡片刷爆
跳过CDA(Combined DDA/AC) 某些终端不强制校验CDA,攻击者可绕过卡片认证 老款POS固件存在此漏洞

避坑指南:我曾经帮一家支付机构做渗透测试,发现他们的离线终端竟然允许“无限次离线交易”。原因是终端固件里写死了“如果网络不可用,就无限提高离线限额”。我当时的建议是:要么限制离线交易次数,要么强制每次离线交易后必须联机结算。

离线交易授权绕过,本质上是一个“信任边界”的问题。EMV协议假设终端和卡片都是可信的,但攻击者一旦能物理接触终端,或者能伪造卡片,这个假设就不成立了。

3.5 实战中的组合攻击

在实际攻击中,很少有人只用单一手法。我见过最经典的组合是:

  1. 先通过中继攻击获取一张卡的ARQC和ATC
  2. 然后利用离线交易绕过,在多个终端上重放这个ARQC
  3. 最后通过修改终端限额,刷出远超卡片余额的金额

这种组合攻击,利用了协议层多个环节的弱点。单看每一个漏洞,似乎都不致命,但串起来就是一条完整的攻击链。

警告:不要以为EMV芯片卡就绝对安全。协议层的漏洞,往往比应用层的漏洞更难修复,因为它涉及整个生态系统的升级。我见过一些银行为了兼容老终端,十几年不更新协议版本,结果就是漏洞一直存在。

嗯,这一章的内容就到这里。协议层攻击是EMV安全的核心战场,每一个细节都值得深挖。如果你在实际工作中遇到类似问题,欢迎交流。


公众号:蓝海资料掘金营,微信deep3321