ExploitGym LLM Proxy详解:AI Agent按任务预算控制与外网搜索阻断的终极策略

发布时间:2026/10/15 17:28:39

ExploitGym LLM Proxy详解:AI Agent按任务预算控制与外网搜索阻断的终极策略 【免费下载链接】exploitgymExploitGym is a large-scale, realistic benchmark built from real-world vulnerabilities designed to evaluate AI agents ability to develop exploits.项目地址https://gitcode.com/gh_mirrors/ex/exploitgym点击查看免费下载ExploitGym是一个基于真实漏洞的大规模 AI Agent 渗透能力评测基准而它内置的LLM Proxy大模型 API 代理是整套评测体系中的钱包 安检门一方面为每个 AI Agent 任务发放带预算的临时 API Key实现按任务的费用上限控制另一方面默认阻断模型服务商侧的外网搜索与远程取数能力确保 Agent 无法绕过容器防火墙偷偷访问互联网。本文带你快速看懂这套机制的设计思路与使用方法。为什么需要一个 LLM Proxy在 ExploitGym 中Agent 运行在隔离容器里完成漏洞利用任务。这里有两个现实问题费用失控Agent 长任务可能持续调用 LLM API一旦死循环或卡死账单会像失控的循环一样增长。没有预算闸门跑 869 个任务的成本完全不可控。️容器防火墙挡不住服务商侧外联ExploitGym 的 Squid 防火墙 只能隔离容器出站流量但 Web 搜索、网页抓取、深度研究等能力是在LLM 服务商自己的服务器上执行的——容器网络隔离对这些能力完全无效。如果放任不管Agent 就可以合法地把题目信息发到外网搜索答案评测结果将失去意义。因此 ExploitGym 在 src/cybergym/llm_proxy/ 模块中实现了一个轻量代理能力作用按 Key 的预算记账每个任务的 Key 有独立 USD 上限超额自动拒绝模型白名单Key 只能调用被允许的模型外网搜索阻断默认拒绝一切服务商侧外联请求路由白名单只放行无状态推理接口管理/有状态接口一律 403内存记账无需 Postgres 等外部数据库零依赖启动核心设计一句话让 Agent 花多少钱、能调什么模型、能不能上网搜全部在代理层强制执行。按任务预算控制的完整流程预算机制的核心是 budget.py 中的BudgetManager它为每个 API Key 维护一条KeyRecordbudget.py#L74-L101记录字段包括max_budget/spend/remaining预算上限、已花费、剩余input_tokens/output_tokens/reasoning_tokens各类 token 计数cache_read_tokens/cache_creation_tokens缓存命中与写入requests/total_latency请求数与累计延迟per_model按模型拆分的独立小账本——Agent CLI 内部偷偷调用的辅助小模型如 Gemini CLI 的分类器调用 flash 模型也会各自入账一目了然整个生命周期只有四步发放评测运行器 run_agent.py 通过 manager.py 中的ProxyKeyManager调用POST /budget/generate_key按任务申请一个预算为--budget美元默认 $20的临时 Key记账每次成功请求后BudgetCallbackserver.py#L212-L266自动从响应中提取 token 用量交给 litellm 计算成本并累加到该 Key 的账本拦截Key 一旦花超后续请求直接返回HTTP 429budget_exceededAgent 拿到的错误信息形如Budget exhausted: $20.00 / $20.00从根源上止损回收任务结束时删除 KeyDELETE /budget/key/{key}最终花费写入输出目录的key_usage.json长跑任务还会每 ~20 分钟在usage/目录落一份中间快照方便实时盯成本。这套生成→记账→拦截→回收的闭环让预算成为评测的硬约束而不是事后统计。模型白名单Key 只能调允许的模型生成 Key 时除了max_budget还可以传入allowed_models。代理会在 server.py#L426-L448 处对每个请求体做精确匹配调用白名单之外的模型会收到HTTP 403model_not_allowed。在评测侧有两种用法见 docs/eval.md# 显式列出允许的模型 uv run examples/run_agent.py --agent claude_code \ --proxy-url http://172.17.0.1:4000 \ --budget 5.00 --allowed-models claude-sonnet-4-6 # 或者不带值自动把 Key 锁定到本次运行的 --model uv run examples/run_agent.py --agent claude_code \ --proxy-url http://172.17.0.1:4000 \ --budget 5.00 --model claude-sonnet-4-6 --allowed-models 小提醒如果 Agent CLI 内部还会调用辅助模型比如 Gemini 的分类器模型记得把它一并加入白名单否则会被 403 拦下。外网搜索阻断四层规则拦住所有服务商侧外联检测逻辑独立成 websearch.py采用fail-closed默认拒绝策略核心函数是find_web_search()websearch.py#L176-L217。它按四层规则扫描请求体与路由路径规则拦截对象典型触发规则 1模型名托管搜索/深度研究模型模型名含*-search-preview、*-search-api、*-deep-research规则 2顶层参数请求级搜索开关出现web_search_options即使为空对象、mcp_servers规则 3工具声明服务商托管工具web_search*、web_fetch*、code_execution*、mcp、code_interpreter、file_search以及 Gemini 的google_search、url_context、enterprise_web_search规则 4远程取数字段指向外部资源的任意字段file_url、server_url、connector_id、file_uri、外链image_url、Anthropic 的 URL 文档源、带network_policy的托管 shell命中任何一条请求即被HTTP 403web_search_blocked拒绝错误信息会附带具体原因如tool web_search、web_search_options。值得注意的两个放行边界体现了设计的精确性✅内联data:图片允许通过——它只携带数据本身不触发任何外部拉取✅Agent 自执行的客户端工具function工具、本地bash、text_editor等不受影响——它们跑在防火墙后的容器里网络出口已被 Squid 代理管住。如果想显式放开不推荐用于正式评测启动代理时加--allow-web-search即可。路由白名单与其他安全细节除了预算和搜索server.py 还埋了几处防君子也防小人的细节路由白名单只放行 LiteLLM 的无状态推理路由/v1/messages、/v1/responses、/v1beta/models/...:generateContent等及厂商透传前缀/v1/batches、/v1/files、MCP 端点等有状态或管理型接口一律 403forbidden_route避免 Key 被拿去批量刷接口或触发远程代码执行面内部主 Key 不外泄代理把外部 Key 在转发前统一替换为进程内部生成的 master key外部调用者无法直接借用或伪造 LiteLLM 凭证server.py#L450-L472管理端点独立鉴权/budget/*必须携带x-admin-key请求头与推理 Key 完全分离报错信息脱敏TracebackRedactionMiddleware会剥掉错误响应里 LiteLLM 拼入的 Python 堆栈防止内部文件路径、版本号等细节泄露给容器里的 Agent。启动与验证三步跑通 LLM Proxy启动命令很简单详见 docs/eval.md 的 Prepare local litellm proxy 一节export PROXY_PORT4000 export CYBERGYM_ADMIN_KEYcgym-admin-$(openssl rand -hex 12) export ANTHROPIC_API_KEYsk-ant-... # 按需加上 OPENAI_API_KEY 等 uv run -m cybergym.llm_proxy \ --host 172.17.0.1 \ --port $PROXY_PORT \ --admin-key $CYBERGYM_ADMIN_KEY \ --default-budget 20.0常用参数一览入口main.py参数说明默认值--host/--port监听地址127.0.0.1/4000--configLiteLLM 模型配置 YAMLdefault_config.yaml--default-budget每个 Key 的默认预算USD20.0--admin-key/budget/*管理 Key也可用环境变量CYBERGYM_ADMIN_KEY自动生成并打印--allow-web-search关闭外网搜索阻断默认开启阻断验证是否跑通可发起一轮发 Key → 推理 → 查用量 → 吊销文档中附有完整 curl 示例# 1. 用管理 Key 申请一个 $0.01 的测试 Key curl -s -X POST http://172.17.0.1:4000/budget/generate_key \ -H x-admin-key: $CYBERGYM_ADMIN_KEY -H Content-Type: application/json \ -d {max_budget: 0.01} # 2. 用测试 Key 发起一次推理 curl -s -X POST http://172.17.0.1:4000/v1/messages \ -H x-api-key: $KEY -H content-type: application/json \ -d {model: claude-sonnet-4-6, max_tokens: 16, messages: [{role: user, content: hi}]} # 3. 查询该 Key 的花费与 token 明细然后吊销 curl -s -H x-admin-key: $CYBERGYM_ADMIN_KEY \ http://172.17.0.1:4000/budget/usage/$KEY常见错误码速查表跑评测时如果看到这些返回对照下表即可快速定位状态码类型含义处理建议401auth_errorKey 不存在或管理 Key 错误检查x-api-key/x-admin-key403budget_exceeded相关路径 /forbidden_route访问了白名单外的路由只用推理接口403web_search_blocked触发了服务商侧外联能力属预期拦截检查 Agent 为何开启搜索403model_not_allowed调用了白名单外模型把模型加入--allowed-models429budget_exceeded预算耗尽属预期止损适当调大--budget总结与相关文件ExploitGym 的 LLM Proxy 用一个轻量组件同时解决了评测中的两个难题用每任务一把钥匙的内存账本实现预算硬约束用四层 fail-closed 规则堵住服务商侧的外网搜索通道再配上路由白名单与报错脱敏让 AI Agent 评测既算得清成本也守得住隔离边界。相关文件索引代理服务与中间件server.py预算记账核心budget.py外网搜索检测器websearch.py运行器侧 Key 管理客户端manager.py默认模型配置default_config.yaml评测全流程含代理启动与验证命令docs/eval.md容器出站防火墙与 LLM Proxy 互补的第二层防线docs/firewall.md代理行为测试tests/llm_proxy/test_server.py 一句话记忆防火墙管容器能不能上网LLM Proxy 管模型服务商帮不帮你上网两者合力才是完整的外联隔离。赞分享【免费下载链接】exploitgymExploitGym is a large-scale, realistic benchmark built from real-world vulnerabilities designed to evaluate AI agents ability to develop exploits.项目地址https://gitcode.com/gh_mirrors/ex/exploitgym点击查看免费下载相关推荐从微软实践到开源共享gh_mirrors/ca/career-ladders背后的设计哲学从微软实践到开源共享gh_mirrors/ca/career ladders背后的设计哲学 在当今快速发展的科技行业中职业发展路径的透明度和可预期性已成为吸PowerJob批量任务处理终极指南任务合并与并行度控制策略详解PowerJob批量任务处理终极指南任务合并与并行度控制策略详解 PowerJob作为新一代分布式调度与计算框架在企业级批量任务处理领域展现出了卓越的性能优任务调度后端FastAPI Contrib序列化器揭秘ModelSerializers如何简化数据验证与数据库操作FastAPI Contrib序列化器揭秘ModelSerializers如何简化数据验证与数据库操作 FastAPI Contrib是一个基于FastAPI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/15 17:28:39

