【论文阅读】基于多特征融合的智能合约缺陷检测方法

news2024/9/22 15:29:52

题目
摘要:
1、预处理:颜色标记、词汇提取、字符转换、合约之间的继承关系的提取
2、 使用融合模型进行特征提取(BERT、CNN、BiLSTM)
3、使用node2vec随机游走算法,将合约之间的继承关系作为输入得到合约关系的特征向量。
4、使用特征向量进行缺陷分类

1、研究内容

1.1 多特征融合

将智能合约的语义、视觉和结构多类特征进行融合
多特征融合是一种将不同来源或不同表示的多个特征信息进行组合和整合的方法,比较常见的方法有特征加权、注意力机制以及特征拼接。

  1. 特征加权是按照不同的权重进行加权求和
  2. 注意力机制是动态地基于不同的特征或上下文不同的权重或者关注度
  3. 特征拼接是将多个特征在通道维度上连接在一起,形成一个更高维度的特征表示
  4. 将自然语言处理和图神经网络的方法结合生成更高质量的节点特征

2、研究方法

基于 BERT、CNN 及 LSTM 构建模型,提出利用语义、视觉和结构内部特征以及继承关系外部特征进行Solidity智能合约缺陷检测的方法。
本文主要是在特征提取阶段提取了包括合约继承结构在内的四种信息:

  1. 颜色标准
  2. 词汇提取
  3. 字符转换
  4. 特征向量
    结构

2.1 视觉信息提取

通过表示代码图像可以直观获取视觉信息,比如一些关键字的使用或者各类函数的调用。研究学者将十六进制从字节码映射到RGB颜色码[1]。文章将代码的关键字以及其它部分通过RGB颜色标记转为RGB矩阵并保存,作为CNN的输入。
根据VSCODE软件的显示颜色,将solidity语言分为括号、关键字、计算符、标识符、货币单位、注释以及其它代码,进行颜色标记,截取结果得到代码彩色图像。并进行压缩(128,128)通道3的RGB矩阵。
[1]Hsien-De Huang T T, Kao H Y. R2-d2: Color-inspired co-nvolutional neural network (cnn)-based android malware d-etections[C]//2018 IEEE international conference on big da-ta (big data). IEEE, 2018: 2633-2642.

我们使用CNN(可以用来处理具有类似网格结构的数据的神经网络)来提取特征,用于从输入数据中提取局部特征。
卷积操作:(另外看)
特征图X(h,w,c),h为高度,W表示宽度,C表示通道数。
卷积核 W(FH,FW,c,k),其中 FH 表示核的高度,FW 表示核的宽度,c 表示输入通道数,k 表示输出通道数。
核内的空间位置由 m 和 n 表示,分别对应于核的高度和宽度索引。

输入层为(128,128,3)的RGB矩阵,卷积层拥有64个大小为3的过滤器,最大池化为3,获得64单元的特征信息。

2.2 语义信息提取

使用文本特征对其修改可以对图像视觉有一定的改善作用。使用自然语言处理来获得语义信息。使用BERT将源代码映射到词向量,并对每个代码词进行划分。
[21] Wang J, Dong Y. Improve Visual Question Answering Ba-sed On Text Feature Extraction[C]//Journal of Physics: Co-nference Series. IOP Publishing, 2021, 1856(1): 012025.
[22] Jiang Zhou, Jiang Murong, Zhao Chunna, et al. Improve Image Question and Answer Accuracy by Using Text Feature Enhanceme-nt and Attention Mechanism[J]. 2019.
(江邹, 蒋慕蓉, 赵春娜, 等. 利用文本特征增强与注意力机制提高图像问答准确率[J]. 计算机科学与应用, 2019, 9: 2403.)

文中选择利用 CNN 将语义信息进行识别和提取,得到关键特征的短序列,再放入BiLSTM 模型中获得所需要的 64 单位语义特征输出。此处选用的 CNN 是由Relu 作为激活函数的两个卷积层和池化层组成。

2.3 字符语义信息提取

源代码的字符语义信息是其基本表达含义的方式,通过获取 Solidity 源代码的另一种语义特征能够在漏洞检测方面有帮助。将每个合约转换为字符型矩阵,具体来说就是将合约的每个字符转换为便于识别的 ASCII 码,在空余的部分利用“-1”值进行填充,以保证每个字符矩阵的大小都统一。
最终使用(100,300,1)作为矩阵的大小。
为了从较大的矩阵中提取到更有效的特征,CNN 的卷积层与池化层选用了三对,其中激活函数仍旧选用Relu,在最后将卷积层的输出进行展平以得到所需要的 64 单位的一维数组

2.4 结构信息提取

