微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

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

首页 德州农工大学开发的"模糊大脑"系统:用AI在网络安全竞赛中找出软件漏洞并自动修复

德州农工大学开发的"模糊大脑"系统:用AI在网络安全竞赛中找出软件漏洞并自动修复

2025-09-25 14:39
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2025-09-25 14:39 科技行者

在网络安全日益重要的今天,软件漏洞就像房子的隐蔽裂缝一样,看不见摸不着,但一旦被恶意利用就可能造成巨大损失。传统上,找出这些"裂缝"并修补它们需要经验丰富的安全专家花费大量时间。然而,来自德州农工大学、香港城市大学和伦敦帝国理工学院的研究团队开发了一个名为"FuzzingBrain(模糊大脑)"的智能系统,它能够像经验丰富的安全专家一样自动发现软件漏洞并生成修复补丁。这项由德州农工大学的Jeff Huang教授领导的研究于2025年发表在人工智能网络挑战赛(AIxCC)上,展示了人工智能在网络安全防护方面的巨大潜力。

这个研究团队包括来自德州农工大学的Ze Sheng、Qingxiao Xu、Jianwei Huang、Matthew Woodcock和Guofei Gu教授,以及香港城市大学的Heqing Huang和伦敦帝国理工学院的Alastair F. Donaldson。他们的团队名为"All You Need Is A Fuzzing Brain",在DARPA(美国国防高级研究计划局)举办的人工智能网络挑战赛中获得第四名的优异成绩。

这项研究的意义远超学术范畴。当前,网络攻击事件层出不穷,从个人信息泄露到企业系统被攻击,很多都源于软件中未被发现的安全漏洞。传统的漏洞检测需要安全专家手动分析代码,这个过程既耗时又容易遗漏。FuzzingBrain系统的出现,就像给每个软件项目配备了一个永不疲惫的安全专家,能够24小时不间断地寻找潜在威胁并提出解决方案。

在比赛期间,这个系统展现出了令人印象深刻的能力:它自主发现了28个安全漏洞,其中包括6个此前从未被发现的"零日漏洞"(即全新的、未知的安全威胁),并成功修复了其中的14个。更重要的是,研究团队将整个系统开源,任何人都可以通过GitHub获取完整代码,这意味着这项技术的影响力将远远超出学术界。

一、什么是网络安全中的"模糊测试"

要理解FuzzingBrain系统的工作原理,我们需要先了解什么是"模糊测试"。这就像是给软件进行"压力测试",但不是测试它能承受多大的工作量,而是测试它面对各种意想不到的输入时会不会"崩溃"。

传统的模糊测试就像一个不断往软件里塞各种奇怪数据的机器人。比如说,如果一个程序期望用户输入一个正常的电话号码,模糊测试工具就会故意输入一些奇怪的东西:超长的数字串、包含特殊符号的文本,甚至是完全随机的字符。如果程序在处理这些"不正常"输入时出现错误、崩溃或者泄露敏感信息,那就说明存在安全漏洞。

这个过程有点像考试时故意出一些刁钻题目来测试学生的真实水平。正常情况下,学生可能表现很好,但面对意外情况时就暴露出知识的漏洞。软件也是如此,在正常使用时看起来运行良好,但遇到恶意构造的输入时就可能出现问题。

然而,传统的模糊测试存在明显缺陷。它就像一个盲人在黑暗中寻找东西,完全依赖随机碰运气。虽然通过大量的随机尝试确实能找到一些问题,但效率很低,而且容易遗漏深层次的、需要特定触发条件的漏洞。这就是为什么研究团队要开发"智能"的模糊测试系统。

FuzzingBrain的革命性之处在于它将大语言模型(LLM)的智能引入了传统的模糊测试过程。如果说传统模糊测试是一个盲目的机器人,那么FuzzingBrain就是一个具有专业知识和推理能力的安全专家。它不仅能够生成测试数据,还能理解代码结构、分析漏洞类型,并根据测试结果不断调整策略。

这种智能化的测试方法带来了显著的效果提升。在实际比赛中,FuzzingBrain发现的绝大多数漏洞都是通过基于大语言模型的智能策略找到的,传统的随机模糊测试只贡献了少数几个发现。这说明了人工智能在安全领域的巨大潜力。

