微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 当你让AI帮你扫描一台靶机的端口,然后用Metasploit打一个漏洞,你有没有想过:它敲出来的那串命令,到底对不对?

当你让AI帮你扫描一台靶机的端口,然后用Metasploit打一个漏洞,你有没有想过:它敲出来的那串命令,到底对不对?

2026-10-28 14:31
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-28 14:31 • 科技行者

你可能觉得这不算什么大问题。大语言模型连高考数学题都能解了,生成一行nmap命令还能有多难?

但事情没那么简单。2026年初,一支来自哈利法大学的研究团队做了一件事:他们找来24个主流的开源大模型,让它们根据一句话描述去生成Kali Linux上的渗透测试命令。结果所有模型里,没有一个的"完全正确率"超过42%。

这是一个挺扎心的数字。要知道,这些模型里不乏参数量高达753B的巨无霸,也不乏专门为网络安全场景微调过的"专业选手"。可一旦脱离提示和帮助,它们在命令行这个看似简单的任务上集体翻车了。

这篇论文的名字叫KaliBench,它想回答的问题很直接:当你跟AI说"扫描一下这台主机的21到25端口和80端口,用TCP Connect方式,只显示开放的",它真的能原样翻译成一行能跑的命令吗?

命令行的世界,没有"差不多对"

要理解这件事的难度,得先明白命令行工具和我们平时聊的"函数调用"有什么本质区别。

**函数调用**:就是给AI一个预先定义好的工具清单,告诉它每个工具叫什么名字、需要传入哪些参数、参数是什么类型,AI只需要按照这个清单"填空"就行。

现在市面上评测大模型工具调用能力的基准,比如BFCL、ToolSandbox,走的都是这条路:先给你一份详细的说明书,再让你照着说明书操作。这就好比考试前老师把答题卡格式都印好了,你只要往里填数字。

但Kali Linux不是这样的。

Kali Linux上预装了超过2000个安全工具,从nmap扫描器到Metasploit渗透框架,再到Volatility内存取证工具,五花八门。如果你想在提示词里把这2000多个工具的用法全部塞进去,那提示词本身就得几十万字,根本塞不进模型的上下文窗口。

所以现实情况是:分析师说一句话,AI得自己判断"这应该用哪个工具",然后自己回忆"这个工具的参数格式是什么样的",最后拼出一行完整命令。这个过程研究者管它叫"schema-free",翻译过来就是无脚手架、无说明书的裸写。

**schema-free**:指没有预先提供结构化的工具定义或参数说明,模型必须凭借自身知识推断出正确的工具名和参数格式。

这就像让一个新员工去修理一台没有说明书的老机器。如果公司提前给他一份详细的操作手册,他照着做大概率不会出错;可如果什么都不给,只告诉他"把这个螺丝拧紧",他连螺丝刀该用十字还是一字都得自己猜。猜错一次,整台机器可能就报废了。命令行的命令也是一样,少写一个短横线、多写一个空格、把长选项和短选项混着用,整条命令就直接报错,执行不了。

这也是为什么研究者说,命令行场景的评测,比传统的函数调用评测要"狠"得多。你没有容错空间。

八千五百条数据,是怎么炼出来的

要搭建这样一个基准,第一步是收集数据。研究团队从Kali Linux官方文档库里扒出了2372个工具的说明文档,里面详细记录了每个工具支持哪些长选项、短选项,还有哪些别名写法。

接着他们用通义千问的Qwen3-Max模型,针对每个工具生成10到13条"自然语言问题配对正确命令"的样本,最初一口气生成了2.77万条。

但这里出了个大麻烦。

研究人员人工抽查后发现,超过一半的生成数据里都藏着幻觉错误,比如把该写成`--silence`的参数错写成了`--silent`。这种错误极其隐蔽,不仔细核对文档根本发现不了。

**幻觉**:指大模型生成了看似合理但实际上不存在或不准确的内容,在这里具体表现为编造出文档里压根没有的命令行选项。

为了把这些问题清理掉,团队设计了一套多阶段验证流水线。第一轮是让另一个大模型充当"审查员",拿着原始查询、生成的命令和官方说明书三方比对,看看命令里的每个参数是不是都有文档依据。这一轮就刷掉了53.8%的数据,剩下14.5万条。

光靠AI审查还不够放心。团队又搭了一个Docker沙箱环境,把每条命令真的丢进一个装了Kali Linux全套工具的容器里跑一遍,记录下标准输出、错误信息和退出码。

