端午节来临之际,我们携“G.O.S.S.I.P和朋友”系列来祝大家端午快乐~ 今天要介绍的仍然是来自俄亥俄州立大学 SecLab 的研究成果,第一作者王超在5月刚刚发表了ICSE论文【详见 G.O.S.S.I.P 阅读推荐 2023-05-26 TaintMini】,今天又来给大家介绍他的USENIX Security 2023论文 One Size Does Not Fit All: Uncovering and Exploiting Cross Platform Discrepant APIs in WeChat 【嗯,软广告,要想发表高质量安全论文,请找SecLab或者G.O.S.S.I.P】
在这篇关于小程序安全的最新工作中,作者分析了在微信中,由于跨平台导致小程序产生的安全问题。先来看看背景知识:超级应用(Superapp)是一种允许用户从单个应用程序中访问多种服务的应用程序。如今,有许多受欢迎的移动超级应用,包括咱们中国的微信、抖音和支付宝,印度的Paytm,新加坡的Grab,印度尼西亚的GoTo,越南的Zalo以及韩国的Kakao。在这些移动超级应用中,微信拥有最多的用户,它还提供几乎所有的便捷服务(如购物,打车,医院预约等)。
当然,单个超级应用公司不可能提供所有的日常服务。因此,微信和企业版微信(WeCom)等超级应用已经为第三方开发人员提供了API,用于开发运行在超级应用内部的应用程序。这通常被称为小程序。据估计,微信中有超过430万个小程序。通过提供小程序,可以实现超级应用提供商和第三方开发人员的双赢局面,因为这样提供更多的服务(导致更多的用户使用平台),而单个小程序可以在多个平台上运行(例如Android和iOS),使用单一的编程语言(例如JavaScript),而不是针对不同平台使用不同的语言,如Objective-C、Java和C/C++。
超级应用最初是为Android和iOS等移动平台设计的,但我们发现越来越多的应用程序,如微信、企业版微信和支付宝,也支持Windows等桌面平台。其中,微信更是野心勃勃地表示可以允许所有的小程序在桌面系统上运行。然而,当在这些平台上运行时,小程序可能会因为API实现的差异而表现出不同的行为。例如,运行在Windows上的微信允许小程序在未经用户同意的情况下访问麦克风(通过API wx.record),为恶意软件秘密录制音频并侵犯用户隐私留下了漏洞。因此,有必要系统地识别微信中的所有潜在的平台不一致的API(因为目前它是唯一支持桌面平台上的小程序的平台),并提供具体的演示以展示它们如何被利用。
工具设计
APIDIFF架构
本文介绍了一个名为APIDIFF的自动工具,该工具可以识别不同平台和设备上的小程序API存在的差异。APIDIFF由三个关键组件组成。
-
测试用例生成器:对于每个API,APIDIFF创建一个测试用例,并正确初始化相应的参数。如果一个API的执行依赖于其他API,APIDIFF则去解析执行它们的正确顺序的依赖关系。此外,为了实现对API执行的高覆盖率,必要时还需要对参数的值进行适当变化。
-
代码执行器:为了执行跨平台的差异(即Windows、Android和iOS),APIDIFF必须在这些平台上执行测试用例,生成相应的输出,以便识别可能存在安全问题的差异。
-
差异分析器:为了识别差异的API,APIDIFF使用差异分析和一组预定义策略来检查已测试API的错误代码和返回值,这些值是小程序观察到的。
我们主要通过APIDIFF来识别三类差异:(i)API存在性差异,如在某些平台上存在API,在其他平台上可能不存在;(ii)API权限差异,在某些平台上,API需要某些权限,在其他平台上则不需要;(iii)API输出差异,即即使输入相同,相同的API在不同平台上可能产生不同的结果。
实验结果
在经过测试的小程序API中,APIDIFF已经确定了三组API在不同平台和设备上存在存在性差异(109个)、权限差异(17个)和输出差异(22个)。如表1所示,在Windows和Android之间存在105个API的存在性差异,在Windows和iOS之间存在40个API的存在性差异,在Android和iOS之间存在69个API的存在性差异。与此同时,在Windows和Android之间存在16个API的权限差异,在Windows和iOS之间存在17个API的权限差异,而在Android和iOS之间只有一个API(即蓝牙API)的权限差异。最后,在Windows和Android之间存在8个API的输出差异,在iOS和Windows之间存在12个API的输出差异,在Android和iOS之间存在14个API的输出差异。
表1 APIDIFF的结果总结
以权限差异举例,我们总共确定了17个存在权限差异的API,这些API属于10个类别,如表2所示。同样,我们注意到Windows和iOS的差异性较大,而Android和iOS的差异性较小。实验结果显示,Windows上的微信不需要用户授予任何权限来访问涉及隐私的资源(如下表所示),因此我们可以简单地创建一个恶意小程序来利用这个漏洞。借助恶意小程序,攻击者可以在用户毫不知情的情况下直接打开麦克风。
表2 权限差异总结
安全问题和影响
我们目前总共识别出来三种类型的安全问题和攻击,对应于上述三种类型的API差异:
-
由于API存在差异性而导致的攻击,在某些平台上缺乏为安全而设计的API,从而允许攻击者利用这种缺失进行恶意操作。例如,我们注意到Android平台上的微信提供了蓝牙配对的API(该API可以防止中间人攻击与明文窃听),而Windows和iOS则没有提供该API,导致了具有蓝牙功能的小程序可能被类似的攻击所威胁。
-
由于API权限差异而导致的攻击,某些平台缺乏对API访问敏感资源(如位置、摄像头和音频录制器)进行必要检查和权限的机制,从而导致恶意小程序可能导致潜在的隐私泄露。
-
由于API输出差异而导致的攻击,在某些平台上,API暴露指纹识别漏洞,从而导致类似于浏览器指纹识别攻击的攻击。在这种情况下,恶意小程序可以利用特定API输出生成的签名来唯一识别设备。
论文:https://chaowang.dev/publications/sec23a.pdf
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2023-06-21 微信小程序安全分析之APIDIFF