The MiniSec Community

Logo

The webpage of MiniSec Community Datasets & Blogs

View My GitHub Profile

超级应用大揭秘

超级应用是一种新兴的软件生态,它使得一个应用平台可以通过在应用内植入开发环境来允许第三方开发者提供模块化、轻量化、多态化的服务,极大丰富了软件的能力与生态的多样性。在这一生态的加持下,一个用户不需要离开超级应用,就能够通过多种多样的小程序进行日常购物、点单、游戏、社交等多种活动,让软件平台能够确保很高的用户粘性,也使得软件平台能通过互联网服务、开发辅助与广告佣金等形式获取更大利润。同时,这一范式也带起了一片生态链条,使得上游的服务提供方、中游的代开发服务、以及下游的大量商家都能从中获利。在2017年微信公布小程序与超级应用系统之后的这8年里,超级应用这一开发模式在全球获得了很高热度,包括中国、美国、韩国、越南、印度、印度尼西亚、肯尼亚、南非在内的很多互联网平台都逐渐向超级应用转型。然而,超级应用在融合互联网应用与移动运用优点的同时,也变成了一个极为复杂的多方交互系统,它们所管理的资源相比较传统系统更加多样化,也更加敏感,因此吸引了很多黑灰产与攻击者。笔者与笔者导师所在的研究组自2020年开始展开对超级应用安全的研究,并于顶级会议发表论文近10篇。目前,超级应用安全领域仍然有很多安全问题亟待探索。为了让领域同行更加了解超级应用与超级应用安全,本文将从超级应用的定义、历史、技术路线、安全问题、标准制定等多方面入手,为大家详细介绍超级应用安全这个领域。

1. 所以,超级应用究竟是什么?

简而言之,超级应用就是一个软件形态的“操作系统”。正如操作系统需要软件来完成各项工作,要理解超级应用,我们也要从“系统”和“软件”的角度去理解。

从系统的角度来说,超级应用有一套独立的资源以及相应的管理机制。尽管本质上依然是一个应用,微信自己本身也需要管理各种复杂的资源。

这些资源包括从底层系统(安卓、iOS)本身获取到的资源,例如蓝牙、手机联系人等,也更包含大量微信自己保存在云上的用户数据,例如帐号信息、手机号等等。为了保护这些资源,微信甚至自己搞了一套授权机制,与系统的权限机制是独立进行的。也就是说,小程序的用户在安装微信的时候首先需要同意微信获取各种移动系统权限,然后在使用小程序时如果被要求获取账号信息,用户还要再对小程序授权一次……

套娃式权限获取机制 图1:套娃式权限获取机制

恭喜你,你现在已经理解了超级应用和移动系统的关系。那么什么又是小程序呢?我们再类比一下操作系统。当安装软件的时候,我们首先要下载代码包。这个代码包在安装之后,可以被多次执行,用于完成一套模块化的任务。比如Chrome是用来做网页浏览的,淘宝是用于做在线购物的。那么小程序也是一样,也是一套用于完成特定服务的代码包。比如游戏,购物,浏览……但是如果你从微信的小程序商店里点开小程序,你会发现小程序被直接打开了。我的代码包呢?

各类小程序 图2:各类小程序

其实代码包还是在的,只不过小程序包很小,安装过程也被完全自动完成了,不需要用户介入,比如手动点击安装包什么的。所以,从用户角度,点开一个小程序就像点开一个网页,加载一小会界面就出来了。但是如果你打开/data/data/com.tencent.mm/appbrand/…目录,你就会发现一堆.wxapkg。没错,你的小程序都被下载到这里了。

综上所述,如果把超级应用比作一种轻量级、跨平台的“迷你操作系统”,那么小程序就是运行在这个特殊操作系统上的软件。当然,相比传统的操作系统来说,小程序极大程度使用了Web相关的技术,例如H5,例如JavaScript,你也可以用NPM去引入包。当然,超级应用也会提供一些比较方便的功能,例如可以让你使用模板(Template)、组件(Component),甚至直接把插件(Plugin)集成到自己的小程序里…… 不过,超级应用再怎么强大,它自己本身是一个应用,它的执行依赖于操作系统,例如安卓,iOS。只是区别于传统应用,超级应用在应用里内置了一个独立的执行环境,例如v8引擎。不过,既然如今微信这一类超级应用开始支持小程序,从而允许第三方开发者利用微信提供的API获取这些资源来提供定制化服务的时候,微信是不是本身也就变成了一种特殊的操作系统呢?