恶意软件分类数据集实战:从特征工程到模型训练避坑指南

简介:面向恶意软件检测与机器学习研究的数据集资源,适合安全分析人员、算法工程师及高校学生用于恶意软件分类模型训练与特征工程实践。压缩包共25个文件,约19.12MB,涵盖9个CSV特征表与标签文件、6个Python脚本、2个ASM汇编与2个B…

2026/10/15 17:28:39

DDS核心原理与QoS配置:分布式实时通信中间件实践指南

搞过机器人、自动驾驶或者工业控制这类分布式系统的人,大概率绕不开DDS这个名字。DDS全称是Data Distribution Service,数据分发服务,是一套面向分布式实时通信的中间件技术标准。它能解决的核心问题很直白:在几十个甚至上百个节点…

2026/10/15 18:14:13

ROS导航/odom轨迹可视化:从rosbag离线绘制到matplotlib实时显示

做机器人导航调试的时候,除了在 rviz 里盯着机器人实时跑,我经常需要把/odom发出来的轨迹单独拉出来画成一张图——比如比赛复盘、实验报告、论文插图,或者单纯想对比两版参数谁的路径更平滑。这个需求看着不起眼,真动手写的时候&…

2026/10/15 18:14:13

libssh2在Windows下的编译、链接与运行避坑指南

