白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

admin 2022年6月28日10:21:05评论44 views字数 6252阅读20分50秒阅读模式

如需转载请注明出处,侵权必究。


       本文发表于USENIX Secuirty 2021,第一作者是路易斯安那大学拉法叶分校 (University of Louisiana at Lafayette)的Jiadong Lou。

        文章关注于新兴支付服务形式,即通过利用额外的订单管理系统,允许个体商户在第三方平台上利用个人转账服务来支持商业交易的个人支付系统(PPS)。文章对35个PPS进行了系统研究,覆盖到11740个商户与2000多万客户。通过检查文档、可用的源代码和演示,提取了PPS的通用抽象模型,并发现了现有个人支付协议设计和系统实现中的七类漏洞。为了进一步剖析这些潜在的漏洞,文章提出了相应的攻击方法并进行了四次成功的真实攻击,同时也负责任地披露了这些新发现的漏洞。


背景

        来自eMarketer的报告指出,有10.6亿人正在使用移动支付。其中亚洲的5.774亿移动支付用户约占总数的一半,这主要是由于移动支付在中国的快速普及。认识到市场的不断增长后,越来越多的移动支付平台也随之出现。无需通过信用卡和支票等传统方法进行支付,可以降低用户向供应商披露信息时的风险。然而,现有的支付平台存在着一些缺陷。

        首先,这些平台上的个人支付账户并不是为处理大型交易而设计的,因此缺乏某种可扩展的方法,来自动地将订单与支付交易关联起来。其次,在这些平台上虽然可以通过注册商户账户来实现自动关联,但对于许多小型企业来说,获得注册资格的条件壁垒相当高。比如阿里上商户账户注册需要政府颁发的许可证。最近,这些平台初始的财务投入也开始变得不容忽视。

        认识到了现有移动支付平台的这些缺点,出现了一种新的支付管理服务形式——个人支付系统(PPS),其作为买卖双方之间的经纪人,提供了一个最低限度的支付管理系统,大大降低了交易费用和初始财务投入。由于这种新的支付系统建立在现有的个人资金转账界面之上,必须涉及移动支付生态系统中不同实体之间的多轮复杂交互,因此安全性对于PPS及其用户来说仍然是一个具有挑战性的问题。


系统性研究

1. 第三方商业支付系统(TP-CPS)的工作流程

        第三方商业支付系统有三个实体,即商户客户端(MC)、商户服务器(MS)和出纳服务器(CS)。

◽ MC:商户客户端,用户可以在这里浏览商品并下订单。

◽ MS:是承载客户端内容的商户服务器。它还负责处理订单和确认订单的付款状态。

◽ CS:管理不同账户之间的货币交易,并提供跟踪支付状态的能力。在第三方开立商业账户。

对于第三方支付平台的商业账户来说,订单管理是服务的一部分,是紧密集成的。因此,MC和MS只需与第三方系统交互即可上传并获取支付和订单状态,并支付商定的费用。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin


2. 个人支付系统(PPS)的抽象模型

为了利用个人支付系统进行商业交易,PPS提供了PPS订单管理平台(PMP),提供出纳服务器(CS)传统上提供的商业支付功能,例如记录交易信息、监控交易中的现金流和验证订单状态等。PPS中的交易流程可以总结如下五步:

◽ PPS注册与密钥分发:商户需要注册两个账户,一个是在第三方支付平台(即CS)上的个人账户,另一个是在PMP上的商户商业账户。

 订单生成:买方下订单后,付款信息将发送至CS,同时订单信息将传输至PMP。

◽ 订单支付:PMP验证订单数据包的完整性并区分同一商户的多个订单。

◽ 支付通知:在CS中进行合同付款后,PMP将通知商户服务器(MS)继续订单流程。

◽ 订单查询:MS生成查询请求,由PMP提供历史订单查询服务。


3. 文章发现的七大漏洞

文章根据漏洞模式将漏洞分为了两类,PPS协议漏洞与实现漏洞。

◽ PPS协议漏洞:由于支付协议中的不安全设计所造成,商家很难自行纠正。在文章提到的七个漏洞中,未受保护的密钥更改API、令牌生成中的简单字符串串联、基于MD5的令牌生成、缺少订单检查机制以及订单查询API未查询付费属于这一类。