这一步的用意很实在:有些命令看起来语法没问题,但工具压根不存在,或者某个参数值是编造的,真跑起来立刻就会报错。这个阶段又过滤掉了11.95%的数据。

如果说前两轮验证像是先找语文老师检查病句,再找理科老师验算结果,那最后一轮人工复核就是请一位真正懂行的老专家把关。研究者专门挑出那些连当时表现最好的模型都做不对的难题,用AI辅助生成初步判断,再由人工逐条核实。这一轮又揪出4.9%的问题数据,常见错误包括写错了选项格式(比如把文档里的`-g`错写成`--g`)、漏掉了查询里明确要求的参数、或者选了功能不对口的参数。

经过这么三道关卡,最终留下的高质量数据只有8504条,占最初生成量的30.7%。这个淘汰率说明了一件事:靠大模型"自动生成数据"这条路看起来省事,但不加约束地直接拿来用,风险极大。

这8504条数据被打上了五个安全阶段的标签:侦察与初始访问、漏洞分析、漏洞利用与载荷投递、后渗透与横向移动、防御分析与报告。这个分类思路借鉴了著名的"洛克希德·马丁网络杀伤链"模型,相当于把黑客攻击的完整生命周期拆解成了五个章节。再往下细分,又拆成了23个具体的能力维度,比如无线网络攻击、社会工程学、数据库漏洞、密码破解等等。

三种考试模式,揭开了一个真相

有了数据,接下来就是怎么考。研究团队设计了三种评测模式,分别叫做"无限制模式"、"受限模式"和"提示模式"。

无限制模式下,模型只拿到一句自然语言描述,自己判断用什么工具、怎么配参数,什么都没有。受限模式会额外给模型一份20个候选工具名单,正确答案肯定在里面,相当于把选择题从开卷变成了四选一。提示模式则更进一步,不仅给候选工具名单,还把这些工具的官方说明书也一并提供,这已经非常接近传统函数调用评测的设定了。

这三档难度设计出来,就是想搞清楚一件事:模型到底是不知道该用哪个工具,还是知道用哪个工具但不会正确配参数?

结果相当有意思。

从无限制模式切换到受限模式,工具选择的准确率平均从72.0%猛涨到95.2%,涨了23个百分点。这说明只要把候选范围圈定好,模型基本上能认出正确的工具。但与此同时,表示参数构造准确度的几个指标只提升了一点点,这就暴露出一个关键事实:挑对工具不等于能把命令写对。

真正的转折点出现在提示模式。当模型拿到完整的工具文档之后,表示可选参数正确率的Opt-F1从45.1%直接飙到87.8%,表示固定位置参数正确率的Pos-F1从61.1%涨到90.1%,完全匹配率(也就是整条命令一字不差的比例)更是从22.3%跳到73.1%。

这组数字告诉我们一个挺反直觉的结论:卡住大模型的不是"不知道该用哪个工具",而是"不记得这个工具具体怎么用"。

换句话说,当代大模型对安全工具的宏观认知是够用的,它们大体知道扫端口该用nmap、破解密码该用hashcat,可是一旦要落实到具体的参数拼写、短横线数量、参数顺序,它们的"肌肉记忆"就开始打折扣了。

这就好比你让一个懂点医学常识的人去开药方。他知道发烧该用退烧药,这没问题。但具体到"这种退烧药一次该吃多少毫克、一天几次、饭前还是饭后",这些细节他未必记得准,除非手边放着药品说明书。如果没有说明书,他只能凭印象瞎猜剂量,而药品这东西剂量差一点可能就没效果,差多了甚至会出问题。命令行工具也是同理:参数这种"剂量级"的细节,光靠大模型自己的"经验记忆"是靠不住的。

那表1里具体数字长什么样呢。拿参数量仅8B的Qwen3(开启思考模式)来说,它在无限制模式下的完全匹配率只有20.9%,一旦给了完整文档,直接跃升到80.9%。而被寄予厚望的专门为安全领域调优的模型RedSage-Ins,无限制模式下反而比通用模型Qwen3表现略好(56.4%对55.5%的综合得分),但在给了文档之后却被Qwen3反超(89.5%对91.6%)。这说明专门调优过的模型确实在"没有拐杖"的情况下有点领域直觉优势,但真到了"有说明书可抄"的场合,通用模型凭借更强的指令遵循能力反而更能把文档用好。

