随着 AI Agent 在代码生成、自动化任务执行等场景的广泛应用,其安全边界面临前所未有的挑战。Checkmarx 在 2025 年 9 月披露的 "Lies-in-the-Loop" 攻击揭示了 AI Agent 防御机制的脆弱性 —— 攻击者通过欺骗人类批准,使 AI Agent 执行本应被阻止的危险操作。这类攻击往往在系统调用层面留下痕迹,而传统的应用层监控难以捕捉底层规避行为。
本文提出基于 eBPF(extended Berkeley Packet Filter)的系统调用实时拦截与行为分析引擎,旨在从内核层面检测 AI Agent 沙箱绕过尝试,提供低开销、高精度的运行时威胁监控方案。
一、AI Agent 沙箱绕过的系统调用攻击向量
1.1 高级规避技术的底层实现
AI Agent 沙箱绕过攻击通常采用多层规避策略。在 MITRE ATT&CK 框架中,虚拟化 / 沙箱规避(T1497)被列为重要防御逃避技术。攻击者通过检测沙箱环境特征,调整恶意行为执行时机和方式。系统调用层面的规避尤为隐蔽:
- 直接系统调用:绕过高级 API 接口,直接调用内核服务,规避应用层钩子
- 调用链混淆:通过间接调用、跳转表等技术隐藏真实调用路径
- 时序攻击:利用沙箱监控的时间窗口差异,延迟执行恶意操作
GitHub 上的 Syscall-Integrity-Monitor 项目展示了检测直接系统调用使用模式的重要性,这类模式常被用于绕过 EDR(端点检测与响应)解决方案的 API 钩子。
1.2 Lies-in-the-Loop 攻击的系统层面表现
Checkmarx 研究的 "Lies-in-the-Loop" 攻击虽然主要发生在交互层面,但其成功执行后,恶意代码在系统层面会表现出异常行为模式:
- 权限提升序列:从用户权限到特权操作的异常过渡
- 文件操作模式:非常规的文件创建、修改、删除序列
- 网络连接行为:隐蔽的出站连接或数据泄露尝试
- 进程间通信:异常的进程创建和通信模式
这些行为最终都通过系统调用实现,为内核层监控提供了检测机会。
二、eBPF 系统调用拦截技术原理
2.1 eBPF 在内核监控中的优势
eBPF 允许在内核中安全运行沙盒化程序,具有以下关键优势:
- 零拷贝数据访问:直接在内核空间处理数据,避免用户 - 内核空间切换开销
- 实时性:事件触发立即执行,延迟通常在微秒级别
- 安全性:通过验证器确保程序不会导致内核崩溃或无限循环
- 低开销:相比传统内核模块,eBPF 程序的内存和 CPU 占用显著更低
Invary 的研究指出,eBPF 技术既可用于构建 EDR 解决方案,也可能被滥用于创建 rootkit,这凸显了对其监控的重要性。
2.2 系统调用跟踪机制
eBPF 提供两种主要机制跟踪系统调用:
2.2.1 Tracepoint 跟踪
Tracepoint 是内核预定义的静态跟踪点,稳定性高但覆盖有限:
// 示例:跟踪execve系统调用
SEC("tracepoint/syscalls/sys_enter_execve")
int trace_execve_enter(struct trace_event_raw_sys_enter *ctx) {
// 获取进程信息、参数等
u32 pid = bpf_get_current_pid_tgid() >> 32;
char comm[TASK_COMM_LEN];
bpf_get_current_comm(&comm, sizeof(comm));
// 记录到eBPF map或perf buffer
// ...
return 0;
}
2.2.2 Kprobe 动态探测
Kprobe 允许在任意内核函数入口插入探测点,灵活性更高:
// 示例:探测do_sys_openat2函数
SEC("kprobe/do_sys_openat2")
int kprobe_do_sys_openat2(struct pt_regs *ctx) {
// 获取函数参数
int dfd = PT_REGS_PARM1(ctx);
const char __user *filename = (const char __user *)PT_REGS_PARM2(ctx);
// 分析文件打开行为
// ...
return 0;
}
2.3 关键系统调用监控清单
针对 AI Agent 沙箱绕过检测,以下系统调用需要重点监控:
| 系统调用类别 | 关键调用 | 监控目的 |
|---|---|---|
| 文件操作 | open, openat, creat, unlink, rename | 检测异常文件创建、删除、重命名 |
| 进程管理 | fork, clone, execve, kill | 监控进程创建链和权限提升 |
| 网络通信 | socket, connect, send, recv | 发现隐蔽网络连接和数据泄露 |
| 内存管理 | mmap, mprotect, brk | 检测代码注入和内存权限修改 |
| 系统信息 | uname, sysinfo, getcpu | 识别沙箱环境探测行为 |
三、实时行为分析引擎设计
3.1 多层检测架构
基于 eBPF 的系统调用拦截引擎采用三层检测架构:
- 基础层:eBPF 程序收集原始系统调用事件
- 聚合层:用户空间守护进程聚合事件,计算统计特征
- 分析层:应用机器学习或规则引擎进行威胁评分
3.2 异常模式识别算法
3.2.1 频率异常检测
监控系统调用频率的突然变化,使用滑动窗口统计:
# 伪代码:系统调用频率异常检测
class SyscallFrequencyDetector:
def __init__(self, window_size=60, threshold_multiplier=3.0):
self.window = deque(maxlen=window_size)
self.threshold_multiplier = threshold_multiplier
def check_anomaly(self, current_rate):
if len(self.window) < 10:
self.window.append(current_rate)
return False
mean = np.mean(self.window)
std = np.std(self.window)
threshold = mean + self.threshold_multiplier * std
self.window.append(current_rate)
return current_rate > threshold
3.2.2 序列模式分析
使用隐马尔可夫模型(HMM)或序列挖掘算法识别异常调用序列:
# 伪代码:系统调用序列异常检测
def analyze_sequence_pattern(syscall_sequence, normal_patterns):
"""
分析系统调用序列是否偏离正常模式
"""
# 提取n-gram特征
ngrams = extract_ngrams(syscall_sequence, n=3)
# 计算与正常模式的相似度
similarity_scores = []
for pattern in normal_patterns:
score = sequence_similarity(ngrams, pattern)
similarity_scores.append(score)
# 判断是否异常
max_similarity = max(similarity_scores)
return max_similarity < ANOMALY_THRESHOLD
3.3 威胁评分模型
综合多个维度计算威胁评分:
class ThreatScoringModel:
def calculate_score(self, detection_results):
"""
计算综合威胁评分(0-100)
"""
score = 0
# 1. 频率异常权重:30%
if detection_results['frequency_anomaly']:
score += 30
# 2. 序列异常权重:25%
if detection_results['sequence_anomaly']:
score += 25
# 3. 权限提升权重:20%
if detection_results['privilege_escalation']:
score += 20
# 4. 隐蔽行为权重:15%
if detection_results['stealth_behavior']:
score += 15
# 5. 沙箱检测权重:10%
if detection_results['sandbox_detection']:
score += 10
return min(score, 100)
四、工程化部署参数与优化
4.1 性能优化参数
eBPF 监控的性能开销主要来自事件处理和上下文切换,以下参数需要根据环境调整:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 采样率 | 1:1(全量)或 1:10(采样) | 高负载环境可启用采样 |
| 缓冲区大小 | 每个 CPU 核心 4-8MB | 避免事件丢失 |
| 聚合间隔 | 100-500 毫秒 | 用户空间处理间隔 |
| 最大调用深度 | 20-50 层 | 避免无限递归检测 |
4.2 安全加固措施
eBPF 程序本身需要安全防护:
- 权限最小化:仅授予必要的 CAP_BPF 和 CAP_PERFMON 权限
- 签名验证:要求 eBPF 程序必须经过签名
- 运行时保护:监控 eBPF 程序加载和卸载事件
- 资源限制:限制 eBPF 程序的内存和指令数
4.3 响应策略配置
根据威胁评分采取分级响应:
| 威胁评分 | 响应措施 | 执行延迟 |
|---|---|---|
| 0-30 | 仅记录日志 | 无延迟 |
| 31-60 | 告警通知 | < 1 秒 |
| 61-80 | 进程暂停 | < 100 毫秒 |
| 81-100 | 进程终止 + 内存转储 | < 50 毫秒 |
4.4 监控指标与告警阈值
建立完整的监控指标体系:
monitoring_metrics:
- name: ebpf_event_processing_latency
threshold: "p95 < 5ms"
alert_level: warning
- name: system_call_rate_per_process
threshold: "rate > 1000/s持续10秒"
alert_level: critical
- name: threat_score_distribution
threshold: "score > 60的进程数 > 3"
alert_level: warning
- name: ebpf_program_memory_usage
threshold: "> 50MB"
alert_level: warning
五、实施挑战与应对策略
5.1 规避技术对抗
攻击者可能尝试绕过 eBPF 监控:
-
eBPF 探测:检测系统是否运行 eBPF 监控程序
- 应对:隐藏监控进程,使用随机化技术
-
时间窗口攻击:在监控间隙执行恶意操作
- 应对:降低聚合间隔,增加随机检查
-
资源耗尽攻击:触发大量系统调用耗尽监控资源
- 应对:实现自适应限流,优先监控关键进程
5.2 误报率控制
降低误报的关键策略:
- 基线学习期:系统部署后运行 1-2 周学习正常行为模式
- 白名单机制:对可信进程和操作建立白名单
- 上下文关联:结合进程树、用户身份等上下文信息
- 人工反馈循环:将误报反馈用于模型优化
5.3 多环境适配
不同环境下的配置调整:
| 环境类型 | 关键配置调整 |
|---|---|
| 开发环境 | 宽松阈值,详细日志 |
| 测试环境 | 中等阈值,模拟攻击 |
| 生产环境 | 严格阈值,最小化开销 |
| 容器环境 | 命名空间感知,轻量级监控 |
六、未来演进方向
6.1 AI 增强的检测能力
结合机器学习提升检测精度:
- 无监督异常检测:自动发现新的攻击模式
- 图神经网络:分析进程间关系图
- 强化学习:自适应调整检测策略
6.2 云原生集成
在 Kubernetes 等云原生环境中的深度集成:
- Sidecar 模式:每个 Pod 部署轻量级监控
- eBPF as a Service:集中式 eBPF 程序管理
- 策略即代码:使用声明式策略定义监控规则
6.3 硬件加速支持
利用现代 CPU 特性提升性能:
- BPF JIT 编译器优化:生成更高效的机器码
- 硬件性能计数器:结合 PMU 数据增强分析
- 智能网卡卸载:将部分监控逻辑卸载到网卡
结论
基于 eBPF 的系统调用实时拦截引擎为 AI Agent 沙箱绕过检测提供了底层、高效的解决方案。通过在内核层面监控系统调用,结合多维度行为分析和智能威胁评分,能够有效识别 Lies-in-the-Loop 等高级攻击。工程实施中需要平衡检测精度与性能开销,采用分层响应策略,并建立持续优化的反馈机制。
随着 eBPF 生态的成熟和硬件支持的增强,这类监控方案将在 AI 安全领域发挥越来越重要的作用,为构建可信的 AI Agent 运行环境提供坚实的技术基础。
资料来源:
- Checkmarx. "Bypassing AI Agent Defenses With Lies-In-The-Loop" (2025)
- VirtualSpaceGit. "Syscall-Integrity-Monitor: Detects direct syscall usage patterns" (GitHub, 2025)
- Invary. "eBPF Rootkit or EDR" (2025)
- MITRE ATT&CK. "Virtualization/Sandbox Evasion, Technique T1497"