导语:非接触支付作为当今移动互联行业中迅速发展起来的服务方式,在人们生活中占据着越来越重要的位置,但随即而来的支付安全问题也不容忽视。
前言
非接触支付作为当今移动互联行业中迅速发展起来的服务方式,在人们生活中占据着越来越重要的位置,但随即而来的支付安全问题也不容忽视。
非接触支付是指移动运营商基于移动通信网络和互联网络技术,通过具有非接触通信功能的手机向移动用户提供的以现场支付业务为主的金融服务。顾名思义,即不需现金,不需刷卡,只需将这种手机接近读卡器,即可以完成交易。非接触支付省去了刷卡时输入密码、签字等繁琐的过程,避免了现金支付时等待找零的麻烦,给传统的支付方式带来了巨大的冲击。手机制造商将非接触式卡融合到手机之中,不仅使支付过程更加方便,而且可以根据需要增加更多金融服务功能。
2015年就出现了对非接触式电子支付进行中继攻击的案例,如今安全研究人员已找到了相应的对策,万事达最近就在其规范中采用了这些措施。这些措施是基于在支付终端检查该卡是否真实被使用来进行的,其目的是阻止攻击者对虚假信用卡的使用进行作弊。但是,我认为,这些措施都是无效的。
非接触支付中发生中继攻击的条件
所谓中继攻击,就是在两个合法参与方A和B之间进行的一种攻击,中间人C篡改A的消息发送给B或将B的消息篡改发送给A。 C这样做的目的是为了获得A或B的特权,这样C就可以把A的钱通过B的非接触式终端盗走。事实上,EMV(Europay,Mastercard和Visa)支付协议在其非接触式的支付协议中,很容易发生中继攻击。
EMV标准是由国际三大银行卡组织——Europay(欧陆卡,已被万事达收购)、MasterCard(万事达卡)和Visa(维萨)共同发起制定的银行卡从磁条卡向智能IC卡转移的技术标准,是基于IC卡的金融支付标准,已成为公认的全球统一标准。
事实上,针对目前已有的手机电子钱包应用,例如:Google Wallet,研究人士已经指出其存在着安全漏洞,并且该漏洞使得用户识别码遭到了破解,非接触支付过程中的安全问题由此被重视起来。窃听、数据损坏、网络钓鱼、重放和中继等一系列数据攻击方式,是通信安全领域的学者所研究的重点。一般来说,近距离通信指的是1m以下,攻击者在获得其通信数据之后,对于数据的分析和利用将直接引起攻击。
近距离的攻击模型
在往返时间( round-trip times,RTTs)上设置上限,由于消息交换是一种已知的物理层机制,用于有效降低中继攻击的概率。这种机制通常被称为距离边界(DB)或偶尔的近距离检查(proximity-checking)。但是,距离边界有它自己的攻击模型。在远程欺诈(DF)攻击中,远程恶意卡旨在伪造他的在场证据,这是为了让这个幕后的远程攻击者完成此次攻击。而不是让DF攻击者在没有利用任何其他实体的情况下进行攻击,你可以把它想象为DF的增强攻击,我在本文称为远程劫持(distance-hijacking,DH)。在远程劫持(DH)中,远程恶意证明者P *利用真实的近距离证明者来验证P *的恶意行为。在网络欺诈(terrorist fraud,TF)中,为了通过验证,远程恶意卡P *与位于附近的恶意中间人(MiM)A串通,进行如下操作,A被欺骗后,认证P卡,但P *不利于未来攻击,A会单独尝试认证P *。
在一个被称为PaySafe的协议中,会执行近距离检查,以防止中继。Paysafecard是一家网上领先的预付支付卡金融机构,也是欧洲非常流行的一种银行汇票,其应用范围非常广泛,有游戏、软件、音乐、电影、通讯、娱乐业等。Paysafecard已成为全球主要的预付卡支付方式之一。
EMV中的非接触支付攻击的新对策
非接触式EMV协议主要有两种:PayWave和PayPass,分别由Mastercard和Visa管理。本文中,我仅仅解释PayWave中的支付卡和终端之间的交易,如图1所示。
Visa的PayWave qVSDC协议
该卡包括私钥PrivC,与它共享的对称密钥KM,而银行卡则有证书授权CA签署的银行公钥PubB上的证书CertPrivCA(PubB),在卡的公用密钥PubC上有银行CertPrivB(PubC,SSAD)签名的证书以及卡上被称为SSAD的静态数据的哈希,并包括例如卡上的号码(PAN)和有效日期。真实的使用者具有证书权威CA的公钥PubCA,因此它可以从Prbb证书中提取PubB,然后使用PubB从证书P中提取证书的公钥PubC及其静态信息rivB(PubC,SSAD)。此时,读卡器启动通信,并在第二条消息中发送卡支持的支付应用程序身份(AID)列表。当真实的使用者选择了其中一个信息时,卡片就会发送PDOL(处理选项数据对象列表),这样真实的使用者就能够发送正确指示的信息。此时,真实的使用者生成一个32位随机数UN。然后它发送GPO(GET PROCESSING OPTIONS)命令,我将它命名为“如果要用这个随机数UN,就需要付钱”。然后,真实的卡会首先生成一个32位随机数nC,然后它生成一个会话密钥KS,作为其在KM下的应用程序事务计数器(ATC)的加密。该卡应该生成“密码”(又称AC),真实的使用者可以将该密码发送给银行以发出适当的付款信号,密文AC是在包括ATC,随机数UN和数量的一系列数据的KS下输入的MAC。该卡还产生了“签名的动态应用数据(SDAD)”即卡上的消息包UN,金额,货币币种,ATC,nC等等的签名。最后,在我测试中的第6条消息中,卡片发送密码AC ,SDAD以及ATC,PAN和AFL(即卡片上记录的位置)给真实的使用者。之后,通过使用AFL,使用者能够请求证书。此时,真实的使用者使用它们来检查签名SDAD和内部子消息的一致性(例如UN,金额等)
例如,有人提出了一种名为PaySafe的非接触式EMV的改进版本(见图2)。主要思想是挑战真实的使用者在响应阶段检查卡片与读卡器的近距离程度。因此,PayWave GPO质询响应分为两部分:首先,卡片以静态数据加上它的随机数发送,然后卡片生成密码SDAD并发送它们。第一部分的往返时间由真实的使用者测量,如果它大于一个确定的界限,则该卡被认为是远处的(因此可能是中继)并且协议被终止。如图2所示,从PayWave到PaySafe,几乎没有其他变化,不过在PaySafe中比在PayWave中更早完成响应。
PaySafe协议使用ProVerif进行了正式验证,并显示正确或安全的w.r.t.中继攻击。万事达似乎在其新的但未公开的v3.1规范中采用了抵制措施,这种对策似乎类似于PaySafe1。但是,正如我下面所解释的,我发现PaySafe对所有类型的中继都不安全,因此,如果万事达确实部署了这个措施,那么这不足以实现其新的电子支付和非接触式系统的中继保护。
中继保护为何有可能失败
其中一个问题,便是何时对非接触式EMV进行支付授权?这是因为,卡片和持卡人的支付授权实际上是在非接触式EMV中进行的。
从持卡人的角度来看,虽然持卡人会将卡带入读卡器的范围内。但是,请注意,卡片可以在读卡器的范围内被带入,而不需要卡片持有者的同意。尽管如此,每个人都可能希望保持这个EMV版本的非接触性,即不要求持卡人输入任何信息。
由于Mastercard v3.1版还未公布,因此,本文中的攻击和讨论主要针对PaySafe,而不是这些EMV规范。
PaySafe协议
因此,第二个论点恰恰来自卡片的角度(而不是持卡人的角度),或者说是从协议设计的角度。而且,在实际的EMV非接触式协议规范中,当付款卡给出“技术授权”时,应支付的信用卡(即w.r.t.协议步骤进行的card-side EMV协议)。通过“技术授权”,我的意思是在付款时没有发生意外事故。请注意,此时可能确实是卡片进入读卡器范围的那一刻,但是在实际检查在场的时候,这个时间点稍后在协议中是有意义的。所以,人们可以认为,卡片发送密码时,支付卡的“技术授权”释放资金。
但是,我注意到,在PaySafe中,不能保证卡在读卡器中,当卡实际发生支付时,即,当它发送SDAD,AC时。该PaySafe协议在技术上只会确保一张卡片的真实使用者发送GPO请求,即作为“第一次付款请求”。所以导致欺诈性支付的中继攻击仍然是可能的,如下所述。
PaySafe中的中继和付款欺诈
我先描述一个这样的资金支付的场景,即对某人的emv智能卡运行PaySafe的中继攻击。在超市的购买高峰时间里,攻击者和他的同伙排队在支付终端T1付款。此时,受害者也正在另一个终端上付款。此时,攻击者假装从靠近受害者的地方拿起一些手提袋,当受害者由于避让,进入攻击范围之内。此时,攻击者会在终端T1地方短暂停留。此时,两者的距离小于10厘米。此时,一些攻击放大设备靠近读取器T1,以使受害者与读取器T1之间的实际距离仍然可以保持大于10cm,然而受害者与读取器T1之间的协议仍然会启动。通过这种方式,受害者的非接触式卡片开始与读取器T1运行协议,包括运行时间。然后,当受害者离离T1很远后,例如,步行到更远。此时,基于NFC的协议应该会失败。不过中继攻击仍然会继续,通过模拟读卡器继续读卡。攻击者将来自受害者卡(SDAD,AC和证书)的最后三条消息通过中继的手段发送到支付终端T1。请注意,此时,协议正确完成,中继攻击将成功,这意味着攻击者可以用他人的卡支付,即使他们的卡发出最终的支付无效密码AC并验证数据SDAD时,即使他们距离终端T1数米。所以,攻击只需要在中继开始前让受害者靠近终端几秒钟即可。
虽然上述情况在实际中未经过测试,但并不代表没有人不会尝试这样做。所以,通过中继保护PaySafe进行中继的欺诈性付款仍然是可能的。所以PaySafe可能无法完全解决EMV中继问题。
中继保护的建议
PaySafe着手实施中继保护的方法是,将临近检查与认证相结合。如果是这样的话,整个组合中的潜在攻击都应被考虑到。特别是在对认证进行近距离检查的情况下进行充分讨论,就像PaySafe中的情况那样。
虽然以上是可证明的安全性观点,但可以设想万事达(或EMVCo– EMV背后的财团)对于潜在的攻击可能并不感兴趣。但是,如果EMVCo / Mastercard按照所建议的方式实施PaySafe等协议,那么这意味着,银行账户要记录每笔非接触式付款,以便向相应的持卡人发送近距离的付款信息,即确认收款人靠近付款终端。因此,如果持卡人可以伪造在场证明,那么可能就是Mastercard / EMVCo的责任。事实上,Sjouke Mauw等人最近就在研究PaySafe的近距离攻击。
PaySafe中基于近距离攻击的安全性
PaySafe并不是要抵制远程欺诈(DF),事实上,该卡在PaySafe计时器中的响应并不取决于真实的使用者。所以,PaySafe的优点是通过使用符号安全验证工具展示了这个DF。并且,为这个DF提出了一个解决方案,我在这里将其称为PaySafe +。在PaySafe +中,与PaySafe相比,该卡的定时响应还包含真实的使用者发送的随机数UN,即卡通过AIP,AF L,AT C,nC,UN回复GPO(…)。
在PaySafe中要实施近距离攻击的防护,就要用到PaySafe +,在PaySafe +中,卡片在付款之前必须等待接收UN。但是,卡可以从MSB(最低有效位)到LSB(最低有效位)逐位采样UN。所以,对于攻击者来说,不需要等待读完UN的所有部分,只要每个人在他的结尾读完UN的位,他就可以一个接一个地发送UN的位。或者,他可以进行远程欺诈攻击,等待UN的前x个MSB(x <32),并猜测剩余部分。通过选择x,攻击者(也就是伪造支付在场的证明者)将调整他的成功概率,但也会调整距离降低的程度。但是,目前还不确定PaySafe +对于距离欺诈是否是安全的,因为该方法并不能捕捉到UN随机数的逐位抽样。因此,以上讨论的只是个理想的模型而已。
PaySafe/PaySafe+中最不可能实现的远程欺诈解决方案
在本质上,如果近距离欺诈是PaySafe +所能解决的话,那么在定时的响应中,卡片应该发回UN,例如,以真实的使用者发送它的方式按照反向位顺序从LSB到MSB回复UN。这显然降低了我在上面提到的DF成功的可能性,请注意,攻击者可采取更复杂的措施来发起攻击,即通过通道选择(CRCS)。
其他非常近的解决方案(从硬件实现角度给出)
虽然PaySafe +未能实现DF安全性,但PaySafe +还有其他防护功能,例如,防护很明显存在远程劫持(DH)攻击和网络欺诈攻击。
我认为,在EMV的情况下,潜在的攻击者可能非常希望获取证明支付凭据。因此,我认为在EMV中发生网络欺诈行为是有道理的。为了发起网络欺诈行为,在计时阶段开始之前,潜在的攻击者会生成nc并将其提供给攻击者。如果攻击者A发现距离终端较近,然后通过定时响应,通过不定时的部分,攻击者A将所有必要的信息发送给证明者,以便这个人产生SDAD,AC,并将其交给A。然后,A将其传递给真实的使用者。在所有偶发事件中,通过检查最新的随机数,攻击者就无法自行通过协议。在本文中,我没有提到解决这个TF攻击的方案,因为它不是基于PaySafe +结构的一种解决方案,就像我在PaySafe上模拟的PaySafer或PaySafe +中的远程欺诈一样。所以,在EMV中,我并不认为需要分析DH。
类似的PaySafe的解决方案可用于EMV中的中继攻击保护。在图3中,我建议,我为抵御PaySafe的中继攻击找到了一个被称为PaySafer的协议。在PaySafer中,使用者发送“GENERATE AC”命令后,它会等待一段时间,这个时间就类似于卡片生成AC和SDAD的时间。不过缺点是市场上所有的卡都必须在这个特定的允许时间段内实现AC和SDAD,这将需要EMVCo普遍实施。我承认这是一个很大的问题,但我相信这不是不可能实现的。
只有等待一段时间过后,真实的使用者才会将我的新命令“SEND AC”发送给卡片,并伴随着一个随机数UN2。该卡以UN2发回的AC,SDAD和UN2 *作为响应,不过要做些处理,即通过改变UN2中的随机数的位的顺序来获得UN2 *。以这种方式发送UN2 *和UN *对于中继保护来说不是必不可少的。但是为了解决上面的PaySafe中的近距离欺诈攻击,所以在我的PaySafer中,我的目标是进行DF防御,那么UN需要由虚假证明者进行处理,即至少以反向随机数的位的顺序作为UN *,在第一次定时响应期间后,UN2也需要在第二次定时响应周期中以反向随机数的位的顺序作为UN2 *发回。如果没有进行DF防护,你可以从PaySafer(及其星号对应部分)中删除UN和UN2。
PaySafer与PaySafe大部分相同,除了使用第二次计时轮和使用UN *,UN2,UN2 *。
所以,对于PaySafe而言,我基本上是在添加了一个定时响应的过程,通过AC,SDAD,这样我就阻止了在AC生成之后中继这两个。实质上,这意味着我从卡(即发送AC,SDAD时)支付结算时的角度,而不是从PaySafe支付为“GPO发起”时检查收款人是否接近终端的角度。
PaySafe似乎在Mastercard v3.1的EMV规范中被采用
从目前的态势来看,Mastercard v3.1的EMV规范被实施已经是板上钉钉的事情了。
所以,我只有提出以下改进建议,来将攻击风险降到最小:
1.在EMV中加入近距离检查;
2.开启新的远程欺诈安全防护;
图4中所示的防护机制与PaySafe不同,这种设计旨在基于共享密钥sym运行对称密钥DB协议。不过需要预先在卡和使用者之间创建该密钥,方法是基于卡的密钥sk和公钥pk运行密钥协商协议(KA)。不过,也有人建议在这个距离边界运行之后再进行支付。
EMV所设计的对称密钥DB
对EMV所设计的对称密钥DB的思考
1.可以选择一个DB协议,该协议对于所有距离边界攻击也是可证实的,例如,可以对图4做出很小的变化以实现增强的安全性。
2.虽然我对这个解决方案并不完全满意,就像PaySafe一样只有在支付之前才会发生近距离验证,并且在此期间,中继仍然是可能的。因此,为了成功,人们需要在支付方案中更加内在地嵌入距离边界协议。图4解决方案的另一个问题在于,所有EMV读取器都必须实现与支付结合运行的DB协议,这是一个很大的问题。
总结
尽管我通过近距离检查讨论了增强EMV安全,但许多方面还是没有被讨论到,例如,哪些人是中间人,卡上的隐私细节如何保护。由于EMV最新标准中的近距离检查可能被MasterCard和EMVCo所接受,许多新的安全解决方案都还未经过安全验证。所以总的来说,我研究这个主题,就是为了让EMV设计和架构能够更加安全。