二、FuzzingBrain系统的整体架构

FuzzingBrain系统的设计就像一个高度协调的工厂流水线,每个组件都有明确的职责,同时又能够高效协作。整个系统由四个核心服务组成,它们之间的配合就像交响乐团中的不同乐器部分一样和谐统一。

系统的"总指挥"是CRS Web服务,它负责接收挑战任务、分解工作、构建测试环境,并将具体任务分配给其他组件。这就像一个项目经理,既要理解整体目标,又要确保每个团队成员都知道自己该做什么。当系统收到一个新的软件项目需要检测时,CRS Web服务首先会分析项目特点,准备相应的测试工具,然后创建隔离的工作环境,确保不同的测试任务之间不会相互干扰。

静态分析服务扮演着"情报分析师"的角色。它负责分析软件代码的结构,回答诸如"这个函数能从程序入口到达吗?"、"调用这个函数需要经过哪些步骤?"等关键问题。这些信息对于后续的漏洞发现至关重要,就像医生在诊断疾病前需要了解人体结构一样,安全测试也需要先理解软件的"解剖结构"。

工作服务是系统的"实际执行者",负责运行各种智能策略来发现漏洞和生成修复补丁。这些服务运行在大约100个虚拟机上,每个虚拟机可以同时运行成百上千个测试进程。这种大规模并行处理能力确保了系统能够在有限时间内测试尽可能多的可能性。

提交服务则像"质量控制部门",负责检查发现的漏洞和生成的补丁是否有效,去除重复项,并与比赛系统进行交互。这个组件还负责将相关的发现组织成完整的报告,确保每个安全问题都能得到妥善处理。

系统最巧妙的设计之一是任务分解策略。当收到一个复杂的软件项目时,系统会将其分解为许多小的、独立的测试任务。每个任务对应一个特定的测试工具(称为"fuzzer")和一种特定的错误检测机制(称为"sanitizer")。这就像把一个大房子的安全检查分解为检查每个房间的门窗、电路、水管等具体任务。

以一个名为dropbear的开源软件项目为例,系统发现它包含17个不同的测试入口,每个入口又可以配合三种不同的错误检测机制,最终生成了超过50个独立的测试任务。这些任务可以在不同的虚拟机上同时执行,大大提高了测试效率。

为了避免重复劳动和资源浪费,系统实现了智能的任务调度机制。当一个测试任务发现了漏洞后,系统会自动调整其他相关任务的优先级和资源分配,确保整体效率最大化。同时,系统还实现了多种容错机制,当某个组件出现问题时,其他组件可以继续工作,保证整体系统的稳定性。

三、基于大语言模型的智能漏洞发现

FuzzingBrain系统的核心创新在于将大语言模型的推理能力引入漏洞发现过程。这就像给传统的"试错"方法装上了一个智能大脑,让原本盲目的测试过程变得有的放矢。

系统实现了10种不同的智能漏洞发现策略,每种策略都针对特定的场景和问题类型。这些策略的工作方式类似于经验丰富的安全专家分析代码的思路,但执行速度要快得多,而且永不疲惫。

最基础的策略采用了对话式的分析方法。系统会向大语言模型描述待检测的代码变更,就像向专家咨询:"这段新加入的代码可能存在什么安全问题?能否设计一个输入来触发潜在的漏洞?" 大语言模型基于其训练时学到的大量安全知识,会分析代码逻辑,推测可能的问题点,并生成相应的测试数据。

这个过程最有趣的地方在于它的迭代改进机制。当第一次生成的测试数据没有发现问题时,系统不会简单地放弃,而是会分析失败的原因,然后调整策略再次尝试。这就像一个侦探在调查案件时,如果某个线索没有结果,会根据新的信息调整调查方向。

举个具体例子,假设系统正在测试一个处理用户输入的函数。第一次尝试时,大语言模型可能会生成一个超长的字符串来测试缓冲区溢出。如果这个测试没有发现问题,系统会分析程序的执行过程,发现程序在某个特定分支中可能存在其他类型的问题,然后生成针对那个分支的特定测试数据。