2. 小程序技术发展史

世界上本没有小程序,应用内页面太难用了,也就慢慢有了小程序。(大雾)

以微信为例,在整个生态的最早期,如果一个用户给另一个用户分享了网页链接,点击网页链接只会打开应用内浏览器。这种最简单的方式,可以让用户不需要离开应用就能浏览用户分享的内容,从而提高用户粘性。然而毕竟这种应用内置浏览器执行时的效率一般,而且极其容易受到网络带宽的影响。想必用过早期微信的小伙伴都有在开着流量的时候等半天白屏的经验……

永远加载不完的白屏 图3:永远加载不完的白屏

执行效率的考量是一方面,从网页开发者的角度来说,还有一层对于功能性的需求。假设我是淘宝这样的在线网购平台,既然我的网页可以在微信里面打开,那可是一个超级好机会啊。微信有上亿的用户,这要是能在微信里面完成购物,得为我带来多少新客户啊。

于是,微信开始尝试魔改用于执行网页的V8引擎,初期的目的是扩展V8引擎的能力,让它无缝接入自己微信应用的原生能力,尤其是在移动支付兴起之后,各方大战,都急需抢占先机。在这样的背景下,一个JavaScript的中间层被塞进了执行环境,从而使得微信能够直接向网页的JavaScript提供支付接口等多样核心能力。这个时候,微信强推的公众号系统也介入了类似能力,使得用户能够在公众号的推送里完成复杂操作。

在完成了功能性扩展之后,微信索性一不做二不休,要去解决白屏与加载慢的问题。对于加载速度,微信在魔改V8引擎的基础上,进一步拆分了渲染和执行逻辑,其中渲染单独占一个线程在前台执行,执行则运行在后台。尽管执行层很难直接对渲染层的HTML(微信叫做WXML)进行动态操作,执行代码过程中改变的程序变量则会在页面中被动态更新,这样既保证了渲染与执行层之间的效率,又能够起到一定的隔离作用。对于白屏问题,其实工程师们发现加载慢的网页往往花费了大量时间去下载资源,而每次打开同一个网页,这些资源又要被重新下载一遍。于是,为什么我们不直接把网页打包下载下来保存在本地,每次打开的时候只进行动态更新呢?基于这样的思路,小程序诞生了。

超级应用架构图 图4:超级应用架构图

因此,我们在这里可以进一步看到,小程序的本质,其实是将一种特殊的“网页”打包保存到本地的技术。围绕这个技术,无论是被“魔改”的执行环境、扩展的核心服务接口,还是单独的小程序市场与分发机制,都是为了小程序执行的效率、功能性、以及安全性服务的。自此,微信通过自己的小程序市场和闭源的开发生态,完全获得了生态的控制权。与安卓等移动系统不同,所有的小程序都必须在经由指定的渠道(微信小程序开发工具)上传、检查并通过之后,才能进入到用户的视野。从某个角度上来说,微信获得了对小程序包完全的控制权,也因此得以对小程序进行多样的安全机制,去保护用户与开发者资源的安全。

3. 小程序框架都有啥

自从2017年微信公布小程序以来,已经过去了七八个年头,在这个过程中,各种超级应用如雨后春笋,像什么支付宝啊,百度啊……你能叫上名字的大厂基本都开始搞了。我们为了搞清楚这个生态里到底有多少玩家也是花了不少力气,原因很简单,那就是各个厂家自己内置的运行环境,都是定制化的,各自的框架也五花八门。更糟糕的是,还有一些“滥竽充数”、“狐假虎威”的应用,号称自己是超级应用,结果打开一看,不是找不到类似小程序的入口,就是“此功能尚未开放”。因此,即使现在,我们也不能说穷尽了市场上所有的超级应用。只不过我们目前的工作,已经找到了超过二十种不同的超级应用,希望能够一窥这个超级应用的世界里各自厂家的风貌——至于是否那些“假”超级应用会不会变成真正的超级应用,又会不会有新的玩家加入进来,这就需要我们共同努力了~

