基于汇编代码和源代码融合的漏洞检测系统

这篇文章通过结合漏洞源代码和汇编代码的特征实现了一个漏洞检测系统。实现步骤如下:(1)从源代码和汇编代码中提取代码切片;(2)通过提出的代码对齐算法对这些片断进行对齐;(3)对齐的代码切片被转换为矢量,并输入到基于超融合的深度学习模型中。

1 提出问题

一些使用单一代码表征的方法,仅从源代码中提取漏洞相关特征,在检测一些漏洞时表现不稳定,导致漏报(如数组越界访问)。

2 解决方案

2.1 提出方法

融合了汇编代码和源代码的信息来预测结果。使用多模态混合融合策略来进行网络搭建。首先通过早期融合将汇编代码片和源代码片段结合起来。然后,这些混合片断,连同源代码片断和汇编代码片断被送入三个单独的网络中。最后,这三个网络的结果被用来通过后期融合给出最终决定。

2.2 主要贡献

文章的主要贡献如下:

  • 通过融合汇编代码和源代码漏洞的特征来提高漏洞检测性能。
  • 提出一种在源代码和汇编代码之间快速对齐数据片的数据对齐算法。
  • 收集了一个由源代码和汇编代码组成的漏洞数据集,该数据集可用于训练和验证所提出的基于多模态融合的漏洞检测方法。

3 系统设计

3.1 系统概述

基本定义:

定义1(源代码切片)。源代码切片Si是一个语义相关的多行源代码的片段,表示为Si=(si1, si2, si3,…, sin),其中sij(1 ≤ jn)是Si中的第j行。

定义2(汇编代码切片)。汇编代码切片Di是一个语义相关的多行汇编代码片段,表示为Di=(di1, di2, di3,…, din),其中dij(1 ≤ j ≤ n)是Di中的第j行。

该系统分为训练和测试两个阶段。训练阶段分为以下5个步骤:

  1. 源代码处理。根据漏洞候选特征提取源代码切片,添加标签。
  2. 程序编译。通过GCC编译器编译源代码得到对应的汇编代码。
  3. 汇编代码处理。利用代码切片对齐算法提取源代码切片对应的汇编代码切片,并添加标签。
  4. 向量表示。将源代码切片、汇编代码切片和混合代码切片转化为向量。
  5. 模型训练。使用上述生成的数据训练网络模型。

测试阶段前4个步骤与训练阶段一致,第5步输出漏洞检测结果(即”0“或”1“)。

3.2 网络模型

后期融合模型:这三个网络的决定可能是不同的。因此在系统的最后,这些决定要通过一个投票层来获得最终结果。在这一层中采用了多数投票。众所周知,晚期融合模型通常比单一模型得到的结果更好,它可能避免单个模型中的错误决定。

3.3 代码对齐算法

整个算法可以归纳为三个阶段:(1)生成伪代码;(2)收集匹配的汇编代码的候选集;(3)寻找最佳匹配。

  • 使用IDA Pro从汇编代码中生成伪代码pe_code(即算法中的第3行),其中pe_code中的每个语句Pi对应于汇编代码中的几行语句diu, . . . ,diw
  • 搜索与sik相匹配的候选汇编代码语句集(即算法的第4-9行)。对于每个Pi,如果它的语句类型(如循环语句和赋值语句)与sik相同,那么对应的汇编代码片段diu, . . . , diw被认为是sij的候选匹配。
  • 使用匈牙利算法从候选集D′i中获得一个片断(di1, . . . ,dij)。它被认为是Si的潜在匹配对象,并被合并到Di中。使用字符串和整数常量,函数和库调用,以及函数声明信息来计算DiSi之间的相似性。如果这个相似度大于一个阈值,就认为DiSi对应的汇编代码片段。否则,重复这一阶段,直到找到一个满意的匹配(即算法中的第11-16行)。

4 实验

4.1 数据集

实验采用软件保障参考数据集(SARD)。这些代码在Windows X64上用GCC进行编译,得到相应的汇编代码。随机选择80%的源代码和对应的汇编代码作为训练数据集,其余20%用于测试。

4.2 结果分析

与VulDeePecker(在源代码层面检测漏洞)和BVDetector(在汇编代码层面检测漏洞)中提出的方法进行比较。图7中展示了这些系统的训练精度和训练损失曲线,可以看出,所有被比较的系统都能快速收敛。二者平均准确率接近90%,而本系统的准确率可以达到97%

