本页为译文。英文版本为权威文本。 阅读英文版
llm-abuse · litellm · llm-gateway · agent-harness · deepseek · credential-abuse · tool-calling
DeepSeek Harness 对准被盗的 LLM 网关:工具调用在调用方本机执行
这是一个具备智能体能力的 LLM 客户端:DeepSeek Harness,即 DeepSeek 的开发者预览版智能体框架,被前一天重放了该网关上签发的虚拟密钥的那两个地址指向了我们的蜜罐 LLM 网关。
作者 Davis Zheng·
TLP:CLEAR。已批准公开发布。由 Kinryū Labs 蜜罐传感器网络捕获。下文指标均已去毒化处理。
后续报告:DeepSeek Harness 滥用:一个自主智能体暴露了操作者的主机,2026-09-27。
执行摘要
- 11由调用方自身主机回传的工具执行结果
- 60来自该智能体执行框架客户端的网关请求
- 2共用被盗网关密钥的地址
- 31.2 h从首次存活探测到最后一次提示
2026 年 9 月 21 日,一个客户端把某个智能体执行框架指向了我们的一个蜜罐 LLM 网关,并向其回传工具执行结果:三个地址共 11 条,其中 103.85.74[.]25 五条、203.175.15[.]28 五条,另有 188.239.18[.]109 在三天前回传一条。这正是一个在调用方自身主机上执行其端点返回的工具调用的执行框架应有的形态。
这两个香港地址重放了 sk-0af475b8…,那是前一天有人用厂商默认主密钥 sk-1234 通过 LiteLLM 管理密钥接口在我们网关上签发的虚拟密钥。两者都属于 AS152320 GOALNOW,其中一个还直接提交过 sk-1234 本身。9 月 21 日它们再次出现,携带 User-Agent deepseek-harness/0.1.5-rc.2,即 DeepSeek 的开发者预览版智能体框架,其模型适配器会读取可配置的 base URL,并把我们的网关当作模型后端来跑。我们以低置信度认为两天的活动归属同一操作者,因为该判断仅依赖于两天出现了同样的两个地址以及那次密钥重放。
人工实时操作的可能性不大:9 月 20 日 04:25:44 至 9 月 21 日 11:34:45 UTC 之间的 78 个事件只包含 106 秒的活动时间,且一条 1999 字符的提示在 0.01 秒内送达,远快于打字者能达到的每秒十个字符。我们认为这最有可能是一个由人工选定启动时间的自动化智能体循环,尽管节奏方面的结论是混合的。
智能体回合之前的检查
在任何智能体回合之前,103.85.74[.]25 于 UTC 10:49 至 11:20 之间对我们的网关做了三轮检查,起手是重新探测存活路径,并在 14 秒内两次枚举可用模型。UTC 11:00,它针对三个不同的托管模型名称发送了三次完全相同的单 token 探测 Reply with exactly: OK。UTC 11:20,它跑了一组简短的英文能力测试:ping,然后是 Compute 17*23+19. Reply with ONLY the number.、数 strawberry 中字母数量的问题、Reverse the string 'litellm'.,以及布基纳法索的首都,每一条都要求只给出答案本身。反转测试选用 litellm 说明调用方知道自己在跟哪个产品对话。
从 UTC 11:26 起,User-Agent 发生变化,提示也不再是问题。这些回合携带 skill 脚手架式的 system reminder;UTC 11:34 的一个请求以 [system-reminder] A skill is a reusable set of task-specific… 开头。
操作者使用两种语言,并随客户端切换。9 月 20 日的验证通过 python-requests/2.28.1 以简体中文进行,依次是 1+2+3等于几?只回答数字、中国的首都是哪座城市?只回答城市名、用Python读取文件data.txt并打印内容,给出完整代码,而 9 月 21 日的执行框架能力测试是英文的。
回传的工具执行结果
这类执行框架会在操作者自己的机器上执行其端点返回的工具调用。操作者盗取了一个推理端点,然后把它接入一个在本地执行端点工具调用的框架,于是一个恶意端点就掌握了这类智能体会执行什么。该执行框架为谁而运行、每次调用在调用方主机上做了什么,均不清楚;它是在关闭工具审批的情况下运行,还是由操作者逐次确认每个调用,同样不清楚。
第三个地址我们在更早的活动中已经记录过,它曾用占位密钥榨取同一个网关,且所在网络与 AS152320 这一对不同。因此同样的客户端侧工具执行行为出现在这个地址池之外,我们把它当作一类行为来狩猎,而不是当作某个行为体的特征签名。
测试阶段与使用阶段
操作者的工具链分为测试阶段和使用阶段,只有使用阶段需要智能体。同样的两个地址在 9 月 20 日用的是脚本化 HTTP 客户端和固定的中文测试组,在 9 月 21 日用的是带 skill 脚手架的智能体框架。这一变化把该端点从一个正在被验证的对象,变成了一个接入实际工作工具链的组件。
低成本的检查都发生在任何智能体回合之前。
消耗端地址池
消耗推理资源的是同一个自治系统两个 /24 网段中的两个地址,两天里都在几分钟内交替使用。2026 年 9 月 15 日至 22 日之间,103.85.74[.]25 所在的 /24 中没有其他活跃源,全部 220 个事件都来自这一个地址。我们把跨两个前缀的交替读作有意的分流。
在我们网关上提交的密钥
除 sk-1234 之外,还有调用方提交过一个 bearer token,其主体是 base64 编码的 PKCS#8 私钥前缀 sk-MIIJQQIB…。把私钥当作 API 密钥提交,符合从收集到的清单中不做类型校验地重放凭据的特征,这说明上游是批量收割,而不是针对每个目标精心管理密钥。该密钥属于哪个系统、从何处取得,尚未查清。
这些执行框架请求用操作者并未付费的密钥消耗推理资源,这属于资源劫持(T1496);密钥本身是被盗的应用访问令牌(T1528),而其中一个地址直接提交了厂商默认主密钥,属于默认账户(T1078.001)。
我们检验过的竞争性解读
表:同样的两个来源提交了两个标记,且没有第三个来源提交过其中任何一个 以签发的密钥值和执行框架 User-Agent 为枢轴,在 2026 年 9 月 15 日至 22 日之间做群组透视。两行统计的是不同的对象:密钥的提交次数,以及携带该 User-Agent 的请求数。
| 标记 | 事件数 | 时间窗 | 来源数 | /24 数 | 组织数 |
|---|---|---|---|---|---|
提交 sk-0af475b8… | 57 | 16 分钟,9 月 20 日 | 2 | 2 | 1(AS152320) |
deepseek-harness/0.1.5-rc.2 | 60 | 11 分钟,9 月 21 日 | 2 | 2 | 1(AS152320) |
我们做这次透视是为了判定这些执行框架会话属于签发密钥的那个操作者,还是属于某个下游买家,而它并不能解决这个问题。从密钥提交记录中抽取的来源集合不可能包含签发请求本身。来源集合完全相同排除了第三方执行框架用户消耗转售密钥的情形,但对谁签发了 sk-0af475b8… 毫无说明,因此我们把这一解读记为不确定。
另有两种竞争性解读仍然悬置。按上面的会话算术,人在键盘前操作的可能性不大:31.2 小时内有 29 个突发段,段内间隔中位数 3.2 秒,38 个可测量间隔中有 26 个快于每秒十个字符所允许的速度;但节奏方面的结论是混合的,因此我们记为不确定。证据中没有任何迹象表明该会话是因错误而终止;103.85.74[.]25 的最后一个请求发生在 UTC 11:34:45。
该 User-Agent 是否为伪造同样不确定。它指向的项目真实存在,其模型适配器接受可配置的 base URL;观测到的回合携带 skill 脚手架,并在对话中回传工具执行结果,这与插件式执行框架相符;并且在 2026 年 9 月 15 日至 22 日之间只有两个来源提交过该字符串。
该地址池是否把执行框架指向别处
我们不知道同一地址池是否把该执行框架指向了其他被盗的推理端点,也不知道这些地址在 9 月 15 日之前做了什么。
应对措施
这一次往返要求两类人做出改变:运行智能体执行框架的人,以及运行 LiteLLM 网关的人。如果你运行智能体执行框架,请把它的 base URL 固定到你自己控制的模型端点,并要求工具执行经人工审批,因为恶意或被盗端点返回的工具调用会在你的机器上执行。任何把执行框架指向自己没有搭建的廉价 OpenAI 兼容中继的开发者,都面临同样的暴露面。如果你运行 LiteLLM,请轮换 sk-1234,并在虚拟密钥从与签发方不同的网络被提交时告警。
关键判断
- 9 月 20 日重放签发虚拟密钥的两个地址,与 9 月 21 日运行 deepseek-harness 客户端的是同样两个,其中一个还在网关上提交过 sk-1234。 2026 年 9 月 15 日至 22 日之间,签发的虚拟密钥 sk-0af475b8… 恰好由两个来源提交:203.175.15[.]28 和 103.85.74[.]25,两者都在 AS152320 GOALNOW(香港),而这同样的两个地址是唯一携带 deepseek-harness User-Agent 的来源,集中在 9 月 21 日一个十一分钟的时间窗内。中等置信度。
- 该客户端把自身主机上的工具执行结果回传给了端点。 有 11 条工具执行结果从调用方自身主机回传,103.85.74[.]25 五条、203.175.15[.]28 五条、188.239.18[.]109 一条,每一条都被执行框架在对话中标记为工具结果。中等置信度。
- 该会话最有可能是一个自动化智能体循环。 节奏方面的结论是混合的:来自 103.85.74[.]25 的 78 个事件横跨 31.2 小时,其中只有 106 秒的活动时间,38 个可测量间隔中有 26 个快于每秒十个字符所允许的速度,且一条 1999 字符的提示在 0.01 秒内送达。低置信度。
- 操作者会先测试被盗端点是否为真实模型,再把工作交给它。 9 月 21 日在任何智能体回合之前,该客户端先发送了三次完全相同的 'Reply with exactly: OK' 探测,随后是一组英文的算术、数字母、字符串反转和地理题,全部要求单 token 答案,之后才开始携带 skill 脚手架的回合。中等置信度。
时间线
- 2026-09-20 04:25 UTC103.85.74[.]25 探测网关的存活路径
- 2026-09-20 12:22 UTC203.175.15[.]28 在 /v1/chat/completions 上提交签发的虚拟密钥 sk-0af475b8…
- 2026-09-20 12:34 UTC103.85.74[.]25 提交同一密钥,并通过 python-requests/2.28.1 运行三条简体中文验证提示
- 2026-09-21 10:49 UTC103.85.74[.]25 再次出现,重新检查存活并在十四秒内两次枚举模型
- 2026-09-21 11:00 UTC针对三个托管模型名称的三次完全相同的 'Reply with exactly: OK' 探测
- 2026-09-21 11:20 UTC英文能力测试组:算术、数字母、反转字符串 'litellm'、地理
- 2026-09-21 11:26 UTC客户端切换为 deepseek-harness/0.1.5-rc.2;智能体回合开始
- 2026-09-21 11:34 UTC一个请求携带智能体 skill 脚手架
- 2026-09-21 11:37 UTC来自 203.175.15[.]28 的最后一个执行框架请求;此时三个地址已回传 11 条工具执行结果
会话全过程,按顺序
12:34:13 1+2+3等于几?只回答数字
12:34:43 中国的首都是哪座城市?只回答城市名
12:34:56 用Python读取文件data.txt并打印内容,给出完整代码
11:00:31 Reply with exactly: OK
11:20:35 ping
11:20:42 Compute 17*23+19. Reply with ONLY the number.
11:20:48 How many times does the letter 'r' appear in the word 'strawberry'? Reply with ONLY the number.
11:20:52 Reverse the string 'litellm'. Reply with ONLY the reversed result.
11:20:55 What is the capital of Burkina Faso? Reply with ONLY the city name.
11:26:26 deepseek-harness/0.1.5-rc.2 (+https://github.com/deepseek-ai/deepseek-harness)
11:34:45 [system-reminder] A skill is a reusable set of task-specific…
手法
| 方面 | 我们观测到的 | 对防御者的意义 |
|---|---|---|
| 工具链 | 同样的两个地址在 9 月 20 日使用 python-requests/2.28.1 配一组固定的中文提示,在 9 月 21 日使用带 skill 脚手架的智能体框架。 | 该端点从一个正在被验证的对象升格为接入实际工作工具链的组件;操作者的工具链分测试阶段和使用阶段,只有第二个阶段需要智能体。 |
| 顺序 | 存活探测、十四秒内两次模型枚举、针对三个模型名称的三次相同单 token 探测,然后是一组简短的能力测试,然后是智能体回合。 | 低成本检查发生在任何智能体回合之前:客户端先在验证上花代价,再把智能体投到该端点上。 |
| 行动安全 | 一个在本地执行工具调用的智能体执行框架被指向了操作者数天前盗取的端点,并把自身主机上的工具执行结果回传给了该端点。 | 操作者把攫取到的基础设施当作可信的,这把风险方向倒转了:控制该被盗端点的一方可以伸手进入运行智能体的那台机器。 |
| 基础设施 | AS152320 两个不同 /24 中的两个地址在两天里都以分钟级交替,另有一个位于不同网络的第三个地址在三天前回传过同一类工具执行结果。 | 消耗端地址池规模小且有意跨前缀分流,而客户端侧工具执行行为并非该操作者独有,因此应当作一类行为来狩猎,而不是当作某个行为体的特征签名。 |
| 失误 | 一个主体为 base64 编码 PKCS#8 私钥前缀的 bearer token 与厂商默认密钥一同在网关上被提交。 | 凭据是从收集到的清单中不做类型校验地重放的,这说明上游是批量收割,而不是针对每个目标精心管理密钥。 |
我们如何检验
| 解释 | 检验 | 结果 | 结论 |
|---|---|---|---|
| 这些执行框架会话属于签发该密钥的同一操作者,而不是下游买家 | 以签发的密钥值和执行框架 User-Agent 做群组透视,比较来源集合、自治系统和时间窗 | 两个彼此独立的群组,统计的是不同对象。密钥群组:9 月 20 日 16 分钟内有 57 个事件提交 sk-0af475b8…,来自 2 个 /24 中的 2 个来源、1 个组织(AS152320)。User-Agent 群组:9 月 21 日 11 分钟内有 60 个事件携带 deepseek-harness/0.1.5-rc.2,来自同样的 2 个来源。2026 年 9 月 15 日至 22 日之间没有第三个来源提交过其中任何一个标记。从密钥提交记录中抽取的来源集合不可能包含签发请求,因此来源集合完全相同排除了第三方执行框架用户消耗转售密钥的情形,但对谁签发了 sk-0af475b8… 毫无说明。 | 不确定 |
| 这些会话是由人在键盘前驱动的 | 对 103.85.74[.]25 做会话节奏算术 | 结论混合:31.2 小时内 78 个事件,活动时间 106 秒,段内间隔中位数 3229 毫秒,38 个可测量间隔中有 26 个快于每秒十个字符所允许的速度,且一条 1999 字符的提示在 0.01 秒内送达 | 不确定 |
| deepseek-harness User-Agent 是为了看起来像合法开发者工具而伪造的 | 核查所引用的项目是否存在、观测到的行为是否与其文档描述的设计相符,并核查有多少来源提交过该字符串 | 该项目真实存在,其模型适配器接受可配置的 base URL;观测到的回合携带 skill 脚手架,并在对话中回传工具执行结果,这与插件式执行框架相符,而不像 HTTP 扫描器;2026 年 9 月 15 日至 22 日之间只有 2 个来源提交过该字符串 | 不确定 |
| 会话结束是因为端点故障或超时 | 在会话末尾查找错误或间隔 | 来自 103.85.74[.]25 的会话持续到 UTC 11:34:45,证据中没有任何迹象显示它因错误而结束;缺失不构成证明 | 不确定 |
数据
以下数据由传感器遥测与富化数据自动测得,非估算。
- 节奏。 31.2 小时内 78 条命令,分布在 29 个突发段:活动 106 秒,空闲 31.1 小时。段内间隔中位数 3229 毫秒(49 个间隔中最小 0 毫秒,最大 4924 毫秒)。结论混合:该会话既不满足脚本化判定,也不满足交互式判定,因此按原样记录,不强行归入其中一类。
- 工具群组(ja4h)。
ge11nn060000_7f7bfeb0a491_000000000000_000000000000:1 天内跨 2 个托管服务商、2 个 /24 中的 2 个来源:共享工具,部署广泛。 - 工具群组(ja4h)。
po11nn080000_3d0e84a9a84f_000000000000_000000000000:4 天内跨 3 个托管服务商、4 个 /24 中的 4 个来源:共享工具,部署广泛。 - 基础设施。 该 /24 中有 1 个活跃源:没有共享地址池的迹象。
- VirusTotal 关联。 该地址与 GOALNOW NETWORK TECHNOLOGY CO., LIMITED 同处香港。89 个引擎中有 1 个将该地址本身判为恶意或可疑。在返回的记录中该地址解析过 1 个主机名,最近的是 2019-03-27 的 xxhcj[.]cn。
失陷指标
下列 3 个网络指标已去毒化处理;路径按观测原样给出;ASN 行保持原样。
网络
| 指标 | 说明 |
|---|---|
103.85.74[.]25 | AS152320 GOALNOW(香港);提交了签发的密钥并运行 deepseek-harness 客户端 |
203.175.15[.]28 | AS152320 GOALNOW(香港);同一地址池的第二个地址,相同密钥、相同执行框架 User-Agent |
188.239.18[.]109 | 独立地址,9 月 18 日以不同的密钥来源回传过同一类工具执行结果 |
AS152320 | GOALNOW NETWORK TECHNOLOGY CO.(香港);两个消耗端地址都在此 |
主机制品
| 指标 | 说明 |
|---|---|
sk-0af475b8… | 通过 LiteLLM 管理密钥接口在传感器网关上签发的虚拟密钥,被 AS152320 的两个地址重放 |
deepseek-harness/0.1.5-rc.2 (+https://github.com/deepseek-ai/deepseek-harness) | 驱动该网关的智能体框架的 User-Agent;2026 年 9 月 15 日至 22 日之间有 2 个来源,均在 AS152320 |
sk-MIIJQQIB… | 在网关上提交的 bearer token,其主体是 base64 编码的 PKCS#8 私钥前缀,符合重放收割凭据清单的特征 |
检测
Sigma
智能体执行框架 User-Agent 指向未在允许清单中的 LLM 端点(候选)。
title: Agent harness user agent toward a non-allowlisted LLM endpoint
status: experimental
logsource:
category: proxy
detection:
selection_ua:
c-useragent|contains:
- 'deepseek-harness/'
selection_path:
cs-uri-stem|contains:
- '/v1/chat/completions'
- '/v1/models'
filter_allowlisted:
cs-host|contains:
- 'api.deepseek.com'
- 'api.openai.com'
condition: selection_ua and selection_path and not filter_allowlisted
falsepositives:
- Developers legitimately evaluating self-hosted or third-party model endpoints
- Internal model gateways not present in the allowlist
level: medium
检测逻辑
- LiteLLM 虚拟密钥从与签发方不同的网络被提交(网络,候选)。将 POST /key/generate(或任何管理密钥签发接口)与随后在 /v1/chat/completions 上提交所返回密钥值的行为做关联。当签发源地址与消耗源地址位于不同自治系统时告警,或当消耗地址在签发后一小时内来自此前对该网关没有任何历史记录的网络时告警。这需要网关在每个请求中记录密钥 id 或密钥的哈希。
- 针对推理端点的模型真实性测试组(行为,候选)。在面向互联网的推理端点上,标记那些在任何实质请求之前、于一分钟内连发多条要求单 token 答案的提示的会话:相同的 ‘Reply with exactly: X’ 探测、小算术、数单词中的字母、字符串反转、单词级地理题。这是调用方在核实该端点是否为真实模型,在生产网关上这不是正常用户流量。
- 智能体执行框架从未固定的 base URL 执行工具调用(主机,候选)。在开发主机和构建主机上,当智能体执行框架进程(deepseek-harness、dsh 或同类)以指向批准允许清单之外的模型 base URL 环境变量启动时,以及当该进程在向该 base URL 发出出站 HTTPS 请求后数秒内派生 shell 或文件读取工具时,予以告警。
处置建议
- 轮换任何等于或近似厂商默认值 sk-1234 的 LiteLLM 主密钥,并吊销其生效期间签发的虚拟密钥。
- 把 LiteLLM 管理接口(/key/generate、/key/list、/config/yaml、/user/list)限制在内部网络或经认证的管理平面上,绝不要与 /v1/chat/completions 共用同一个监听端口。
- 把智能体执行框架的 base URL 固定到你自己控制的端点允许清单上,并要求工具执行经过审批,而不是依赖默认配置档。
- 在每个推理请求中记录密钥标识和来源网络,使得从签发方之外的网络使用密钥的情况可被检出。
- 把模型响应当作不可信输入:来自某个端点的工具调用,就是控制该端点的人下达的指令。
MITRE ATT&CK 映射
| 战术 | 技术 | 观测情况 |
|---|---|---|
| 防御规避 | T1078.001 有效账户:默认账户 | 厂商默认的 LiteLLM 主密钥 sk-1234 由后来使用签发虚拟密钥的同一地址在网关上提交。 |
| 凭据访问 | T1528 窃取应用访问令牌 | 通过管理接口签发的虚拟密钥 sk-0af475b8… 被同一自治系统中的两个地址重放。 |
| 影响 | T1496 资源劫持 | 9 月 21 日十一分钟内,60 个携带智能体执行框架 User-Agent 的网关请求,通过操作者并未付费的密钥消耗了推理资源。 |
| 执行 | T1059 命令与脚本解释器 | 调用方主机在三个地址上共 11 次向端点回传工具执行结果,这正是在本地执行其端点工具调用的执行框架的模式。 |
参考资料
- DeepSeek Harness(deepseek-ai/deepseek-harness),智能体框架,开发者预览版
- DeepSeek Harness 开发者预览版:一切皆插件
- DeepSeek Harness 架构:配置档、插件与审批策略
方法与分析师备注
本次观测为 2026 年 9 月 18 日至 21 日期间三个地址对我们其中一个网关的活动。提示按发送原样引用,过长的做了截短;该执行框架为谁而运行、每次调用在调用方主机上做了什么,均不清楚。与 9 月 20 日密钥签发的关联依据是我们自己对密钥值的记录,而非任何外部佐证。
仍然悬置:
- 该执行框架为谁而运行。
- 该执行框架是在关闭工具审批的情况下运行,还是由操作者逐次确认每个调用。
- 那个 base64 PKCS#8 bearer token 属于哪个系统,以及它是从何处收割的。
问题或更正请联系:contact@kinryu.sh。