摘要:第一种是传统静态分析,安全专家根据已知漏洞模式编写规则,工具再按规则扫描代码。这种方法准确度高,但规则更新慢,难以应对新型漏洞。
在软件安全领域,特别是像Linux内核这样庞大且持续更新的系统,如何高效准确地发现漏洞一直是个难题。
过去主要依赖两种方法:
第一种是传统静态分析,安全专家根据已知漏洞模式编写规则,工具再按规则扫描代码。这种方法准确度高,但规则更新慢,难以应对新型漏洞。
第二种是直接使用大语言模型扫描,让AI模型直接分析代码,但这种方法成本高,且容易产生误报和漏报,实际效果不稳定。
最近,UIUC张令明团队提出的KNighter项目提供了一条新思路:通过让AI学习大量已知漏洞的数据和修复记录,来提升检测的准确性和效率。
KNighter的逻辑非常巧妙。它认为,每一份“结案报告”(已修复的漏洞补丁),都包含了最宝贵的信息:
案发地点和手法(漏洞代码是怎样的)
如何防范(修复后的代码是怎样的)
这些都是真实发生过、被确认过的案例,是100%准确的“教材”。KNighter要做的,就是让大模型扮演一个超级学徒,通过海量阅读这些结案报告,自动总结出犯罪规律,并最终写出人人都能用的《新版办案手册》(漏洞检查器)。
这个过程被精妙地拆解为四个步骤,确保每一步都稳扎稳打,杜绝“通灵大师”式的随性发挥。
第一步,学习卷宗,提炼模式(补丁蒸馏)。
KNighter首先会海量“阅读”Linux内核历史上的数千个修复补丁,当它看到一个补丁时,它会对比修复前和修复后的代码。
修复前:`ptr = allocate_resource; if (ptr == NULL) return -ENOMEM; use(ptr);`
修复后:`ptr = allocate_resource; if (ptr == NULL) return -ENOMEM; use(ptr); free_resource(ptr);`
大模型会立刻注意到:哦,这里在调用 `allocate_resource` 后,必须在某个地方对应地调用 `free_resource`。通过分析成百上千个类似的补丁,它能自动归纳出一条核心规律:“凡是申请了某种特定资源,就必须在函数退出前释放它。
”这就是从真实案例中提炼出的“犯罪模式”,比人类专家手动总结要快得多,也全面得多。
第二步:分工协作,编写手册(多阶段合成检查器)
总结出规律后,就要把它变成一本能指导行动的《办案手册》(一个可执行的C++检查器程序)。直接让大模型写一个完整的程序太难了,容易出错。
KNighter的做法是当一个“项目经理”,把任务拆分。它会引导大模型:
1. “先写一下,我们要追踪的‘状态’是什么?”(比如,追踪一个指针是否已释放)
2. “再告诉我,要在哪些‘代码点’设置检查站?”(比如,在函数入口和出口)
3. “最后定义,在什么情况下要‘拉响警报’?”(比如,在函数出口发现指针未被释放)
大模型只需要分别完成这些小任务,KNighter再把这些代码片段组装起来,形成一个完整的、可编译的检查器。这大大降低了AI的创作难度,保证了产出质量。
第三步:实战演习,验证准确性(正确性验证)
手册写好了,能不能用?得拉到靶场上练练。KNighter会拿着新生成的检查器,去测试原始的那个漏洞补丁。
测试修复前的代码:必须准确报告“这里有漏洞!“
测试修复后的代码:必须保持沉默,“一切正常。”
如果检查器报错或者漏报,就意味着“手册”写得不对。KNighterm会把错误信息反馈给大模型,让它重新修改规则,直到100%通过这个“实战演习”。
这一步,彻底根治了AI的“幻觉”问题,确保了每一个检查器都绝对可靠。
第四步:全城巡逻,持续升级(规模化落地)
通过验证的检查器,就像一本完美的《办案手册》,可以立刻分发给城市里所有的巡警。它被集成到Linux的开发流程中,每当有新的代码提交,这个检查器就会自动运行一遍,确保同样的问题不再发生。
更厉害的是,这个系统是活的。每当Linux社区修复一个新漏洞,这份新的“结案报告”又会成为KNighter的新教材,驱动它生成更新、更强的检查器。
随着时间推移,这套自动化系统会积累越来越多的规则,它的防护能力会像滚雪球一样越来越强。
结果证明,这套方法威力巨大。KNighter生成的检查器,在庞大的Linux内核中,成功挖出了92个之前所有工具都未能发现的真实漏洞。这些漏洞的平均潜伏时间超过4年,是名副其实的“陈年老贼”。
其中,77个漏洞已被Linux官方维护者确认为高风险问题,57个已被彻底修复,还有30个严重到获得了专属的CVE漏洞编号。这意味着,KNighter凭一己之力,提前阻止了几十起可能造成严重后果的潜在网络攻击。
从成本上看,检查器一旦生成,运行它就和普通工具一样便宜,可以无限次复用。它提供的报告极为清晰,直接告诉开发者哪个函数、哪一行代码、违反了什么状态规则,修复起来毫不费力。
KNighter的成功实践揭示了AI在工业界落地的一条有效路径:与其让AI直接执行复杂任务,不如利用其能力来打造更高效的工具。
这一方案没有直接使用大模型进行漏洞检测,而是将其强大的学习能力转化为稳定、可复用的分析规则。通过这种方式,AI从一个难以预测的"黑盒"转变为了工程师能够理解、使用和维护的可靠工具。
这一创新不仅推动了软件安全领域的发展,更为各行业应用大模型提供了重要参考。最具价值的AI应用,可能并非那些试图完全替代人类的系统,而是那些能够将人类专业知识与AI学习能力有机结合,共同构建更强大工具的系统。
KNighter的成功,正是这一方向的良好开端。
来源:修竹书生一点号