系统还实现了多输入生成策略。与传统方法每次只生成一个测试用例不同,高级策略会同时生成多个相关的测试用例,从不同角度探索同一个潜在问题。这就像医生为了确诊一个疾病会同时进行多种检查,提高诊断的准确性和全面性。

针对不同类型的安全漏洞,系统采用了专门化的检测策略。对于C/C++程序,系统重点关注内存安全问题,如缓冲区溢出、空指针访问、整数溢出等。对于Java程序,系统则更关注注入攻击、反序列化漏洞、路径遍历等Web应用常见的安全问题。每种漏洞类型都有相应的检测模板和测试策略,确保系统能够有针对性地发现各类安全问题。

系统的另一个创新是覆盖率引导的反馈机制。当测试数据未能触发漏洞时,系统会分析这个测试究竟执行了程序的哪些部分,哪些部分没有被执行到,然后指导大语言模型生成能够覆盖更多代码路径的测试数据。这种方法确保了测试的全面性,避免了重要代码路径被遗漏的风险。

在处理复杂软件项目时,系统还实现了智能的函数排序和优先级分析。面对一个包含数千个函数的大型项目,系统会首先分析哪些函数更可能包含安全漏洞,然后优先测试这些高风险函数。这种策略大大提高了在有限时间内发现关键漏洞的概率。

四、智能补丁生成技术

发现漏洞只是第一步,如何生成有效的修复补丁才是真正的技术挑战。FuzzingBrain系统在这方面展现了令人印象深刻的能力,它不仅能找出问题,还能提出切实可行的解决方案。

系统的补丁生成过程就像一个经验丰富的程序员分析问题并提出修复方案的过程,但速度要快得多。当系统发现一个漏洞后,它会首先分析漏洞的根本原因,然后设计相应的修复策略,生成具体的代码修改建议,最后验证修复方案的有效性。

补丁生成的第一步是精确定位问题函数。系统会分析触发漏洞的执行路径,识别出真正存在问题的代码片段。这个过程类似于医生根据症状找到病灶的位置。有时候,问题的表现和根本原因可能相距很远,系统需要通过智能分析找到真正需要修改的地方。

接下来,系统会提取相关函数的完整信息,包括函数签名、完整代码、调用关系等。然后将这些信息连同漏洞的具体表现一起提供给大语言模型,让它基于安全编程的最佳实践来设计修复方案。

大语言模型在生成补丁时会考虑多个因素。首先是安全性,确保修复方案能够真正解决identified的安全问题。其次是功能完整性,修复不能破坏软件的正常功能。最后是代码质量,生成的补丁应该符合良好的编程实践,不会引入新的问题。

系统实现了13种不同的补丁生成策略,每种策略都有不同的特点和适用场景。基础策略采用直接的函数替换方法,将存在问题的函数重写为安全版本。高级策略则会考虑更复杂的情况,比如需要同时修改多个相关函数,或者需要添加额外的安全检查。

其中一个特别有趣的策略是"专家分析增强"方法。这种方法会利用之前漏洞发现阶段的分析结果,将对漏洞特征的深入理解融入补丁生成过程。就像一个医生在开处方时会考虑之前的诊断结果一样,这种方法确保了补丁的针对性和有效性。

系统还实现了样本补丁目录功能。通过分析大量已知的安全漏洞修复案例,系统建立了一个补丁模式库。当遇到类似的漏洞时,系统可以参考这些成功的修复模式,生成更可靠的补丁方案。这就像医生会参考医学文献中的成功治疗案例来制定治疗方案。

补丁验证是整个过程中最关键的环节。一个补丁必须满足四个严格的条件才被认为是有效的:代码能够正确编译,能够防止已知的攻击,不会破坏软件的正常功能,并且通过所有的回归测试。这种全方位的验证确保了生成的补丁不仅解决了安全问题,还保持了软件的稳定性和可用性。

当补丁验证失败时,系统会分析失败原因,并将详细的错误信息反馈给大语言模型,指导其生成改进的版本。这个迭代过程可能会重复多次,直到找到满足所有条件的解决方案。这种持续改进的机制大大提高了补丁生成的成功率。

系统还实现了一种特殊的"XPatch"策略,专门处理那些难以直接发现漏洞但可能存在安全隐患的情况。这种策略会分析代码变更,即使没有具体的漏洞证据,也会尝试生成预防性的安全加固补丁。这种主动防御的思路在实际应用中具有重要价值。

