关键在于构建“调用行为可捕获、权限上下文可还原、异常模式可拦截”闭环机制:Windows需ETW+LSASS+Security日志联动并启用完整命令行记录;Linux须通过auditd定制execve/ptrace规则并结合systemd服务沙箱化;跨平台须统一提取四维上下文、建立合法调用基线并实时比对告警。
要实现对进程间非法调用的强制性审计追踪控制,关键不是单纯开启日志,而是构建“调用行为可捕获、权限上下文可还原、异常模式可拦截”的闭环机制。Windows 和 Linux 平台虽工具不同,但核心逻辑一致:以系统级审计模块为入口,结合进程身份、调用链、权限边界三要素交叉验证。
Windows 原生审计能力集中在事件跟踪(ETW)、本地安全机构(LSASS)行为和 Security 日志三类数据源,需协同配置才能覆盖进程间调用:
Microsoft-Windows-Threat-Intelligence(捕获远程线程注入、CreateRemoteThread)、Microsoft-Windows-Kernel-Process(记录进程创建与父进程PID)、Microsoft-Windows-Security-Auditing(ID 4688 启动进程详情,含命令行与令牌SID)lsass.exe 或 svchost.exe),立即用 procdump -ma lsass.exe 抓取内存镜像,离线用 mimikatz sekurlsa::logonpasswords 检查是否存在未登记账户的登录凭证缓存Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688} | Where-Object {$_.Properties[8].Value -match 'rundll32|regsvr32|powershell.exe.*-encodedcommand'},识别伪装调用链Linux 下进程调用审计依赖 auditd 的 syscall 级捕获,配合 systemd 的服务沙箱化,才能阻断非法父子进程关系:
/etc/audit/rules.d/call.rules 中添加强制规则:-a always,exit -F arch=b64 -S execve -F uid!=0 -k proc_exec-a always,exit -F arch=b64 -S ptrace -F perm=x -k proc_ptracefork() 或 execve():对关键服务单元(如 nginx、redis)启用 RestrictAddressFamilies=AF_UNIX AF_INET、NoNewPrivileges=true、LockPersonality=true
auditctl -l 验证规则加载,再通过 ausearch -m execve -i -ts recent 实时查看调用来源、目标路径及调用者UID/GID/proc/[pid]/status 中的 CapEff(有效能力位)和 PPid(父进程ID),比对是否属于白名单服务启动链仅记录调用不够,必须还原“谁在什么权限下、以何种方式、调用了什么”,才能判定是否非法:
readlink /proc/[pid]/exe)strace -f -e trace=execve,ptrace,connect,openat [service-bin] 运行一次,生成标准调用图谱,存入审计策略库execve 或 CreateProcess 行为,且调用方不具备对应服务声明的 Capability(Linux)或 SeDebugPrivilege(Windows),即标记为非法调用kill -STOP [pid] 或 taskkill /f /pid [pid],同时导出其内存 dump 和句柄列表(handle.exe -p [pid] / lsof -p [pid])用于溯源不复杂但容易忽略的是:审计本身可能被绕过。务必关闭未签名驱动加载(Windows Device Guard / Linux kernel lockdown mode),并确保 auditd 或 Windows Advanced Audit Policy 配置写入只读区域,防止运行时篡改。