智能合约代码树CCTree的提出。
[26] Huang Y, Zhang T, Fang S, et al. Deep Smart Contract I-ntent Detection[J]. arXiv preprint arXiv:2211.10724, 2022.
CCTree 通过拆分和重组智能合约源代码生成的树状图数据结构。

  1. 第一层为根层,代表整个合约内容;
  2. 第二层为合约层,代表智能合约中的合约类,包括合约、接口、库和抽象合约类的类型;
  3. 第三层为叶子节点,存储合约类中的函数、事件、修饰符和构造函数等关键字的代码片段。
    在 CCTree的第二层合约层中,合约之间会有一个或多个继承关系,合约的继承可能会导致缺陷的出现,因此需要提取合约之间的继承信息。
    示例
    提取继承关系具体做法如下:
  4. 提取关键词Is. is前表示继承合约,后表示被继承合约。
  5. 同一个地址中的每个合约都当作图的节点,而合约之间的继承关系作为图的边,由继承合约指向被继承合约,将它们记录在文件中。

使用到逻辑回归模型

结构信息由节点以及其边的图结构组成,在获得智能合约的多个图结构信息以后,将它们放入 node2vec 模型中进行处理。具有直接链接关系的两个节点,即距离近的节点具有相似的嵌入向量,这样可以让合约之间的继承关系更加紧密,并获得更高质量的向量值。每个合约节点在经过 embedding 后都会得到一个 64 单位的向量输出

3、检测模型

分类器结构图
四类64单元进行拼接得到256单元特征,进入全连接层降为64维,再进入全连接层以及dropout层组成的分类器(50%),激活函数为softmax

4、实验

操作系统为 64 位Windows 10,CPU 是因特尔酷睿 i7-10700k,GPU为 RTX 5000,内存大小 32GB。开发和运行环境为 Python 3.8,开发工具使用的是Pycharm 2018.2。

4.1 数据集

从XBlock获取源码结合BSCSCS(区块链智能合约安全检测平台)构建的。
数据集地址
从中选取3680份代码,1680有缺陷,2000无缺陷。
为防止类别不平衡的问题出现,将数值溢出漏洞类别剔除,占有比例低的类别进行合并作为新的漏洞类别,根据数据集新分类的 4 类缺陷名称见下表。
缺陷类别
V:视觉特征
C:字符语义特征
S:语义特性
T:结构特征

4.2 结果分析

4.2.1 Q1

结果
与现有分类器进行对比,FC分类器(基于完全连接层分类器)效果较好,选择它作为后续缺陷检测实验的分类器。

4.2.2 Q2

分别融合多类特征:
VS视觉语义融合
VT视觉结构融合
VC视觉字符语义融合
ST语义结构融合
CT字符语义结构融合
VCT视觉字符语义结构融合
VST视觉语义结构融合
结果如下:
结果图

  1. VS与VST大致持平,较优秀
  2. CT略低于VS和VST
  3. ST和VC水平较差
  4. 其它模型性能不好

从模型性能下降的幅度推断,字符语义特征会略微降低模型的性能,语义特征对缺陷检测的贡献更大,推测原因是语义特征更能最大限度地保留智能合约的布局及缺陷信息,进而影响模型缺陷检测的性能。从整体上来看,视觉语义特征融合而成的 VS 拥有更优秀的检测能力,值得进一步研究和应用。

4.2.3 Q3

与现有工具比较:L-GCN模型和RFR模型
比较1
比较2
VS 的准确率和 F1 分数都优于其余三种模型,整体上看本文的模型平均提升了 3%~12%。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过 Socket 手动实现 HTTP 协议

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

如何让uni-app开发的H5页面顶部原生标题和小程序的顶部标题不一致?

如何让标题1和标题2不一样&#xff1f; 修改根目录下的App.vue&#xff08;核心代码如下&#xff09; <script>export default {onLaunch() {// 监听各种跳转----------------------------------------[navigateTo, redirectTo, reLaunch, switchTab, navigateBack, ].…

[论文笔记] ChatDev:Communicative Agents for Software Development

Communicative Agents for Software Development&#xff08;大模型驱动的全流程自动化软件开发框架&#xff09; 会议arxiv 2023作者Chen Qian Xin Cong Wei Liu Cheng Yang团队Tsinghua University论文地址https://arxiv.org/pdf/2307.07924.pdf代码地址https://github.com/O…

HTML_CSS学习:表格、表单、框架标签

一、表格_跨行与跨列 1.相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格_跨行与跨列</title> </head> <body><table border"1" cellspacing"0&qu…

(一)基于IDEA的JAVA基础4

注释文本&#xff0c;注释模版 单行注释://开头放在代码前面&#xff0c;对少部分。 多行注释:快捷方式ctrlshift/,对段落代码注 释。 文档注释:/**……**/&#xff0c;用于声明作者或创作时 间。 文档注释如何设置&#xff0c;首先找到File中…

【前端Vue】Vue3+Pinia小兔鲜电商项目第2篇:什么是pinia,1. 创建空Vue项目【附代码文档】

全套笔记资料代码移步&#xff1a; 前往gitee仓库查看 感兴趣的小伙伴可以自取哦&#xff0c;欢迎大家点赞转发~ 全套教程部分目录&#xff1a; 部分文件图片&#xff1a; 什么是pinia Pinia 是 Vue 的专属状态管理库&#xff0c;可以实现跨组件或页面共享状态&#xff0c;是…

html5cssjs代码 033 SVG元素示例

