wjord2023/agent-debate-netsec

GitHub: wjord2023/agent-debate-netsec

基于多 Agent 辩论架构的网络流量安全分析系统,通过对抗式协作从流量数据中精准定位核心安全问题。

Stars: 0 | Forks: 0

# Agent-辩论-netsec 多 Agent 调查员辩论系统,解决 CCF BDCI 2019 网络安全赛题。基于 **AutoGen v0.4 + 通义千问 Qwen3.6-plus + DuckDB**。 **两份延伸阅读**: - 📘 [REPORT.md](REPORT.md) —— 正式实验报告(含架构图、全流程说明、辩论实录) - 📝 [辩论实录.md](辩论实录.md) —— 三场真实辩论的完整对话走读(每场都能看到 Pro/Con 如何改变结论) ## 核心架构:3 个 agent,辩论式调查 ``` Moderator (首席调查员) — 提假设 / 裁决 / 换题 / 结案 ↓ [并行开场] ProDebater (支持) ‖ ConDebater (质疑) ↓ Moderator (Judge) → CONTINUE / REFRAME / VERDICT / DEBATE_DONE ↓ 最终产出:1 个核心安全问题 + 资产/威胁清单 + 攻击链叙述 ``` **每次 run 聚焦 1 个核心问题就结束**,不追求覆盖面。REFRAME 机制允许 Moderator 主动换题深挖。 所有 agent 共享工具: - `run_sql` —— DuckDB SQL,查 tcpflow / flow 视图 - `run_python` —— 进程内沙箱,预置 pandas / sklearn / ipaddress / user_agents / tldextract - `plot_bar` / `plot_time_series` / `build_comm_graph` —— matplotlib + networkx 可视化 ## 目录 ``` agent_team/ ├── config.py # Qwen client + 路径 ├── ingest.py # raw JSON → Parquet ├── tools/ │ ├── analysis.py # run_sql / list_tables / profile_column │ ├── python_exec.py # run_python 沙箱 │ └── viz.py # 可视化工具 ├── agents/ │ └── team.py # DebateRunner + Moderator/Pro/Con ├── main_analyze.py # 自动分析模式(task=1 或 2) ├── main_defend.py # 答辩模式(用户直接提问) ├── show_transcript.py # 实时/回放对话查看器 └── transcripts/ # 完整对话实录(JSONL) ``` ## 安装 需要 **Python 3.10+**(推荐 3.12)。 ``` # uv(推荐) uv venv --python 3.12 .venv source .venv/bin/activate uv pip install -r requirements.txt # 或 pip python3.12 -m venv .venv source .venv/bin/activate pip install -r requirements.txt # API key cp .env.example .env # 编辑 .env, 填 DASHSCOPE_API_KEY(从 https://bailian.console.aliyun.com/ 拿) ``` ## 数据准备 赛题数据从 [DataFountain 比赛页](https://www.datafountain.cn/competitions/358) 下载,放到: ``` 大数据安全/ ├── agent_team/ # 本仓库 ├── 01资产识别/ │ ├── dataset_1.zip # 或解压后的 dataset_1/tcpflow/*.gz └── 02异常分析/ ├── part-1.json └── part-2.json ``` 然后入库(一次性,约 1-2 分钟): ``` cd agent_team python ingest.py # 产出 data_processed/tcpflow.parquet 和 flow.parquet ``` ## 运行 ### 自动分析模式(完整任务辩论) ``` # Task 1 (资产识别,asset mode) python -u main_analyze.py --task 1 --max-messages 100 # Task 2 (威胁检测,threat mode) python -u main_analyze.py --task 2 --max-messages 100 ``` 每次跑会产生一份 `transcripts/<时间戳>-task{1,2}-*.jsonl` 对话记录。 ### 答辩模式(单点深挖) ``` python -u main_defend.py --mode threat -q "10.56.34.157 的 sqlmap 攻击具体危害多大?请量化证据。" # 或交互模式 python -u main_defend.py ``` defend 模式下,用户的问题**直接作为假设**,跳过 Moderator Pose 阶段,Pro/Con 直接开场。 ### 实时查看对话 ``` # watch 模式:自动切换到最新 transcript python show_transcript.py -w # 跟固定某份 python show_transcript.py -f transcripts/20260423-170854-task1-assets.jsonl # 只看文字发言(不看思考/工具细节) python show_transcript.py -w --brief # 只看某个角色 python show_transcript.py -w --only Moderator ``` ## 仓库里的 3 份代表性 transcript | 文件 | 内容 | |---|---| | `transcripts/20260423-170854-task1-assets.jsonl` | **Task 1 双平面发现 + Task 2 CVE-2012-1823 RCE 扫描识别**(158 条,综合性最强) | | `transcripts/20260423-143813-task2-anomalies.jsonl` | **10.56.34.157 真实 sqlmap 攻击链发现**(82 条,Pro 按 UA 工具指纹切入) | | `transcripts/20260423-163111-task2-anomalies.jsonl` | **扫描器多维度分析 + H₃/H₄ 深度辩论**(95 条) | REPORT.md §7 有对应的精彩对话摘录。 ## 调优要点 **Moderator 和稀泥判 benign 怎么办?** - 用 `--mode threat`(默认 threat)启用威胁场景 prompt - 或改 `agents/team.py` 的 `MODERATOR_SYSTEM`,强化调查员身份 **对话超长烧 token?** - 降 `--max-messages`(默认 100,给 Moderator 深挖空间) - 或改 `DebateRunner(max_rebuttal_rounds=3)`,限反驳轮数 **想换模型?** - `.env` 设 `QWEN_MODEL_HEAVY=qwen3.6-flash`(便宜 10 倍) - 或编辑 `config.py` **Python 沙箱里 agent 覆盖了 `con` 对象报 "flow table not found"?** - 下次调用会恢复,自愈 - 长期解:让 `con` 在 namespace 里只读 ## 故障排查 | 症状 | 原因 | 修 | |---|---|---| | `DASHSCOPE_API_KEY not set` | `.env` 没配 | 按 .env.example 填 | | `tcpflow.parquet missing` | 还没 ingest | `python ingest.py` | | ingest 报 `malformed JSON` | flow 数据分隔符奇怪 | 代码已处理(brace-aware);如新格式可能要改 `ingest.py` | | agent 连接错误 | 网络抖 / 账户欠费 | `_call_once` 自动重试 3 次;仍失败检查 Dashscope 账单 | | 对话卡很久不动 | Python `print` 写到文件被 block buffered,实际在跑 | 看 transcript 文件本身(`show_transcript.py`) | ## 许可证 MIT License。见 [LICENSE](LICENSE)。 ## 引用 / 致谢 本项目是 CCF BDCI 2019 赛题 13 的作业尝试。架构的迭代与调试,详见 [辩论实录.md](辩论实录.md) 的全过程记录。 核心思路灵感来自对“单 agent LLM 模式匹配陷阱”的观察,以及对“多 agent 辩论常陷入和稀泥”的反思。最终版本采用**调查员(Investigator)**身份而非**法官(Judge)**,显著提升了结论的判断力。
标签:Agent, AutoGen, Beacon Object File, CCF BDCI 2019, DLL 劫持, DuckDB, IP 地址批量处理, NetworkX, PyRIT, Python, Scikit-learn, 人工智能, 代码示例, 多Agent辩论, 多智能体系统, 大语言模型, 威胁分析, 安全可视化, 安全大模型, 安全调查, 安全赛事, 攻击链, 数据分析, 数据科学, 无后门, 深度包检测, 特权检测, 用户模式Hook绕过, 突变策略, 网络安全分析, 网络流量分析, 自动化侦查工具, 资源验证, 辩论架构, 逆向工具, 通义千问, 速率限制