论文阅读:DefectHunter.A Novel LLM-Driven Boosted-Conformer-based Code Vulnerability Detection Mechanis

省流:

在源码上构建 AST, CFG, DFG,然后经过 Conformer 构建多维度特征 concat 起来,最后用一个 MLP 判定漏洞存在性。 通过多个维度,统一表示程序的结构信息和语义信息 (structural data) 和 (semantic data)。

  • CNN + transformer 的多模态大模型做漏洞发现 (vulnerability identification)。
  • 预训练 llm Unixcoder 做上下文词嵌入提取 CSE

author:

arxiv23,感觉是不是不发表了……

作者学校有点弱,通讯的 pub 也不太好,但是好在论文开源了。

Authors:

  • 一作:Jin Wang,广东财经大学
  • 通讯:肖银皓,广东财经大学

abstract:

传统漏洞检测方法耗时费力;基于机器学习的方法在复杂数据集上难以捕捉高维特征(?这是什么);基于深度学习的方法不能捕捉足够的特征信息(?);自注意力机制能处理长距离信息,但是没法捕捉结构信息(structural information?)。因此,本文提出 DefectHunter 工具,同时提取语义和结构。

DefectHunter 使用 Conformer 机制,将自注意力机制和 CNN 融合,用来同时捕获局部位置特征和基于内容的全局交互。此外,我们通过调整分母优化了自注意力机制,以减少过多注意力头引入的额外噪声。为探究DefectHunter如何理解漏洞,我们进行了案例研究,结果表明该模型能有效解析漏洞的底层机制。

我们使用六个工业级数据集和两个高复杂度数据集,将DefectHunter与十种基线方法进行对比评估。在QEMU数据集上,DefectHunter的准确率比Pongo-70B提高了20.62%;在CWE-754数据集上,其准确率提升了14.64%。

据说 Qemu 和 FFmpeg 数据集的洞更难识别一点。

1. Introduction

首先引入情景,计算机技术发展促进人类活动方式改变,存在安全漏洞问题很关键。

多年来的进展在漏洞发现方向取得了长足的进展。传统的发现方法包括静态分析和动态分析两种。其中静态分析可以使用诸如 FlawFinder 和 Findbugs 的工具,似乎不是本文重点没展开;动态分析方法难以检出复杂的漏洞,例如涉及到系统架构的洞。

传统静态分析工具例举:(不是 IR 框架)

  • C/C++: FlawFinder, cppchecker
  • ObjectiveC: clang
  • Java/Android/C Family: Infer

随着机器学习的发展,学界提出了一些数据驱动的方法,如 VCCFinder(2015) ;近年来的深度学习工作在大规模数据集上表现的更好,如基于图的 FUNDED 和 Devign;基于语义的 Codebert 和 CodeT5。GPT4 的出现更是推高了基于语义方法的上限。

然而这些方法不能结合语义和程序结构信息,因此本文提出 DefectHunter,一个缝合了静态分析工具,预训练模型和 Conformer 机制(CNN augmented Transformer)的框架。其中,

  • 从代码片段提取静态分析特征,并 tokenize,形成包含上下文语义的特征序列。
  • Conformer[10] 结合了自注意力和卷积,同时捕捉局部特征和远距离的依赖。
  • 文章微调了 Conformer 内部注意力机制的分母,以减小 softmax 引入的噪声[11]

作者可能是做实验发现 Conformer 比 Transformer 好使,既能建模复杂关系也能优化计算效率。

在 FFmpeg, QEMU, CWE 数据集上,和 10个对比方法跑实验。用 ACC 统计,好 10%-20%

2. Background

没讲相关方法,而是主要讲解相关技术的原理

2.A Graph

使用 cfg + dfg 两种图(还有 ast 但是没写)。图带来了很多好处,首先他们封装了代码的内在结构信息,帮助理解数据依赖性和控制流关系。其次,图省略了无关信息,减轻了分析复杂度。最后,基于图的方法天然和其他 ml 方法兼容。

2.B Self-Attention based Methods

基于自注意力的方法在计算效率和捕捉长距离依赖的能力间取得了良好的平衡。

  • Transformer: 解决了 RNN 和 CNN 在长距离推理时面临的内生性问题。这使得它特别适合解释序列问题和结构化数据的场景
  • Conformer: 对 Transformer 的改进。transformer 在处理长序列时是平方的,效率受限。Conformer 结合 CNN 和自注意力改善这一点。Conformer 通过前馈 CNN 模块来捕捉局部信息,并保留了自注意力机制来捕捉全局上下文。

2.C LLMs

LLM 凭借巨大的参数量捕捉复杂语言结构,并产生上下文相关的文本。

3. Design of DefectHunter

DefectHunter 包含三个主要部分。1. 结构化信息生成 2. 预训练模型 3. Conformer。具体来说

行文的小心思:不要在章节总起处直接说工具名字

  1. 使用开源工具 tree-sitter 生成 CFG, DFG 等结构化信息(AST)
  2. 使用 UniXCoder,一个代码理解 embedding 特化的 llm 提取语义特征矩阵(vector)。
  3. 使用 Conformer 机制,从 structual data 和 semantic data 两个方向蒸馏漏洞特征。
  4. 魔改 Conformer,减少多余的头产生的噪音。
  5. 用 MLP 做二分类,判定存在还是不存在。

3.A 结构化信息提取