◽ 实现漏洞:此类漏洞通常是业务和实施方面的特定漏洞,即由于供应商对PPS API或安全设计缺乏了解所导致。本地订单生成和本地密钥存储是这一类别中的两个主要漏洞。纠正这些问题更容易,只需要在客户端进行更改。

文章依据前面总结的PPS抽象实现流程,对七大漏洞进行了展开分析:

◽ 未受保护的密钥更改API漏洞:PPS的API允许预认证的密钥更改请求,攻击者只需要商户ID来更改密钥。商户ID在设计上不是秘密,可以通过检查订单包获得。对于新密钥不包含在回复中的PPS,攻击者则可以利用其web访问接口频繁更改密钥,以中断商户操作并实现DoS攻击。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

◽ 本地订单生成漏洞:许多PPS的实现都在客户端生成部分或全部订单,这导致订单请求包括了直接进入最终数据包的信息字段,使得攻击者可以篡改本地存储订单的某些字段进行攻击。

◽ 本地密钥存储漏洞:某些PPS实现将密钥存储在MC中以便于计算。这使得攻击者可以通过逆向MC程序轻松获得商户的密钥。攻击者可以使用该密钥对订单数据包进行任意修改。

◽ 字符串串联漏洞:PPS中的令牌是通过将订单数据包中的所有参数,与密钥连接到一个字符串中并使用MD5算法来生成的。有些PPS只是将所有字段关联起来,而没有任何分隔符。结果是,当一个字段的后缀移到订单数据包中下一个字段的前缀时,生成的令牌不会改变。这使得攻击者可以通过将一些字符从一个字段移动到下一个字段来篡改订单数据包。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

◽ 基于MD5的令牌生成碰撞漏洞:MD5算法生成令牌时的弱哈希语法,允许攻击者更改一个输入的前缀部分,但仍然生成相同的MD5输出。因此,攻击者可以恶意修改订单数据包中的某些字段(例如价格),生成相同的令牌来欺骗PMP,实现如下图所示的攻击。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

◽ 缺乏订单检查机制漏洞:PPS设计的大多数支付界面只向MC显示价格、订单ID和二维码,以便用户确认和支付账单。订单中既没有商品信息,也没有发货地址信息。于是攻击者可以执行中间人攻击,首先,阻止受害者的MC向PMP发送的订单包p。同时,他为自己的订单发送一个订单包p*,PMP将欣然接受该请求,并将伪造订单p*中相应的付款信息返回给受害者,使受害者在不知情的情况下,为攻击者买单。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

◽ 订单查询API未查询付费漏洞:PPS中的大多数查询API通常只返回一个标志,指示所查询的订单是否已支付。因此通过查询API,商户永远无法识别订单的价格是否被篡改。


4. 文章提出的五大攻击

下图展示了文章发现的七大漏洞与提出的五大攻击,在PPS实现流程中的对应关系。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

文章根据攻击动机将前文提到的五大攻击分为了三类,恶意用户攻击、面向受害者的攻击和面向商家的攻击:

◽ 恶意用户攻击:在这一类中,攻击者操纵自己的客户,试图从中获利,例如降低所购物品的价格。订单篡改密钥、订单数据包中的字符串移位和MD5签名冲突等攻击都属于这一类。

◽ 面向受害者的攻击:在这种攻击中,攻击者可以截获其他用户(受害者)MC和MS之间的通信数据包。他的目标是通过操纵网络数据包获得经济利益。支付替代攻击属于此类攻击。

◽ 面向商家的攻击:此类攻击者的主要目标是从互联网攻击商户或其他用户,而不访问受害者的流量或设备。恶意密钥更改属于此类型。

实证研究

    作者在实证研究中,通过调查PPS的使用情况并检测潜在的漏洞,暴露了PPS中存在的安全问题。接着,通过展示对一些真实PPS支付应用程序的攻击,来表明暴露的漏洞可能会在真实交易中造成严重后果。具体的实证研究流程如下:

1. PPS生态系统分析

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

 数据集收集:通过互联网搜索和与PPS常用关键字匹配的论坛主题,如“个人收款”、“安全支付接口”、“免签证”等,收集到了35个PPS系统。其漏洞分布情况如下图所示,其中橙色方框表示PPS具有相应的漏洞,红色方框表示PPS已根据作者的反馈修复了漏洞。

白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

使用统计:文章接着分别对网页端与移动端的PPS使用情况进行了调查。

对于网页端,调查结果直接通过两个流行的存储库(即Packageist和WordPress)的统计数据和PPS网站的一些数据得到。PPS的插件下载次数超过11611次,覆盖至少10000个商户和2000万客户。具体而言,对于一种流行的PPS——FastPay,有1292家商户和129家公司正在使用其服务在产品中实现支付功能。依赖这项服务的客户数量可能达到数百万。例如,有超过10000名客户在一家采用Paysapi的SEO相关商户网站上为账户充值并使用购买服务。

对于移动端,首先从不同类别的Snappa和Android Market应用程序商店共抓取了26956个应用程序。发现了564个应用程序包含一系列独特的PPS接口URL。接着,通过人工检查,发现其中67家已使用PPS支付服务,且它们的平均下载量在2000左右。


2. 真实世界攻击案例

文章提到,所有实验都是攻击作者自己的测试账户,同时会向所有被攻击的供应商报告测试过程和结果,以便他们能够降低攻击带来的影响。还会通过关闭测试账户来减轻攻击产生的财务影响。

◽ 字符串移位攻击:作者选择了Paysapi网站执行字符串移位攻击,目的是向注册帐户充值一定金额,但支付的金额低于该金额。分析得知Paysapi有一种易受攻击的令牌生成方法,该方法在散列之前简单地将所有字段连接在一起,即易受前文讨论中的字符串移位攻击。作者在Paysapi用户界面的输入字段中键入30元人民币,并将此订单请求发送给商户。商户将订单数据包发送回到用户界面后,使用Fiddler 4工具截获数据包,同时阻止用户将其发送到Paysapi服务器。之后手动将订单数据包的价格字段中的字符“0”移动到returnu url字段的开头,然后将新数据包转发到Paysapi服务器。付款界面只需3元人民币即可显示付款成功,出于道德考虑,未使用该测试购买任何商品。

密钥修改攻击:文章共执行两个真正面向商家的攻击,第一个攻击的目标是禁用商家的服务,第二个攻击的目标是窃取密钥。商户账户在两个不同的PPS上注册,即Paysapi和Xunhupay,Paysapi在回复中包含新密钥,而Xunhupay没有。对于Xunhupay的测试,通过商户门户登录,看到当前密钥“r7Ep7kymuyQQE6taVQNF”。之后注册账户并单击更改按钮。同时,使用Fiddler 4工具监控请求包,以便将密钥更改传输到PPS。PPS将密钥更改为“HitchavcyIcv24xjdcwry”。刷新其配置文件页面才能看到此新密钥。之后从监控数据包中提取商户ID信息,伪造一个新的请求数据包,并将其发送给PPS。PPS继续将密钥更改为“Tk7pK5BneK2373NuU76E”。由于PPS没有向注册账户发送密钥更改的响应数据包,商户的服务将被禁用,直到他刷新其个人资料页面以通知密钥已更改。对于Paysapi的测试遵循与上述实验相同的步骤,由于Paysapi在响应中包含密钥,只需检查密钥更改响应,就可以窃取新密钥。