规模大不代表万能,argue一下也成立。参数量达到753B的GLM-5.2整体表现最强,但它在参数量仅8B的Qwen3开启思考模式面前,部分指标上的优势并没有想象中那么悬殊。研究者给出的结论是:有效的命令行生成能力,依赖的是领域知识、指令遵循能力和推理能力的综合作用,而不只是堆参数规模。

训练出一个"懂行"的小模型

既然发现了问题所在,研究团队没有止步于诊断,而是动手"开药方"。

他们挑选了一个8B规模、已经做过网络安全领域微调的模型RedSage-Ins作为基座,用KaliBench的训练集(3504条数据,拆成三种模式各复制一份,一共1万多条训练样本)对它进行了进一步训练,训出了三个变体版本:一个只做监督微调(SFT),一个只做强化学习(GRPO),还有一个是先SFT再GRPO的组合拳。

**监督微调(SFT)**:直接拿标准答案教模型,让模型学会"看到这句话,就该输出这条命令",类似于让学生背标准答案。

**强化学习(GRPO)**:不直接告诉模型答案,而是让模型自己生成多个候选命令,然后用一套打分规则给每个候选打分,分高的候选被鼓励,分低的被压制,模型通过这种"试错反馈"逐渐学会正确的生成模式。

这里有一个特别值得展开讲的设计,叫做"运行时无关的可验证奖励"。

**可验证奖励**:指一种不需要真的在电脑上运行生成的命令,仅凭命令本身的结构(工具名对不对、参数对不对)就能自动打分的机制。

为什么这个设计重要?因为传统的强化学习如果想验证一条命令写得对不对,最直接的办法是真的把命令丢到电脑里执行一遍,看看结果符不符合预期。但这样做成本极高:你得为成千上万条训练样本都搭建对应的靶机环境,还要处理各种意外报错、超时、环境污染的问题,训练速度会被拖得很慢。

KaliBench的做法是提前在数据构建阶段,就已经用沙箱把每条标准答案命令的可执行性验证过一遍了。既然标准答案本身是经过验证的,那训练阶段只需要拿模型生成的命令和这份"已验证过的标准答案"做结构化比对,比如工具名是否一致、可选参数是否命中、位置参数是否匹配,就能算出一个可靠的分数,完全不用再真刀真枪地去执行。

这就好比你教一个新手修车,如果每次练习都要把车真的开出去跑一圈才能知道修得对不对,那太费时间也太冒险了。更聪明的做法是:提前把"正确的修理步骤"写成一份精确的检查单,新手修完以后拿检查单一项一项核对,哪怕不发动汽车,也能准确判断他是不是拧对了螺丝、接对了线路。KaliBench正是提前做好了这份"检查单"(也就是经过沙箱验证的标准命令),训练时直接拿它来比对,省掉了反复实车测试的成本。

效果如何呢。三个变体的平均综合得分分别是76.9、77.4和79.2,其中SFT加GRPO的组合版本排到了全部24个评测模型里的第三名,只比参数量高达685B的DeepSeek-V3.2低了1个百分点。一个8B的小模型,经过针对性训练后,性能摸到了参数量是自己80多倍的大模型的尾巴。

不过这个过程也不是毫无代价的。研究者在论文里坦诚地指出,GRPO和组合版本在提示模式下的综合得分反而比原始的RedSage-Ins略有下降。深入分析发现,强化学习在修正了一批原来做错的样本的同时,也让一部分原本能做对的样本"学坏了",退化成了错误答案。而加上SFT打底之后,这种退化现象有所缓解,这说明单纯的强化学习如果没有一个靠谱的起点,容易在修修补补中顾此失彼。

商业模型也没能逃过这一劫

读到这里你可能会想,开源模型不行,那闭源的商业大模型总该靠谱点吧?

研究团队确实也测了几个重量级选手,包括GPT-5.6-Sol、Claude Opus 5,还有搭配了专门CLI工作流脚手架的Codex。

结果是,GPT-5.6-Sol以61.68%的全集完全匹配率拿下最高分,比最强的开源模型GLM-5.2高了约20个百分点。看起来挺厉害对吧,可问题是这仍然只是61.68%,意味着每五条命令里,就有接近两条是完全不对的。