超级应用哪家强 图5:超级应用哪家强

如图所示,我们在看了一堆超级应用之后,大概可以把超级应用分成两种,一种是自己定制运行环境的,一种是“拿来主义”直接弄个WebView就上的。由于这两种技术都深受浏览器内核技术影响,我们在最左侧又增加了一个浏览器插件引擎作为对比。

从图中可以看出,小程序的两种主要架构体现了一定的国别特征。相比较而言,国产的小程序更喜欢使用高度定制化的引擎,尤其是前面讲的那种将渲染与执行分离的魔改版V8引擎。更有意思的是,其实小程序框架“出海”已经在进行中了。例如VodaPay和MPesa这种在非洲运营的超级应用,它们内部的小程序执行框架其实都是支付宝这边来的。

而像Zalo(越南)这种小程序则更喜欢基于现有WebView的解决方案,只是将Zalo自己的一些功能通过JavaScript Bridge与小程序对接。相应的,Zalo小程序本质上其实就是在用Angular开发。

我们尽量保留了WebView的原味,这样你们就会知道自己用的小程序本质是魔改的WebPage 图6:我们尽量保留了WebView的原味,这样你们就会知道自己用的小程序本质是魔改的WebPage

其实如果把我们的目光放远一些,小程序这种东西又何尝必须和超级应用这一个应用绑定?相信用过鸿蒙或者一加的小伙伴都有过被推销“快应用”的经验。快应用其实是中国主流手机厂商推出的一种基于硬件平台的软件生态,用户“无需下载,即点即用,享受原生系统的使用体验”。是不是很耳熟?没错,熟悉的前端技术栈和HTML5的味这不就来了。

所以,无论是依附于移动应用的小程序,还是依附移动系统的快应用,这个生态还在快速膨胀中。道阻且长啊……

4. 道理我都懂,它安全吗?

不。

等一下腾讯大哥…先把刀收起来,让我重新组织一下语言——

其实在小程序框架设计之初,设计者已经考虑了很多安全因素。如果你开发过小程序,应该会很明显地发现无论和移动应用还是和网页应用相比,小程序的很多功能都是受限的 ,比如必须使用HTTPS,比如小程序的存储空间相互隔离,比如获取到的用户userid往往也是以用户维度作为隔离的。可以说,移动和网页侧曾经犯过错误从而催生的解决方案,该修的基本都修了。

但是这就安全了吗?其实并不一定。正如我们之前介绍过的那样,小程序的生态其实是交叉了移动与网页生态,而作为支撑平台的超级应用,自己又在这个生态系统里占据了一个极为重要的位置。因此超级应用需要解决的问题,远比移动与网页应用需要解决的要多。

移动vs网页vs超级应用 图7:移动vs网页vs超级应用

要怎么理解这个问题呢?我们来做个对比。在网页应用里,代码前端是在浏览器里、后端是在开发者云服务器执行的。这里并没有一个中心化的平台去管理全部的资源。换句话说,可以说网页应用的世界本质上是偏向去中心化的。那么传统移动系统呢,总该有一个移动操作系统来管理资源了吧?

诚然作为运行时提供方的移动系统需要管理大量用户设备上的资源,也因此有了很多安全机制被超级应用借鉴,例如权限管理,沙盒隔离等等。但是从核心资源与服务的角度,安卓与iOS并不深度管理云端资源,而这些云端资源在系统设计之初就是让开发者来管理的。例如一个facebook的应用或许会保存大量的用户数据,但是这些用户数据是应用开发者负责保存与管理的,与安卓无关。但是到超级应用,这个情况就很不一样了。作为超级应用的大厂,无论腾讯,百度,支付宝,还是Zalo和Grab,它们都需要处理与负责海量的用户数据,这些数据最终是要(通过一定的安全获取协议)分发给第三方开发者的。那么这里就必然牵扯出一个本质区别,相信读者小伙伴们也感觉到了——