五、大规模并行处理与性能优化

FuzzingBrain系统的另一个技术亮点是其强大的并行处理能力。整个系统部署在约100台虚拟机上,每台机器配备32到192个处理器核心,每台机器同时运行100到10000个并发线程。这种大规模的并行架构就像一个庞大的工厂,能够同时处理成百上千个不同的任务。

系统的并行化设计遵循一个核心原则:任何可以并行化的组件都要并行化。这种设计哲学的背后是对效率的极致追求。在网络安全竞赛这种时间紧迫的环境中,能够快速发现漏洞和生成补丁往往比完美的单一解决方案更有价值。

任务分发机制是整个并行架构的关键。当系统接收到一个软件项目后,会自动将其分解为数十个甚至上百个独立的测试任务。每个任务都可以在不同的虚拟机上独立执行,互不干扰。这就像一个大型餐厅,不同的厨师可以同时准备不同的菜品,每个人专注于自己的任务,但最终组合成完整的一餐。

为了最大化资源利用效率,系统实现了智能的负载均衡机制。当某些虚拟机的任务完成后,系统会自动将新的任务分配给它们,确保所有计算资源都得到充分利用。同时,系统还会根据不同类型任务的计算需求,将计算密集型和I/O密集型任务合理分配,避免资源竞争。

在实际运行过程中,研究团队发现传统的模糊测试工具对整体性能的贡献相对有限,但消耗了大量的计算资源。因此,他们调整了资源分配策略,将更多的计算能力投入到基于大语言模型的智能策略上。这种优化使得系统在相同的资源约束下能够发现更多的漏洞。

系统还实现了动态的时间预算管理。当某个软件项目已经发现了漏洞后,系统会自动缩短对该项目其他测试任务的时间分配,将节省的计算资源投入到尚未取得进展的项目上。这种动态调整机制确保了整体效率的最大化。

内存和存储管理也是系统优化的重点。由于并行策略会生成大量的测试文件,系统实现了智能的文件清理机制。测试文件会根据生成时间和使用频率进行自动清理,既保证了有效文件的可用性,又避免了存储空间的耗尽。

网络通信的优化同样重要。在大规模并行环境中,不同组件之间的通信延迟可能成为性能瓶颈。系统通过优化通信协议、减少不必要的数据传输、实现智能缓存等方式,最大程度地减少了通信开销。

为了应对大语言模型API调用的成本和限制,系统实现了多模型轮换和智能降级机制。当主要的API服务出现问题或达到使用限制时,系统会自动切换到备用的模型服务,确保整体流程不会中断。这种冗余设计提高了系统的可靠性和稳定性。

六、静态代码分析的技术实现

FuzzingBrain系统的静态分析组件就像一个能够"透视"代码结构的X光机,它能够在不实际运行程序的情况下,理解代码的内部结构和执行流程。这个组件为整个系统提供了重要的"情报支持",帮助其他组件更有针对性地进行安全测试。

静态分析的主要任务是回答三类关键问题。第一类是函数元数据查询,当系统需要了解某个函数的详细信息时,静态分析组件能够提供函数的参数、返回值类型、源代码位置等完整信息。第二类是可达性分析,即确定从程序的入口点能够到达哪些函数,这对于确定测试范围至关重要。第三类是调用路径分析,即找出从测试入口到目标函数的所有可能执行路径。

对于C/C++项目,系统集成了多个专业工具来实现静态分析。首先使用LLVM编译器基础设施将源代码转换为中间表示形式,这就像将不同方言的文本翻译成标准语言,便于统一分析。然后使用SVF(Static Value-Flow Analysis)工具构建程序的调用图,这相当于绘制出程序内部函数之间的关系网络。最后使用Bear工具来捕获编译过程中的所有命令和依赖关系,确保分析的完整性。

在实际实现过程中,研究团队遇到了许多技术挑战。编译大型项目生成中间代码时经常出现缺少头文件或编译参数不匹配的问题。为了解决这些问题,系统实现了多种fallback机制,包括硬编码常见的头文件路径、自动推断编译参数等。虽然这些方法不够优雅,但在实践中证明是有效的,最终使系统能够成功处理95%以上的源文件。