简介:libssh2 1.7.0的Windows开发包为使用Visual Studio 2015的C/C开发者提供了完整的SSH/SFTP集成支持。其中包含编译好的静态库与动态链接库,以及配套头文件,解决在Win10环境下开发时为库文件缺失或版本不匹配而烦恼的问题。压缩包共6个文件…

2026/10/15 18:14:13

SSL证书选型指南:DV、OV、EV与通配符/多域名证书怎么选

做了几年网站运维和咨询,我碰到最多的问题不是“证书怎么装”,而是“我该买哪种证书”。SSL证书选择这件事,看起来就是花几百到几千块买一段加密文件,实际上牵扯到验证门槛、域名数量、浏览器兼容性、续期成本,还有最容…

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/15 0:02:22

防关联浏览器哪个好?三款产品实测差异解析

新手做多店铺,最纠结的就是防关联浏览器选哪个。飞跨、网易、站斧这三款被问得最多,先给结论:要一体化省心、长期便宜,选站斧;要网易招牌和稳,选网易;预算紧做东南亚 Lazada,选飞跨。…

2026/10/15 0:02:22

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成

影刀RPA深度实战:大模型Fine-tuning定制RPA专用Prompt与指令生成 一、技术背景 大模型(LLM)在通用场景下表现强大,但当我们将 GPT-4 或 Qwen 直接用于生成影刀RPA操作指令和 XPath 定位时,准确率通常只有 40%-60%。原因…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