14、Android 安全策略构建与管理指南

Android 安全策略构建与管理指南

1. 控制策略构建

1.1 build_policy 函数概述

sepolicy 语句会调用 build_policy 函数,该函数在 Android.mk 文件中用于构建 sepolicy、file_contexts、seapp_contexts、property_contexts 和 mac_permissions.xml 等文件,十分重要。它会输出一个完全解析的策略文件路径列表,输入为可变参数的文件名列表,并支持正则表达式。该函数内部有特殊机制,允许在不直接修改 external/sepolicy 目录的情况下,覆盖或追加当前策略构建内容,方便 OEM 和设备制造商为特定设备增强策略。

1.2 控制构建的 make 变量

在构建策略时,可在设备的 Makefile 中设置以下 make 变量来控制构建结果:
| 变量名 | 描述 |
| ---- | ---- |
| BOARD_SEPOLICY_DIRS | 潜在策略文件的搜索路径 |
| BOARD_SEPOLICY_UNION | 用于追加到所有同名文件的策略文件 |
| BOARD_SEPOLICY_REPLACE | 用于覆盖外部 sepolicy 基础策略文件的策略文件 |
| BOARD_SEPOLICY_IGNORE | 根据存储库的相对路径,从构建中移除特定策略文件 |

1.3 以 UDOO 为例的策略编写步骤

  1. 创建目录:
$ mkdir <PATH>
  1. 修改 BoardConfig.mk 文件:
$ vim BoardConfig.mk
  1. 添加搜索路径:
BOARD_SEPOLICY_DIRS += device/fsl/udoo/sepolicy

注意:使用 += 而非 := ,避免覆盖上级设置。更多细节可参考 GNU make 手册 中的变量赋值部分。

  1. 创建 file_contexts 文件并移动更改:在 device/fsl/udoo/sepolicy 目录下创建新的 file_contexts 文件。

  2. 合并文件:在 BoardConfig.mk 文件中添加以下语句:

BOARD_SEPOLICY_UNION += file_contexts

还可添加其他策略文件,如:

BOARD_SEPOLICY_UNION += file_contexts watchdog.te custom.te
  1. 覆盖文件:若要覆盖外部 sepolicy 的 watchdog.te 文件,可添加到 BOARD_SEPOLICY_REPLACE:
BOARD_SEPOLICY_REPLACE := watchdog.te

注意:不能替换基础策略中不存在的文件,且同一文件不能同时出现在 UNION 和 REPLACE 中,也不能对同一策略文件有多个 BOARD_SEPOLICY_REPLACE 规范。

1.4 分层构建示例

假设有设备 X 和设备 Y,它们都从设备 A 继承 BoardConfigCommon.mk。
设备 A 的 BoardConfigCommon.mk 包含:

BOARD_SEPOLICY_DIRS += device/OEM/A
BOARD_SEPOLICY_UNION += file_contexts custom.te

设备 X 的 BoardConfig.mk 包含:

BOARD_SEPOLICY_DIRS += device/OEM/X
BOARD_SEPOLICY_UNION += file_contexts custom.te

设备 Y 的 BoardConfig.mk 包含:

BOARD_SEPOLICY_DIRS += device/OEM/Y
BOARD_SEPOLICY_UNION += file_contexts custom.te

构建设备 X 和设备 Y 的策略集如下:
- 设备 X 策略集:
- device/OEM/A/file_contexts
- device/OEM/A/custom.te
- device/OEM/X/file_contexts
- device/OEM/X/custome.te
- external/sepolicy/ (基础策略文件)
- 设备 Y 策略集:
- device/OEM/A/file_contexts
- device/OEM/A/custom.te
- device/OEM/Y/file_contexts
- device/OEM/Y/custom.te
- external/sepolicy/
(基础策略文件)

若不想设备 Y 的策略集包含 device/OEM/A/custom.te,可在设备 Y 的 BoardConfig.mk 中添加:

BOARD_SEPOLICY_IGNORE += device/OEM/A/custom.te

BOARD_SEPOLICY_IGNORE 可与 BOARD_SEPOLICY_REPLACE 一起使用,但同一策略文件只有一个 BOARD_SEPOLICY_REPLACE 语句生效。

1.5 build_policy 函数深入剖析

1.5.1 sepolicy_replace_paths 变量