性能优化也是静态分析面临的重要挑战。一些大型项目生成的中间代码文件可能超过50MB,而构建调用图的过程可能需要几个小时甚至耗尽内存。为了应对这个问题,系统实现了多种优化策略:将过大的代码文件裁剪到可管理的大小、使用轻量级的类型分析代替复杂的指针分析、设置严格的超时限制等。这些优化确保了静态分析能够在合理的时间内完成。

对于Java项目,系统采用了不同的技术路线。Java项目使用CodeQL作为主要分析工具,这是一个更加成熟和可靠的分析平台。系统开发了专门的查询语句来提取函数可达性和调用路径信息,这些查询能够处理Java特有的语言特性,如函数重载和动态加载。

为了提高分析效率,系统实现了批量查询机制。当需要分析大量函数对之间的调用关系时,系统会将多个查询打包成批处理,减少数据库连接开销。同时,为了避免并发冲突,每个分析任务都会使用独立的数据库副本,确保分析结果的准确性。

静态分析还需要处理一些特殊情况。比如递归调用可能导致调用路径分析陷入无限循环,系统通过设置最大深度限制来避免这个问题。对于Java项目,系统允许一定程度的间接递归,因为这在实际项目中很常见,但会阻止直接的自我调用以防止无限循环。

当精确的静态分析失败时,系统还实现了保守的fallback方案。这种方案虽然精度较低,但能够在绝大多数情况下提供基本的分析结果,确保整个系统不会因为静态分析的失败而停止工作。

七、多模型协作与容错机制

FuzzingBrain系统的稳定性和可靠性很大程度上依赖于其精心设计的多模型协作和容错机制。在一个依赖外部AI服务的系统中,单点故障可能导致整个流程的中断,因此系统实现了多层次的冗余和降级策略。

系统集成了来自不同供应商的多个大语言模型,包括Anthropic的Claude系列、OpenAI的GPT系列,以及Google的Gemini模型。这种多样化的选择不仅提供了性能上的冗余,还利用了不同模型在不同类型任务上的相对优势。就像一个医疗团队会包含不同专业的医生一样,不同的AI模型在处理不同类型的安全问题时可能表现出不同的特长。

模型选择和轮换机制是整个系统的核心。系统维护一个按优先级排序的模型列表,通常优先使用最新、性能最好的模型。当首选模型出现问题(如API限制、服务不可用或响应质量下降)时,系统会自动切换到列表中的下一个模型。这个过程对用户是透明的,整个分析流程不会因为单个模型的问题而中断。

系统还实现了智能的错误检测和恢复机制。当某个模型连续产生低质量输出或者频繁出现错误时,系统会临时降低该模型的优先级,将任务重新分配给其他模型。这种自适应机制确保了系统能够在模型性能波动的情况下维持稳定的服务质量。

成本控制是多模型系统必须考虑的重要因素。不同的AI服务有不同的定价策略和使用限制,系统实现了细粒度的预算管理机制。通过监控API调用次数、令牌使用量等指标,系统能够在接近预算上限时自动调整策略,比如切换到更经济的模型或者减少某些非关键任务的执行频率。

在实际比赛中,研究团队发现了一个重要的资源优化机会。许多测试任务被分配给了无法到达漏洞代码的测试工具,这导致了大量无效的API调用。基于这个发现,系统增加了预筛选机制,通过静态分析预先判断测试工具是否能够到达潜在的问题代码,从而避免无效的资源消耗。

系统的容错设计还体现在任务级别的隔离和重试机制上。每个测试任务都在独立的环境中执行,单个任务的失败不会影响其他任务。当任务因为临时性问题(如网络中断、内存不足等)失败时,系统会自动重试,通常会在不同的执行环境或使用不同的模型重新执行。

日志记录和监控是保证系统可靠性的重要手段。系统会详细记录每个组件的运行状态、性能指标和错误信息。然而,研究团队在比赛后期遇到的一个重要教训是,分布式环境下的日志管理需要特别小心。由于日志存储在临时的虚拟机上,比赛结束后这些关键的调试信息丢失了,这影响了后续的系统优化工作。