html5&css&js代码 033 SVG元素示例 一、代码二、解释 一个SVG图形&#xff0c;该图形由一个椭圆、一个圆形和一个矩形组成。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记 html5&css&js SVG元素示例…

公司系统中了.rmallox勒索病毒如何恢复数据?

早晨上班时刻&#xff1a; 当阳光逐渐洒满大地&#xff0c;城市的喧嚣开始涌动&#xff0c;某公司的员工们纷纷踏入办公大楼&#xff0c;准备开始新的一天的工作。他们像往常一样打开电脑&#xff0c;准备接收邮件、查看日程、浏览项目进展。 病毒悄然发作&#xff1a; 就在员…

Databend x CubeFS:面向未来的企业级云原生数据存储与分析

用场景的丰富&#xff0c;企业面临着前所未有的数据存储挑战。大规模数据存储变得日常化&#xff0c;伴随着超大容量和快速变化的I/O需求&#xff0c;传统的存储解决方案已经难以满足企业对弹性、运维效率及总体拥有成本&#xff08;TCO&#xff09;的更高要求。这些挑战促使基…

三角形重心坐标插值法 Interpolation Across Triangles: Barycentric Coordinates

本专栏内容整理了GAMES101的计算机图形学课程的主要内容&#xff0c;作为我学习计算机图形学的一份复习备份或叫做笔记。内容中如有错误&#xff0c;或有其他建议&#xff0c;欢迎大家指出。 附上GAMES101计算机图形学课程&#xff1a;GAMES101: 现代计算机图形学入门正在上传…

Django日志(二)

一、Handler Handler决定如何处理logger中的每条消息。它表示一个特定的日志行为,例如 将消息写入屏幕、文件或网络Socket handler对应的是个字典,每一个键都是一个handler的名字,每个值又一个字典,描述了如何配置对应的handler实例 2.1、内置Handler class(必需):处理…

【每日八股】Java基础经典面试题4

前言&#xff1a;哈喽大家好&#xff0c;我是黑洞晓威&#xff0c;25届毕业生&#xff0c;正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结&#x1f970;。 本篇文章记录的Java基础面试题&#xff0c;如果你也在复习的话不妨…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二&#xff1a;多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇&#xff1a;Scikit-Learn逻辑回归(一) 上篇中&#xff0c;我们详细介绍了逻辑回归的概念、原理…

第六十一回 放冷箭燕青救主 劫法场石秀跳楼-编译安装飞桨paddlepaddle@openKylin+RISCV

卢俊义在水里被张顺抓住&#xff0c;用轿子抬到了梁山。宋江等人下马跪在地上迎接&#xff0c;请他坐第一把交椅。卢俊义宁死不从&#xff0c;大家只好说留他在山寨几天&#xff0c;先让李固带着马车货物回去。吴用对李固说&#xff0c;你的主人已经答应坐第二把交椅了&#xf…

matlab实现Logistic回归

一、目的和要求 1.编程实现Logistic Regression并应用于数据集&#xff1b; 2.绘制二元分类函数、sigmoid函数和代价函数&#xff1b; 3.正则化logistic回归代价。 二、算法介绍 步骤&#xff1a; 选择一个合适的分类函数来实现分类&#xff08;Sigmoid函数&#xff09; …

OpenHarmony开发之图形UI组件解析

简介 图形UI组件实现了一套系统级的图形引擎。 该组件为应用开发提供UIKit接口&#xff0c;包括了动画、布局、图形转换、事件处理&#xff0c;以及丰富的UI组件。 组件内部直接调用HAL接口&#xff0c;或者使用WMS(Window Manager Service)提供的客户端与硬件交互&#xff…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核&#xff0c;其他几乎所有的功能都要用到扩展&#xff08;邮件扩展Flask-Mail&#xff0c;用户认证Flask-Login&#xff0c;数据库Flask-SQLAlchemy&#xff09;&#xff0c;都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…

哪些企业适合构建企业新媒体矩阵?

⭐关注矩阵通服务号&#xff0c;探索企业新媒体矩阵搭建与营销策略 新媒体矩阵就是在某个平台或多个平台开设、联动多个账号&#xff0c;组建有关系的不同账号集群。 在数字化转型的浪潮下&#xff0c;矩阵已然成为企业实现品牌塑造、市场开拓与用户互动的重要阵地。 然而&…

算法沉淀——贪心算法六(leetcode真题剖析)

算法沉淀——贪心算法六 01.坏了的计算器02.合并区间03.无重叠区间04.用最少数量的箭引爆气球 01.坏了的计算器 题目链接&#xff1a;https://leetcode.cn/problems/broken-calculator/ 在显示着数字 startValue 的坏计算器上&#xff0c;我们可以执行以下两种操作&#xff1…

FPGA 实现CRC-8/ROHC(已验证)

1 FPGA crc代码在线生成工具 工具1 // vim: ts=4 sw=4 expandtab// THIS IS GENERATED VERILOG CODE. // https://bues.ch/h/crcgen // // This code is Public Domain. // Permission to use, copy, modify, and/or distribute this software for any // purpose with or wi…