该变量在 Makefile 评估时被无条件执行。代码会遍历所有 BOARD_SEPOLICY_REPLACE 文件,检查是否在 BOARD_SEPOLICY_UNION 中,若存在则报错。然后扩展这些文件路径,过滤掉 BOARD_SEPOLICY_IGNORE 中的文件,确保只有一个替换文件候选,最后检查文件是否存在于 LOCAL_PATH 或基础策略中:

sepolicy_replace_paths :=
$(foreach pf, $(BOARD_SEPOLICY_REPLACE), \
  $(if $(filter $(pf), $(BOARD_SEPOLICY_UNION)), \
    $(error Ambiguous request for sepolicy $(pf). Appears in both \
      BOARD_SEPOLICY_REPLACE and BOARD_SEPOLICY_UNION), \
  ) \
  $(eval _paths := $(filter-out $(BOARD_SEPOLICY_IGNORE), \
  $(wildcard $(addsuffix /$(pf), $(BOARD_SEPOLICY_DIRS))))) \
  $(eval _occurrences := $(words $(_paths))) \
  $(if $(filter 0,$(_occurrences)), \
    $(error No sepolicy file found for $(pf) in $(BOARD_SEPOLICY_DIRS)), \
  ) \
  $(if $(filter 1, $(_occurrences)), \
    $(eval sepolicy_replace_paths += $(_paths)), \
    $(error Multiple occurrences of replace file $(pf) in $(_paths)) \
  ) \
  $(if $(filter 0, $(words $(wildcard $(addsuffix /$(pf), 
$(LOCAL_PATH))))), \
    $(error Specified the sepolicy file $(pf) in BOARD_SEPOLICY_REPLACE, \
      but none found in $(LOCAL_PATH)), \
  ) \
)
1.5.2 build_policy 函数

该函数的参数是要扩展为 Android 根相对路径名的文件名,利用 BOARD_SEPOLICY_* 系列变量的功能。例如, $(build_policy, file_contexts) 调用会输出相关路径。函数会遍历所有传入的文件,分别对替换和合并操作进行路径扩展,检查 sepolicy_replace_paths 变量避免文件重复,最后过滤掉 BOARD_SEPOLICY_IGNORE 中的路径:

build_policy = $(foreach type, $(1), \
  $(filter-out $(BOARD_SEPOLICY_IGNORE), \
    $(foreach expanded_type, $(notdir $(wildcard $(addsuffix /$(type), 
$(LOCAL_PATH)))), \
      $(if $(filter $(expanded_type), $(BOARD_SEPOLICY_REPLACE)), \
        $(wildcard $(addsuffix $(expanded_type), $(sort $(dir 
$(sepolicy_replace_paths))))), \
        $(LOCAL_PATH)/$(expanded_type) \
      ) \
    ) \
    $(foreach union_policy, $(wildcard $(addsuffix /$(type), 
$(BOARD_SEPOLICY_DIRS))), \
      $(if $(filter $(notdir $(union_policy)), $(BOARD_SEPOLICY_UNION)), \
        $(union_policy), \
      ) \
    ) \
  ) \
)

1.6 构建 mac_permissions.xml

mac_permissions.xml 的构建较为复杂。它可使用所有 BOARD_SEPOLICY_* 变量,最终生成一个符合这些变量规则的 XML 文件。原始 XML 文件由 sepolicy/tools 中的 insertkeys.py 工具处理,该工具使用 keys.conf 将 XML 文件签名部分的标签与包含证书的 .pem 文件映射。构建过程先对 keys.conf 调用 build_policy 并使用 m4 拼接结果,然后将 keys.conf 和 build_policy() 调用得到的所有 mac_permissions.xml 文件输入 insertkeys.py 工具,该工具会替换签名行,合并 XML 文件并去除空白和注释。此构建与 sepolicy、seapp_contexts、property_contexts 等主要文件无依赖关系。

1.7 构建其他文件

1.7.1 seapp_contexts 文件

该文件受所有 BOARD_SEPOLICY_* 变量影响。build_policy() 调用得到的所有 seapp_contexts 文件会通过 m4 -s 处理,生成包含同步行的单个文件,然后输入 check_seapp 工具检查语法,确保键值对有效、levelFrom 是有效标识符,以及类型和域字段对给定 sepolicy 有效。此构建依赖 sepolicy 进行严格类型检查。

1.7.2 file_contexts 文件

同样受所有 BOARD_SEPOLICY_* 变量影响。结果集通过 m4 -s 处理,单个输出由 checkfc 工具检查语法和类型是否存在于构建的 sepolicy 中,依赖 sepolicy 构建。