那就是平台方的责任分配的问题。显然,在小程序生态之中,超级应用储存、管理、保护资源的义务是十分重要的。遗憾的是,超级应用它不但要处理本地与云端的资源,对于这些资源从小程序生态内部到开发者云端的分发也是负有责任的。作为第一个吃螃蟹的人,自然有考虑不周之处。我们能做的,只有帮助他们发现隐藏的风险!

超级应用的复杂世界 图8:超级应用的复杂世界

笔者以及笔者导师牵头的团队(OSU SecLab)早在2020年就开始深入分析小程序领域的安全隐患,我们也十分荣幸地看到近年来越来越多的安全研究者进入了这个领域。如今,这些工作涵盖了小程序安全的很多方面,例如超级应用资源管理 [1]、平台框架的隐藏API [2]、跨平台访问权限 [3]、WebView身份认证 [4,5],再到小程序端侧的密钥管理 [6,7]、跨小程序通信机制 [8,9],隐私泄露 [10,11,12],以及小程序恶意应用分析 [13]等等。由于篇幅限制,具体工作内容暂不介绍了,有兴趣的小伙伴欢迎戳下面的引用链接。感兴趣的话也欢迎加入咱们的小程序安全组织MiniSec (minisec.github.io)!

5. 小程序标准化:下一个阶段?

既然我们前面讲了小程序面临的诸多挑战,那么超级应用厂商们是如何尝试解决这些问题的呢?除了各自平台针对自己运行环境进行的优化与防御,我们看到欧洲的W3C以及部分厂商,包括英特尔、阿里巴巴、百度、中国移动,以及小米和华为等公司,已经参与了W3C小程序标准工作组的组件,行动起来,为小程序制定一套标准化执行框架。

类小程序生态 图9:类小程序生态

从更广义的角度来讲,如果我们把“在一个软件里允许第三方轻量化、自限性服务执行”作为特征,其实聊天机器人(Discord Chatbot)、编辑器插件(VSCode Extension)、脸书与谷歌的Instant Game、安卓的Instant App,甚至鸿蒙的原子服务、一加的快应用,都可以被算作一种超级应用生态。一方面是软件平台提供基础服务,另一方面是第三方开发者利用这些服务的便利性为用户提供多样化的体验。这样,整个超级应用的生态便被极大拓展,不仅仅局限于微信小程序这种生态,大家大展身手的时候到了!

W3C MiniApp Working Group大事记 图10:W3C MiniApp Working Group大事记

可以看到,从2019年开始,关于小程序技术标准化的白皮书就已经在制定之中了。当然,为这样复杂的一个生态指定标准绝非易事,如今五年过去,我们尚有很多问题需要更好的解决方案,例如全方位的安全机制、隐私保护机制、小程序测试协议与套件,具体到对小程序的资源共享、分发机制、以及数据完整性的保护。在可预见的未来,作为安全研究者与开发者,我们希望能够吸引更多的研究者进入这个领域,聚集更多力量来一起为这个生态系统添砖加瓦。

6. 展望未来

从上面的介绍可以看到,作为承载超级应用多样性与易用性的小程序,尽管功能强大、灵活多变,却也让超级应用平台面临诸多挑战。理想是丰满的,现实是复杂的。超级应用安全涉及到移动安全、网络安全、安全合规、程序分析、恶意软件检测等诸多方面。作为MiniSec的第一篇博文,我们希望用这篇文章简要介绍超级应用的现状与面临的挑战,也是为了宣传我们即将在这个小社区中开展的交流活动。我们诚挚邀请各位相关领域的小伙伴们加入这个新领域,一起为这个超过十亿活跃用户的庞大生态添砖加瓦~

作者介绍

