第三章:协议层攻击——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的生成流程,我用一张图来展示:
避坑指南:我曾经在测试一款支付终端时,发现它生成的UN竟然有80%的概率落在同一个数值区间。原因?随机数种子用的是毫秒级时间戳的低16位。这种漏洞在合规测试里很难被发现,但实战中就是致命伤。
3.2 交易重放攻击——同一个ARQC能用两次吗?
交易重放攻击,说白了就是攻击者截获一次合法的ARQC,然后在另一笔交易中重复使用。EMV协议设计了ATC来防止这种情况——每次交易ATC递增,ARQC的密钥也随之变化。
但理想很丰满,现实很骨感。我见过几种绕过方式:
- ATC回滚攻击:如果卡片允许写入ATC(某些老卡或测试卡),攻击者可以把ATC重置到之前的值,然后重放旧的ARQC。
- 离线交易场景:在离线模式下,终端无法实时校验ATC的单调性。攻击者可以多次提交同一笔离线交易。
- 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 实战中的组合攻击
在实际攻击中,很少有人只用单一手法。我见过最经典的组合是:
- 先通过中继攻击获取一张卡的ARQC和ATC
- 然后利用离线交易绕过,在多个终端上重放这个ARQC
- 最后通过修改终端限额,刷出远超卡片余额的金额
这种组合攻击,利用了协议层多个环节的弱点。单看每一个漏洞,似乎都不致命,但串起来就是一条完整的攻击链。
警告:不要以为EMV芯片卡就绝对安全。协议层的漏洞,往往比应用层的漏洞更难修复,因为它涉及整个生态系统的升级。我见过一些银行为了兼容老终端,十几年不更新协议版本,结果就是漏洞一直存在。
嗯,这一章的内容就到这里。协议层攻击是EMV安全的核心战场,每一个细节都值得深挖。如果你在实际工作中遇到类似问题,欢迎交流。
公众号:蓝海资料掘金营,微信deep3321