开发者社区 问答 正文

Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言

如果不知道zygote是什么,或者好奇zygote如何启动,可以去看老罗的文章:
Android系统进程Zygote启动过程的源代码分析



所有Android应用进程都是zygote fork出来的,新fork出来的应用进程还保持着root权限,这显然是不被允许的,所以这个fork出来的子进程的权限需要被降级,本文说的就是Android源码在什么地方执行了权限降级的操作。


执行路径


下面的runSelectLoop方法是类ZygoteInit的成员方法,它在文件”frameworks/base/core/java/com/android/internal/os/ZygoteInit.java”中,下面是它的源码:





zygote会在这个方法中等待客户端通知启动一个新的应用程序,详情可以看前言部分列出的文章。现在我们关心的是done = peers.get(index).runOnce();语句,这个语句调用了runOnce方法启动了一个新的应用进程,runOnce方法是ZygoteConnection类的成员方法,下文从runOnce方法开始分析。


ZygoteConnection.runOnce方法在文件”frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java”中,下面是它的源码:





parsedArgs中保存了要启动的应用的信息,它的类型是Arguments,Arguments是ZygoteConnection的内部类。
runOnce方法中调用了Zygote.forkAndSpecialize方法,这个方法在文件”frameworks/base/core/java/com/android/internal/os/Zygote.java”中,下面是它的源码:





在这个方法中调用了nativeForkAndSpecialize方法。
nativeForkAndSpecialize是一个native方法,在native代码中它的函数名是com_android_internal_os_Zygote_nativeForkAndSpecialize,这个函数在文件”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,下面是它的源码:




在这个函数中调用了ForkAndSpecializeCommon函数。

子进程权限降级函数

ForkAndSpecializeCommon函数在文件”frameworks/base/core/jni/com_android_internal_os_Zygote.cpp”中,在这个函数中调用了fork函数,并且fork出的子进程将自身权限降级,下面是它的源码:





在这个函数中子进程分别调用了SetGids、SetRLimits、setresgid、setresuid,设置了组ID和用户ID将自身权限降级。





作者:寻禹@阿里移动安全,更多安全技术博客,请点击阿里聚安全博客


展开
收起
移动安全 2016-05-10 15:08:25 5070 分享 版权
阿里云 AI 助理回答

从您的描述中,可以看出您对Android系统中Zygote进程如何启动新应用进程并进行权限降级有深入的了解。在阿里云的场景下,虽然直接关联性不大,但我们可以探讨一下与安全、容器化、以及云上应用管理相关的概念,这些间接地与Zygote处理进程和权限的方式有所呼应。

  1. 容器服务ACK(Alibaba Cloud Container Service for Kubernetes):在阿里云上,通过容器服务ACK来管理和部署应用时,每个容器实际上也是一个隔离的运行环境,类似于Android中的应用进程。虽然技术栈不同,但容器服务也涉及到资源隔离、权限控制等,确保容器内的应用不会影响到宿主机或其他容器的安全。

  2. 安全策略与身份管理RAM(Resource Access Management):在阿里云平台上,通过RAM可以实现细粒度的访问控制,为不同的用户、服务或系统分配不同的权限,这与Android系统中应用程序权限降级有着相似的目标——确保每个实体只拥有完成其任务所需的最小权限,增强系统的安全性。

  3. 云原生安全实践:虽然不直接涉及Zygote机制,但在设计和部署云原生应用时,遵循最佳安全实践,比如使用Seccomp(Secure Computing Mode)配置来限制容器内进程的系统调用,或者利用Kubernetes的Pod Security Policies来实施更严格的运行时安全策略,都是为了达到类似的效果——限制和降低潜在的攻击面。

  4. 函数计算FC(Function Compute):在无服务器计算模型中,每个函数执行环境也可以看作是一个短暂的“进程”,阿里云的函数计算服务自动管理这些执行环境的生命周期,并且提供了默认的安全策略来保护运行环境,确保函数之间的隔离性和安全性,这与Zygote确保新进程安全启动的理念相契合。

综上所述,尽管阿里云的产品和服务并不直接操作Android的Zygote机制,但它们在提供服务、保障安全、管理资源等方面体现了类似的隔离、权限控制和安全启动的思想。理解这些原理有助于更好地利用云平台上的服务,构建更加安全、高效的应用部署方案。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答