摘要:近日,“AI+Security” 系列第 4 期线下活动于北京成功举办,聚焦 “洞” 见未来:AI 驱动的漏洞挖掘新范式,汇聚了安全领域的众多专家。水木羽林技术专家张强博士以“LLM辅助的模糊测试增强技术”为题,详细阐述了如何利用大语言模型赋能操作系统内核模糊
近日,“AI+Security” 系列第 4 期线下活动于北京成功举办,聚焦 “洞” 见未来:AI 驱动的漏洞挖掘新范式,汇聚了安全领域的众多专家。水木羽林技术专家张强博士以“LLM辅助的模糊测试增强技术”为题,详细阐述了如何利用大语言模型赋能操作系统内核模糊测试以及数据库模糊测试,为参会者带来了关于 AI 技术与漏洞挖掘相结合的全新思路和方法,推动了行业内对于这一新兴技术趋势的深入理解与交流,对推动 “AI+Security” 领域的发展具有积极意义。
模糊测试技术概述
模糊测试(Fuzz Testing)作为一种自动化软件测试技术,其核心原理在于向目标程序输入大量随机、无效或特制的数据,以此模拟恶意攻击者的行为,进而触发程序中潜藏的错误,达到发现安全漏洞和程序缺陷的目的,最终有效提升软件的安全性与稳定性。
其测试对象极为广泛,涵盖了操作系统内核、数据库、协议、编译器、深度学习框架以及应用软件等众多领域。在操作系统内核层面,模糊测试有助于挖掘可能导致系统崩溃或权限提升的漏洞;对于数据库,可检测数据存储和查询过程中的异常;协议方面,能够发现通信协议实现中的缺陷;编译器测试可确保代码编译过程的正确性;深度学习框架测试则关注模型训练和推理阶段的稳定性;应用软件测试可提升其在各种输入情况下的鲁棒性。通过对这些不同类型对象的测试,模糊测试在软件开发生命周期中扮演着重要角色,为保障软件质量提供了有力支持。
LLM辅助的嵌入式操作系统内核模糊测试
在当今科技发展进程中,嵌入式操作系统在工业物联网、航天航空以及自动驾驶、医疗设备和工业控制等诸多关键领域广泛应用,已成为不可或缺的一部分。但随着其应用场景不断拓展,安全漏洞隐患也随之急剧增加,如 BadAlloc 系列漏洞和 URGENT/11 系列漏洞等,这对设备的稳定性、可靠性和数据保护构成了严重威胁。
模糊测试作为检测嵌入式操作系统内核漏洞的重要手段,其测试对象极为广泛,涵盖了传统 OS 内核(如 Linux、Windows、MacOS 等)、领域特定 OS 内核(如 Embedded OS、RTOS 等)以及广义内核(如 VMM、Hypervisor 等)。测试输入生成方式主要包括 AFL - Like 输入序列生成(如 Triforce/Triforce - AFL、kAFL)和系统调用序列生成(如 Syzkaller、Healer)。
内核模糊测试旨在全面检测内核的安全性,其核心流程是通过自动化方式对内核的各个部分展开测试。在具体操作中,采用了先进的覆盖率引导模糊测试技术,这一技术主要涵盖三个关键阶段。
• 在语料库构建阶段,巧妙借助带 kcov 工具的内核来收集执行路径的覆盖信息,以此为基础,将系统调用描述作为模糊测试的输入源,为后续测试奠定坚实的数据基础。
• 进入输入生成阶段,会把系统调用描述精准地转换为可执行的二进制程序,并且依据反馈信息(如代码覆盖率、程序执行状态等)对其进行变异操作,从而不断优化输入数据,提高测试的有效性。
• 执行阶段则是将生成的程序在内核环境中运行,在这个过程中,密切收集代码覆盖率以及程序崩溃等关键信息,通过对这些信息的深入分析,能够精准定位潜在的漏洞。
然而,在嵌入式操作系统内核模糊测试领域,依然存在诸多棘手挑战。例如,生成高质量语料库存在一定难度,难以精准把握未知的内核状态路径,同时,对于一些约束信息也未能充分利用,这些问题在一定程度上制约了嵌入式操作系统内核模糊测试的发展与效能提升。
针对这些情况,张强博士提出利用大语言模型(LLMs)来解决这些挑战。LLMs 具有多方面能力优势,其广泛知识库和强大代码生成能力使其能够将访问内核模块程序转换为系统调用序列,强大的上下文理解和推理能力有助于提取并探索深层内核状态路径,并且模糊测试基本过程自动化且易于使用,可通过插件适配的方式融入现有流程。基于此,提出了 ECG(嵌入式操作系统内核模糊测试增强框架),该框架包括规范构建阶段(从内核模块提取约束并生成实际代码,收集系统调用定义,生成程序并修正错误)和测试阶段(预测并选择更好的测试输入变异方式,评估输入质量,收集分析覆盖率数据和执行路径信息以优化结果)。
为全面评估 ECG 的能力,基于三个研究问题展开了实验,将其与 Syzkaller、Moonshine、DRLF 和 KernelGPT 等模糊测试工具进行对比,测试目标内核涵盖 RT - Linux、OpenWrt 和 RaspiOS。实验结果表明,ECG 在 Bug 发现能力方面显现出不错的效果,在三个嵌入式操作系统中发现了 32 个未知 bug,在商用嵌入式操作系统 ZHIXIN 上也发现了 10 个 bug;在代码分支覆盖率方面,平均达到 183,452.4,相比其他工具提升了 16.02%;在 LLM 辅助生成有效性上,使用 Mixtral8x7b 时消耗 token 更少,平均每个程序仅 781.9 个。
综上所述,ECG 有效地增强了嵌入式操作系统内核模糊测试能力,为提升嵌入式操作系统的安全性提供了有力保障。
LLM辅助的数据库模糊测试
在软件安全检测领域,模糊测试是一种重要的手段。通常情况下,典型的模糊测试流程依序展开:首先确定目标程序作为测试对象,接着生成用于与目标程序交互的驱动程序,随后生成输入数据,其核心目的在于尽可能广泛地覆盖执行路径,从而挖掘潜在的 Bug,最后运用测试准则(Oracle)来检测这些 Bug。
近期,大量基于大语言模型(LLMs)的增强型模糊测试工具不断涌现。它们在模糊测试流程中的驱动合成、输入生成、漏洞检测这三个关键阶段发挥了一定的助力作用,使得代码覆盖率和 bug 检测率都取得了一定程度的改进。然而,张强博士指出,由于 LLMs 本身存在固有的局限性,在某些特定场景下可能会失效。例如,存在幻觉问题,这会致使其生成看似合理实则错误或不合逻辑的输出内容,进而对测试输入的准确性以及 bug 报告的准确性产生不良影响;其长文本理解能力也存在短板,在处理复杂长篇文本时效果往往不尽人意;而且其训练语料库具有局限性,倘若缺乏特定任务的相关知识,其表现就会大打折扣。在模糊测试的各个阶段应用 LLMs 时,均会面临独特的挑战,以下分阶段详细阐述。
• 驱动程序合成阶段:研究显示基于 LLM 的驱动程序合成易出错,在少见项目中效果不佳,如 OSS - Fuzz 团队实验发现 krb5 等项目生成驱动程序易失败。为此,张强博士提出建议:一是摒弃一次性合成,改为依据错误迭代查询 LLM 修复;二是收集函数相关信息用于提示工程;三是复杂系统采用传统程序分析方法更实际。在测试 DBMS 连接器时遵循第二条建议,WingFuzz 工具相比直接用 LLMs 生成驱动程序,覆盖率和驱动准确率有着明显提升。
• 输入生成阶段:经验表明 LLMs 生成输入存在多样性和有效性问题,如面对 BGP 等复杂程序时因上下文遗忘难以理解格式而无法生成有效输入。对于常见格式(如 JSON 和 XML)可直接用 LLMs 生成多样化测试用例,对于未涉及格式,建议转化已知知识为输入规格总结。测试较少见 DBMS 时遵循此建议,WingFuzz 工具在生成输入的语义准确率和覆盖率方面优于直接用 LLMs 生成输入的方式。
• Bug 检测阶段:LLMs 常误解代码设计致误报。对于复杂目标程序,建议避免直接依赖 LLM 识别 bug,可利用其提取特征或模式设计自定义准则,文档完备时可从文档提取期望行为定义准则。在 DBMS 中寻找逻辑缺陷时遵循建议,WingFuzz 工具相比直接用 LLMs 检测缺陷,有效减少了误报情况。
鉴于以上情况,在实际应用模糊测试时,必须精心细致设计整个流程,以充分发挥其作用并克服 LLMs 带来的挑战。
写在最后
在当今数字化时代,软件安全成为至关重要的议题,而漏洞检测则是保障软件安全的关键环节。模糊测试作为一种行之有效的漏洞检测技术,在操作系统内核和数据库领域均展现出了卓越的漏洞挖掘能力,为发现潜在安全隐患提供了重要手段。
随着人工智能技术的迅猛发展,大语言模型(LLMs)的出现为模糊测试带来了新的活力与变革。LLMs 与模糊测试的融合应用,进一步增强了漏洞检测的效能,使其能够更精准地识别复杂系统中的安全漏洞,这无疑是安全漏洞检测领域的一次重大突破。它不仅提高了检测的准确性和效率,还拓宽了漏洞发现的广度和深度,为软件安全防护提供了更强大的支持。
展望未来,安全极客社区将积极响应技术发展趋势,以 “AI+Security” 为核心,开展更多丰富多彩的主题活动。社区旨在汇聚来自各行各业的专家学者,共同探讨前沿技术,分享宝贵的实践经验和技术干货。
嘉宾们分享的 PPT 将在安全极客知识星球进行分享,欢迎大家关注,以获取更多干货内容。
来源:云起无垠