update report and README
系统审计是操作系统中常见的安全基础能力,负责记录系统调用、进程退出等关键事件,为攻击检测、溯源分析和安全取证提供依据。一个实用的审计系统需要同时满足两个目标:审计日志要尽快离开临时缓冲区,避免在持久化或远端传输前被篡改;审计处理本身也不能给业务程序带来过高运行开销。
现有软件审计方案通常难以同时兼顾这两个目标。采用独立进程处理日志时,审计任务可以被调度器单独管理,但频繁的跨进程切换会带来较高开销;采用嵌入式或异步处理方式时,运行开销较低,但日志处理任务缺少明确的调度实体,容易因为调度延迟导致日志在缓冲区中停留过久。这里的核心矛盾在于,安全处理有明确的时限需求,而通用任务调度机制并不了解这些安全语义。
NoTamper 面向“安全感知任务调度”这一问题,将审计处理建模为与业务线程关联的安全任务。系统为每个被审计线程维护对应的用户态审计处理线程,并在系统调用返回、线程退出、缓冲区状态变化、业务线程让出 CPU 等关键时机触发处理。相比普通异步审计,NoTamper 让安全任务具备可调度的实体和更明确的触发时机;相比独立进程式审计,它减少了跨进程调度和数据搬运开销。通过这种方式,可以在较低性能开销下缩短审计日志驻留时间,为 OpenHarmony/Linux 环境中的安全感知调度提供一个可验证的原型。
本仓库交付一个可构建、可加载、可运行基础验证的安全感知调度原型以及相应的技术报告,主要内容包括:
kmodule/
consumer/
CMakeLists.txt
generate_cmake.sh
NoTamper 包含两个主要组件:
本项目主要在 openEuler 22.03 LTS、Linux 5.10 内核环境下测试。对于 OpenHarmony Linux 内核环境,需要保证内核具备对应 tracepoint 和模块构建能力。
make
CMake
--static-pie
pkg-config
CONFIG_TRACEPOINTS
CONFIG_HAVE_SYSCALL_TRACEPOINTS
获取 musl libc:
./scripts/deps/getmusl.sh <NoTamper 项目绝对路径>
获取 RDMA Infiniband verbs 依赖:
./scripts/deps/getibverbs.sh <NoTamper 项目绝对路径>
mkdir build cd build cmake .. make load
执行完成后,内核模块会被加载。生成的模块文件名为 notamper.ko。
notamper.ko
NoTamper 支持通过 CMake 配置以下参数:
BUFFER_SIZE
2*Kib
CONSUMER_PATH
${PROJECT_BINARY_DIR}/consumer/consumer
STORE_PATH
/tmp/notamper
STACK_SIZE
1*Mib
示例:
cmake .. -DBUFFER_SIZE=4*Mib -DCONSUMER_PATH=/my/path/to/consumer -DSTORE_PATH=/my/path/to/store
BUFFER_SIZE 可以使用整数,也可以使用 Kib、Mib 作为单位。例如,4*Mib 也可以写成 4096*1024。
Kib
Mib
4*Mib
4096*1024
NoTamper 还支持自定义日志路径格式。默认格式类似于 STORE_PATH/%u-%ld.buf,其中包含线程 ID 和纳秒级时间戳。可以通过 PATH_FORMAT 指定其他路径格式:
STORE_PATH/%u-%ld.buf
PATH_FORMAT
cmake .. -DPATH_FORMAT=/dev/pts/1
NoTamper 可以使用 Intel Protection Key(PKEY)保护用户态审计处理程序的内存区域,降低业务线程误写或恶意修改审计缓冲区的风险。如果运行环境不支持 PKEY,需要关闭该功能,否则可能因为执行不支持的指令而触发异常。
默认配置中 PKEY 支持关闭。如需开启,可在 CMake 中指定:
cmake .. -DPKEY_SUPPORT=on
如果需要显式关闭:
cmake .. -DPKEY_SUPPORT=off
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
NoTamper:面向安全审计的安全感知任务调度原型
项目简介
系统审计是操作系统中常见的安全基础能力,负责记录系统调用、进程退出等关键事件,为攻击检测、溯源分析和安全取证提供依据。一个实用的审计系统需要同时满足两个目标:审计日志要尽快离开临时缓冲区,避免在持久化或远端传输前被篡改;审计处理本身也不能给业务程序带来过高运行开销。
现有软件审计方案通常难以同时兼顾这两个目标。采用独立进程处理日志时,审计任务可以被调度器单独管理,但频繁的跨进程切换会带来较高开销;采用嵌入式或异步处理方式时,运行开销较低,但日志处理任务缺少明确的调度实体,容易因为调度延迟导致日志在缓冲区中停留过久。这里的核心矛盾在于,安全处理有明确的时限需求,而通用任务调度机制并不了解这些安全语义。
NoTamper 面向“安全感知任务调度”这一问题,将审计处理建模为与业务线程关联的安全任务。系统为每个被审计线程维护对应的用户态审计处理线程,并在系统调用返回、线程退出、缓冲区状态变化、业务线程让出 CPU 等关键时机触发处理。相比普通异步审计,NoTamper 让安全任务具备可调度的实体和更明确的触发时机;相比独立进程式审计,它减少了跨进程调度和数据搬运开销。通过这种方式,可以在较低性能开销下缩短审计日志驻留时间,为 OpenHarmony/Linux 环境中的安全感知调度提供一个可验证的原型。
核心思路
挑战
开发量 & 交付件
本仓库交付一个可构建、可加载、可运行基础验证的安全感知调度原型以及相应的技术报告,主要内容包括:
kmodule/:内核模块,实现系统调用 tracepoint 注册、进程/线程审计上下文管理、事件封装、缓冲区管理、调度触发和 ioctl 控制接口。consumer/:用户态审计处理程序和 RDMA 接收端,实现缓冲区映射、日志消费、远端写入以及 PKEY 相关内存保护逻辑。CMakeLists.txt与generate_cmake.sh:构建配置入口,用于生成内核模块、用户态程序、控制工具和测试程序。快速开始
NoTamper 包含两个主要组件:
kmodule/,可在未修改的 Linux 内核上构建和加载。consumer/,负责消费内核暴露的审计缓冲区,并支持本地写入或 RDMA 传输。本项目主要在 openEuler 22.03 LTS、Linux 5.10 内核环境下测试。对于 OpenHarmony Linux 内核环境,需要保证内核具备对应 tracepoint 和模块构建能力。
环境要求
makeCMake--static-pie的 GCC/G++ 8.0 以上版本pkg-configCONFIG_TRACEPOINTSCONFIG_HAVE_SYSCALL_TRACEPOINTS获取 musl libc:
获取 RDMA Infiniband verbs 依赖:
构建与加载
执行完成后,内核模块会被加载。生成的模块文件名为
notamper.ko。配置说明
NoTamper 支持通过 CMake 配置以下参数:
BUFFER_SIZE:每个线程审计缓冲区大小,默认值为2*Kib。CONSUMER_PATH:用户态审计处理程序路径,默认值为${PROJECT_BINARY_DIR}/consumer/consumer。STORE_PATH:审计数据存储路径,默认值为/tmp/notamper。STACK_SIZE:用户态审计处理线程栈大小,默认值为1*Mib。示例:
BUFFER_SIZE可以使用整数,也可以使用Kib、Mib作为单位。例如,4*Mib也可以写成4096*1024。NoTamper 还支持自定义日志路径格式。默认格式类似于
STORE_PATH/%u-%ld.buf,其中包含线程 ID 和纳秒级时间戳。可以通过PATH_FORMAT指定其他路径格式:PKEY 支持
NoTamper 可以使用 Intel Protection Key(PKEY)保护用户态审计处理程序的内存区域,降低业务线程误写或恶意修改审计缓冲区的风险。如果运行环境不支持 PKEY,需要关闭该功能,否则可能因为执行不支持的指令而触发异常。
默认配置中 PKEY 支持关闭。如需开启,可在 CMake 中指定:
如果需要显式关闭: