小程序论文阅读笔记

论文记录

Don’t Leak Your Keys: Understanding, Measuring, and Exploiting the AppSecret Leaks in Mini-Programs

小程序,挂在app上,其因规模小、功能丰富的原因,在市场上大受欢迎,这也让app成为了super app,就像为软件提供平台的操作系统一样。同时,作为一种应用,小程序需要通过特定的api来访问后端或云上的数据或服务,也因此,小程序后端的master key(MS)至关重要,它对于小程序来说几乎是root权限的存在,要将MS保存在后端而不能发往前端,否则会造成严重的后果,本文便是基于这个思路所写。

接下来,文章以微信为例,介绍了微信上的小程序的预备知识,下图1是小程序的常用api和云服务,例如获取手机号(在中国,一个app上的手机号即绑定了一个公民的身份)、用户信息,亦或是使用OCR、安全服务等:

相较于传统的app和web服务,小程序天然带有一系列密钥管理和访问协议,确保密钥不会被非法获取,下图是小程序业务流程中主要涉及的四个密钥:

在一次敏感数据访问,通常的业务逻辑是这样的:首先小程序前端(MF)向微信客户端(WC)请求Login Token(LT),WC向微信服务端(WS)请求得到后发给MF,MF再利用LT向小程序后端(MB)发起登陆请求;随后,MB把LT, MK, appID发给WC得到加密密钥(EK);同时MF再次通过WC从WS得到用户的数据,只不过是用EK加密后的密文C。最后,MF把C传给MB,MB用EK对其进行解密,完成一次敏感数据访问。该协议可由下图概括:

与之相比,云服务访问协议就简单很多,只在MB和WS之间发生:只需要MB向WS请求得到AT,即可用AT调用服务:

接下来,作者介绍了小程序密钥的威胁模型,即上述四个密钥的作用和泄露带来的危害;这篇文章聚焦于MK的泄露,因为MK泄露总是能造成EK和AT的泄露,攻击者便可以访问隐私数据以及免费享受云服务功能。

终于到方法论的部分了,作者基于以下五个问题展开:

  • 问题 1:MK 泄露小程序的类别是什么?
  • 问题 2:它们的评级如何?
  • 问题 3:它们获取了哪些资源?
  • 问题 4:它们的开发者是谁?
  • 问题 5:它们的最新更新时间是什么时候?
  • 问题 6:是否有备受瞩目的小程序存在MK泄露?

首先便是数据收集环节,作者通过“Mp.wx.qq.com/wxa-cgi/innersearch” API来批量下载小程序,得到了3,450,586个小程序(太可怕了)。在获取前端代码后,去寻找里面的32个16进制字符串,通过“Api.weixin.qq.com/cgi-bin/token” API确定是否为MK,得到的结果是40,880个小程序存在MK泄露的问题。得到数据集,便可进行分析,回答上述五个问题:

  • 泄露MK的小程序种类多种多样,生活方式和购物类占比最高,工具、政府和游戏类数量较多。
  • 作者基于用户的评分对小程序评级,结果表明,低评级的小程序更容易存在MK泄露。
  • 有24,701个小程序可以通过MK泄露被账户劫持、推广滥用、服务窃取(这些攻击会在下面介绍);同时6,907个小程序没有这样的问题,但不保证以后也不会有。
  • 大多公司只开发了一个存在这种问题的小程序,但也有开发了30个的。
  • 自微信引入小程序的第一年,就存在MK泄露的问题;随着时间推移,漏洞小程序数量在减少。
  • 一些高知名度的公司在多个小程序中犯了同样的错误(如雀巢); 微信提供商腾讯是小程序中出现 MK 泄露的排名第一的公司;一些高知名度公司的小程序只泄露了 MK,而没有访问敏感信息。

然后,作者提出了基于MK泄露的两种攻击,一种是针对敏感数据的,如账户劫持、推广滥用,另一种是针对云服务的,如服务窃取。作者不仅提出攻击,还提出了修复意见和推广这个研究到其他app上,以及表明自己在研究过程中遵守了道德准则,例如每分钟只发送六个爬取小程序的请求、限制确认MK的线程数、保证只使用自己的账户。

最后,介绍了一下近几年有关小程序和密钥泄露的相关研究,并提出总结。

A Measurement Study of Wechat Mini-Apps

这一篇是2021年zhangyue老师的论文,介绍了他们开发的分析微信小程序的工具MiniCrawler,篇幅较短只有2页

引入了小程序的背景后,开始介绍他们的工具,总共分为三个部分:

  1. 元数据爬虫:接受一系列关键词,通过微信的api爬取小程序的信息
  2. 关键词生成器:使用NLP技术分析小程序的名称和描述,生成高质量的关键词
  3. 包下载器:根据appid下载小程序的包

拿到包后,便可以统计小程序的信息,做出归纳推理,文中统计了小程序的大小、常用api、类型、rating(评分?)