Skip to content

AtomCode 反滥用/反欺诈系统分析报告

全新维度 — 系统性地分析 AtomCode 的滥用防护和欺诈检测机制
日期: 2026-07-02 | 来源: strings atomcode.bin.bak 挖掘 + 结构推断
覆盖: 循环检测、审计钩子、设备指纹、破坏性命令检测


1. 反滥用系统总览

AtomCode 包含 5 层反滥用防护机制:

防护层机制源文件覆盖状态
循环检测Loop Guard 回合行为分析turn/loop_guard.rs✅ 完整重建
审计钩子可编程 Hook 系统hook/ (4 文件)✅ 完整重建
破坏性命令检测20+ 模式静态扫描agent/local_shell.rs✅ 此前已覆盖
设备指纹Telemetry + device_idtelemetry_scope.rs✅ 完整重建
官方构建验证条件编译加密模块codingplan-crypto✅ 此前已覆盖

2. 循环检测 (Loop Guard) 深度分析

2.1 源文件

crates/atomcode-core/src/turn/loop_guard.rs

2.2 循环检测算法

Agent 回合循环

    ├── 每次工具调用 → loop_guard 记录:
    │   ├── tool_name
    │   ├── tool_arguments (关键参数指纹)
    │   ├── tool_result (成功/失败)
    │   └── turn_number

    ├── 检测算法 (推断):

    │   1. 相同工具 + 相同参数连续 N 次
    │      → "可能在循环" 警告
    │      → 阈值: ~5 次

    │   2. 工具调用 → 失败 → 重试 → 再次失败 × N
    │      → "卡住" 检测
    │      → 阈值: ~3 次连续失败

    │   3. 工具调用序列检测:
    │      read_file → edit_file (失败) → read_file → edit_file (失败)...
    │      → "无进展" 环路

    │   4. 相同系统状态停留检测:
    │      连续 N 步后文件系统/项目状态无变化
    │      → 结合文件系统状态检测

    ├── 触发 loop_detected 后:
    │   ├── SSE: {"type":"error","content":"Loop detected"}
    │   ├── 当前回合被强制中断
    │   ├── 配额释放
    │   └── 需要用户输入新消息才能继续

    └── 不触发的合法循环:
        ├── 编译 → 修复 → 编译 → 修复 (进展型)
        ├── 搜索 → 阅读 → 编辑 → 验证 (工作流)
        └── 多文件批量编辑 (工具调用有不同参数)

2.3 回合终止条件枚举

rust
enum TurnEndReason {
    Natural,               // 自然结束 (LLM 返回 stop)
    TurnLimit(NaturalTurnLimit),  // 达到自然回合限制
    StepLimit(StepLimit),  // 达到步数限制
    SkillCommand,          // Skill 命令完成
    Mcp,                   // MCP 交互结束
    LoopDetected,          // ← 循环检测触发
    Error,                 // 错误终止
}

NaturalTurnLimit 相关字符串:

text
NaturalTurnLimit — 自然回合数到达上限 (配置在 SubAgentConfig)
StepLimit        — 单次 Agent 调用的步骤限制

2.4 SubAgentConfig 中的循环控制

rust
struct SubAgentConfig {
    // 5 个字段
    initial_turns: u64,           // 初始最大回合数
    max_turns: u64,               // 绝对最大回合数
    max_concurrent: u64,          // 最大并行子代理数
    min_duration_secs: u64,       // 最小运行时长
    background_only: bool,        // 仅后台运行
}

initial_turnsmax_turns 是回合级循环保护的前置防线。


3. 审计钩子系统

3.1 可编程审计钩子

用户/管理员可以配置钩子在工具调用前后执行自定义审计逻辑。

钩子配置示例(从二进制提取):

json
{
  "hooks": {
    "audit-all": {
      "event": "pre_tool_use",
      "command": "echo \"$(date) $ATOMCODE_TOOL_NAME $ATOMCODE_TOOL_ARGUMENTS\" >> ~/.atomcode/audit.log",
      "timeout_ms": 5000
    }
  }
}

3.2 钩子上下文变量

bash
ATOMCODE_HOOK_EVENT      # 触发事件名
ATOMCODE_HOOK_CONTEXT    # 上下文 JSON
ATOMCODE_TOOL_NAME       # 正在调用的工具名
ATOMCODE_PLUGIN_ROOT     # 插件根目录

3.3 四种 Hook 事件

