process 类权限详解

1. transition - 进程域转换

作用

允许一个进程启动另一个进程并改变其安全域

使用场景

sepolicy 复制代码
# 允许 init 进程启动 zygote 并转换到 zygote 域
allow init zygote:process transition;

# 允许 shell 启动应用并转换到应用域
allow shell appdomain:process transition;

实际示例

less 复制代码
init进程 (u:r:init:s0)
    ↓ 执行 /system/bin/zygote (u:object_r:zygote_exec:s0)
    ↓ 需要 transition 权限
zygote进程 (u:r:zygote:s0)  ← 域转换完成

2. signal - 进程信号控制

作用

允许一个进程向另一个进程发送信号

具体信号权限

sepolicy 复制代码
# 基本信号权限
allow source_target target_type:process signal;

# 更细粒度的信号控制
allow source_target target_type:process {
    sigchld   # 子进程状态改变
    sigkill   # 强制终止
    sigstop   # 暂停执行  
    signull   # 空信号(测试进程存在)
    sigterm   # 终止请求
};

使用场景

sepolicy 复制代码
# 允许 init 向所有进程发送 SIGKILL
allow init domain:process sigkill;

# 允许 system_server 向应用发送 SIGTERM
allow system_server appdomain:process sigterm;

# 允许父进程接收子进程的 SIGCHLD
allow zygote appdomain:process sigchld;

3. ptrace - 进程调试和跟踪

作用

允许一个进程调试、跟踪另一个进程

具体权限

sepolicy 复制代码
allow debugger_app target_app:process {
    ptrace    # 跟踪目标进程
    getattr   # 获取进程属性
    trace     # 跟踪执行
};

使用场景

sepolicy 复制代码
# 允许调试器应用调试普通应用
allow untrusted_app debugger_app:process ptrace;

# 允许系统工具进程监控其他进程
allow system_server appdomain:process { ptrace getattr };

4. execmem - 执行内存分配

作用

允许进程分配可执行的内存页

使用场景

sepolicy 复制代码
# 允许 JIT 编译器生成和执行代码
allow system_app self:process execmem;

# 允许动态代码生成的应用程序
allow untrusted_app self:process execmem;

具体应用

  • JIT 编译器(Java、JavaScript)
  • 动态代码生成
  • 自修改代码
  • 插件系统

完整权限示例

基础进程权限集

sepolicy 复制代码
# 允许进程基本操作
allow my_daemon self:process {
    fork        # 创建子进程
    sigchld     # 处理子进程信号
    execmem     # 分配可执行内存
    execstack   # 执行栈内存
    noatsecure  # 忽略 AT_SECURE 标志
};

域转换完整配置

sepolicy 复制代码
# 完整的域转换权限集
allow init my_daemon_exec:file { execute read open getattr map };
allow init my_daemon:process transition;
allow my_daemon my_daemon_exec:file entrypoint;
type_transition init my_daemon_exec:process my_daemon;

进程间通信权限

sepolicy 复制代码
# 进程间信号通信
allow process_a process_b:process {
    signal   # 发送基本信号
    sigchld  # 子进程状态通知
    sigkill  # 强制终止
};

# 进程调试权限
allow debugger target_process:process {
    ptrace    # 进程跟踪
    getattr   # 获取进程属性
    trace     # 执行跟踪
};

实际策略案例分析

案例1:系统服务启动子进程

sepolicy 复制代码
# system_server 启动媒体服务
allow system_server mediaserver:process transition;
allow system_server mediaserver_exec:file execute;

# mediaserver 需要的基本权限
allow mediaserver self:process {
    fork      # 创建子进程(如果需要)
    sigchld   # 处理子进程信号
    execmem   # 媒体编解码可能需要 JIT
};

案例2:调试器配置

sepolicy 复制代码
# 调试器应用权限
allow debugger_app untrusted_app:process {
    ptrace    # 跟踪目标进程
    getattr   # 获取进程状态
    signal    # 发送控制信号
};

# 目标应用允许被调试
allow untrusted_app debugger_app:process ptrace;

案例3:自定义守护进程

sepolicy 复制代码
type my_daemon, domain;
type my_daemon_exec, exec_type, file_type;

init_daemon_domain(my_daemon)

# 基础进程权限
allow my_daemon self:process {
    fork      # 可能创建工作者进程
    sigchld   # 处理子进程
    execmem   # 动态代码生成
    signal    # 向自身发送信号
};

# 允许接收来自 init 的信号
allow init my_daemon:process signal;

安全注意事项

1. execmem 的风险

sepolicy 复制代码
# 危险:过于宽泛的 execmem 权限
allow untrusted_app *:process execmem;

# 安全:限制范围
allow jit_compiler_app self:process execmem;

2. ptrace 的隐私问题

sepolicy 复制代码
# 只允许特定调试器使用 ptrace
neverallow { domain -debugger_app } appdomain:process ptrace;

3. signal 的滥用防护

sepolicy 复制代码
# 禁止普通应用向系统进程发送信号
neverallow appdomain system_server:process signal;

调试技巧

查看进程权限拒绝

bash 复制代码
# 查找进程相关的 AVC 拒绝
adb logcat | grep "avc:.*process"

# 示例输出
avc: denied { transition } for pid=1234 comm="init" 
scontext=u:r:init:s0 tcontext=u:r:my_daemon:s0 tclass=process

avc: denied { execmem } for pid=5678 comm="my_app" 
scontext=u:r:untrusted_app:s0 tcontext=u:r:untrusted_app:s0 tclass=process

权限检查命令

bash 复制代码
# 检查进程权限
sesearch -A -s system_server -t mediaserver -c process
sesearch -A -s untrusted_app -c process -p execmem

总结

这些 process 类权限构成了 Android 进程管理和安全的基础:

  • transition - 控制进程域转换和安全上下文继承
  • signal - 管理进程间通信和生命周期控制
  • ptrace - 启用调试和性能分析功能
  • execmem - 支持动态代码生成和 JIT 编译
相关推荐
似霰6 小时前
AIDL Hal 开发笔记2----AIDL HAL 实例分析light hal
android·framework·hal
—Qeyser6 小时前
Flutter 颜色完全指南
android·flutter·ios
2501_916008898 小时前
iOS 上架需要哪些准备,账号、Bundle ID、证书、描述文件、安装测试及上传
android·ios·小程序·https·uni-app·iphone·webview
摘星编程10 小时前
React Native for OpenHarmony 实战:DatePickerAndroid 日期选择器详解
android·react native·react.js
花卷HJ12 小时前
Android 沉浸式全屏实践:主题 + 状态栏文字颜色完整方案
android
花卷HJ13 小时前
Android 项目中 BaseActivity 封装实践(支持 ViewBinding、PermissionUtils动态权限、加载弹窗和跳转动画)
android
消失的旧时光-194315 小时前
Android 接入 Flutter(Add-to-App)最小闭环:10 分钟跑起第一个混合页面
android·flutter
城东米粉儿15 小时前
android StrictMode 笔记
android
Zender Han15 小时前
Flutter Android 启动页 & App 图标替换(不使用任何插件的完整实践)
android·flutter·ios
去哪儿技术沙龙15 小时前
Qunar酒店搜索排序模型的演进
前端·架构·操作系统