表3列出了不同方案的标记代码片的数量。可以看出,有些漏洞可以被基于源代码的模型检测到,但不能被基于汇编代码的模型检测到。相反,有些漏洞只能被基于汇编代码的模型检测到。

以图8所示的代码片段为例,它是一个与数组越界访问有关的漏洞。基于源代码切片的系统可能会错误地将该漏洞检测为正常的指针运算,因为在计算中很难检测到越界数组访问。相比之下,使用汇编代码片的系统可以很容易地通过内存地址检测到这个漏洞。

表4和表5显示了测试集的比较结果,与其他系统相比,系统在各方面都取得了更好的结果。与VulDeePecke和BVDetector相比,基于特征融合的系统可以将F1得分提高10,同时系统的F1值也远远高于Flawfinder获得的分数。

5 个人总结

5.1 个人总结

文章提出了一个通过深度学习来检测软件中漏洞的系统,它结合了源代码和汇编代码的漏洞特征来提高漏洞检测的能力。该系统从程序的源代码和汇编代码中提取代码切片,并采用基于字符串、整数常量、函数和库调用等的代码对齐算法来对齐这些代码片,实现了一个原型并进行了系统的实验。

5.2 方法局限性

  • 仅适用于C/C++程序,无法应用于其它编程语言。
  • 将源代码和汇编代码漏洞特征融合并用于漏洞检测,缺乏一定的可解释性。
  • 文中提出的代码对齐算法可能存在一定的误差,例如某行源程序可能对应的并不是通过该算法计算得到的那几行汇编代码。

6 原文链接

论文题目:A Vulnerability Detection System Based on Fusion of Assembly Code and Source Code

论文出处:Security and Communication Networks

原文链接:A Vulnerability Detection System Based on Fusion of Assembly Code and Source Code (hindawi.com)

项目地址:https://github.com/onstar99/VulnerabilitySystem

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/551554.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 收入最高的十大编程语言预测

预测2024 收入最高的十大编程语言 在过去2023年,了解哪些编程语言能为开发者提供更高的薪水至关重要,目前全球已有超过200种编程语言可供选择.为了深入了解市场趋势和受欢迎程度,DevJobsScanner在过去一年里分析了全球超过1000万个开发职位空缺.尽管这项研究主要关注美国就业市…

LLM-01 大模型 本地部署运行 ChatGLM2-6B-INT4(6GB) 简单上手 环境配置 单机单卡多卡 2070Super8GBx2 打怪升级!

写在前面 其他显卡环境也可以!但是最少要有8GB的显存,不然很容易爆。 如果有多显卡的话,单机多卡也是很好的方案!!! 背景介绍 目前借到一台算法组的服务器,我们可以查看一下目前显卡的情况 …

【网站项目】学生选课系统小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

前端开发攻略---在页面上渲染大量元素,使用defer减少白屏等待时间,优化页面响应速度

1、优化前 2、优化后 3、优化思路 1、在元素数量不变的情况下,进行一步一步的渲染,先渲染一些重要的元素或者需要用户第一时间看到的元素。 2、使用Hooks封装优化函数 4、优化代码 拥有大量元素的组件(Item):文件位置&…

Clion自动添加函数标准注释模板

一、设置步骤 点击File->Settings&#xff1b;搜索Live Templates设置项&#xff0c;选择C/C子项&#xff0c;直接拷贝以下内容&#xff1a; <template name"func" value"/*** brief * param name * param value * return * retval * bug */" desc…

kkFileView文件预览服务详解

目录 一、介绍 二、地址 三、打包部署步骤 四、三种调用方式 五、在线体验 六、源码分析-设计思路实现 七、扩展新类型 八、遇到的问题 1.混合访问问题 2.邮件解析问题 3. Ng转发配置网站域名问题; 4.Office版本问题 5.指定时区: 6. Office相关(word,ppt,excel)转…

微前端 qiankun 框架接入问题记录

背景&#xff1a;需要搭建一个平台&#xff0c;这个平台的主要功能是集成各个子系统&#xff0c;方面对系统之间的统一管理。在搭建这样一个平台时&#xff0c;前端考虑使用微前端架构方式实现&#xff0c;使用的框架是 qiankun&#xff0c;本文主要记录在 qiankun 框架使用过程…

postman汉化

一、postman历史版本下载&#xff1a;Postman 10.24.16 Download for Windows / Old Versions / FileHorse.comhttps://www.filehorse.com/download-postman/old-versions/ 二、汉化包下载&#xff1a; Releases hlmd/Postman-cn GitHubPostman汉化中文版. Contribute to h…

