摘要
在数百万张EMV实体卡中对从0000到9999的所有10000个PIN组合进行暴力破解是可能的。这种攻击可以通过恶意利用经验不足的发卡行商业惯例来重置 PIN 重试计数器 (PIN
RETRY Counter,PRC) 或恶意利用经典的“Plain PIN by ICC”验证方法来实现。目前存在一种有损害风险的行为,即,当发卡行使用授权响应码 ( Authorization Response Code,ARC)进行响应并生成交易证书 (Transaction Certificate,TC) 应用程序密码时,即使卡没有正常完成交易,也会重置 PIN 重试计数器。 由于无法区分卡的所有者和恶意个人,PIN被泄露可能会导致更大的欺诈交易,因为这(使得恶意攻击者)有能力规避发行方反欺诈算法机制。
引言
持卡人验证(CVM)是一种在用户尝试使用结合接触式的Europay、Mastercard、Visa(EMV)智能卡时用于验证交易是否正确的机制。这些验证值通过存储在集成电路卡(Integrated Circuit Card,ICC) 中的有序列表来确定优先级。
终端或PoS必须确定该卡应当应用哪一个CVM。为了实现这种通信,卡和终端通过由ISO 7816应用层标准化的应用协议数据单元 (Application Protocol Data
Unit,APDU) 协议交换消息。终端向卡发送命令,这也称为TPDU或终端APDU命令;然后卡将处理每个命令并回复其响应。在结合接触式交易中,CVM是在8E标签容器中指定的每个终端命令或卡片响应都必须遵循特定的结构格式(见图1)
通过按照特定的逻辑规则来处理交易,终端和EMV智能卡将共享信息并决定交易是被授权还是被拒绝。其中一个最重要的流程就是验证。
异常持卡人验证(Cardholder Verification Methods,CVM)
EMV卡通常通过根据“1PAY.SYS.DDF01”文件中的列表来选择应用程序并进行初始化。然后,记录读取进程将获得详细的卡信息,例如:主帐号、有效期或数字签名等信息。这个进程将在多个不同步骤中持续进行,在这些步骤中,卡和终端共享同一个根密钥来处理交易。卡认证进程之后,将进入PIN验证阶段。CVM列表会确定首先应用哪个规则以及用于验证交易的顺序。如果某个规则由于某种原因无法应用,将根据终端技术找到下一个规则顶替。智能卡记录包含 CVM 列表,(该响应来自附录A-终端命令21的响应):
要解析该信息,必须使用类型-长度-值或标签-长度-值(type-length-value or tag-length-value,TLV)机制对其进行解码。
为了(让读者)理解CVM列表,(我们)有必要分解每种方法,如图2所示的黄色高亮标注部分。
这将是终端应用验证方法的顺序。从“Encrypted PIN online, if terminal supports CVM”一直到“No CVM required”验证。每条CVM规则分为2个字节,每条规则的配置可见书籍《EMV 4.3 Book 3》162页( https://www.emvco.com/wp-content/uploads/2017/05/EMV_v4.3_Book_3_Application_Specification_20120607062110791.pdf)。
例如,有一个异常的关于CVM规则“4103”的案例。最左边的字节是“0x41”;如果将其转换为二进制:“0100 0001”,我们可以确认特定规则不适用于表39(图3中的表格在其原文中为表39:CVM Codes)中的任何CVM代码规则。同样的行为适也用于其他方法:
分析之前的方法,(我们发现)它们似乎都没有遵循EMV标准化书中的标准CVM规则。与验证的本质相反,第7比特位建议如果CVM不成功,则将CV规则改为成功,这使其处理CVM验证的方式变得不可思议且不妥当。
“Plain PIN by ICC”验证
暴力破解攻击是一种通过不断查询直到系统提供访问权限或确认该PIN请求已成功验证,以识别可能的密码或(在这个示例中的)PIN的技术。为了防止这种攻击,卡本身有一个PIN重试计数器,计数器会标示还有多少可用于审核PIN的尝试机会。通常,该计数器限制(用户)仅有3次尝试机会,以保护每一次验证具有10,000种可能性的4位PIN的机会。如果用户连续3次尝试均使用错误的PIN码,EMV智能卡会将此计数器设置为零并阻止对PIN机制的更多尝试。
按照持卡人验证(CMV),EMV智能卡必须通过卡验证(才能使用)。通过验证后,才按照一般的进程开始从PIN RETRY Counter读取数据。这将确认该卡仍有足够的尝试机会来尝试PIN验证。然后,终端将请求输入PIN,并将其以明文形式发送到集成电路卡(Integrated Circuit Card,ICC)进行验证。这是通过发送特定的终端APDU命令并等待智能卡的APDU响应来实现的。
验证PIN“0717”的APDU命令示例:
所有可能的EMV卡响应:
通常,在一张安全的 EMV 卡中,当智能卡返回63 C0 响应时,(用户)将无法继续请求验证命令,因为(这种行为)会获得错误69 83(身份验证方法已被封锁)响应。这是一种常见的智能卡行为,它用于保护自身免受暴力破解攻击。
如果 PIN 码被验证(通过),将会开始交易授权进程。在该步骤中,会生成经过处理的密码。
折中的商业做法
恶意个人进行3次错误的 PIN 尝试后,卡将响应63 C0,(该响应)指的是它已经没有更多的PIN验证尝试机会了。但是,如果EMV卡的持卡人验证(CMV)包含“ICC明文验证(Plaintext Verification by ICC)”规则,则PIN重试计数器可能会重置为其先前的限制数(即重置恢复为3)。这可以通过进行真正的结合接触式EMV支付或通过模拟支付来实施,进而使用另一种类型的验证方法,例如:签名或根本不验证。该步骤的重要部分是生成交易证书(Transaction Certificate,TC)应用密码;这会在授权方案的最后一部分进行。该响应的示例可见附录A-终端命令27。
为了避免进行暴力破解攻击的同时真实从账户中消费,恶意攻击者可以实施中间人 (Man-in-The-Middle,MiTM) 设备来控制终端命令以及 PIN 和芯片卡响应。通过使用这个 MiTM 设备,攻击者可以丢弃最后的卡响应(来自终端命令 27)并使其看起来像是通信错误。因此,终端将关闭交易过程而不扣除任何费用。 此时,EMV 卡已经使用发行方响应中的不良操作策略重置了 PIN 重试计数器(附录B:终端命令 27)。随后,恶意用户将有机会尝试另外 3 个不同的 PIN 并重复此循环,直到找到正确的 PIN。
ELMA: MiTM设备安装
MiTM 攻击方面,我们使用了一种称为 ELMA 的特殊工具。它是适用于结合接触式 EMV 技术的专用 Metabase Q 工具。
ELMA 能够控制终端和 EMV 卡之间的整个通信。 在其工具集中,ELMA 可以在通信过程中添加、编辑、删除命令或进行响应。此外,它还可以通过模拟交易来对普通 PIN 验证方法进行暴力破解攻击。
ELMA 在命令和响应到达相应目标之前对其进行处理,从而可以实时更改信息。如下的步骤是使用了 ELMA 的通信过程。
- ELMA 在其连接器插入终端卡插槽时模拟EMV实体卡。
- 终端发送第一条命令。
- ELMA 拦截命令并检查它是否需要专门为该命令执行某些操作。之后,它将发送命令到真实的 EMV 银行卡上。
- 客户端使用 APDU Interceptor 软件将数据从通过 USB 连接的结合接触式读卡器移动到 ELMA。
- 卡的响应将传递到ELMA 客户端以检查它是否需要处理,然后 ELMA 将模拟该响应并发送到终端。
将重复步骤2到步骤5的处理下一个终端命令。
ELMA PoC(Proof of Concept,概念验证)
为了重现 PIN 暴力破解攻击——现在称为 PIN自动化爆破攻击或PINATA——ELMA首先模拟交易。 但它会在最后一个卡响应(即,TC 应用程序密码)之前关闭通信。之后,ELMA 初始化与实体卡读卡器的单独会话;这将执行终端在先前模拟交易中发送的相同命令。
当卡处于持卡人验证阶段时,如果卡在PIN 重试计数器大于 1 的情况下进行响应,ELMA 将会测试 3 个连续的 PIN。如果没有尝试验证成功,ELMA 将再次启动该过程以模拟另一笔交易以重置 PIN 重试计数器。此过程将不断重复,直到找到正确的 PIN。
倡议
受影响的发行行应在重置 PIN 重试计数器方面应用严格的业务政策,以保护自己免受 PINATA 攻击的恶意利用。
在特定时间范围内分析 ARC 请求可能是检测针对智能卡的PINATA攻击中要检测的一个点。 从本次实际攻击的维度看,(我们)建议保留PIN RETRY Counter值,同时,不要在TC应用程序密码生成后重置它。