为了应对网络分区和通信故障,系统实现了本地缓存和离线模式。重要的配置信息和常用的分析结果会缓存在本地,确保即使在网络连接不稳定的情况下,系统也能继续执行基本功能。

系统还考虑了不同组件的启动和关闭顺序。在系统启动时,静态分析服务会优先启动并完成初始化,为后续的动态测试任务提供支持。在系统关闭时,会确保所有正在进行的任务都能够优雅地完成或保存状态,避免数据丢失。

八、SARIF报告处理与多源信息融合

FuzzingBrain系统的一个独特能力是处理来自外部静态分析工具的SARIF(Static Analysis Results Interchange Format)报告。这就像一个经验丰富的安全专家能够理解和验证来自不同工具的安全报告一样,系统能够智能地处理这些第三方信息,并将其转化为可操作的安全测试任务。

SARIF是一种标准化的漏洞报告格式,广泛用于各种静态分析工具之间的信息交换。这些报告通常包含大量的技术细节,如漏洞类型、影响的代码位置、严重程度评估等。然而,这些报告往往包含false positive(误报),需要人工验证其真实性。FuzzingBrain系统自动化了这个验证过程。

系统处理SARIF报告的流程分为几个阶段。首先是信息提取阶段,系统会解析SARIF文件,提取出漏洞描述、受影响的函数、代码位置、调用栈信息等关键数据。这个过程就像一个助理帮医生整理病历,将散乱的信息组织成结构化的格式。

接下来是可达性验证阶段。系统会利用静态分析组件检查报告中提到的漏洞函数是否能够从系统的测试入口到达。如果某个漏洞位于无法到达的代码中,那么即使它是真实存在的,也不太可能被恶意利用,因此优先级会相应降低。

最关键的是智能验证阶段。系统会将SARIF报告中的漏洞描述、代码片段等信息提供给多个大语言模型,让它们基于安全知识判断这个漏洞报告是否可信。这个过程类似于医学会诊,多个专家独立给出意见,然后通过投票机制得出最终结论。

系统采用了一种巧妙的双重验证策略。对于每个SARIF报告,系统会同时询问大语言模型两个问题:"这个报告看起来像是误报吗?"和"这个报告看起来像是真实漏洞吗?" 通过交叉验证这两个相反的问题,系统能够更准确地判断报告的可信度。

当SARIF报告被确认为可信时,系统会将其转化为具体的测试任务。系统会根据报告中的漏洞描述和位置信息,生成针对性的测试用例,尝试实际触发该漏洞。这种从理论分析到实际验证的转换是系统的重要创新点之一。

系统还实现了SARIF报告与POV(Proof-of-Vulnerability)发现的关联机制。当系统通过其他方式发现了一个漏洞后,会检查是否有相关的SARIF报告提到了同样的问题。如果找到匹配的报告,系统会将两者关联起来,这不仅验证了SARIF报告的准确性,还丰富了对漏洞的理解。

这种多源信息融合的方法带来了显著的效果提升。SARIF报告提供了高层次的漏洞描述和分析,而系统的动态测试提供了具体的触发方法,两者结合能够形成更完整的安全分析结果。这就像结合了理论诊断和实际检查的医疗诊断过程,准确性和完整性都得到了提高。

在处理大量SARIF报告时,系统还实现了智能的优先级排序机制。基于漏洞的严重程度、影响范围、可达性等因素,系统会自动确定处理顺序,确保最重要的安全问题得到优先关注。

系统的另一个创新是预测性SARIF生成功能。基于对常见漏洞模式的学习,系统能够主动生成可能存在安全问题的代码位置报告,为后续的深入测试提供指导。这种主动式的安全分析方法在实际应用中具有重要价值。

九、性能优化与实战经验

经过三轮展示赛的实战检验,FuzzingBrain系统积累了丰富的性能优化经验。这些优化不仅提高了系统的效率,更重要的是提供了在资源约束环境下的最佳实践策略。

最重要的发现之一是传统模糊测试工具的局限性。尽管libFuzzer等工具在理论上能够发现各种类型的漏洞,但在实际竞赛中,它们的贡献相对有限,却消耗了大量的计算资源。研究团队发现,基于大语言模型的智能策略能够发现绝大多数漏洞,而传统的随机测试只贡献了少数几个发现。