更有意思的发现藏在"响应覆盖率"这个细节里。Claude Opus 5在5000条测试查询里只回答了3675条,剩下1325条因为安全策略被直接拒答了。如果只看它答出来的那部分,正确率其实能到59.89%,和GPT-5.6-Sol相差不大。但一旦把那些拒答的题目也算作"错误",它的整体成绩就跌到了44.02%。

这背后反映的是一个商业模型普遍存在的矛盾处境:越是涉及渗透测试、漏洞利用这类敏感话题,模型的安全护栏就越容易触发,宁可拒答也不冒险。这其实是一种合理的商业考量,可对于真正需要用这类工具做合法安全评估的从业者来说,这种"一刀切"的拒答策略反而成了使用障碍。

命令写错的那些"经典陷阱"

研究团队还专门归纳了模型们最常栽跟头的几种错误模式,读起来颇有点让人会心一笑的感觉。

第一种叫"长短选项混用",就是模型一会儿用`--domain`,一会儿又冒出个`-d`,两种写法混在一条命令里导致语法错误。第二种是"选项幻觉",模型会把本该是位置参数的内容硬塞进一个根本不存在的选项标志里。第三种更微妙,叫"幻觉出的长选项":有些工具其实只支持短选项,比如只有`-v`没有`--verbose`,但模型凭着"大部分工具都支持长短两种写法"的经验,直接编造出一个根本不存在的长选项。第四种是单复数搞混,比如把`--symlink`写成`--symlinks`。

这些错误单独看都很小,但命令行的残酷之处就在这里:差一个字母,整条命令就报废,没有"差不多对"这回事。

此外研究者还测了一下,如果把查询语句写得随意一点、口语化一点,甚至故意加点语法错误和拼写失误,模型表现会受多大影响。结果是"措辞混乱"的查询对所有评测模式都造成了明显下滑,尤其是在无限制模式下降幅最大,达到3.2个百分点。而在提示模式下,因为模型有完整文档可以参照,降幅收窄到1.07个百分点,这进一步印证了那个核心结论:文档信息越充分,模型对输入噪声的容错能力就越强。

写在后面

读完这篇论文,最让我意外的不是模型表现差,而是这种"差"的分布方式。

通常你会以为大模型的短板集中在"理解需求"上,也就是它搞不懂用户到底想干什么。但KaliBench的数据恰恰反过来证明了:理解用户意图这件事,模型做得相当不错(受限模式下工具选择准确率普遍超过95%)。真正崩溃的环节,是从"我知道该用什么工具"到"我能把这个工具正确调用起来"这一步的转化。

这让我联想到一个很日常的场景:你知道该用螺丝刀拧螺丝,但你不一定记得这把螺丝刀该往哪个方向转、用多大力气。知识和操作之间,隔着一层很具体的"手感",而这层手感恰恰是最容易被忽视、也最难靠堆参数规模解决的东西。

还有一点值得单独拎出来说:论文里提到的那个数据淘汰率,从2.77万条原始生成数据,一路砍到最后只剩8504条可用,淘汰率接近70%。这个数字某种程度上是对"用大模型自动生成训练数据"这条路径的一次冷水浇头。如果没有这套层层设防的验证流水线,直接拿Qwen3-Max生成的数据去训练别的模型,那很可能是在用幻觉教幻觉,越训越偏。

这篇论文目前聚焦的是单轮、单条命令的生成,没有涉及多步骤的渗透测试流程,也没有涉及真实环境里命令执行失败后怎么纠错重试。这其实是一个更难、也更贴近真实场景的问题:当第一条命令执行报错后,一个真正能用的安全助手应该怎么根据报错信息调整下一步动作?这个问题留给了后续研究。

Q&A

Q1:KaliBench是什么?

A:KaliBench是由哈利法大学团队提出的一个基准测试,专门用来评测大语言模型把自然语言指令翻译成Kali Linux可执行命令行的能力,包含8504条查询命令配对数据,覆盖1642个工具。

Q2:为什么大模型在生成Kali命令时容易出错?

A:研究发现模型挑选正确工具的能力其实不差,真正的瓶颈在于参数构造,比如选项拼写、长短参数混用、参数顺序错误,这些细节错误会导致命令完全无法执行。

Q3:小模型经过KaliBench训练后能达到什么水平?

A:一个8B参数的RedSage-Ins模型经过监督微调加强化学习训练后,综合得分达到79.2分,在24个评测模型中排名第三,仅比参数量达685B的DeepSeek-V3.2低1个百分点。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-