Android10(Q)作为引入分区储存、强化SELinuxenforcing模式的关键版本,其系统安全审计能力直接决定了设备对非授权访问、权限滥用、恶意行为的可溯源性。Audit子系统作为Linux内核原生安全组件,可深度监控文件访问、系统调用、权限变更等核心风波,是Android设备安全加固、异常行为排查的核心工具。本文从内核配置、用户态工具移植、规则订制、日志剖析、实战场景等维度,全面拆解Android10.xAudit的落地流程,结合底层原理与实操案例,为开发者提供一套可直接复用的全链路审计解决方案,推动建立高安全性的Android设备生态。
关键词
Android10.x;Audit子系统;内核配置;非授权访问监测;安全审计;SELinux兼容
一、引言
随着Android设备在金融、政务、工业控制等领域的广泛应用,系统层面的安全审计需求愈发急切。非授权访问、恶意程序挂马、敏感数据泄漏等风险,须要通过底层审计机制实现行为溯源与风险预警。Android10.x基于Linux4.14内核(不同厂商适配版本略有差别),相比初期版本,其对安全子系统的管控更严格,SELinux强制模式、分区储存等特点对Audit的适配提出了更高要求。

Audit子系统通过内核态规则匹配与用户态日志搜集,可精准捕获系统调用、文件操作、进程执行、权限变更等风波,为安全剖析提供可溯源的原始数据。本文基于Android10.x的系统特点,从内核编译配置到实战检查全流程展开,解决Audit在Android生态中的适配困局,实现对非授权访问行为的有效监控。
二、Android10.xAudit核心原理与环境打算2.1核心原理
Audit子系统由内核态模块与用户态工具两部份组成:
Android10.x中,Audit需适配三大核心特点:
①SELinux强制模式,需为Audit工具配置正确的安全上下文;
②分区储存(ScopedStorage)linux系统移植,需调整审计规则适配储存权限变更;
③内核版本升级(Linux4.14+),支持更多审计特点(如CONFIG_AUDIT_BPF)。
2.2环境打算
硬件环境:支持Android10.x的开发板(如骁龙MSM8998、MTKMT6799)或root后的真机;
软件环境:
三、Android10.x内核Audit配置与编译3.1内核配置步骤

Android10.x内核默认未完全启用Audit功能,需通过menuconfig自动配置,确保核心审计特点开启。
1、进入内核源码目录,加载设备默认配置:
进入内核源码根目录(以高通MSM8998为例)cd android/kernel/msm-4.14# 加载设备defconfig(替换为目标设备配置文件)make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- msm8998_defconfig# 启动图形化配置界面make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- menuconfig
2、关键配置项开启(路径与说明):
在menuconfig界面中,按以下路径找到对应选项,按Y编译进内核(*标示),防止编译为模块(Mlinux 命令,Android不支持动态加载内核模块):
提高特点配置(推荐):
3、配置保存与验证:
grep "CONFIG_AUDIT" .config正确输出示例(需包含以下项):# CONFIG_AUDIT=y# CONFIG_AUDITSYSCALL=y# CONFIG_AUDIT_WATCH=y# CONFIG_AUDIT_TREE=y# CONFIG_AUDIT_CAPSET=y# CONFIG_AUDIT_BPF=y
3.2内核编译与刷入
1、编译内核镜像与设备树:
编译内核镜像(zImage,arm64架构为Image.gz-dtb)make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j16 Image.gz-dtb# 编译模块(可选,若需补充驱动)make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- modules# 编译设备树(根据设备型号调整,如msm8998-mtp.dtb)make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- dtbs
2、刷入内核至设备:
方法一:通过fastboot刷入(需设备解锁):
重启设备至fastboot模式adb reboot bootloader# 刷入内核镜像(路径替换为实际编译产物路径)fastboot flash boot arch/arm64/boot/Image.gz-dtb# 重启设备fastboot reboot
方法二:集成至Android镜像(适用量产场景):将编译后的内核镜像替换AOSP源码device/{厂商}/{设备名}/boot.img中的内核部份,重新编译全量镜像后刷入。
3、验证内核Audit功能:
设备启动后,通过ADB联接,执行以下命令检测内核模块是否加载:
查看Audit相关内核节点ls /proc/audit# 输出audit_status、audit_rules等文件,说明内核Audit已启用


