2024年下半年的第一篇论文推荐,我们要介绍的是来自宝岛台湾省的一篇Codaspy 2024研究论文_Risky Cohabitation: Understanding and Addressing Over-privilege Risks of Commodity Application Virtualization Platforms in Android_
关于Android app virtualization这个技术,我们在国内对它的研究,肯定比世界其他地方的人要多得多。这个技术最初就是在一些什么多开啊、黑产啊这种领域得到了应用。即使是在学术界,在5年前也已经有相关的论文讨论。下面这张示意图展示的是它的相关技术概念。通俗一点解释,app virtualization实际上就是把普通的app变成一个host app的插件(就把它叫做plugin app好了),在host app自己启动以后,再去加载各种plugin app(至于加载的技术细节就不再赘述了),让本来是运行在独立的sandbox里面的不同app全部变成了这个host app的“傀儡”。
这种运行方式很明显有个问题,本来Android是把不同的app分开管理,给不同的app授予不同的权限,现在你把所有的app都用一个host app来加载运行,为了让各个plugin app都能拿到不同的权限,很明显这个host app得要申请基本上所有的权限(形成一个权限的超集)。更加糟糕的是,由于在这个新的运行模型里面,所有plugin app都运行在host app这一个UID的group里面,实际上它们是共享权限的(准确地说,应该是底层的system service没法区分来自host app的请求究竟是从哪个plugin app发出的)。
本文的作者希望通过一些技术手段,来解决plugin app存在的一类恶意行为——明明没有申请权限,但是利用host app的权限,也实现了相关的资源访问。下图是这种行为的示意,特定的plugin app利用了host app或者其他的plugin app已经申请到手的权限,在不申请某个特定权限的情况下,也可以访问相关的资源。这里感觉作者是很宽容的,要换成Apple那种风格就一刀切了,凭什么允许这种app virtualization这个技术存在?
作者首先通过设计了一个叫做PermLabel
的系统来分析到底什么样的plugin app会干坏事,其实它这个技术也不复杂,就是一边用一个事件触发器去测试app,一边去监控权限的调用,然后分析是否存在上面提到的那种偷偷使用未声明权限的情况:
作者在开发完PermLabel
之后用它来测试了630个可以当作plugin app运行的app(分布:189个来自Google Play,88个来自Huawei市场,119个来自360市场,50个来自腾讯应用宝,184个来自豌豆荚),另外还从AndroZoo里面找了196个malware样本。测试的结果如下表所示,不过这里有点疑问的是,这些app本来肯定不会是按照plugin app的运行方式来设计的,那么它们要使用权限肯定都会去正常请求,作者的这个测试结果是不是想要表达,某些app即使在权限请求被拒以后,还会尝试去使用资源(如果刚好遇到在host app这种环境下就赚到?)
本文比较有意思的地方是作者除了进行分析,还开发了一个增强的权限分配模型系统PermSep
,专门用来对app virtualization环境下的app权限进行细粒度管控,它基于LSPosed这个比较新的instrumentation框架,对运行时的plugin app进行了全面的hook,这样就知道了特定的权限请求是来自哪里,然后可以实施更为细粒度的管控。
在使用了PermSep
之后,传统的权限请求和检查流程就变成了下面这样:
读完这篇论文,其实感觉到作者的思路和技术都不算特别惊世骇俗,但是在现在动不动就搞个大新闻挖个大漏洞的风气下,我们还是能感觉到宝岛研究人员的这种小确幸风格,也希望我们社区的审稿人少一点戾气,多一点人文关怀都能多多支持没那么惊天动地的研究。
论文:https://dl.acm.org/doi/pdf/10.1145/3626232.3653274
Repo:https://github.com/csienslab/overprivilege-app-virtualization