使用 AST, CFG, DFG 有助于 llm 对程序结构逻辑和数据流的全面理解

  • AST: 表示程序的抽象语法结构。节点表示语法结构,边表示层次关系
  • CFG: 描述了可能的程序路径,节点表示程序结构,边表示转移关系。标识了 entry 和 exit
  • DFG:捕捉操作之间数据和依赖关系的相互作用,标识变量的实例化,修改,和使用位置。节点表示变量或者操作(var/op),边表示数据依赖。

3.B Code Sequence Embedding (CSE)

使用 pretrained model 生成 word-embedding,称为上下文特征表示 (contextual token representation)。和传统 word-embedding 不同,传统方法刚需二次训练,CSE 直接用更泛化的预训练模型,避免过拟合。

P i = model ⁡ ( x i ) P_i = \operatorname{model}(x_i) Pi=model(xi)

其中, x i x_i xi 是代码片段, P i P_i Pi 是嵌入表示

3.C Conformer

作者水了很多篇幅介绍 transformer 的各个部分,包括位置编码,注意力公式。甚至有点错误

Conformer 结合了 CNN 和 attention,CNN 负责提取局部复杂特征,attention 捕捉远距离依赖

在这里插入图片描述

一个 Conformer 块如上图,主要由一个 CNN 层,一层多头自注意力,两个前馈层组成。作者似乎真的是用的乘法来结合 PE 和前馈层……

作者提到,使用 softmax 导致注意力头倾向于更强的输出,适合做分类任务不适合做可选的标注任务,特别是当输出是总结性的时候,会引入额外的噪音。并且多个头也比单个头更容易产生噪音。作者参考[11] 在分母加了个 1 1 1,保证导数是正的并且输出收敛:

A t t e n t i o n ( Q i , K i , V i ) = Softmax ⁡ ( Q i K i T 1 + d k ) V i Attention(Q_i, K_i, V_i) = \operatorname{Softmax}\left(\frac{Q_iK_i^T}{1 + \sqrt{d_k}}\right) V_i Attention(Qi,Ki,Vi)=Softmax(1+dk QiKiT)Vi

其他部分和正常 transformer block,CNN 一样。

4. Implementation

在这里插入图片描述

4.A 建图 AST, CFG, DFG

  • 用 tree-sitter 建立 AST,然后转换为 Graphviz Dot format,最后提取其中的边转换为邻接矩阵
  • CFG 和 DFG 基于 AST 构建

4.B CSE

使用微软的预训练多模态模型 UniXcoder 提取语义特征。在实验中作者发现 tokenize 会有问题,如下图上半部分,函数名会被拆开导致不精确,为了解决该问题,作者使用 NTLK 库魔改 token,并创建了 special token 词表。 UniXcoder最多支持 768 个 token

在这里插入图片描述

作者用 keras 层实现该方法

5. 实验

先跳了。

case study

找了四个 case,写作时不是在分析工具如何判定漏洞,而是在讲这个漏洞的危害,最后一句话提 DH 能正确分别 patch 和没 patch 的程序。

6. 相关工作

写的是漏洞识别相关的工作。

### 关于 Guardian 运行时框架的文档与实现细节 Guardian 是一种运行时框架,旨在支持基于大语言模型 (LLM) 的用户界面探索。其核心目标是利用 LLM 技术来增强用户体验并简化复杂系统的交互过程[^1]。 #### 主要特性 该框架的主要特点包括以下几个方面: - **动态上下文感知**:Guardian 能够实时分析用户的输入以及当前的应用状态,并据此调整响应行为。 - **自适应学习能力**:通过持续收集用户反馈数据,Guardian 不断优化自身的预测能力和推荐策略。 - **模块化设计架构**:整个系统被划分为多个独立组件,便于开发者针对具体需求定制扩展功能。 以下是构建这样一个框架可能涉及的关键技术要点: #### 数据流处理机制 为了有效管理和传递信息,在内部实现了高效的数据管道解决方案。此部分负责接收来自前端的各种事件触发信号,并将其转化为适合传送给后端 AI 模型的形式。 ```python def process_event(event_data): """ 处理接收到的UI事件数据 参数: event_data(dict): 包含事件详情的信息字典 返回值: processed_result(str): 经过初步解析后的字符串表示形式的结果 """ try: # 对原始数据做必要的清理工作 cleaned_info = clean_input(event_data) # 将清洗过的资料转换成可供后续使用的标准格式 formatted_message = format_for_model(cleaned_info) return formatted_message except Exception as e: log_error(e) ``` #### 权限管理集成 如果计划在一个完整的 Web 应用环境中部署,则还需要考虑安全性因素。此时可以借助 `django-rest-framework-guardian` 提供的支持,无缝衔接既有业务逻辑的同时保障敏感操作的安全性[^2]。 例如定义某些特定视图只允许拥有相应对象级别权限的角色访问: ```python from rest_framework import permissions, viewsets import guardian.shortcuts class SpecialResourceViewSet(viewsets.ModelViewSet): permission_classes = [permissions.DjangoObjectPermissions] def get_queryset(self): user = self.request.user queryset = super().get_queryset() accessible_items = guardian.shortcuts.get_objects_for_user( user, 'app_name.view_specialresource', klass=queryset.model ) return queryset.filter(id__in=[item.id for item in accessible_items]) ``` 以上代码片段展示了如何结合 DRF 和 django-guardian 实现更精细的访问控制规则设定方法。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值