基于这个发现,系统实现了动态的资源分配策略。当智能策略已经在某个项目上取得进展时,系统会减少传统模糊测试的资源分配,将更多计算力投入到尚未取得突破的其他项目上。这种自适应的资源管理显著提高了整体效率。

sanitizer选择也是一个重要的优化点。系统支持三种不同的错误检测机制:AddressSanitizer用于检测内存访问错误,MemorySanitizer用于检测未初始化内存使用,UndefinedBehaviorSanitizer用于检测各种未定义行为。通过分析历史数据,研究团队发现AddressSanitizer的检出率最高,因此在资源受限的情况下,系统会优先使用这种检测机制。

时间预算管理是另一个关键的优化领域。系统为每种策略设置了动态的时间限制,当某个策略已经发现了漏洞或者长时间没有进展时,会自动调整时间分配。这种策略确保了系统能够在有限的竞赛时间内最大化发现漏洞的数量。

API成本控制也是实际部署中的重要考虑因素。在其中一轮比赛中,系统耗尽了分配的OpenAI API额度,导致后续任务无法执行。基于这个经验,系统增加了更细粒度的成本监控和预算管理功能,能够预测API使用趋势并在接近限制时自动调整策略。

系统还实现了智能的重复检测和去重机制。在并行执行环境中,不同的策略可能发现相同的漏洞,提交重复的POV会降低准确率分数。系统通过分析崩溃位置、错误类型等特征来识别重复发现,并使用大语言模型进行语义级别的相似性判断,确保只提交独特的发现。

补丁提交的数量控制是评分优化的另一个重点。虽然生成更多的补丁看起来是好事,但过多的提交会降低准确率乘数,反而影响最终得分。系统通过智能分析,对每个漏洞只提交最有把握的补丁,在数量和质量之间找到最佳平衡点。

并发控制和同步也是系统稳定性的重要因素。研究团队在开发过程中遇到了多次由于并发访问导致的竞态条件和死锁问题。最终通过重新设计共享数据结构、使用无锁编程技巧、实现更细粒度的锁控制等方法解决了这些问题。

文件系统管理是一个容易被忽视但很重要的优化点。大规模并行测试会生成大量临时文件,如果不及时清理,可能导致磁盘空间耗尽。系统实现了基于时间和使用频率的智能清理机制,既保证了active文件的可用性,又避免了存储资源的浪费。

配置管理也是从实战中学到的重要教训。在分布式环境中,确保所有组件使用一致的配置信息比想象中更困难。系统最初使用分散的配置文件,导致了一些难以调试的问题。后来实现了中心化的配置管理服务,显著提高了系统的可维护性。

十、FuzzingBrain测评基准的建立

为了推动整个领域的发展,研究团队基于AIxCC竞赛数据建立了FuzzingBrain Leaderboard,这是一个专门用于评估不同大语言模型在漏洞发现和修复任务上性能的公开测评平台。这个平台的建立具有重要的学术和实践价值。

传统的AI模型评估通常关注语言理解、数学推理、代码生成等通用能力,但专门针对网络安全任务的评估基准相对缺乏。FuzzingBrain Leaderboard填补了这个空白,提供了一个标准化的环境来比较不同模型在实际安全任务上的表现。

测评数据集包含了36个来自真实开源项目的挑战,其中16个来自C/C++项目,20个来自Java项目。这些挑战都是从AIxCC竞赛的三轮展示赛中精心选择的,代表了现实世界中常见的安全问题类型。每个挑战都包含一个真实存在的安全漏洞,需要AI模型既要发现这个漏洞,又要生成有效的修复补丁。

评分机制沿用了AIxCC竞赛的标准:每个成功发现的漏洞(POV)获得2分,每个有效的修复补丁获得6分。这种加权设计反映了在实际安全工作中,能够修复问题比仅仅发现问题更有价值。模型的最终排名基于在所有测试挑战上的总得分。

为了确保评估的公平性和可复现性,测评平台进行了几项重要的标准化处理。首先,所有模型都在相同的硬件环境中运行,使用单台虚拟机和相同的计算资源配置。其次,静态分析结果被预先计算并以JSON格式存储,避免了因分析工具差异导致的性能偏差。最后,每次评估都有固定的时间限制(一小时),确保所有模型在相同的时间约束下竞争。

