4、应用层攻击:应用选择与冲突、DDOS攻击、脚本环境攻击、卡片锁定绕过

各位同行,咱们今天聊点真刀真枪的东西。应用层攻击,说白了就是攻击者跟卡片上的应用“斗智斗勇”。EMV标准里,卡片可以装多个应用,比如信用卡、借记卡、电子钱包。这个设计初衷是好的,但漏洞也随之而来。我这些年做攻防,发现应用层往往是“灯下黑”的重灾区。

核心观点:应用层攻击不依赖物理破解,而是利用EMV协议交互中的逻辑缺陷。攻击者不需要拆卡,只需要一个改装的终端和一张普通卡片。

4.1 应用选择与冲突攻击

先说说应用选择。卡片启动后,终端会发一个SELECT命令,让卡片选一个应用。正常情况下,卡片会返回一个应用标识符(AID)。但问题来了——如果卡片同时支持多个应用,终端该选哪个?

我记得有一次做渗透测试,客户说他们的POS机“偶尔会刷错卡”。我一看日志就笑了。这不是硬件问题,是应用选择逻辑有坑。攻击者可以伪造一个高优先级的应用,让终端误以为这是一张“高级卡”,从而绕过交易限额检查。

攻击手法:应用优先级劫持

  • 原理:卡片返回的应用列表里,优先级最高的应用会被终端选中。攻击者可以修改卡片返回的AID列表,把低安全等级的应用排到最前面。
  • 实战场景:我见过一个案例,攻击者把一张普通借记卡的应用优先级改成“电子现金”应用。结果POS机直接允许了免密交易,单笔限额从500块变成了2000块。
  • 防御思路:终端侧必须做应用白名单校验。别信卡片返回的优先级,终端自己要有硬编码的优先级规则。

避坑指南:我曾经在测试中遇到一个终端,它只检查应用列表的第一个AID。攻击者只要把恶意AID放在第一位,后面的校验全白费。所以,我建议终端开发者:遍历所有AID,逐个校验,别偷懒。

应用冲突攻击

这个更阴险。攻击者让卡片同时返回两个冲突的应用,比如一个要求联机认证,一个要求脱机认证。终端处理冲突时,往往会“二选一”,但选错就可能出大问题。

你想想看,如果终端选了脱机认证的应用,那交易就不需要联机授权了。攻击者可以刷爆卡,银行事后才发现。嗯,这里要注意:冲突攻击的核心是让终端陷入“选择困难”,然后利用终端的默认策略。

警告:应用冲突攻击在旧版EMV终端上成功率极高。我建议所有终端升级到EMV 4.3以上规范,并强制要求终端在冲突时拒绝交易,而不是“随便选一个”。

4.2 DDOS攻击:让POS机“死机”

DDOS攻击在应用层也很常见。攻击者不是要盗刷,而是要让终端无法正常工作。比如,在商场收银高峰期,攻击者用一张特制卡片让POS机卡死,收银员只能重启机器,排队的人怨声载道。

我个人习惯把应用层DDOS分为两类:

攻击类型 手法 影响
命令洪泛 卡片持续发送无效命令,让终端CPU满载 POS机响应延迟,甚至死机
数据包畸形 卡片返回超长或格式错误的数据 终端解析异常,崩溃或重启
会话保持 卡片不释放会话,让终端一直等待 终端无法处理下一笔交易

我在项目中遇到过一种“慢速DDOS”。攻击者不是一次性发大量数据,而是每隔几秒发一个字节,让终端一直处于“等待接收”状态。POS机的超时机制如果设置不当,就会一直卡在那里。收银员只能拔电源重启。

防御要点:终端必须实现严格的超时机制。我建议:单条命令响应超时设为5秒,整个交易流程超时设为30秒。超时后直接终止会话,释放资源。

4.3 脚本环境攻击

脚本环境,是EMV里一个很“黑”的地方。终端可以下发脚本给卡片执行,比如更新密钥、修改限额。但脚本的执行环境如果不够安全,攻击者就能注入恶意脚本。

说白了,脚本环境攻击就是“让卡片执行不该执行的操作”。我记得有一次,一个客户说他们的卡片“莫名其妙”被锁了。我逆向分析后发现,是攻击者通过终端下发了一个“锁定脚本”,把卡片上的应用锁死了。

常见脚本攻击手法

  1. 脚本注入:攻击者伪造终端,下发恶意脚本。卡片如果不校验脚本来源,就会乖乖执行。
  2. 脚本重放:攻击者截获一个合法的脚本,然后重复下发。比如,一个“修改PIN”的脚本被重放多次,攻击者就能把PIN改成自己知道的。
  3. 脚本越权:脚本本应只操作某个应用,但攻击者让脚本操作了其他应用的数据。

避坑指南:我曾经在测试中发现,有些卡片根本不校验脚本的“应用标识符”。攻击者下发一个针对应用A的脚本,卡片却允许它修改应用B的数据。所以,我建议卡片开发者:脚本执行前,必须校验脚本的AID与当前选中应用是否一致。

脚本环境的安全设计

好的脚本环境应该做到三点:

  • 来源认证:脚本必须由可信的终端或发卡行签名。
  • 完整性校验:脚本内容不能被篡改。
  • 执行沙箱:脚本只能在限定的内存区域执行,不能访问敏感数据。

嗯,这里要注意:很多低成本卡片为了省成本,跳过了脚本签名校验。这种卡片在攻击者眼里就是“裸奔”。

4.4 卡片锁定绕过

卡片锁定,是银行最后的防线。如果PIN输错太多次,卡片就锁了,不能再交易。但攻击者总有办法绕过。

我见过最经典的绕过手法是“应用切换”。卡片锁了应用A,但攻击者切换到应用B。应用B没有锁定机制,可以继续交易。你想想看,银行只锁了应用A,但卡片上还有应用B、C、D……攻击者挨个试,总有一个没锁。

绕过手法详解

手法 原理 防御
应用切换 锁定只针对单个应用,切换其他应用即可 全局锁定:锁定整个卡片,而非单个应用
脱机PIN绕过 攻击者使用脱机认证,不校验联机PIN 强制联机PIN校验,不允许脱机交易
重置计数器 攻击者通过脚本重置PIN错误计数器 脚本执行前必须验证终端权限

我记得有一次,一个客户说他们的卡片“锁不住”。我一看,卡片上装了5个应用,每个应用都有自己的PIN计数器。攻击者输错3次应用A,换应用B继续输错。5个应用,总共可以输错15次。银行只锁了应用A,其他4个应用还是活的。

警告:卡片锁定绕过是“设计缺陷”,不是“实现漏洞”。我建议发卡行在设计卡片时,采用“全局锁定”机制。只要有一个应用被锁,整个卡片的所有应用都不可用。别给攻击者留“后门”。

知识体系图:应用层攻击全景

应用层攻击知识体系 应用层攻击 应用选择与冲突 DDOS攻击 脚本环境攻击 卡片锁定绕过 优先级劫持 应用冲突 命令洪泛 数据畸形 脚本注入 脚本重放 应用切换 PIN绕过 四大攻击方向:应用选择、DDOS、脚本环境、锁定绕过

这张图把应用层攻击的四个方向串起来了。你仔细看,每个分支都有自己独特的攻击手法和防御策略。但核心思想是一样的:攻击者利用的是EMV协议交互中的“信任盲区”。

好了,这一章的内容就到这儿。记住,应用层攻击不需要高端设备,一张卡片、一个改装的终端就能搞。防御的关键在于:别信卡片说的每一句话,终端要有自己的判断逻辑。

专注资料整理