如何获取特定Android版本SELinux的Never Allow规则并比对定制设备规则
提取并比对AOSP与定制设备的SELinux Never Allow规则
一、从AOSP提取Never Allow规则
AOSP的SELinux Never Allow规则以明文形式存于policy源码文件中,提取步骤如下:
- 定位核心policy目录:
${AOSP_ROOT}/system/sepolicy,部分设备专属规则在${AOSP_ROOT}/vendor/sepolicy - 用grep批量过滤有效规则(排除注释行):
grep -r "neverallow" ${AOSP_ROOT}/system/sepolicy ${AOSP_ROOT}/vendor/sepolicy | grep -v "#" > aosp_neverallow.txt - 注意:不同Android版本的policy目录结构有差异,需根据实际版本调整搜索路径。
二、从定制设备提取Never Allow规则(解决sesearch无输出问题)
预编译二进制policy可能经过优化或压缩,sesearch无输出通常是「设备已移除neverallow规则」或「工具版本/参数不匹配」导致,可按以下流程处理:
- 导出设备二进制policy
adb pull /sys/fs/selinux/policy ./device_policy # 若路径不存在,尝试拉取/sepolicy或/vendor/etc/selinux/vendor_sepolicy.cil - 验证policy是否包含neverallow规则
使用seinfo查看policy统计信息,确认是否存在neverallow条目:
若输出无seinfo --stats device_policyneverallow相关统计,说明定制设备已移除所有该类规则。 - 提取有效规则
- 若policy包含neverallow但sesearch无输出,改用
sedta(SELinux策略分析工具包)解析:sedta parse device_policy --neverallow > device_neverallow.txt - 若设备采用分段policy(主policy+vendor policy),需先合并再解析:
policymerge device_policy vendor_sepolicy.cil merged_policy sedta parse merged_policy --neverallow > device_neverallow.txt
- 若policy包含neverallow但sesearch无输出,改用
三、规则比对方法
- 统一AOSP与设备规则的格式(去除多余空格、统一规则排序)
- 用diff工具做文本比对:
diff aosp_neverallow.txt device_neverallow.txt > policy_diff.txt - 重点排查差异点:
- 定制设备删除AOSP原有neverallow规则
- 定制设备新增的neverallow规则(需评估是否为合理定制)
- 规则中主体、客体或权限的修改(如放宽限制)
参考研究内容
2021年Oakland学术会议相关研究指出,多数Android定制ROM会通过修改SELinux策略适配自定义功能,其中常见操作包括移除或弱化Never Allow规则,但此类修改往往会引入潜在安全漏洞。研究中推荐的核心方法即为:解析二进制SELinux策略提取Never Allow规则,与AOSP基线规则进行比对,以此检测定制ROM中的非授权策略篡改。
内容的提问来源于stack exchange,提问作者Vamsi Simhadri
相关产品推荐
相关产品推荐