测评过程中的一个重要设计决定是限制每个挑战只能使用单一的大语言模型。这种设置能够直接比较不同模型的原生能力,避免了多模型集成可能带来的复杂性。同时,这也更接近实际应用场景,因为大多数组织通常会选择一个主要的AI服务提供商。

平台还实现了细粒度的性能分析功能。除了总体得分外,系统还会统计每个模型在不同类型漏洞上的表现、平均发现时间、补丁生成成功率等详细指标。这些数据帮助研究者和从业者更好地理解不同模型的特点和适用场景。

测评结果显示了不同模型之间的显著差异。一些模型在发现漏洞方面表现出色,但在生成有效补丁方面相对较弱。另一些模型则显示出更均衡的能力。这些发现为模型选择和系统设计提供了有价值的参考。

平台的开放性是其另一个重要特点。所有的测试数据、评估脚本和结果分析工具都是开源的,研究者可以自由使用和扩展。这种开放的设计鼓励了社区贡献,有助于推动整个领域的发展。

为了保持测评基准的时效性,研究团队承诺会定期更新测试集,添加新发现的漏洞类型和更复杂的挑战。同时,随着新的大语言模型发布,平台也会及时增加对这些模型的支持。

测评平台还提供了详细的错误分析功能。当某个模型未能成功完成挑战时,系统会记录失败的具体原因,如生成的测试用例无效、补丁编译失败、修复后仍存在漏洞等。这些信息对于模型改进和系统优化具有重要价值。

通过建立这个标准化的评估平台,研究团队希望能够促进AI在网络安全领域的应用研究,为从业者提供选择工具的依据,并推动整个行业向更智能、更高效的安全防护方向发展。

说到底,FuzzingBrain项目展示了人工智能在网络安全领域的巨大潜力。这个系统不仅能够自动发现软件中的安全漏洞,还能生成有效的修复方案,大大提高了安全防护的效率和覆盖面。更重要的是,通过开源代码和建立评估基准,研究团队为整个领域的发展做出了重要贡献。

虽然这项技术目前主要应用在学术研究和竞赛环境中,但其潜在的实际应用价值是显而易见的。随着网络威胁日益复杂,传统的人工安全审计已经难以满足现代软件开发的需求。FuzzingBrain这样的智能系统可能会成为未来软件安全防护的重要工具,帮助开发团队在软件发布前发现和修复更多的安全问题。

当然,这项技术也面临一些挑战。对外部AI服务的依赖、大规模部署的成本、以及在不同类型项目上的适用性等问题都需要进一步研究和优化。但总的来说,FuzzingBrain项目为我们展示了一个充满希望的未来:智能系统与人类专家协作,共同构建更安全的数字世界。

Q&A

Q1:FuzzingBrain系统是什么?它能做什么?

A:FuzzingBrain是德州农工大学开发的智能网络安全系统,它能够自动发现软件中的安全漏洞并生成修复补丁。这个系统就像一个永不疲惫的安全专家,能够24小时不间断地检测软件中可能被恶意利用的安全问题。在比赛中,它成功发现了28个安全漏洞,包括6个全新的零日漏洞,并修复了其中的14个。

Q2:FuzzingBrain与传统的安全检测工具有什么区别?

A:传统的安全检测工具主要依靠随机测试或预定义规则,就像盲人摸象一样效率有限。而FuzzingBrain集成了大语言模型的智能推理能力,能够理解代码结构、分析漏洞特征,并根据测试结果不断调整策略。这就像从一个盲目的机器人升级为具有专业知识的安全专家,检测效率和准确性都大幅提升。

Q3:普通开发者或公司能使用FuzzingBrain吗?

A:目前FuzzingBrain的完整代码已经在GitHub开源,技术团队可以免费获取和使用。不过,由于系统需要大规模的计算资源和AI服务调用,个人开发者可能需要根据自己的需求和预算进行适当调整。研究团队还建立了在线评估平台,开发者可以通过这个平台了解不同AI模型在安全任务上的表现。

分享至
0赞

好文章,需要你的鼓励

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