1.7.3 property_contexts 文件

处理方式与 file_contexts 构建类似,只是检查的是 property_contexts 文件,也使用 checkfc 工具。

1.8 NSA 研究文件

NSA 的 Enterprise Operations (eops) 工作正在进行中,但该功能未合并到主流 Android 且可能变化较大,此处不做介绍。selinux-network.sh 也属于此类,尚未被广泛采用,可能会从 AOSP 中移除。

1.9 独立工具

1.9.1 sepolicy-check

用于检查给定允许规则是否存在于策略文件中,基本语法为:

sepolicy-check -s <domain> -t <type> -c <class> -p <permission> -P <policy_file>

例如,检查 system_app 是否能对 system_data_file 进行写操作:

$ sepolicy-check -s system_app -t system_data_file -c file -p write -P $OUT/root/sepolicy
1.9.2 sepolicy-analyze

用于检查 SELinux 开发中的常见问题,可检查等效域、重复允许规则和策略类型差异:
- 检查等效域:

$ sepolicy-analyze -e -P $OUT/root/sepolicy
  • 检查重复允许规则:
$sepolicy-analyze -D -P $OUT/root/sepolicy
  • 检查类型差异:
$sepolicy-analyze -d -P $OUT/root/sepolicy

1.10 进入强制模式

1.10.1 目标

作为工程师,要将 SE for Android 控制应用到 Android 设备以增强安全性。具体操作包括运行、评估和响应 CTS 审计日志,为 UDOO 开发安全策略,切换到强制模式。

1.10.2 更新到 SEPolicy 主分支

自 4.3 版本发布以来,AOSP 主分支的 sepolicy 目录有很多更改。可按以下步骤操作:
1. 克隆外部 sepolicy 项目:

$ git clone https://android.googlesource.com/platform/external/sepolicy
$ cd sepolicy
  1. 可选:若要精确跟随示例,可检出特定提交:
$ git checkout b5ffb
  1. 替换 UDOO 4.3 sepolicy:
$ cd ..
$ rm -rf udoo/external/sepolicy
$ cp -r sepolicy udoo/external/sepolicy
  1. 可选:移除 .git 文件夹:
$ rm –rf udoo/external/sepolicy/.git
  1. 复制并恢复 audit.te 文件。
  2. 从 NSA Bitbucket seandroid 存储库恢复 auditd 提交(提交 SHA 为 d270aa3)。
  3. 移除 udoo/build/core/Makefile 中所有对 setool 的引用,可使用以下命令定位:
$ grep -nw setool udoo/build/core/Makefile

通过以上步骤,我们详细介绍了 Android 安全策略的构建、管理和相关工具的使用,以及如何将 UDOO 设备切换到强制模式,希望能帮助你更好地理解和应用 Android 安全策略。

2. 策略构建与管理总结

2.1 策略构建关键变量总结

变量名 作用 使用注意事项
BOARD_SEPOLICY_DIRS 定义潜在策略文件的搜索路径 使用 += 避免覆盖上级设置
BOARD_SEPOLICY_UNION 用于将指定策略文件合并到同名文件中 文件名匹配仅基于基本名称,同一文件不能同时出现在 UNION 和 REPLACE 中
BOARD_SEPOLICY_REPLACE 用于覆盖基础策略文件 不能替换基础策略中不存在的文件,且同一文件不能有多个替换规范
BOARD_SEPOLICY_IGNORE 从构建中移除特定策略文件 使用存储库的相对路径指定要移除的文件

2.2 构建流程总结

以下是各文件构建的流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始]):::startend --> B(设置 BOARD_SEPOLICY_* 变量):::process
    B --> C(调用 build_policy 函数):::process
    C --> D{构建文件类型}:::decision
    D -->|mac_permissions.xml| E(insertkeys.py 处理):::process
    D -->|seapp_contexts| F(m4 -s 处理 + check_seapp 检查):::process
    D -->|file_contexts| G(m4 -s 处理 + checkfc 检查):::process
    D -->|property_contexts| H(m4 -s 处理 + checkfc 检查):::process
    E --> I([完成]):::startend
    F --> I
    G --> I
    H --> I

2.3 独立工具使用总结

工具名 功能 示例命令
sepolicy-check 检查给定允许规则是否存在于策略文件中 sepolicy-check -s system_app -t system_data_file -c file -p write -P $OUT/root/sepolicy
sepolicy-analyze 检查 SELinux 开发中的常见问题,如等效域、重复允许规则和策略类型差异 - 检查等效域: sepolicy-analyze -e -P $OUT/root/sepolicy
- 检查重复允许规则: sepolicy-analyze -D -P $OUT/root/sepolicy
- 检查类型差异: sepolicy-analyze -d -P $OUT/root/sepolicy

