Advertisement

论文阅读-Transformer-based language models for software vulnerability detection

阅读量:

向您提供了一批学术资源,请您直接访问该链接:https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您可以方便地将这些资源导入到 ivySCI 软件中使用,并在您的研究中进行引用

本文的核心内容在于构建了一个系统化的架构来识别软件漏洞。

具体而言, 该架构由以下几部分构成: 首先, 基于Transformer的语言模型被用来进行语义分析; 其次, 通过多层注意力机制捕获关键特征; 最后, 利用监督学习方法进行精确的漏洞识别。

编写成能够输入transformer格式的代码。这种做法旨在借鉴自然语言与高级编程语言之间的相似关系。

模型准备:采用规模宏大的基于Transformer架构的语言模型,并通过训练与微调对其进行优化。重点考察BERT (Bidirectional Encoder Representations from Transformers) 和GPT (Generative Pre-trained Transformer) 模型。

通过将被翻译后的源代码注释片段输入至已训练完成的语言模型中, 用于执行软件漏洞检测任务。该语言模型能够基于上下文理解注释与代码之间的关联关系, 并能识别出潜在的安全缺陷。

借助这一架构,能够运用Transformer-based语言模型进行软件缺陷自动识别,并且相较于传统基于RNN的语言模型,在缺陷检测方面展现出更优的表现。

本文的创新点:

简单来说就是:将软件的代码base翻译成自然语言,并利用transformer模型进行分析。


本文的行文结构是以回答以下问题展开的:

RQ1:利用基于转换器的语言模型进行软件漏洞检测的系统框架是什么?

RQ2:与现有的其他基于rnn的模型相比,当前基于transformer的语言模型在软件漏洞检测方面的性能如何?

RQ3:哪个平台能高效运行这些模型?

我对数据转换问题表现出了浓厚的兴趣;同时,我也关注源代码序列是如何逐步被编码为能够被transformer接收的word embedding表示形式的过程。

数据转换:

第一步是将源代码转换为代码gadget。

在数据清洗过程中,在这一阶段需要解决的问题包括:首先是因为代码gadgets可能来源于不同的原始数据源,在不同源中出现同一名称的情况较为常见;其次是在同一个源内部可能存在冗余或者重复记录的情况。

(i) 在相同标签下存在的多余代码gadgets可能会导致测试集泄露

(ii) 在不同标签类别下存在重复使用的代码gadgets(即重复项),这些数据可能会影响到模型的训练效果与测试结果。为了清理数据集,在所有代码gadgets中应用SHA256哈希算法进行处理,从而提取出每个代码gadgets对应的哈希指纹值以助于识别并去除重复项。与使用正则表达式或简单字符串比较方法相比,采用哈希查找机制能够显著提升搜索速度和效率。对于存在标签冲突的代码gadgets(即具有不同标签的对象),将对其实施删除操作;而对于具有相同标签但存在重复项的情况,则仅保留一份实例作为代表进行去重处理后的新数据集见论文表格部分。

数据预处理阶段首先要求删除代码gadgets中的注释信息。接着需要将用户自定义的变量名称统一为符号形式或带编号的标识符(如FUNC_1, FUNC_2等)。此外还应将用户自定义的功能名称转换为FUNC形式(或采用连续自然数后缀如FUNC_1, FUNC_2等方式区分不同功能)。通过这些措施可以使代码更加标准化。最后一步是根据可利用性生成相应的数据子集。具体而言我们从原始数据集中提取包含缓冲区错误(BE)及其非易受攻击版本以及资源管理错误(RME)及其非易受攻击版本的数据样本分别构建BE-RME二分类数据集以及单独的资源管理错误(RME)非易受攻击版本的数据集。对于标签分配部分我们采取以下策略:针对二分类实验对BE-RME数据集分别进行标记若该代码gadgets存在漏洞则标记为1否则标记为0;而对于多分类实验则基于多个漏洞类型构建并集数据集并将非易受攻击样本标记为0其余样本依次递增并根据实际存在的漏洞类型进行标注例如在VulDeePecker数据集中同时存在BE RME和非易受攻击特征的样本会被分别标记为1 2 0。

3. 数据集划分:在数据预处理步骤之后,将数据集划分为多个组进行实验。例如,VulDeePecker数据集划分为三个组:

在进行二分类实验时,则分别选用Group1和Group2的数据集;而对于三分类实验,则选用Group3的数据集。这些数据被组织为训练样本与测试样本,并按照80:20的比例进行了划分。随后,在测试样本中应用交叉验证方法进行评估,并汇总综合性能指标。

第二步是将文本将处理过的代码gadgets用来做词嵌入

通过将代码中的单词进行编码处理,并将其映射到预设好的向量空间中,以便准确反映代码中的语义信息及其周围的上下文环境。

全部评论 (0)

还没有任何评论哟~