要实现进程间调用的强制审计控制,需结合auditd与selinux:auditd捕获execve、kill、socket等系统调用并记录日志;selinux通过类型强制限制httpd_t等域对mysqld_t等类型的信号、连接等操作;二者联动形成审计—策略—响应闭环,并辅以systemd沙箱加固。

要实现进程间调用的强制审计控制,核心在于结合内核级审计机制(auditd)与强制访问控制(SELinux),让每一次跨进程操作——比如信号发送、IPC通信、execve执行、socket连接等——既被记录,又被策略约束。这不是单纯开启日志就能达成,而是需要规则嵌入、上下文绑定和事件联动。
启用并配置auditd捕获关键进程调用事件
Linux内核审计子系统会在进程进入/退出系统调用时填充audit_context结构,其中包含调用号(major)、参数(argv[4])、登录用户ID(loginuid)、当前安全上下文等字段。针对进程间调用,需重点监控以下系统调用:
-
execve:通过
audit_bprm钩子捕获程序启动参数,写入AUDIT_EXECVE类型日志,含完整命令行与环境变量 - kill / tgkill / rt_sigqueueinfo:记录进程间信号发送行为,可关联源PID、目标PID及信号编号
-
sendmsg / recvmsg / socketcall:配合
netlink或unix domain socket规则,审计IPC通信双方的UID、安全上下文和套接字路径 -
shmget / semop / msgsnd:使用
-a always,exit -F arch=b64 -S shmget -k ipc_shm等规则,标记共享内存、信号量等资源操作
在/etc/audit/rules.d/中添加规则后,运行augenrules --load生效。所有匹配事件将写入/var/log/audit/audit.log,并通过ausearch -m execve -i或aureport -m -ts today快速检索。
用SELinux策略限定进程间调用的合法性
仅记录不够,必须阻止非法调用。SELinux通过类型强制(Type Enforcement)实现这一点:每个进程运行在特定域(domain),每个IPC对象(如socket文件、sysv共享内存)被打上对应类型(type),策略规则明确“哪些域可以对哪些类型执行哪些操作”。
- 例如,Web服务
httpd_t默认不能向数据库进程mysqld_t发送SIGUSR2信号,除非策略中显式允许allow httpd_t mysqld_t : process signal; - Unix socket通信受
unix_stream_socket和file_type上下文双重约束。若客户端进程以staff_t运行,而服务端socket文件标签为system_u:object_r:mysqld_var_run_t:s0,则需策略授权connectto权限 - 利用
seinfo -t mysqld_t -x查看该类型允许的所有许可;用ausearch -m avc -ts recent | audit2why分析拒绝原因,并用audit2allow -a -M mypolicy生成补丁策略模块
联动审计与策略形成闭环管控
真正的强制控制依赖审计日志驱动策略优化。当发现异常调用(如非预期的execve启动脚本、陌生进程向关键服务发信号),可立即响应:
- 提取
key字段(如-k proc_call_monitor)筛选高危事件,设置auditctl -w /usr/bin -p x -k bin_exec监控敏感路径执行 - 结合
loginuid与uid比对,识别提权行为(如普通用户通过SUID程序触发特权进程调用) - 在
audit.rules中加入-a always,exit -F subj_type=httpd_t -F obj_type=etc_t -S execve,只审计特定域对特定类型的调用,降低日志噪音 - 将审计日志接入SIEM平台,设置告警规则:1小时内同一源进程对5个不同目标PID发送
SIGKILL即触发人工核查
补充systemd服务级隔离增强可信边界
对于由systemd托管的服务,可在.service单元中叠加沙箱限制,缩小进程调用面:
-
RestrictAddressFamilies=AF_UNIX AF_NETLINK:禁止使用IPv4/IPv6套接字,仅允许本地IPC -
SystemCallFilter=~@privileged @chown @setuid @mount:白名单式禁用高危系统调用,使恶意进程即使注入也无法完成提权调用 -
PrivateDevices=true+ProtectKernelModules=true:防止通过设备节点或内核模块绕过SELinux策略 - 配合
SELinuxContext=system_u:system_r:httpd_t:s0确保服务始终以指定上下文启动,避免上下文漂移导致策略失效











