Samsung Pay真的不堪一击?支付漏洞深度剖析
2016年7月14号,来自美国加利福尼亚州莫德斯托社区学院的Salvador Mendoza发表了一篇题为《Samsung Pay:Tokenized Numbers, Flaws andIssues》的文章,称发现了Samsung Pay Token的安全问题。同年8月4号,其在Black Hat USA大会上对此项攻击进行了宣讲和演示(针对VISA卡片进行)。(详情见:Samsung Pay磁性标记化存漏洞 黑客称盗取过程相当简单)对此,国内各大媒体纷纷予以跟踪报道,那么Samsung Pay是不是真的这么不堪一击呢?
一、还原Samsung Pay破解事件完整情况
Salvador Mendoza使用android系统的adb命令对Samsung Pay进行调试,获取了应用数据库,同时反编译了Samsung Pay的相关应用程序,从而实现了对MST磁道信息的分析(注:Salvador错误的将磁道中的所有数据统称为Token,本文在描述时为不产生混乱,将以卡组织的名词定义为准进行阐述)。
通过分析,发现了一些弱点:
1. MST磁道信息可以被获取;
2. 客户端应用混淆不够且包含注释,其用于存储信用卡数据的本地数据库加密并不可靠(密钥是静态的,且可通过反编译客户端后获取);
3. 生成的MST磁道信息只要未被使用,则一直有效。
基于以上弱点,Salvador推导出了四个可能的攻击场景:
1. 通过社会工程学方式骗取用户生成MST磁道信息,并窃取用于盗刷;
2. 利用侧录设备阻断正常的支付过程,并窃取MST磁道信息用于盗刷;
3. 反编译出加解密代码;
4. 猜测下一个MST磁道信息。
二、攻击的实质和分析
本次攻击实质上是:
①通过对Samsung Pay手机应用的分析和MST磁道信息的反复测试,了解到MST磁道信息中每个位的含义,进而公布出来造成一种秘密曝光的舆论效果;
②将传统磁条卡盗刷的攻击方式移植到Samsung Pay上,实现了攻击效果的演示;
③国内媒体宣传时大肆渲染的“Token化程度有限,可以被预测”,只是Salvador假定的可能攻击场景之一,Salvador并没有证实该场景可以实现,也没有做出演示,仅仅是根据现象(动态的MST验证码长度仅有3位和可进行多次交易而大量收集历史数据这两点)进行了猜测 。
具体来说:
针对实质一,由于Andorid是一个开放的系统,且基于Java编写的代码易于反编译,因此容易对其应用进行分析,部分反编译得到的代码示例如下:
而MST磁道信息的传输方式与传统的磁条卡一样,因此可以较容易的通过通用读卡器读取磁信息,结合反编译得到的代码和多次采集得到的多条磁信息,可分析出磁道中每个部分的含义,如针对二磁信息为;4012300001234567^21041010647020079616?的数据,其关键部分含义如下:
针对实质二,由于MST本质上是一张用一次变一次磁道信息的磁条卡,因此传统针对磁条卡盗刷的侧录、制作伪卡等技术手段依然有效,所以Salvador可以方便的进行盗刷演示。
而针对实质三, Salvador只是提出了一种直觉上的认识:一个位数极为有限又可以大量采集前序数字的序列,应该可以一定程度上预测后续数字。但是针对这个从直觉得出的结论,他并未进行验证和证实。
三、攻击的影响性分析
针对上述提到的实质一,由于Samsung Pay的安全并不是建立在算法保密的基础上,而是依赖于核心密钥的保密性以及运行环境的可信,所以对应用程序的分析和对MST磁道信息的解析并不会直接降低Samsung的安全性。但是,考虑到程序在编写时可能存在bug,而程序易于被分析意味着有更大的可能被攻击者找到程序中的存在的漏洞,因此对安全性还是存在着一定的影响。
针对上述提到的实质二,结合Black Hat大会的实际演示可知,此类攻击如要实施成功,需具备以下前提条件:
①物理接触三星手机,并将Samsung Pay功能打开;
②保持该三星手机在攻击成功前不会进行支付操作;
③制作出的伪卡并不能绕过PIN,除非利用该伪卡执行的交易免密,否则还需要提前盗取卡片对应的PIN;
④ 制作出的伪卡仅可使用一次,下次需重新获取和注入新的磁道信息。
因此,其实际攻击利用难度大于传统磁条卡的盗刷,一次磁信息泄露后造成的损失也较传统磁条卡更为有限。换句话说,Samsung Pay的MST由于其本质是磁条卡的变种,因此存在与磁条卡类似的风险,并不是新的安全问题,且其风险较传统磁条卡已有改善。
针对上述提到的实质三,虽在国内媒体上被大肆宣传,但Salvador并未真正实现。我们通过研究发现,VISA的MST验证码生成是依靠一个专用密钥对交易相关的动静态数据加密处理后得到的,在不攻破TEE运行环境拿到密钥的情况下难以实现预测。但是,由于MST验证码仅有3位,在不进行有效交易的情况下其有效期可达一个小时或更长,因此存在暴力破解的可能。总之,MST验证码并没有向媒体报道的那样不堪一击,其破解方式只能是暴力破解而非所谓的预测。且,即使被攻破,虽从总体上将Samsung Pay的安全风险拉低到与普通磁条卡类似,但实际利用时仍比普通磁条卡复杂(因所制作的伪卡需在MST验证码等动态信息未变时及时刷卡消费,且每刷一次就需重新获取和写入新的磁道信息)。
四、对比国内Samsung Pay的安全性分析
经调查对比研究,国内的Samsung Pay与本次攻击事件中涉及到的VISA Samsung Pay方案并不完全一致,其主要区别在于:
①磁道中的MST验证码等动态数据的长度、生成算法不一样。国内的算法使用了更短的时间窗口,同时生成了更长的MST验证码,这就极大的避免了被暴力破解的可能。
②Samsung Pay的运行环境不一样。国外的方案运行在TEE环境中,而国内方案运行于更安全的基于独立安全芯片的eSE环境中。
③MST磁道信息的生命周期不一样。国内的方案中MST磁道信息在需要时由eSE实时生成,然后直接通过硬件设备传输给外部的POS机等终端接收设备,并没有在手机内的数据库中存储这一过程的存在。
综上,国内版的Samsung Pay大家还是可以放心愉快的买买买。