问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
RealVul: 基于大语言模型训练微调的PHP漏洞检测框架深度解析
安全工具
LLM赋能安全领域前沿研究“甚少”,在研究该领域的前沿论文科研时发现了一个很开创性的漏洞检测框架,本文的核心目标是设计一个针对PHP漏洞检测的LLM框架RealVul,以弥补现有研究的不足。具体而言,关注如何从真实项目中定位漏洞触发点并提取有效样本、如何通过代码预处理突出漏洞特征、以及如何利用半合成数据扩充稀缺样本
引言 (Introduction) ----------------- - **问题背景**:软件漏洞对计算机系统安全构成重大威胁。2023 年报告了 28,902 个漏洞。PHP 作为最流行的 Web 应用程序语言之一,为近 80% 的顶级网站提供支持,但也容易受到 SQL 注入和跨站脚本 (XSS) 等常见 Web 安全漏洞的影响。因此,有效检测 PHP 软件漏洞变得尤为重要。 - **传统方法局限**:传统的静态应用安全测试 (SAST) 工具(如 CodeQL, RIPS, SonarQube, Fortify SCA, Checkmarx)受限于其规则库的全面性和精确性,常导致高误报和漏报率。此外,CodeQL 尚不支持 PHP 语言。 - **深度学习与 LLM 的兴起**:研究者开始探索深度学习和 LLM 在漏洞检测中的应用。然而,现有 LLM 方法主要依赖 C/C++ 语言的漏洞数据集,忽略了其他语言(如 PHP),并且数据收集和预处理存在挑战。 - **RealVul 的贡献**:RealVul 旨在解决这些问题,提出一个 LLM-based 框架,用于 PHP 漏洞检测。通过漏洞候选检测、数据预处理和改进的数据合成方法,RealVul 能够有效提升 LLM 的漏洞检测能力和泛化性能。 相关工作 (Related Works) -------------------- - **现有数据集**: - **合成数据集**:如 SARD 和 Juliet,虽然标签准确,但缺乏噪声和上下文信息,未能完全封装实际漏洞的复杂性。 - **真实项目衍生数据集**:通常基于漏洞修复来收集数据(如 Devign, Reveal, Big-Vul, D2A, CrossVul, DiverseVul)。然而,这种方法存在准确性、唯一性等问题,且样本与漏洞之间的关联可能不强。 - **现有方法**: - **深度学习模型**:早期研究主要使用 RNN 和 GNN。例如,µVulDeePecker 使用 token-based 方法和 BLSTM 网络,SySeVR 结合语义信息。图神经网络 (GNN) 方法如 Devign 和 Reveal 利用代码属性图 (CPG),LineVD 使用程序依赖图 (PDG),VulChecker 结合 ePDG 和 S2V。 - **LLM 方法**:随着自然语言处理的发展,CodeBERT 等模型展现了代码理解和生成能力。LineVul 和 DiverseVul 等工作开始将 LLM 应用于漏洞检测。但这些方法通常过度依赖现有数据集,缺乏合理的漏洞代码预处理,导致对未知项目的分析不可靠。 - **RealVul 的区别**:RealVul 通过定位漏洞触发点、代码切片、无关信息置换、去除相似样本等方式合理处理样本,并使用更先进的代码 LLM 进行分析以实现卓越性能。 LLM赋能安全领域前沿研究“甚少” ----------------- PHP是网页开发中最常用的语言之一,约有80%的前1000万网站使用PHP(如Facebook、WordPress等),并且在GitHub上诞生了超330万个开源项目。然而PHP易受到常见Web漏洞(如SQL注入、XSS)的攻击,因此有效检测PHP漏洞至关重要。 ### 静态分析缺陷 传统的静态检测工具(如CodeQL、RIPS、SonarQube等)依赖规则库覆盖,其规则不够完备且易产生大量误报漏报;并且CodeQL尚不支持PHP语言。 以往大多数数据集以及检测方法都是静态分析以及其他语言:  ### DL、LLM相关工作少 近期研究开始尝试深度学习和LLM方法检测漏洞,但大多聚焦于C/C++语言,PHP相关工作缺乏 ### 数据集缺陷 - 许多漏洞数据集,大致可分为两类:**合成数据集**和来自**真实项目**的数据集。合成数据集过于简化和孤立,虽然包含准确的标签,但缺乏噪声和上下文信息,无法完全体现现实世界漏洞的复杂性。 - 为了弥补合成数据集的局限性,一些研究人员建议基于漏洞修复来收集数据。而一个潜在的 PHP 漏洞修复案例。该漏洞的执行路径经过三个函数。该方法在抽取样本时,会根据该函数是否已修复,将漏洞的执行路径拆分为**四个样本**。在模型训练过程中,样本之间的**相关性**会被忽略,导致模型难以仅基于该数据集识别漏洞。如下图所示  核心目标 ---- 本文的核心目标是设计一个针对PHP漏洞检测的LLM框架RealVul,以弥补现有研究的不足。具体而言,关注如何从真实项目中定位漏洞触发点并提取有效样本、如何通过代码预处理突出漏洞特征、以及如何利用半合成数据扩充稀缺样本,从而使预训练的代码LLM更好地识别PHP中的XSS(CWE-79)和SQL注入(CWE-89)漏洞。希望通过RealVul框架验证:结合漏洞候选检测、程序切片、数据预处理和数据合成的方法,是否能显著提升LLM对PHP漏洞的检测效果和泛化能力。 RealVul:核心框架 ------------ 框架流程图:  RealVul框架由样本选择、数据预处理和模型训练三部分组成。具体流程如下: - **漏洞候选点识别与程序切片**:利用启发式规则定位代码中可能触发漏洞的语句(如字符串拼接等)。针对每个潜在触发点,去除代码注释,生成抽象语法树 (AST),并基于 AST 提取全局代码、函数代码以及控制流和数据流,保留与**触发点数据流和控制流相关**的语句。如果触发点在函数内部,则将函数输入视为全局变量(如转写为`$_GET`格式),并将函数代码转换为全局代码。来标准化函数代码和全局代码的不同表示形式。完成漏洞候选检测后,使用**代码注释**在潜在漏洞触发点处标记污点变量,以增强样本的漏洞表示 细节流程如下实例:  - **数据预处理**:对提取的代码片段进行**标注、归一化和去重**。每个样本根据其“污点”变量是否可能导致漏洞分别标记为有漏洞/无漏洞。归一化时,去除长常量字符串等无关信息,并对变量名进行标准化映射(如“var0、var1”),以突出漏洞语义;用户定义的函数名保留不变以保持函数行为信息。归一化后,基于序列相似度去重,删除高度重复的代码片段,避免训练集存在冗余。 - **模型微调**:使用低秩自适应(LoRA)技术微调多种预训练代码LLM(如CodeT5、CodeT5+、StarCoder2、CodeLlama等)来做二分类任务。针对不同漏洞类型(CWE-79、CWE-89),分别训练独立模型以提高检测针对性。 - **数据合成**:为缓解真实样本不足的问题,RealVul借鉴其他论文研究思路,将简化后的漏洞片段(尽量较短的数据流和较简单的分支)插入到真实项目的函数中,再次切片和预处理,生成大规模半合成数据集。该方法使得LLM在训练时可以接触到更多具有代表性的PHP漏洞样本 实验过程和结果 ------- - **实验设计**: - **EXP1: 有效性 (Effectiveness)**:在随机划分的训练、验证和测试集上比较 RealVul 与基于漏洞修复数据集微调的 LLM 的性能。 - **EXP2: 泛化性 (Generalization)**:测试集数据对于微调的 LLM 是未知的,即训练、验证和测试集来自不同的项目源。此外,与 RIPS 和 Fortify SCA 等传统 SAST 工具进行比较。 - **EXP3: 消融研究 (Ablation Study)**:研究规范化和模型微调对性能的影响,并与上下文学习方法进行比较。 - **评估指标**:准确率 (accuracy)、召回率 (recall)、精确率 (precision) 和 F1 分数。 - **LLM 模型**:使用 CodeT5-base, CodeT5p-770m, CodeLlama-7b, StarCoder2-3b, StarCoder2-7b。 - **数据集**: - D\_real:通过 RealVul 框架从 CrossVul 数据集收集的真实世界漏洞数据集。 - D\_syn:通过 RealVul 数据合成算法从 D\_real 和 SARD 数据集合成的大规模数据集。 - D\_rep:基线方法使用的数据集,通过比较漏洞修复前后的代码差异获得。 - **有效性**: - **结果**:RealVul 在 CWE-79 (XSS) 和 CWE-89 (SQLI) 上表现出色,尤其在 F1 分数方面。即使 CWE-89 的真实数据样本量较小,评估结果也相对稳定。 - **与基线对比**:RealVul 显著优于基线方法,F1 分数远超 50%。CodeLlama-7b 和 StarCoder2-3b 与 RealVul 结合表现最佳。 - **优势分析**:RealVul 的采样和处理技术使代码更好地表示漏洞特征,从而增强 LLM 的检测性能。 - **泛化性**: - **结果**:RealVul 在来自不同数据源的测试集上表现出更优异的泛化性能,F1 分数显著超过基线。 - **与 SAST 工具对比**:RealVul 在 CWE-79 上略逊于传统 SAST 工具,但在 CWE-89 上明显优于 SAST 工具。这是因为 RealVul 能够更全面地识别 SQL 漏洞。 - **模型分析**:参数数量对 LLM 的漏洞检测能力影响很小,较小的模型(如 CodeT5 和 CodeT5p)也具有足够的分析能力。RealVul 通过漏洞候选检测和预处理减少了单个样本代码长度,突出了潜在漏洞触发相关信息,降低了模型的分析能力需求。 根本原因如下图所示SQL注入的检测更有优势:  - **消融研究**: - **规范化影响**:规范化处理在大多数情况下是必要的,最大 F1 分数差异达到 14.06%,表明适当减少无关语义信息有助于 PHP 漏洞检测任务。 - **模型微调必要性**:实验结果显示,上下文学习方法与 RealVul 之间存在显著性能差距,证实了微调的必要性  在此解释一下各个评测维度的实际意义,方便是师傅们理解 | 指标 | 定义 | 在漏洞检测中的实际意义 | | |---|---|---|---| | **Accuracy(准确率)** | 正确预测样本数 / 全部样本数 | 衡量模型整体判断的正确比例。但由于漏洞样本通常稀少(数据分布不平衡),高准确率可能掩盖模型对漏洞的“漏检”。例如:模型如果一味预测“安全”,在大部分样本安全的情况下,准确率仍然高。 | | | **Recall(召回率)** | 正确识别出的漏洞数 / 数据集中真实漏洞数 | 衡量模型发现漏洞的能力。高召回意味着模型更少漏掉真实漏洞(对安全研究者和审计系统非常重要)。但召回高往往会带来误报增加。 | | | **Precision(精确率)** | 正确识别出的漏洞数 / 模型预测为漏洞的总数 | 衡量模型在预测“有漏洞”时的可信度。高精确率意味着误报少。实际意义:减少安全团队花费在“假阳性”上的排查成本。 | | | **F1分数** | Precision 和 Recall 的调和平均 | 兼顾“漏报少”(Recall高)和“误报少”(Precision高)。这是本文主要使用的核心评价指标 | | 局限性 --- - 针对每种类型的 CWE 漏洞专门调整了模型,以增强检测能力。这种方法会产生大量开销,**统一的多分类模型**的性能值得研究。 - 缺乏有效的漏洞样本标记方法,这导致只能手动标记样本和数据合成来弥补数据量的不足。因此,数据集的有效性可以进一步提高。 - 采用了**基于启发式规则**的方法来识别潜在的漏洞触发语句,这些规则库仍然需要在我们的框架中进行扩展或修改,以适应新的漏洞模式或更新的编程实践。一方面,框架函数本身无法匹配所有潜在的漏洞点。另一方面,匹配到的 SQL 执行函数也无法判断是否内置了 SQL 注入漏洞的过滤器 - 与函数级和项目级数据集相比,提供的下文信息相对有限。 ### New Ideas for Future Research 基于上述分析和局限性,我们可以思考未来的新的研究思路: - **高级函数语义分析与规范化**: - **构建函数调用图和控制流图**:在规范化阶段,不仅保留用户定义函数名,还可以构建完整的函数调用图和控制流图,分析函数的内部行为和数据流。这将有助于 LLM 更好地理解函数的功能和潜在的漏洞传播路径。 - **基于功能语义的函数名标准化**:研究如何根据函数的实际功能对其名称进行更高级的标准化,而不仅仅是保留。例如,将所有实现“清理”功能的函数统一为 sanitize\_data()。 - **融合代码注释中的功能信息**:开发方法从代码注释中提取关于函数功能、输入输出和安全假设的信息,并将其作为附加上下文集成到 LLM 的输入中,以增强模型的语义理解。 - **统一的多分类漏洞检测模型**: - **多任务学习 (Multi-Task Learning)**:探索构建一个能够同时检测多种 CWE 类型的统一 LLM 模型,而不是为每种类型单独训练。这可以减少训练开销,并可能通过共享不同漏洞类型之间的特征表示来提高整体性能。 - **CWE 层次结构嵌入**:利用 CWE 的层次结构,将漏洞类型编码为嵌入向量,让模型理解不同漏洞之间的关系,从而更好地泛化。 - **自动化/半自动化漏洞样本标签与增强**: - **符号执行/污点分析辅助标签**:结合符号执行 (Symbolic Execution) 或更高级的污点分析 (Taint Analysis) 工具,自动化识别代码中的污点源、传播路径和汇点,从而生成更准确、更丰富的漏洞标签。 - **主动学习 (Active Learning) 机制**:引入主动学习策略,让人工专家只对模型最不确定的样本进行标签,从而高效地扩充高质量的标签数据集。 - **更复杂的代码变换与合成**:除了简单的插入,研究更高级的代码变换技术(如控制流混淆、数据流重排、变体生成)来合成更多样化、更具挑战性的漏洞样本,以提高模型的鲁棒性。 - **动态自适应的漏洞触发规则识别**: - **基于机器学习的规则生成**:不再依赖纯粹的启发式规则,而是使用机器学习模型(例如,通过少量人工标记的样本训练)来识别新的漏洞触发模式,实现规则库的动态更新和扩展。 - **结合静态分析工具的反馈**:将 RealVul 与现有的 SAST 工具相结合,利用 SAST 工具的发现作为 LLM 训练的弱标签或反馈信号,以迭代改进 LLM 的触发规则识别能力。 - **上下文敏感的触发点识别**:研究如何让 LLM 在识别潜在漏洞触发点时,不仅考虑语句本身,还能结合其所在函数的上下文、文件甚至整个项目的配置和依赖关系。 - **增强 LLM 的可解释性与交互性**: - **可视化漏洞检测路径**:开发工具可视化 LLM 在代码中识别出漏洞的关键路径和证据,帮助开发人员理解漏洞的性质和修复方案。 - **生成修复建议**:在检测到漏洞后,让 LLM 不仅报告漏洞,还能根据上下文生成具体的修复建议,甚至直接提供代码补丁。 - **交互式调试与分析**:允许安全专家与 LLM 进行交互,通过提问或提供额外信息来帮助 LLM 细化其分析,特别是在模糊或复杂的案例中。 - **跨语言和跨框架的泛化**: - 将 RealVul 的方法论扩展到 PHP 之外的其他 Web 语言(如 Python, Node.js, Java)和框架。这需要解决不同语言的 AST 结构、数据流/控制流分析差异以及特定语言漏洞模式的挑战。 最后总结一下RealVul的基于LLM的漏洞检测框架的突出优点 | 通用挑战 | 《RealVul》的解决方案 | 效果 | |---|---|---| | **1. 数据难题** | **创新性地构建数据集**:不依赖有噪声的“修复提交”,而是通过**程序切片**从真实项目中提取与漏洞触发点强相关的代码片段。 | 获得了更干净、标签更准确、与漏洞相关性更强的样本。 | | | **数据合成**:提出一种将纯净漏洞样本插入到安全项目中的方法,**极大地扩充了训练数据规模**,缓解了数据不平衡问题。 | 让模型在数据有限的情况下也能进行有效学习。 | | **2. 任务复杂性** | **精细化预处理**:通过**标准化(Normalization)**(如统一变量名、移除长字符串)来减少无关语义噪声,使模型能更专注于**漏洞模式**而非代码风格。 | 显著提升了模型性能(F1分数最大提升14%)。 | | | **聚焦漏洞触发点**:针对不同漏洞类型(CWE-79, CWE-89)设计不同的定位策略(如CWE-89匹配**拼接点**而非执行函数),更贴合漏洞本质。 | 使得在CWE-89上的检测效果**远超**传统静态工具。 | | **3. 模型局限性** | **任务特定微调**:采用**LoRA**等参数高效微调方法,对多个先进的代码LLM(CodeT5, CodeLlama, StarCoder2)进行**针对性微调**,使其适应“漏洞分类”这一特定任务。 | 将通用代码模型成功转化为专项安全模型。 | | **4. 评估困难** | **严格的评估设定**:专门设计了**跨项目泛化(Unseen Projects)** 实验,要求测试集项目完全未在训练集中出现。 | 证明了其方法的**真实泛化能力**,而非过拟合到特定项目风格。 | | | **与传统工具对比**:不仅和基于学习的方法比,还和**RIPS、Fortify**等专业SAST工具对比,验证其实际应用价值。 | 证明了LLM方法在特定场景下可以超越成熟商业工具。 |
发表于 2025-10-16 09:00:01
阅读 ( 206 )
分类:
AI 人工智能
0 推荐
收藏
0 条评论
请先
登录
后评论
Bear001
Web安全
4 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!