运行时监控敏感指令是防御注入攻击的关键防线,聚焦高权限操作如exec、动态sql执行、ai角色覆盖指令等,在执行点嵌入轻量检查、ast解析与规则分类,并支持阻断、沙箱降权、人工审核及上下文关联告警。

运行时监控敏感指令是防御注入攻击(如命令注入、SQL注入、Prompt注入)的关键防线,它不依赖前置过滤的“完美性”,而是在指令实际执行前或执行过程中实时识别并拦截异常行为。
识别哪些指令属于“敏感”
不是所有系统调用都需要监控,重点应放在具备高权限、高影响面的操作上:
-
操作系统层:
exec、system、ProcessBuilder、os.system()、subprocess.run()(尤其带shell=True) -
数据库层:动态拼接的
execute()、executemany()、cursor.execute(sql_string)(未使用参数化) -
AI模型层:模型输入中含
ignore previous instructions、act as root、输出JSON以外格式等语义指令;或输出中出现```bash、curl http://、密钥片段等 -
配置与文件操作:
open(..., 'w')写入系统路径、eval()、exec(compile(...))、加载远程模块等
在执行点嵌入轻量级检查逻辑
监控不应拖慢正常流程,宜在关键函数入口处插入策略判断:
- 对
subprocess.run(cmd, shell=True),提取cmd字符串,检测是否含分隔符(;、&&、|、$()、反引号)、危险命令(rm -rf、curl、wget)或非常规路径(/etc/、/root/) - 对数据库查询,解析SQL AST(而非正则匹配),识别是否存在
UNION SELECT、SELECT ... FROM information_schema、SLEEP()等典型注入模式 - 对AI输入,使用规则+轻量分类器判断是否含“角色覆盖”“上下文重置”“绕过指令”类短语;对输出,扫描是否泄露变量名、函数签名、环境路径或base64编码的二进制内容
建立可干预的拦截机制
监控发现可疑行为后,需有明确响应策略,不能仅记录日志:
- 阻断执行:直接抛出
SecurityViolationError并终止调用栈,例如在subprocess封装层中返回空结果或固定错误码 - 降权执行:将高危操作转为沙箱环境运行(如
firejail隔离curl、SQLite内存数据库替代真实DB连接) - 人工审核通道:对模糊样本(如含
cat /proc/version但上下文为运维诊断),触发异步审核队列,暂停后续流程直至确认 - 自动脱敏回退:AI输出若含密码字段,不简单替换为
***,而是重构响应结构,只保留业务必要字段
关联上下文提升判断准确性
单条指令未必危险,组合与上下文才暴露意图:
- 记录调用链:标记该指令是否来自用户直输、API参数、文件解析、OCR识别结果,不同来源设定不同阈值
- 跟踪会话状态:同一会话中连续3次尝试读取
/etc/passwd、或对话历史出现“你之前说可以执行命令”,则提升风险评分 - 比对基线行为:统计服务常态下
ls调用频率、SQL查询平均长度、模型输出token分布,偏离2个标准差即告警