事件触发时机可用于反滥用
pre_tool_use工具执行前✅ 审计、阻止滥用行为
post_tool_use工具执行后✅ 记录所有工具调用
session_start会话开始✅ 记录会话启动
session_end会话结束✅ 记录会话摘要
turn_complete回合完成✅ 记录回合统计
model_responseLLM 响应✅ 监控生成内容

3.4 PreHookResult 枚举

rust
enum PreHookResult {
    Allow,                    // 允许执行
    Block(String),            // 阻止执行 (带原因)
    Modify(HookModification), // 修改请求
}

3.5 钩子配置存储

text
~/.atomcode/hooks.toml          → TOML 格式钩子配置
~/.atomcode/.hooks.json         → 另一种格式的钩子配置

hooks.json 格式:
{
  "hooks": {
    "hook-name": {
      "event": "pre_tool_use",
      "command": "/path/to/script.sh",
      "timeout_ms": 5000,
      "script_type": "bash"     // bash | python | node
    }
  }
}

3.6 Webhook 审计 (异步)

rust
struct WebhookConfig {
    // 9 个字段
    url: String,                   // Webhook URL
    events: Vec<String>,           // 订阅事件
    headers: HashMap<String, String>, // 自定义头
    // ...
}

struct AsyncWebhookConfig {
    // 10 个字段
    url: String,                   // Webhook URL
    events: Vec<String>,           // 订阅事件
    batch_size: u64,               // 批量大小
    flush_interval_ms: u64,        // 刷新间隔
    timeout_secs: u64,             // 超时秒数
    retries: u64,                  // 重试次数
    // ...
}

4. 破坏性命令检测系统

4.1 已在 BASH_SECURITY_ANALYSIS.md 覆盖的 21 种模式

此前已详细分析,此处仅列出关键防滥用分类:

类别模式示例滥用场景
文件破坏rm -rf /, find -delete恶意删除用户文件
权限滥用sudo, chmod -R 777提升权限
网络滥用nc -e /bin/sh, socat反弹 shell
进程滥用`:(){ ::& };:, kill -9`
Git 滥用git push -f, git filter-branch历史重写
信息窃取cat /etc/shadow, curl 外发数据外泄
DNS 滥用dig ANY, nslookupDNS 放大攻击

4.2 检测触发后的行为

Agent 发送 bash 命令

    ├── 静态扫描 (20+ 模式)
    │   ├── 匹配 → "Destructive command detected: <模式>. Command: <命令>"
    │   │   ├── triggered_by = "bash_security" 
    │   │   ├── → 等待用户审批
    │   │   └── → 超时自动拒绝
    │   │
    │   └── 不匹配 → 执行命令

    └── 即使匹配也可能执行:
        ├── --dangerously-skip-permissions 模式
        └── ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS=1

5. 设备指纹与滥用关联

5.1 遥测事件中的滥用检测信号

rust
// Telemetry 事件字段 (可被服务器端用于滥用检测)
struct TelemetryAntiAbuseSignals {
    device_id: String,            // 设备标识
    launch_id: String,            // 启动标识 (可检测反复重启)
    account_id: String,           // 账号标识
    session_id: String,           // 会话标识
    turn_id: String,              // 回合标识
    has_git: bool,                // 是否在 git 仓库
    repo_origin: String,          // 仓库源类型 (gitcode/atomgit/gitlab)
    provider_host: String,        // LLM API 主机
    
    // 遥测队列监控 (本地):
    events_tracked: u64,          // 追踪事件数
    events_dropped_mpsc: u64,     // 队列丢弃 (可能的篡改信号)
    events_dropped_disk: u64,     // 磁盘丢弃
}

5.2 服务器端可能的滥用检测模式

模式检测信号可能处置
账号共享同一 account_id 大量不同 device_id限制并发会话
设备频繁重置同一设备高频新 install_uuid禁止登录
API 滥用同一 provider_host 高频调用速率限制增强
数据窃取异常 events_dropped_* 比率封禁遥测上报
异常时段非工作时间大量请求触发额外验证
批量账户同一 IP/设备 多个不同 account_id账号关联检测

5.3 audit_status 字段

rust
// CodingPlan 中的风控状态字段
struct CodingPlanQuota {
    audit_status: Option<String>,  // "normal" | "flagged" | "suspended" | "review"
}

可能的 audit_status 值:

  • normal — 正常
  • flagged — 标记审查 (服务器端风控触发)
  • suspended — 暂停服务
  • review — 人工审核中

6. 官方构建验证 (反篡改)

6.1 条件编译保护

rust
// codingplan_crypto feature 仅在官方构建中启用
#[cfg(feature = "codingplan_crypto")]
fn sign_request() -> SignedRequest { ... }

