> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# 作弊检测

CBCTF 内置多维度自动作弊检测，管理员可查看、确认或驳回检测结果。

## 检测机制

### 1. `same_web_ip` — 多队伍共用 Web IP

多支队伍的 Web 请求（登录、提交等）来自同一公网 IP，可能存在同场地协作或账号共享。

### 2. `same_victim_ip` — 多队伍共用靶机访问 IP

多支队伍访问靶机的 IP 相同（capture 捕获），需要结合公共出口、代理及比赛场地判断。关闭抓包后不会获得这类实例访问流量证据。

检测比较比赛期间的公网客户端来源 IP，排除特殊用途地址与白名单。查看证据和回放方法见[容器流量分析](/admin/traffic.md)。

### 3. `wrong_flag` — 跨队 flag 提交

队伍提交了属于另一支队伍的动态 flag，表明存在 flag 共享行为。

## 记录详情

打开记录后，可查看命中的规则、原因、涉及的 IP、检测时间和相关队伍。审核状态与管理员备注用于记录复核进度，方便多人协作。

## 作弊状态

| 状态           | 说明           |
| ------------ | ------------ |
| `suspicious` | 系统自动检测，待人工确认 |
| `cheater`    | 确认为作弊        |
| `pass`       | 确认为误报        |

## 管理员处理流程

1. 打开比赛的作弊记录列表，需要 `admin:cheat:list` 权限。
2. 查看检测原因和相关队伍信息。
3. 结合 IP 地理查询、队伍提交和流量回放综合判断。
4. 在编辑窗口选择「作弊」或「误报」，填写处置说明并标记已审核，需要 `admin:cheat:update` 权限。

处理作弊记录不自动封禁队伍。需要限制参赛时，在比赛队伍管理中另行设置封禁。

## 重新运行检测

在比赛作弊记录页选择「检测」，需要 `admin:cheat:create` 权限。赛后可再次检测，复核整场比赛的记录。

检测部分失败时，展开结果查看未完成的规则及原因。已生成的记录仍会显示在列表中，可先行审核，排除故障后再检测。

## 批量删除

「全部删除」会删除该比赛的所有作弊记录，需要 `admin:cheat:delete` 权限。确认前请检查是否仍需保留审核记录。

## IP 白名单

首次部署可在 `config.yaml` 中配置 IP 白名单；已有平台在「系统管理」中更新数据库设置。白名单内的 IP 不触发 IP 类作弊检测：

```yaml
cheat:
  ip:
    whitelist:
      - 127.0.0.1
      - ::1
      - 10.0.0.0/8
      - 192.168.0.0/16
      - 172.16.0.0/12
      - 100.64.0.0/10
```

## 误报场景说明

以下场景可能导致误报，管理员应结合实际情况判断：

| 场景           | 可能误报的类型                        |
| ------------ | ------------------------------ |
| 大学/公司内网（NAT） | `same_web_ip`、`same_victim_ip` |
| 商业 VPN 服务    | `same_web_ip`                  |
| 比赛现场同一 WiFi  | `same_web_ip`                  |

:::tip
建议将竞赛现场的出口 IP 加入白名单；Helm 初始配置对应 `cbctf.cheat.ip.whitelist`，已有数据库不会因升级 values 自动覆盖。
:::
