Android Sepolicy 相关工具
文章参考 Android 9.0 源码,以翻译为主,留做备用参考。
Sepolicy 工具位于 system/sepolicy/tools/
build_policies.sh
为多个目标并行构建SELinux策略的工具。这对于在多个目标上快速闫增新的测试或Neveralow规则很有用。
用法:
./build_policies.sh ~/android/master ~/tmp/build_policies
./build_policies.sh ~/android/master ~/tmp/build_policies sailfish-eng walleye-eng
checkfc
用于检查 file_contexts 或 property_contexts 配置文件有效性的工具。policy build 过程中包含以上两个文件的验证。检查 file_contexts 或 property_contexts 文件中安全上下文的有效性时,需要使用 sepolicy 文件作为参数。
用法1:
checkfc sepolicy file_contexts
checkfc -p sepolicy property_context
也可以用于比较两个 file_contexts 或 file_contexts.bin 文件。输出结果显示为 subset、equal、superset或incomparable 其中之一.
用法2:
checkfc -c file_contexts1 file_contexts2
举例:
$checkfc-c out/target/product/shamu/system/etc/general_file_contexts out/target/product/shamu/root/file_contexts.bin
subset
checkseapp
用于合并主 seapp_contexts 配置和特定设备配置的工具,同时检查配置的有效性。被用作 policy build 过程的一部分,用来合并和验证配置。
用法:
checkseapp -p sepolicy input_seapp_contexts0 [input_seapp_contexts1...] -o seapp_contexts
insertkeys.py
一个辅助脚本,用于将 mac_permissions.xml 中签名段的标记映射到 pem 文件中的公钥。这个脚本将在sepolicy/README中进一步描述。
post_process_mac_perms
该工具用于帮助修改现有的 MaqPyExist.xml,添加当前策略中不存在的附加的应用程序证书。该工具在搜索应用程序目录,并将这些应用程序中的证书添加到尚未显式列出的策略时非常有用。
用法:
post_process_mac_perms [-h] -s SEINFO -d DIR -f POLICY-s SEINFO, --seinfo SEINFO seinfo tag for each generated stanza
-d DIR, --dir DIR Directory to search for apks
-f POLICY, --file POLICY mac_permissions.xml policy file
sepolicy-check
该工具用于审核 sepolicy 文件中任何赋予权限的允许规则。
用法:
sepolicy-check -s <domain> -t <type> -c <class> -p <permission> -P out/target/product/<board>/root/sepolicy
sepolicy-analyze
用于对 sepolicy 文件执行各种分析的组件化工具。当前支持的分析类型包括:
TYPE EQUIVALENCE (typecmp)
sepolicy-analyze out/target/product/<board>/root/sepolicy typecmp -e
显示"equivalent"的所有类型对,即它们的允许规则相同,包括通过属性的间接允许规则和默认启用的条件规则(即默认布尔值生成的真正条件表达式)。
等价类型是合并为单个类型的备选。但是,可能有正当理由使它们保持独立,例如:
- 类型可能在当前分析中以外方面不同,例如默认禁用的条件规则、审核相关规则(auditallow或dontaudit)、默认类型转换或约束(例如mls)。
- 当前策略可能对于一个或另一个类型过于宽松,因此正确的操作可能是加强对一个或另一个类型的访问,而不是将它们合并在一起。
- 实际上对这些类型具有不同访问权限的域可能尚未定义,或者可能未在您分析的策略中定义。
TYPE DIFFERENCE (typecmp)
sepolicy-analyze out/target/product/<board>/root/sepolicy typecmp -d
显示不同的类型对,以及在两种类型之间发现的第一个差异。这可用于查找不相同,但可以作为合并备选的相似类型。
DUPLICATE ALLOW RULES (dups)
sepolicy-analyze out/target/product/<board>/root/sepolicy dups
显示重复的允许规则,即授予相同权限的允许规则对,其中一个允许规则直接依据独立类型写入,另一个则依据相同类型关联的属性写入。具有独立类型的规则是要删除的候选规则。具有独立类型的规则可以在源策略中直接表示,也可以是类型否定扩展的结果(例如,策略编译器将域'-foo' '-bar'扩展为独立允许规则)。具有unconfineddomain的域通常会有重复的规则,如自然的副作用,并且可以忽略。
PERMISSIVE DOMAINS (permissive)
sepolicy-analyze out/target/product/<board>/root/sepolicy permissive
显示策略中允许的域,即avc拒绝被记录,但不对这些域强制。虽然允许域在开发过程中会有帮助,但它们不应该出现在最终用户版本中。
BOOLEANS (booleans)
sepolicy-analyze out/target/product/<board>/root/sepolicy booleans
显示策略中的布尔名称(如果有)。Android策略中禁止使用布尔值,因此如果有任何输出,该策略将使CTS失败。
ATTRIBUTE (attribute)
sepolicy-analyze out/target/product/<board>/root/sepolicy attribute <name>
显示与指定属性名关联的类型。
sepolicy-analyze out/target/product/<board>/root/sepolicy attribute -r <name>
显示与指定类型名关联的属性。
sepolicy-analyze out/target/product/<board>/root/sepolicy attribute -l
显示策略中的所有属性。
NEVERALLOW CHECKING (neverallow)
sepolicy-analyze out/target/product/<board>/root/sepolicy neverallow [-w] [-d] [-f neverallows.conf] | [-n "neverallow string"]
检查 sepolicy 文件是否违反 neveralow.conf 文件或指定字符串的 neveralow 规则,字符串应包含与 SELinux policy.conf 文件格式相同的 neveralow 语句,即在从 .te 文件中对规则进行 m4 宏扩展之后。您可以使用整个 policy.conf 文件作为 neverallows.conf 文件,sepolicy analyze 将忽略除其中的 neverallows 之外的所有内容。还可以将其指定为命令行字符串参数,这对于快速检查单个展开的规则或规则组很有用。如果没有违反,sepolicy-analyze 将成功退出,没有输出。否则,sepolicy-analyze 将报告所有违规行为,并以非零退出状态退出。
'-w'或'--warn'选项可用于警告 neveralow 规则中无法在 sepolicy 文件中解析的任何types、attributes、classes 或 permissions。这可能是正常的,因为从中获取 neverallow 规则的策略与正在检查的策略之间存在差异。这些值将被忽略,以供以后进行检查。
'-d'或'--debug'选项可用于使 sepolicy analyze 在解析 neveralow 规则时输出这些规则。这主要是解析器的一个调试工具,但也可以用于从完整的 policy.conf 文件中提取 neverallow 规则,并以更容易解析的格式输出它们。
from: https://segmentfault.com/a/1190000021733720