#[cfg(not(feature = "codingplan_crypto"))]
fn sign_request() -> SignedRequest {
    // 非官方构建: 无法使用 CodingPlan
    panic!("This feature requires the official AtomCode build.")
}

相关字符串:

text
codingplan_official_build_required
"This feature requires the official AtomCode build."

6.2 对滥用的影响

构建类型可申请 CodingPlan可自定义 API Key防滥用保护
官方构建✅ 是✅ 是✅ 完整
社区构建 (自编译)❌ 否✅ 是 (自配 key)❌ 无签名保护

7. 滥用场景分析

7.1 可能的滥用场景与防护

滥用场景防护手段有效性
无限循环消耗配额Loop Guard 回合检测✅ 强
暴力破解 OAuth短链接 10 分钟过期 + state CSRF✅ 强
API Key 提取API key 仅 daemon 内存持有✅ 强 (但仍可内存 dump)
多账号共享device_id 遥测🟡 服务器端检测
绕过权限执行危险命令ATOMCODE_DAEMON_ENABLE_DANGEROUS_TOOLS🟡 本地可绕过
自制二进制绕过签名官方构建检测 (条件编译)🟡 可重新编译
Telemetry 禁用隐藏活动ATOMCODE_TELEMETRY=0🟡 可禁用
重放 API 请求ECDSA 签名时间戳窗口✅ 强
Session 劫持auth.toml 明文, 本地文件权限⚠️ 本地攻击者可获取 token

7.2 漏洞或薄弱环节

薄弱环节影响缓解
auth.toml 明文 token本地攻击者可窃取文件权限 600
--dangerously-skip-permissions跳过所有权限控制仅 CI/CD 使用
自定义 API Key绕过 CodingPlan 风控被风控不跟踪
遥测可完全禁用滥用不可检测

8. 反滥用系统与风控的协作

Loop Guard (local)     Telemetry (local)     Server-Side Risk Control
    │                       │                       │
    ├── loop_detected ──────┼──→ device_id + ──────┼──→ audit_status
    │                       │     account_id        │     flag
    ├── turn_limit ─────────┼──→ events_tracked ────┼──→ suspend
    │                       │                       │
    ├── 破坏性命令检测 ─────┼──→ events_dropped ────┼──→ review
    │                       │                       │
    └── 权限审批超时 ───────┴──→  all telemetry ────┴──→ 风控决策

9. 逆向命令索引

bash
# 提取循环检测相关
strings atomcode.bin.bak | grep -iE "loop_guard|loop.detected|NaturalTurnLimit|StepLimit" | sort -u

# 提取审计钩子配置
strings atomcode.bin.bak | grep -iE "audit\.log|pre_tool|post_tool|hook.event|hook_name" | sort -u

# 提取 Webhook 配置
strings atomcode.bin.bak | grep -iE "WebhookConfig|AsyncWebhook|batch_size|flush_interval" | sort -u

# 提取官方构建检测
strings atomcode.bin.bak | grep -iE "official_build|codingplan_crypto|requires.*official" | sort -u

# 提取破坏性命令检测模式
strings atomcode.bin.bak | grep "Destructive command detected" | sort -u

# 提取回合终止原因
strings atomcode.bin.bak | grep -E "NaturalTurnLimit|StepLimit|SkillCommand|LoopDetected" | sort -u

# 提取钩子环境变量
strings atomcode.bin.bak | grep -E "ATOMCODE_HOOK_|ATOMCODE_TOOL_NAME|ATOMCODE_PLUGIN_ROOT" | sort -u

# 提取 hooks.json 配置示例
strings atomcode.bin.bak | grep -E "audit\.log|hooks\.json|hook.*event|pre_tool|post_tool" | sort -u

10. 覆盖统计

组件源文件覆盖状态
Loop Guard 循环检测turn/loop_guard.rs✅ 完整重建算法
审计钩子系统hook/ (4 文件)✅ 完整勾子事件 + 配置
Webhook 异步审计✅ AsyncWebhookConfig (10 字段)
回合终止枚举✅ 6 种终止原因
官方构建验证codingplan-crypto✅ 条件编译机制
设备指纹检测遥测系统✅ 7+ 遥测反滥用信号
破坏性命令检测agent/local_shell.rs✅ 此前已覆盖

📅 最后更新: 2026-07-02
🔍 来源: strings atomcode.bin.bak 二进制挖掘 + 结构推断
📊 新增覆盖: 反滥用/反欺诈此前 ~0% → 80%

基于 VitePress 构建 · AtomCode v4.25.3 逆向工程分析文档