2.4 进入强制模式步骤总结

  1. 更新 SEPolicy 主分支
    • 克隆外部 sepolicy 项目:
git clone https://android.googlesource.com/platform/external/sepolicy
cd sepolicy
- 可选:检出特定提交:
git checkout b5ffb
- 替换 UDOO 4.3 sepolicy:
cd ..
rm -rf udoo/external/sepolicy
cp -r sepolicy udoo/external/sepolicy
- 可选:移除 .git 文件夹:
rm –rf udoo/external/sepolicy/.git
- 复制并恢复 audit.te 文件。
- 从 NSA Bitbucket seandroid 存储库恢复 auditd 提交(提交 SHA 为 d270aa3)。
- 移除 udoo/build/core/Makefile 中所有对 setool 的引用:
grep -nw setool udoo/build/core/Makefile
  1. 运行、评估和响应 CTS 审计日志 :通过分析 CTS 审计日志,发现安全策略中存在的问题,对策略进行调整和优化。
  2. 为 UDOO 开发安全策略 :根据设备的特点和需求,利用前面介绍的 BOARD_SEPOLICY_* 变量和构建工具,定制适合 UDOO 的安全策略。
  3. 切换到强制模式 :完成上述步骤后,将 UDOO 设备切换到强制模式,使安全策略生效。

2.5 常见问题及解决方法

问题 原因 解决方法
sepolicy_replace_paths 报错“Ambiguous request” 同一文件同时出现在 BOARD_SEPOLICY_REPLACE 和 BOARD_SEPOLICY_UNION 中 检查并确保文件只出现在一个变量中
构建时找不到 sepolicy 文件 BOARD_SEPOLICY_DIRS 未包含正确的搜索路径或文件不存在 检查 BOARD_SEPOLICY_DIRS 设置,确保文件存在于指定路径
sepolicy-analyze 工具出现段错误 可能需要应用补丁 http://marc.info/?l=seandroid-list&m=141684060409894&w=2 应用补丁

2.6 总结与展望

通过本文的介绍,我们详细了解了 Android 安全策略的构建、管理和相关工具的使用,以及如何将 UDOO 设备切换到强制模式。掌握这些知识和技能,能够帮助我们更好地保障 Android 设备的安全性。

在未来的 Android 安全策略开发中,随着技术的不断发展和安全需求的提高,可能会有更多的功能和工具出现。我们需要持续关注相关的技术动态,不断学习和实践,以应对日益复杂的安全挑战。同时,合理运用现有的工具和方法,结合实际需求,定制出更加安全、高效的 Android 安全策略。

内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划B样条优化技术,提升机械臂运动轨迹的合理性平滑性。文中还涉及多种先进算法仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模求解,展示了Matlab在机器人控制、智能算法系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模神经网络控制的设计流程,关注算法实现细节仿真结果分析,同时参考文中提及的多种优化估计方法拓展研究思路。
内容概要:本文围绕电力系统状态估计中的异常检测分类展开,重点介绍基于Matlab代码实现的相关算法仿真方法。文章详细阐述了在状态估计过程中如何识别和分类量测数据中的异常值,如坏数据、拓扑错误和参数误差等,采用包括残差分析、加权最小二乘法(WLS)、标准化残差检测等多种经典现代检测手段,并结合实际算例验证方法的有效性。同时,文档提及多种状态估计算法如UKF、AUKF、EUKF等在负荷突变等动态场景下的应用,强调异常处理对提升电力系统运行可靠性安全性的重要意义。; 适合人群:具备电力系统基础知识和一定Matlab编程能力的高校研究生、科研人员及从事电力系【状态估计】电力系统状态估计中的异常检测分类(Matlab代码实现)统自动化相关工作的工程技术人员。; 使用场景及目标:①掌握电力系统状态估计中异常数据的产生机制分类方法;②学习并实现主流异常检测算法,提升对状态估计鲁棒性的理解仿真能力;③服务于科研项目、课程设计或实际工程中的数据质量分析环节; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,配合电力系统状态估计的基本理论进行深入理解,重点关注异常检测流程的设计逻辑不同算法的性能对比,宜从简单案例入手逐步过渡到复杂系统仿真。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值