G.O.S.S.I.P 在2017年发表的NDSS研究论文 Show Me the Money! Finding Flawed Implementations of Third-party In-app Payment in Android Apps 可能是世界上第一篇系统研究Android移动生态系统中三方支付诸多安全问题的论文,随后我们又把研究扩展到了iOS平台,发现问题同样存在。不知道是不是受到我们研究的启发(不要脸+1),W3C 组织制定了一套新的 Web 支付 API 标准(WPA),但是这套标准是否真的保护了消费者、商家和支付收银方的利益呢?今天给大家推荐的 IEEE S&P 2022 论文 A Formal Security Analysis of the
W3C Web Payment APIs: Attacks and Verification 中,作者对这套新的 Web 支付 API 标准进行形式化分析,并发现了两个新的漏洞。最后,作者基于拓展的 Web 基础设施模型(WIM)对 WPA 进行建模,证明了 WPA 的强安全性。
WPA 是 W3C 组织制定的一套用于统一在线支付流程、简化用户的支付体验的新标准。主要思想是将支付作为一种本地功能集成到 Web 浏览器中,商家不需要提供网页或 JavaScript 来结账,而是在用户的 Web 浏览器中将这一过程交给WPA,浏览器向用户呈现支付用户界面 (如Figure1所示)。在该用户界面中,用户可以查看订单,选择发货地址、支付方法和支付处理机构。如今,许多主流浏览器如 Chrome、Firefox、Edge、Safari 都已经实现了这个标准,许多支付处理商如 Google Pay、Apple Pay 和 Strike 也已经支持 WPA 支付。可见此标准虽新,但用户体量却将会不断增长。
论文的贡献如下:
对 WPA 进行了首次深入安全分析
极大地扩展了 WIM 以支持 WPA 的原生 Web 功能
发现了两个新的漏洞
通过 Chrome 验证了漏洞并将它们报告给了 W3C 组织和 Chrome。
基于扩展 WIM 证明了修复后的 WPA 标准满足强安全属性。
首先,作者详细概述了 WPA 整个协议流,描述了结账过程中涉及到的不同实体,以一个典型的支付流程为例,简单来说有以下几个步骤:
顾客点击网页上的“结账”按钮
商家网页创建支付请求,此请求包含了结账数据如商品列表、可接受的支付方法(如信用卡)和总金额
支付请求提交给由浏览器实现的 WPA,并触发浏览器显示支付界面(如上图1),此支付允许用户选择收货地址和支付数据(如信用卡信息)
用户填写好信息后在支付界面选择确认支付。根据所选的支付方法,浏览器可能会要求用户先授权支付(如登录到支付提供商),而顾客、商家和支付提供商之间的交互由支付处理程序在浏览器中协商的。
支付后,WPA 返回给商家网站。如果支付失败,商家网站会回复失败理由给用户,并允许用户修改支付信息。在用户更新信息后再次发起付款。
对于更具体的支付细节,各位读者可以去看论文,文章写得非常非常详细~
在对 WPA 分析期间,作者发现了两个关键漏洞,并在 Chrome 上验证成功,报告给了 W3C 组织和 Chrome 开发者。
第一个漏洞是双重支付攻击。在正常情况下,商家收到来自 WPA 的付款失败响应时才会让用户重新更改信息后支付。但恶意的商家可以在用户通过支付处理商 A 支付成功后仍然返回错误信息,并指导用户更改支付信息来发起第二次支付。而更改支付信息后的支付处理商 B 无法得知用户先前的支付状态,就会再一次向商家支付这笔钱。W3C 的修改方案是完全不允许再更改支付处理商。
第二个漏洞是支付方式数据的不明确。每个付款请求都包含一个名为 Method Data 的字段,该字段包含可接受的付款方式以及每种付款方法的附加数据(如指定目的账号或手续费)。恶意商家通过发送包含两个附加数据条目,例如一个是收取免费的手续费,另一个是收取高昂手续费。当用户选择了第一个条目后 WPA 交给支付处理商,但 W3C 并没有规范来指定支付处理商选择哪个条目,当选择第二个条目时,用户就在不知情的情况下被扣除了大量费用。最终的修复方法是使浏览器拒绝这种不明确的条目。
在这之后,作者介绍了 WIM 模型。重点是其中的通信模型:
processes:可以是浏览器、服务器或攻击者
events:包含消息、发送者和接收者
equational theory:类似于 dec(enc(x, pub(y)), y) = x 的等式。
script:浏览器中运行的 JavaScript 脚本
system:process 的集合
configuration:包含所有 process 的状态、所有等待的 event、所有未使用过的随机数。
然后,作者指出,WPA 模型包含攻击者、浏览器、商家和支付提供商,其中攻击者和浏览器是标准 WIM 的一部分,其余的需要为 WPA 特别设计。因此,作者为 WIM 添加了一些扩展:
Extensible DOM Event Processing:监听和处理 DOM 事件的机制
Service Workers:提供事件处理功能的 Script
Script API Extensions:添加 WPA 的 API 扩展
在这些扩展的基础上,作者对 WPA 模型进行了形式化建模,并提出了两种安全属性:
付款意图:用户必须有付款意图才可以执行付款操作。
不可重复支付:对同一笔支付请求,只能完成一次支付操作。
然后,作者提出一条定理:一个 WPA Web 系统必须满足这两条安全属性。并通过之前建模的 WPA 模型来证明这条定理的 14 条引理的正确性,从而证明了 WPA 的强安全性。
感兴趣的同学可以去看看原文的证明(足足有50页!)最后给大家出一个问题,WPA 的强安全性是否说明它能够杜绝我们的NDSS 2017论文中提出的所有攻击呢?
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...