Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions projects/llm_audit_ctf/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Runtime data may contain customer targets, response evidence, or audit findings.
work/data/raw/*
!work/data/raw/.gitkeep
work/data/candidates/*
!work/data/candidates/.gitkeep
work/data/findings/*
!work/data/findings/.gitkeep
work/reports_out/*
!work/reports_out/.gitkeep

# Python cache
work/scanner/__pycache__/
47 changes: 47 additions & 0 deletions projects/llm_audit_ctf/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# llm_audit_ctf

轻量化的 LLM 服务暴露面候选发现与人工审计项目。扫描器只做低影响 `GET` 指纹探测,不登录、不提交利用请求、不读取认证会话端点。

## 当前结构

- `work/scanner/probe.py`:异步候选发现器,固定 worker 池、共享 HTTP 会话、并发上限、追加式 JSONL、`--resume` 续跑。
- `work/fingerprints/ai_fingerprints.json`:可扩展指纹库。每条 probe 的全部 `expect` 必须满足;纯状态码和认证/会话路径不作为候选证据。
- `work/data/raw/`:脱敏后的输入目标;禁止放身份证、Cookie、API Key、代理凭据。
- `work/data/candidates/`:扫描输出 JSONL;结果仅保存有限、脱敏证据。
- `work/candidate_review.md`、`work/audit_report.md`:人工复核与对外审计报告模板。

本机网络监听快照属于临时运行交接信息,不纳入版本库;本项目不启动固定监听端口。

## 最小运行

```text
python work/scanner/probe.py -i work/data/raw/hosts.txt -o work/data/candidates/result.jsonl --resume
```

常用参数:

- `-c/--concurrency`:并发数,程序限制为 1..100;建议从 4 或 8 开始。
- `-t/--timeout`:单请求超时,必须大于 0。
- `-f/--fingerprint`:指纹库路径。
- `-p/--proxies`:可选的完整 `http(s)` 代理 URL 列表;按目标稳定选择代理,代理地址只进入请求层,不写入结果。
- `--probe-only /v1/models,/api/models`:仅使用指定路径;空白项会忽略,路径必须以 `/` 开头。
- `--resume`:跳过输出 JSONL 已记录的目标。
- 输出 JSONL 每条记录包含 `run` 元数据(扫描器/指纹库版本、超时、代理数量及关键开关),便于复核和复现;不包含代理地址。
- `--insecure`:仅本地测试使用;生产审计默认校验证书。
- `--follow-redirects`:仅明确需要时开启;默认不跟随跳转。

## 工作流

1. 对目标来源、授权边界和时间窗口做记录;输入先脱敏。
2. 以低并发、短超时运行候选发现;保留原始 JSONL,不覆盖历史结果。
3. 用 `candidate_review.md` 逐项人工复核:资产归属、未授权可见性、最小证据和影响。
4. 只在明确授权且必要时做最小深度验证;禁止猜测口令、提取密钥、调用模型生成内容。
5. 用 `audit_report.md` 形成可提交报告,并保留修复建议、复测条件和时间线。

## 结果解释

`candidate` 只是指纹候选,不等于漏洞或可用 2API。`no_match_or_unreachable` 也不等于安全:可能受限于 TLS、网络、WAF、代理或探针覆盖范围。所有结论必须以人工复核证据为准。

## 安全边界

不启动项目服务、不复用常见代理监听端口、不读取密钥文件、不把真实凭据写入仓库。代理、目标和报告中的敏感字段应使用占位符或哈希/截断值。
41 changes: 41 additions & 0 deletions projects/llm_audit_ctf/project_memory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Project Memory: llm_audit_ctf

## 任务背景
- 厂商主办的官方赛事,主题:LLM/大模型服务暴露面审计(找适合做 2API 的网站/服务 → 判断可被二次封装利用的程度 → 出审计报告提交给网站/主办方)
- 赛制:奖金与产出成果量挂钩,产出越多奖金越高;单人参赛
- 状态:已获合法授权;题目原文未脱敏(含个人身份证信息),暂不提供,等脱敏后给

## 已有资产
- `work/fingerprints/ai_fingerprints.json`:指纹库 v0.2,保留17条带内容特征的低影响 GET 探针;不含认证/会话路径或纯状态规则。
- `work/scanner/probe.py`:aiohttp 异步候选发现器;严格 AND 匹配、代理实传、保留端口/IPv6、默认 TLS 校验且不跟随跳转、共享 Session、固定 worker 池、追加 JSONL 与 `--resume`。
- `README.md`:运行约定与安全边界。
- `work/candidate_review.md`:候选人工复核表。
- `work/audit_report.md`:审计报告模板。
- `work/data/`:raw(脱敏目标)/ candidates(扫描结果)/ findings(深度验证)三级目录。

## 约束与纪律
- 项目文件一律放 `./projects/llm_audit_ctf/`,禁止丢 temp 根目录
- 密钥/身份证等敏感信息仅引用不读取;报告脱敏
- 只做被动验证与最小 PoC,不真实套利、不批量薅资源(防法律风险+保报告可信度)
- 入库判据:记忆归零后接手缺了会重复付出认知代价才记

## 本机验收结论(2026-08-11)
- 已通过 Python 编译、`--help`、裸主机/端口/显式 URL/IPv6 输入规范化测试;含 URL 凭据和非 HTTP(S) 方案会被拒绝。
- 随机 `127.0.0.1` 回环 E2E:带 `status:200` 与 `json_contains:data` 的 `/v1/models` 规则命中;普通 HTTP 200 页面不命中;`--resume` 不重访已记录目标。
- 默认指纹和输出路径已锚定到脚本所在 `work/`,可从项目根直接运行。最终回环普通页只产生 `no_match_or_unreachable`,规则库静态检查无敏感路径或纯状态规则。
- 未启动项目服务、未外部批量扫描、未验证或修改本机代理链,未读取任何凭据。

## 待办
- [ ] 拿到脱敏后的题目原文 → 拆解评分点(产出计量方式、官方报告字段、提交渠道、时间线)。
- [ ] 按赛事实际规则补充指纹、候选排序和报告字段;每条新增规则先做本机反例/正例测试。
- [ ] 仅在明确授权范围内导入脱敏目标并进行小批次候选发现,再按 `candidate_review.md` 人工复核。
- [ ] 形成发现、修复建议、复测与提交的闭环;将官方字段映射到 `audit_report.md`。

## 本机代理监听快照(2026-08-11 21:46 +08:00)
- 只读核对结果已写入 `work/NETWORK_HANDOVER.md`(无业务内容、无凭据);`7897` 由 PID 19600 `BaoKeMengCore.exe` 监听(`::`),`18910` 由 PID 25412 `xray.exe` 监听(仅 `127.0.0.1`);`10810/10811/10822/10823` 未监听。
- 本次未读取代理配置或凭据,未验证代理认证/链式转发/出口 IP;后续若要启动业务代理链必须获得明确指令,且 `10810/10811` 与 `18910` 只读、禁止批量终止 xray。

## 版本化迁移(2026-08-11)
- 可追踪主副本为仓库根的 `projects/llm_audit_ctf/`;原 `temp/projects/llm_audit_ctf/` 保留作项目模式下的本地工作与回退副本。
- 项目级 `.gitignore` 忽略 `work/data/{raw,candidates,findings}/` 和 `work/reports_out/` 的运行数据,仅追踪各目录 `.gitkeep`、源码、规则与模板。
- 版本化副本通过本机 `127.0.0.1` 正负回环验收:`/api/models` 的 `{"data":[...]}` 命中 Open WebUI,普通 HTTP 200 页面写入 `no_match_or_unreachable`。
62 changes: 62 additions & 0 deletions projects/llm_audit_ctf/work/audit_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# LLM 服务暴露面审计报告(模板)

- 报告编号:`REPORT-YYYYMMDD-NNN`
- 报告日期(UTC):
- 报告人:
- 接收方/联系人:
- 保密级别:

## 1. 摘要

- 受测资产数量:
- 候选数量:
- 已确认问题数量:
- 最高风险等级:
- 一句话结论:

## 2. 范围与方法

- 授权来源、范围和时间窗口:
- 目标来源及脱敏方式:
- 使用的指纹库版本:
- 扫描器版本/提交:
- 请求限制:仅低影响 GET;并发、超时、是否经代理:
- 未执行事项:登录、猜测口令、提取密钥、模型生成调用、破坏性验证。

## 3. 发现汇总

| 编号 | 资产(脱敏) | 问题类型 | 严重性 | 置信度 | 状态 |
|---|---|---|---|---|---|
| `F-001` | `<host>` | `<类型>` | `<高/中/低>` | `<高/中/低>` | `<待确认>` |

## 4. 详细发现

### F-001:<简短标题>

- 资产与入口:
- 前置条件:
- 可复现步骤(仅授权、最小请求):
- 观察结果:
- 证据摘要:状态码、响应头必要字段、脱敏响应片段、时间戳、请求哈希:
- 影响:对机密性、完整性、可用性的具体影响;不要把“可做 2API”当作影响本身。
- 误报排除:
- 严重性依据:
- 修复建议:
- 复测标准:

## 5. 限制与不确定性

记录 TLS、WAF、代理、DNS、速率限制、未覆盖路径、资产归属未确认等因素。`no_match_or_unreachable` 不代表安全。

## 6. 修复跟踪

| 编号 | 责任方 | 建议日期 | 修复状态 | 复测日期 | 复测结论 |
|---|---|---|---|---|---|
| `F-001` | `<联系人>` | `<日期>` | `<待处理>` | `<日期>` | `<未复测>` |

## 7. 附录

- 证据文件索引:
- 扫描日志摘要:
- 规则库变更记录:
- 个人信息、凭据、Cookie、Token:**不得放入报告;如必须证明,仅提供类型、位置和不可逆摘要。**
43 changes: 43 additions & 0 deletions projects/llm_audit_ctf/work/candidate_review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# 候选人工复核表

> 指纹命中仅代表候选,不代表漏洞确认。每个候选单独填写,敏感值不得粘贴进此文件。

## 资产与授权

- 候选编号:`CAND-YYYYMMDD-NNN`
- 目标(脱敏/规范化 URL):
- 资产归属与联系人(如未知,写“待确认”):
- 授权来源/范围/时间窗口:
- 发现时间(UTC):
- 复核人:

## 被动/低影响证据

- 扫描结果文件与行号:
- 指纹分类:
- 指纹名称:
- score(仅排序参考):
- 命中路径:
- HTTP 状态:
- 证据摘要(脱敏、截断):
- 是否存在重定向、TLS 或代理不确定性:

## 最小人工复核

- 是否无需登录即可观察:`是 / 否 / 不确定`
- 是否暴露模型/版本/配置元数据:`是 / 否 / 不确定`
- 是否发现凭据、Cookie、Token:`禁止记录原值;仅写类型与位置`
- 是否存在未授权模型调用:`未验证 / 已在明确授权下验证 / 不应验证`
- 请求方法、路径和时间窗口:
- 服务端可观测影响:
- 复核结论:`误报 / 信息暴露 / 访问控制问题 / 配置风险 / 待补证据`
- 置信度:`低 / 中 / 高`

## 修复建议与复测

- 建议:鉴权、最小权限、密钥轮换、关闭调试/管理端点、网络隔离、速率限制等:
- 责任方:
- 期望修复时间:
- 复测条件:
- 复测结果与时间:
- 备注:
Empty file.
Empty file.
Empty file.
Loading