弹性 MapReduce(EMR)

一.产品简介 1产品概述 E腾讯云 EMR 提供基于云服务器&#xff08;CVM&#xff09;和容器服务&#xff08;TKE&#xff09;两种部署运行方式&#xff1a; 2.Agent 的安装目录 Linux 安装目录是/usr/local/qcloud/stargate和/usr/local/qcloud/monitor CoreOs 安装目录是/va…

【Redis 神秘大陆】006 灾备方案

六、Redis 灾备方案 6.1 存储方案 6.1.1 基础对比 RDB持久化AOF持久化原理周期性fork子进程生成持久化文件每次写入记录命令日志文件类型二进制dump快照文件文本appendonly日志文件触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次文件位置配置文件中指…

ECharts数据大屏展示效果

ECharts数据大屏展示效果 前言1、效果预览1.2、视频效果 2、使用框架3、如何处理屏幕自适应效果4、ECharts模块、dataV大屏插件 编写与布局5、往期回顾总结&#xff1a; 前言 数据大屏需整体效果好看&#xff0c;界面缩放自适应大小&#xff0c;全屏展示铺满整个屏幕并自适应&a…

Linux 指令之文件

1.开发背景 记录 linux 下对文件操作的指令 2.开发需求 记录常用的文件操作指令 3.开发环境 linux 操作系统&#xff0c;如果不支持需要查看是否存在对应的可执行文件 4.实现步骤 4.1 查找字符串 查找指定目录下包含指定的字符串 grep -rn "Timer frequency" .…

怎么在桌面上添加待办清单 好用的桌面待办清单工具

在这个信息爆炸的时代&#xff0c;我们每个人都像是身处信息的洪流中&#xff0c;稍有不慎就可能被淹没。我常常被各种琐事包围&#xff0c;需要完成的任务数不胜数&#xff0c;而大脑的内存似乎总是有限。有时&#xff0c;我甚至会忘记一些重要的事项&#xff0c;这让我感到非…

记录一个解决win11安装天融信VPN蓝屏解决方法

当我们安装完天融信VPN产品后&#xff0c;有时候会导致电脑蓝屏&#xff01;&#xff01;&#xff01;&#xff01; 解决&#xff1a;默认是这个目录&#xff1a;C:\Windows\SysWOW64\drivers 把TopsecPF.sys 名称 改成TopsecPF.sys1就ok了

谈谈微前端

相关问题 为什么要用微前端微前端的优缺点 回答关键点 独立开发 独立运行 独立部署 自治 微前端是一种架构理念&#xff0c;它将较大的前端应用拆分为若干个可以独立交付的前端应用。这样的好处是每个应用大小及复杂度相对可控。在合理拆分应用的前提下&#xff0c;微前端能…

构建有序链表,有序链表的归并,反转链表

本次将对于构建有序链表&#xff0c;有序链表的归并&#xff0c;反转链表&#xff0c;进行一一介绍和代码分享。 首先是一些链表中的基本的函数&#xff1a; Node* creatList() {Node* headNode (Node*)malloc(sizeof(Node));assert(headNode);headNode->next NULL;retu…

AJAX (异步的JavaScript 和 XML)

目录 1、什么是AJAX 2、作用 1&#xff09;与服务器通信 2&#xff09;异步交互&#xff08;更新局部页面&#xff09; 3、AJAX 的基本工作原理 4、应用举例 5、jQuery与AJAX 6、使用jQeury实现AJAX 1&#xff09;$.ajax()&#xff1a;发送异步请求 2&#xff09;$.g…

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】 题目描述&#xff1a;解题思路一&#xff1a;解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给出了一个由 n 个节点组成的网络&#xff0c;用 n n 个邻接矩阵图…

Ubuntu:VSCode中编译运行C++代码

版本&#xff1a;Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode&#xff08;参考之前博客Ubuntu&#xff1a;安装VSCode_ubuntu vscode-CSDN博客&#xff…

面向未来的内容营销:Kompas.ai的趋势预测能力

在这个快速变化的数字时代&#xff0c;内容营销的成功很大程度上取决于能否准确预测并迅速响应未来的趋势。拥有前瞻性的内容策略能够让品牌在竞争中占据优势&#xff0c;与受众建立更深层次的联系。本文将深入探讨预测未来趋势在内容营销战略中的价值&#xff0c;分析Kompas.a…