支付替代攻击:此攻击注册了两个用户帐户,一个为受害者,另一个为攻击者。受害者用户和攻击者位于同一路由器下的同一局域网中。首先,受害者打开界面,点击向账户充值10元人民币。当攻击者监控到受害者正在向账户充值10元人民币时,他会截获从商户服务发送给受害者的数据包,并阻止其传输到PMP。与此同时,攻击者单击其账户中的支付功能。并拦截从商户服务器传输给他的数据包,从受害者处截获的数据包中的参数替换它们后,将新的数据包发送给受害者的PMP。此时付款界面已成功显示在受害者的网站上,且该网站未显示任何订单身份信息。受害者将为攻击者的订单付款。

 MD5碰撞攻击:攻击的博客网站使用Paysapi提供的支付服务,其token生成机制将价格直接安排在可选字段“ReturnURL”前面。使用Fiddler 4工具捕获正常订单包即可获得ReturnURL,从而可以收集执行MD5冲突攻击的参数。之后使用github上的开放资源来计算所选前缀MD5冲突块。冲突块没有JSON关键字,MD5值相同为“9f1ec604dce1bc0b1dd368dda3dd44”。接着通过在博客上付款,并阻止MC发送给MS的网络数据包。修改价格和ReturnURL字段。订单数据包在MS签名并发送回MC后,再次阻止并捕获其从MC到PMP服务器的传输。使用十六进制编辑器打开阻止的订单包,并用“0.01”元的冲突块替换价格和notifyURL。该订单通过了PPS认证,支付界面成功发送回网站,实现了以更低的价格完成支付。


 3. 预防措施及建议

◽ 对于PPS提供商:密钥更改API应要求身份验证;采用强加密原语(而非MD5);向用户显示清晰的付款和订单信息;在订单支付状态通知和商户订单查询结果中提供实际支付金额。

◽ 对于商户:密钥决不能存储在客户端;订单参数应在服务器上生成和签名;在收到付款通知时检查每个订单的实际付款金额。

◽ 对于用户:始终检查付款归属信息;避免通过不安全的链接付款。


总结

文章首次剖析了新兴支付模式——个人支付系统(PPS)的内部结构,并提出了这一新支付系统的通用抽象模型。基于对个人支付系统(PPS)的分析,发现了7种易受攻击的漏洞,并提出了5种利用这些漏洞的新攻击方法。文章还进行了实证研究,分析了35个使用最广泛的个人支付系统(PPS)中的支付服务,并揭示了与所发现的7种漏洞相对应的安全问题。在实证研究中对采用PPS的网站进行了四次真实的攻击,以证明所发现的漏洞。之后按照负责任的漏洞披露做法,报告了发现的所有设计缺陷,并与一些供应商合作修复了这些漏洞。最后为了缓解这些漏洞,还进行了root cause analysis(根本原因分析),并讨论了如何保护个人支付的生态系统。


Q&A

Q1:个人支付系统(PPS)与现有支付流程的区别?

商户需要注册两个账户,一个是在第三方支付平台(即CS)上的个人账户,另一个是在订单管理平台(PMP)上的商户商业账户。

买方下订单后,付款信息将发送至CS,同时订单信息将传输至PMP。在CS中进行合同付款后,PMP将通知MS继续订单流程。

在订单和支付管理流程中添加独立的PMP,是该生态系统中独特的设计元素,可以避免交易费用。为了获得支付状态,PMP的商户账户必须在CS上对转账事件进行监控。


Q2:字符串移位攻击什么情况下不起作用?

在实证研究中,作者发现有20个PPS要求商家在任意两个字段之间添加分隔符(比如&),或要求在串联字符串中的值之前添加相应的字段名(例如,“price=xxx”)。字符串移位攻击在这些PPS上不起作用。


Q3:为什么作者没有对密钥嗅探攻击展开分析?

在35个PPS平台中,有17个PPS使用HTTP协议为密钥更改响应提供数据包。这17个PP都以明文形式将新密钥放置在响应包中。因此,从理论上讲,采用其支付服务的商家面临着密钥嗅探攻击的风险。但因为密钥嗅探攻击对检测MS和PMP之间的通道有严格的要求,在安全分析中并没有提到这种微不足道的攻击。


文案:CQT

排版:YST

戳“阅读原文”即可查看论文原文哦~

复旦白泽战队

一个有情怀的安全团队


还没有关注复旦白泽战队?

公众号、知乎、微博搜索:复旦白泽战队也能找到我们哦~



白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin



原文始发于微信公众号(复旦白泽战队):白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emergin

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月28日10:21:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   白泽带你读论文 | Messy States of Wiring: Vulnerabilities in Emerginhttps://cn-sec.com/archives/1139107.html

发表评论

匿名网友 填写信息