1. 命令 allow/deny list 为什么不能只做字符串匹配,Shell 组合、解释器和子进程如何控制
命令的 allow/deny list 为什么不能只做字符串匹配?面对 Shell 组合、解释器和子进程,应如何真正控制?
- 字符串匹配的绕过方式(引号、别名、变量)
- Shell 组合(|、&&、;) 与解释器(python/shim)逃逸
- 子进程与二级执行的控制
字符串匹配可被轻易绕过:rm -rf / 可写成 r""m -rf /、rm -$arg、\rm、base64 解码后执行、python -c "os.system(...)"、sh -c 组合等。因此不能只匹配命令字符串,而应解析到真正的执行对象:用 Shell 解析器(如 bash -c 的 AST)提取实际命令与参数,然后在子进程边界上做控制。对解释器命令(python、node、perl)要限制其启动参数或放到受限环境,对子进程要递归跟踪(agent 起的进程再起的进程),用 seccomp/Landlock 等系统级过滤而非命令文本匹配。
allow/deny list 是"最后一道文本层",真正的安全边界必须在系统调用/进程层。字符串匹配只是惯例,真正的控制要解析命令结构、限制解释器、递归管理子进程,并与系统级沙箱结合。