Yuqing Yang is a final-year PhD Candidate in The Ohio State University, and the invited expert of W3C MiniApp Working Group. His research interest lies in security for emerging web and mobile platform, vulnerability and malware detection, and program analysis. He has published 7 research papers on prestige conferences including SIGMETRICS, ACM CCS, NDSS, and ICSE, covering a wide range of security analysis for front-end and back-end vulnerability detection, malware identification, and anti-vetting techniques. His findings have been acknowledged by pioneering super app platforms including WeChat and Baidu, which influenced the landscape of super app security mechanisms.

引用:

[1] Haoran Lu, Luyi Xing, Yue Xiao, Yifan Zhang, Xiaojing Liao, XiaoFeng Wang, and Xueqiang Wang. Demystifying resource management risks in emerging mobile app-in-app ecosystems. In Proceedings of the 2020 ACM SIGSAC conference on computer and communications Security, pages 569–585, 2020

[2] Chao Wang, Yue Zhang, and Zhiqiang Lin. Uncovering and exploiting hidden apis in mobile super apps, 2023.

[3] Chao Wang, Yue Zhang, and Zhiqiang Lin. Root free attacks: Exploiting mobile platform’s super apps from desktop. In Proceedings of the 19th ACM Asia Conference on Computer and Communications Security, ASIA CCS ’24, pages 830–842, New York, NY, USA, 2024. Association for Computing Machinery.

[4] Lei Zhang, Zhibo Zhang, Ancong Liu, Yinzhi Cao, Xiaohan Zhang, Yanjun Chen, Yuan Zhang, Guangliang Yang, and Min Yang, Identity Confusion in WebView-based Mobile App-in-app Ecosystems, in the Proceedings of USENIX Security Symposium, 2022.

[5] Zhibo Zhang, Zhangyue Zhang, Keke Lian, Guangliang Yang, Lei Zhang, Yuan Zhang, and Min Yang. Trusteddomain compromise attack in app-in-app ecosystems. In Proceedings of the 2023 ACM Workshop on Secureand Trustworthy Superapps, SaTS ’23, page 51–57, New York, NY, USA, 2023. Association for Computing Machinery

[6] Yue Zhang, Yuqing Yang, and Zhiqiang Lin. Don’t leak your keys: Understanding, measuring, and exploiting the appsecret leaks in mini-programs. arXiv preprint arXiv:2306.08151, 2023.

[7] Yizhe Shi, Zhemin Yang, Kangwei Zhong, Guangliang Yang, Yifan Yang, Xiaohan Zhang, and Min Yang. The skeleton keys: A large scale analysis of credential leakage in mini-apps. In 32nd Network and Distributed Systems Security Symposium (NDSS), 2025.

[8] Yuqing Yang, Yue Zhang, and Zhiqiang Lin. Cross miniapp request forgery: Root causes, attacks, and vulnerability detection. In Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Security, pages 3079–3092, 2022.

[9] Chao Wang, Ronny Ko, Yue Zhang, Yuqing Yang, and Zhiqiang Lin. Taintmini: Detecting flow of sensitive data in mini-programs with static taint analysis. In 2023 IEEE/ACM 45th International Conference on Software Engineering (ICSE), pages 932–944, 2023.

[10] Zhibo Zhang, Lei Zhang, Guangliang Yang, Yanjun Chen, Jiahao Xu, and Min Yang. The dark forest: Understanding security risks of cross-party delegated resources in mobile app-in-app ecosystems. IEEE Transactions on Information Forensics and Security, 19:5434–5448, 2024.

[11] Shuai Li, Zhemin Yang, Yunteng Yang, Dingyi Liu, and Min Yang. Identifying cross-user privacy leakage in mobile mini-apps at a large scale. IEEE Transactions on Information Forensics and Security, 19:3135–3147, 2024

[12] Yin Wang, Ming Fan, Junfeng Liu, Junjie Tao, Wuxia Jin, Qi Xiong, Yuhao Liu, Qinghua Zheng, and Ting Liu. Do as you say: Consistency detection of data practice in program code and privacy policy in mini-app, 2023.

[13] Yuqing Yang, Yue Zhang, and Zhiqiang Lin. Understanding the miniapp malware: Identification, dissection, and characterization. In 32nd Network and Distributed Systems Security Symposium (NDSS), 2025.