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破解事件完整情况

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?的数据,其关键部分含义如下:

401230

Token中的卡bin

0001234567

Token中的剩余部分

2104

有效期

101

服务码

0647

账户参数索引时间戳

02

账户参数索引计数器

0079

交易计数器

616

MST验证码

针对实质二,由于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大家还是可以放心愉快的买买买。

*投稿:狴犴安全团队(企业账号),未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

开发 | 如何在 i5 上实现 20 倍的 Python 运行速度?

Intel Distribution for Python 在今年二月进行了更新——英特尔发布了 Update 2 版本。以“加速”为核心的它,相比原生 Pyt...

43760
来自专栏月牙寂

Golang分布式并发---群体性热点淘汰算法

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

41190
来自专栏SDNLAB

OpenFlow会不会城头变幻大王旗?

27750
来自专栏咸鱼不闲

科大讯飞语音识别和语音播放dome

首先登陆科大讯飞开发者平台,注册账号,(走你->http://www.xfyun.cn/) 可以根据功能(语音识别,语音播放等),平台(java,window等...

1.4K50
来自专栏斑斓

代码诊所

几年前,我有机会负责一个项目的咨询。团队很小,目标是对旧有系统的后端用Java改写,而团队的开发人员全为C程序员。我的工作职责是负责项目设计、开发,以及担任项目...

43060
来自专栏闰土大叔

太原面经分享:如何在vue面试环节,展示你晋级阿里P6+的技术功底?

一年一度紧张刺激的高考开始了,与此同时,我也没闲着,奔走在各大公司的前端面试环节,不断积累着经验,一路升级打怪。

23110
来自专栏JAVA高级架构

程序员遇到bug后的七种反应

每一个被bug缠身的程序员,都想拥有孙悟空的本领。要么七十二变,要么一转眼灰飞烟灭 ? 1、谁动了我的代码 ? 这确实是一种曾相识的感觉,我经过无数次的解释都没...

37470
来自专栏芋道源码1024

Java 面试题 —— 老田的有赞面试经历

好像是清明节还是五一劳动节来着,我还在睡觉,就接到一面面试官的电话,说现在有时间吗,能够接受下电话面试吗?我勒个去,今天过节、我被电话吵醒的,现在人都没清醒、这...

21820
来自专栏刘望舒

一个妹子的Android秋招面试总结(已拿BAT等7家口头offer)

在2018Android暑期实习面试总结曾介绍过个人情况、自学经历、校招流程和复习重点,这部分就不再赘述。那么本篇先以日历形式回顾秋招之路,方便各位参考某厂的处...

1.3K20
来自专栏编程一生

JVM知识在离线数据中的运用

16330

扫码关注云+社区

领取腾讯云代金券