四、Audit用户态工具移植与适配
Android10.x原生未集成Audit用户态工具(auditd、auditctl、ausearch),需从开源库房移植并交叉编译,同时适配Android系统环境与SELinux规则。
4.1工具源码获取与交叉编译
1、下载适配版本的Audit源码(推荐2.8.5,兼容Linux4.14内核):
git clone https://github.com/linux-audit/audit-userspace.gitcd audit-userspacegit checkout v2.8.5切换至稳定版本
2、交叉编译配置:新建编译脚本build_audit_android.sh,配置交叉编译参数,适配Android10.x:
#!/bin/bashexport CC=aarch64-linux-android-gccexport CXX=aarch64-linux-android-g++export AR=aarch64-linux-android-arexport LD=aarch64-linux-android-ldexport RANLIB=aarch64-linux-android-ranlib配置编译路径与依赖,禁用不必要特性./configure--host=aarch64-linux-android--prefix=/android/audit_install # 安装路径--disable-shared # 编译静态库,避免依赖问题--enable-static--without-python # 禁用Python依赖(Android无原生Python)--disable-zosmf--disable-gssapi# 编译并安装make -j16make install
3、提取编译产物:
编译完成后,在/android/audit_install/bin目录下生成auditd、auditctl、ausearch、aureport工具,将其复制至Android设备的/system/bin目录(需root权限):
adb push /android/audit_install/bin/* /system/bin/adb shell chmod 755 /system/bin/auditdadb shell chmod 755 /system/bin/auditctl

4.2Android系统适配4.2.1配置SELinux安全上下文
Android10.x默认启用SELinux强制模式,若auditd无正确安全上下文,会被SELinux拦截运行。需执行以下操作配置:
1、为auditd添加SELinux标签:
临时生效(重启后失效)adb shell chcon u:r:auditd:s0 /system/bin/auditd# 永久生效(需修改SELinux策略)# 1. 编辑设备SELinux策略文件(device/{厂商}/{设备名}/sepolicy/auditd.te)# 2. 添加以下内容:type auditd, domain;type auditd_exec, exec_type, file_type;init_daemon_domain(auditd)# 3. 重新编译SELinux策略,集成至Android镜像
4.2.2配置init启动服务
Android通过init.rc脚本启动系统服务,需将auditd配置为开机自启,确保审计功能随系统启动:

1、编辑设备的init.rc文件(路径:device/{厂商}/{设备名}/init.rc),添加以下内容:
配置auditd服务service auditd /system/bin/auditd -n # -n表示前台运行,便于调试class coreuser rootgroup rootseclabel u:r:auditd:s0 # 关联SELinux上下文oneshot # 后台持续运行,不阻塞init进程writepid /dev/cpuset/system-background/tasks# 系统启动后加载默认审计规则on post-fs-data# 创建审计日志目录(Android无默认目录)mkdir /var/log/audit 0755 root root# 加载规则(后续章节详细说明)exec /system/bin/auditctl -w /data -p rwxa -k unauthorized_data_accessexec /system/bin/auditctl -w /system/bin/su -p x -k unauthorized_su_exec
2、重新编译Android镜像linux系统移植,刷入设备,验证auditd是否开机自启:
adb shell ps | grep auditd输出auditd进程信息,说明启动成功
4.2.3日志储存适配
Android10.x的/var目录为临时储存,重启后日志遗失,需适配持久化储存:
方案一:将日志储存至/data/audit/log(需授予权限):
adb shell mkdir -p /data/audit/logadb shell chmod 755 /data/audit/log修改auditd配置文件,指定日志路径echo "log_file = /data/audit/log/audit.log" > /system/etc/audit/auditd.conf
方案二:配置日志轮转,防止日志占满储存空间:
# 添加日志轮转脚本(/system/bin/audit_log_rotate.sh)# 内容:保留最近7天日志,超过大小自动轮转# 配置crontab定时执行(需移植crontab工具)
五、审计规则订制:精准测量非授权访问
Audit规则是实现非授权访问测量的核心,需结合Android10.x的系统构架与敏感路径,针对性配置规则。规则通过auditctl命令添加,支持临时规则(重启失效)与永久规则(写入配置文件)。
5.1规则核心句型
基本格式1:监控文件/目录操作auditctl -w -p -k# 基本格式2:审计系统调用auditctl -a -S -F -k
关键参数说明:
5.2非授权访问测量核心规则
结合Android10.x的安全风险点,配置以下核心规则,覆盖敏感路径访问、特权程序执行、权限变更等场景:
1、敏感目录监控(非授权读写/执行):
监控/data目录(用户敏感数据存储区)auditctl -w /data -p rwxa -k unauthorized_data_access# 监控/system目录(系统核心文件区)auditctl -w /system -p rwxa -k unauthorized_system_access# 监控/vendor目录(厂商定制文件区)auditctl -w /vendor -p rwxa -k unauthorized_vendor_access# 监控分区存储根目录(适配Android 10.x Scoped Storage)auditctl -w /storage/emulated/0 -p rwxa -k unauthorized_storage_access

2、特权程序与命令监控(非授权执行):
监控su命令(提权工具)auditctl -w /system/bin/su -p x -k unauthorized_su_exec# 监控adb工具(调试接口)auditctl -w /system/bin/adb -p x -k unauthorized_adb_access# 监控chmod/chown命令(权限变更工具)auditctl -w /system/bin/chmod -p x -k unauthorized_chmod_execauditctl -w /system/bin/chown -p x -k unauthorized_chown_exec
3、系统调用审计(全面捕获访问行为):
审计所有用户的文件打开/访问系统调用(排除root)auditctl -a exit,always -S open -S openat -S access -F auid!=0 -k unauthorized_file_access# 审计进程执行系统调用auditctl -a exit,always -S execve -F auid!=0 -k unauthorized_exec# 审计权限变更系统调用auditctl -a exit,always -S chmod -S chown -S setuid -k unauthorized_perm_change
4、进程与权限监控:
审计进程创建/退出事件auditctl -a exit,always -S fork -S vfork -S clone -k process_create_exit# 审计权限集变更(提权行为)auditctl -a exit,always -S capset -k cap_change
5.3规则管理与验证
1、查看已配置规则:
adb shell auditctl -l
2、清除所有规则(调试用):
adb shell auditctl -D
3、永久保存规则:
将规则写入/system/etc/audit/audit.rules文件,系统启动时手动加载:
adb shell echo "-w /data -p rwxa -k unauthorized_data_access" >> /system/etc/audit/audit.rules

六、审计日志剖析与实战检查6.1日志查看与过滤
Audit日志包含丰富的风波信息(时间、进程ID、用户ID、操作类型、关键词等),可通过ausearch/aureport工具快速剖析,也可直接读取日志文件。

1、按关键词过滤日志(最常用):
# 过滤非授权访问/data目录的事件adb shell ausearch -k unauthorized_data_access# 过滤非授权执行su的事件adb shell ausearch -k unauthorized_su_exec
2、按时间范围过滤:
查看近1小时的审计日志adb shell ausearch -ts recent -te now# 查看指定时间范围的日志(格式:YYYY-MM-DD HH:MM:SS)adb shell ausearch -ts 2024-05-01 08:00:00 -te 2024-05-01 18:00:00
3、生成结构化报告:
生成文件访问报告adb shell aureport -f# 生成系统调用报告adb shell aureport -s# 生成用户行为报告adb shell aureport -u
6.2日志数组解析
Audit日志每条记录包含多个数组,核心数组说明如下(以非授权访问/data为例):
type=SYSCALL msg=audit(1714567890.123:456):arch=c00000b7syscall=257success=noexit=-13a0=ffffff9c a1=7f8a001234 a2=80000 a3=1b6 items=1ppid=1234 pid=5678 auid=1000 uid=2000 gid=2000euid=2000 suid=2000 fsuid=2000 egid=2000 sgid=2000fsgid=2000 tty=pts0 ses=1comm="cat" exe="/system/bin/cat"key="unauthorized_data_access"
6.3实战场景检查案例
场景1:非授权访问敏感数据目录
场景2:非授权执行su加壳
场景3:非授权更改系统文件

七、常见问题与解决方案7.1auditd启动失败7.2审计日志无记录7.3系统性能增长7.4分区储存适配问题八、总结与展望
Android10.x的Audit子系统作为底层安全审计核心工具,通过内核配置、用户态适配、规则订制,可实现对非授权访问、提权、敏感操作的全链路溯源。本文从实战角度出发,完整覆盖从内核配置到日志剖析的全流程,解决了SELinux兼容、日志持久化、分区储存适配等关键困局,提供的规则与案例可直接应用于Android设备安全加固。
未来国内linux主机,随着Android系统的升级(如Android14+),Audit子系统将支持更多智能化特点(如结合AI剖析异常日志、实时风险预警)。开发者可基于本文方案,进一步扩充审计能力,实现日志远程上报、自动化风险拦截,建立更安全、可溯源的Android设备生态。
