以太坊智能合约的多标签分类和漏洞检测方法.pdf



《以太坊智能合约的多标签分类和漏洞检测方法.pdf》由会员分享,可在线阅读,更多相关《以太坊智能合约的多标签分类和漏洞检测方法.pdf(11页完成版)》请在专利查询网上搜索。
1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 202010836902.4 (22)申请日 2020.08.19 (71)申请人 北京交通大学 地址 100044 北京市海淀区西直门外上园 村3号 (72)发明人 王伟李浥东宋晶晶 (74)专利代理机构 北京市商泰律师事务所 11255 代理人 黄晓军 (51)Int.Cl. G06F 16/906(2019.01) G06F 16/951(2019.01) G06F 21/57(2013.01) G06N 20/00(2019.01) (54)发明名称 一种以太坊智能合约的。
2、多标签分类和漏洞 检测方法 (57)摘要 本发明提供了一种以太坊智能合约的多标 签分类和漏洞检测方法。 该方法包括: 利用已验 证的智能合约构成样本数据集, 对样本数据集中 的样本进行特征提取, 使用特征向量来表示样 本; 基于各个样本的特征向量训练各种多标签分 类模型, 对各个多标签分类模型的分类效果进行 评价, 选取分类效果最好的多标签分类模型; 将 待分类的以太坊智能合约输入到选取的多标签 分类模型中, 该多标签分类模型输出所述待分类 的以太坊智能合约的漏洞检测结果。 本发明的方 法通过提取静态特征和利用机器学习算法, 实现 了以太坊智能合约漏洞自动且高效地检测, 本方 法更适用于大批量。
3、合约漏洞检测的应用场景。 权利要求书2页 说明书7页 附图1页 CN 112115326 A 2020.12.22 CN 112115326 A 1.一种以太坊智能合约的漏洞检测方法, 其特征在于, 包括: 利用已验证的智能合约构成样本数据集, 对样本数据集中的样本进行特征提取, 使用 特征向量来表示样本; 基于各个样本的特征向量训练各种多标签分类模型, 对各个多标签分类模型的分类效 果进行评价, 选取分类效果最好的多标签分类模型; 将待分类的以太坊智能合约输入到选取的多标签分类模型中, 该多标签分类模型输出 所述待分类的以太坊智能合约的漏洞检测结果。 2.根据权利要求1所述的方法, 其特征在。
4、于, 所述的利用已验证的智能合约构成样本数 据集, 包括: 从Etherscan网站爬取一定数量的已验证的智能合约数据,利用所有的智能合约数据 构成样本数据集。 3.根据权利要求2所述的方法, 其特征在于, 所述的对样本数据集中的样本进行特征提 取, 使用特征向量来表示样本, 包括: 对样本数据集中的样本有无漏洞进行标定, 并对有漏洞的样本进行进一步的细化分 类; 通过对漏洞标定后的样本的合约源码进行编译和字节码解析, 将编写智能合约的 Solidity高级语言转化为操作码流, 利用设定的操作码抽象规则对样本的操作码流进行抽 象化处理, 采用n-gram算法把抽象化的操作码数据流分割成一系列b。
5、igram特征片段, 对所 有的bigram特征片段共提取1619维bigram特征; 通过定义特征计算公式计算bigram特征的特征值, 将所有的特征值组成特征集合, 将 所述特征集合格式化处理成向量格式, 得到样本的特征向量集合, 每一个特征向量代表一 个样本, 每个特征向量中包含样本的分类和特征数据。 4.根据权利要求3所述的方法, 其特征在于, 所述的对样本数据集中的样本有无漏洞进 行标定, 并对有漏洞的样本进行进一步的细化分类, 包括: 通过Oyente、 Securify和Mythril三种工具扫描样本数据集中的样本的合约源码, 判别 合约源码是否具有漏洞, 以及具有哪几种漏洞, 。
6、得到样本的初步数据标定结果, 对标定有漏 洞的样本的合约源码通过编写合约交易测试用例, 并在Remix IDE中部署调试交易, 验证合 约是否具有漏洞, 得到样本的细化分类的数据标定结果。 5.根据权利要求3所述的方法, 其特征在于, 所述的设定的操作码抽象规则包括: 表2所 示的操作码抽象规则: 表2操作码抽象规则 权利要求书 1/2 页 2 CN 112115326 A 2 6.根据权利要求1所述的方法, 其特征在于, 所述的基于各个样本的特征向量训练各种 多标签分类模型, 对各个多标签分类模型的分类效果进行评价, 选取分类效果最好的多标 签分类模型, 包括: 基于各个样本的特征向量数据采。
7、用机器学习分类算法, 训练样本的各个多标签分类模 型, 所述各个多标签分类模型包括XGBoost、 AdaBoost、 随机森林, 支持向量机和k近邻5种样 本的多标签分类模型, 将各个样本的特征向量分别输入到各个样本的多标签分类模型中, 每个样本的多标签分类模型输出样本否具有漏洞及具有哪几种漏洞的分类结果, 样本的漏 洞包括整数下溢漏洞、 整数上溢漏洞、 交易顺序依赖漏洞、 时间戳依赖漏洞、 返回值漏洞和 代码重入漏洞; 通过micro-F1、 macro-F1和F1-score评价指标将各个多标签分类模型输出的样本的分 类结果与样本的漏洞的细化分类结果进行比较, 根据比较结果对各个多标签分。
8、类模型的分 类效果进行评价, 选取训练好的分类效果最好的多标签分类模型。 7.根据权利要求6所述的方法, 其特征在于, 所述样本否具有漏洞及具有哪几种漏洞的 分类结果通过分类标签来表示, 分类标签中的每一项代表一种漏洞, 每一项的值为1代表具 有该种漏洞, 为0代表不具有该种漏洞。 权利要求书 2/2 页 3 CN 112115326 A 3 一种以太坊智能合约的多标签分类和漏洞检测方法 技术领域 0001 本发明涉及区块链的分布式应用漏洞检测技术领域, 尤其涉及一种以太坊智能合 约的多标签分类和漏洞检测方法。 背景技术 0002 随着社会经济的发展和新一轮技术的变革, 区块链作为一种新兴技术。
9、, 通过集成 多种技术, 包括加密算法、 共识机制和分布式数据存储和点对点传输机制等, 保证了交易数 据的不可篡改性和去中心化存储, 从而营造了一种可信的交易环境。 0003 作为一个开放的公有链平台, 以太坊通过支持去中心化的以太坊虚拟机来实现智 能合约功能, 然后通过智能合约功能来处理点对点的交易。 以太坊智能合约被广泛应用于 许多领域, 例如金融服务、 基础设施、 物联网和医疗保健等, 这使得区块链技术的产业应用 价值逐渐明确。 近年来频频爆发的智能合约安全事件不仅导致了巨大的经济损失, 还严重 降低了人们对区块链智能合约的信任程度。 0004 目前智能合约漏洞检测的主要方法有形式化验证。
10、、 符号执行或符号分析、 模糊测 试等。 然而, 形式化验证有不能完全自动化的缺点; 符号执行或符号分析往往需要探索合约 中所有的可执行路径或符号化地分析合约中的依赖关系图, 因此时间开销大, 执行效率低, 不适合大批量合约漏洞检测; 模糊测试方法生成的测试样例具有较强的随机性, 易导致代 码覆盖率低, 往往无法有效检测出智能合约代码中的所有漏洞, 且同样具有检测周期长的 缺点。 面对与日俱增的智能合约数量, 现有方法不堪重负。 0005 机器学习是一门多领域交叉学科, 涉及概率论、 统计学、 逼近论、 凸分析、 算法复杂 度理论等多门学科。 专门研究计算机怎样模拟或实现人类的学习行为, 以获。
11、取新的知识或 技能, 重新组织已有的知识结构使之不断改善自身的性能。 近年来, 机器学习算法在各个领 域都得到了广泛的应用。 0006 因此, 利用机器学习技术开发一种准确且高效到的以太坊智能合约的漏洞检测方 法具有重要现实意义。 发明内容 0007 本发明的实施提供了一种以太坊智能合约的漏洞检测方法, 以实现对太坊智能合 约进行准确且高效地分类和漏洞检测。 0008 为了实现上述目的, 本发明采取了如下技术方案。 0009 一种以太坊智能合约的漏洞检测方法, 包括: 0010 利用已验证的智能合约构成样本数据集, 对样本数据集中的样本进行特征提取, 使用特征向量来表示样本; 0011 基于各。
12、个样本的特征向量训练各种多标签分类模型, 对各个多标签分类模型的分 类效果进行评价, 选取分类效果最好的多标签分类模型; 0012 将待分类的以太坊智能合约输入到选取的多标签分类模型中, 该多标签分类模型 说明书 1/7 页 4 CN 112115326 A 4 输出所述待分类的以太坊智能合约的漏洞检测结果。 0013 优选地, 所述的利用已验证的智能合约构成样本数据集, 包括: 0014 从Etherscan网站爬取一定数量的已验证的智能合约数据,利用所有的智能合约 数据构成样本数据集。 0015 优选地, 所述的对样本数据集中的样本进行特征提取, 使用特征向量来表示样本, 包括: 0016。
13、 对样本数据集中的样本有无漏洞进行标定, 并对有漏洞的样本进行进一步的细化 分类; 0017 通过对漏洞标定后的样本的合约源码进行编译和字节码解析, 将编写智能合约的 Solidity高级语言转化为操作码流, 利用设定的操作码抽象规则对样本的操作码流进行抽 象化处理, 采用n-gram算法把抽象化的操作码数据流分割成一系列bigram特征片段, 对所 有的bigram特征片段共提取1619维bigram特征; 0018 通过定义特征计算公式计算bigram特征的特征值, 将所有的特征值组成特征集 合, 将所述特征集合格式化处理成向量格式, 得到样本的特征向量集合, 每一个特征向量代 表一个样本。
14、, 每个特征向量中包含样本的分类和特征数据。 0019 优选地, 所述的对样本数据集中的样本有无漏洞进行标定, 并对有漏洞的样本进 行进一步的细化分类, 包括: 0020 通过Oyente、 Securify和Mythril三种工具扫描样本数据集中的样本的合约源码, 判别合约源码是否具有漏洞, 以及具有哪几种漏洞, 得到样本的初步数据标定结果, 对标定 有漏洞的样本的合约源码通过编写合约交易测试用例, 并在Remix IDE中部署调试交易, 验 证合约是否具有漏洞, 得到样本的细化分类的数据标定结果。 0021 优选地, 所述的设定的操作码抽象规则包括: 表2所示的操作码抽象规则: 0022 。
15、表2操作码抽象规则 0023 0024 0025 优选地, 所述的基于各个样本的特征向量训练各种多标签分类模型, 对各个多标 签分类模型的分类效果进行评价, 选取分类效果最好的多标签分类模型, 包括: 说明书 2/7 页 5 CN 112115326 A 5 0026 基于各个样本的特征向量数据采用机器学习分类算法, 训练样本的各个多标签分 类模型, 所述各个多标签分类模型包括XGBoost、 AdaBoost、 随机森林, 支持向量机和k近邻5 种样本的多标签分类模型, 将各个样本的特征向量分别输入到各个样本的多标签分类模型 中, 每个样本的多标签分类模型输出样本否具有漏洞及具有哪几种漏洞的。
16、分类结果, 样本 的漏洞包括整数下溢漏洞、 整数上溢漏洞、 交易顺序依赖漏洞、 时间戳依赖漏洞、 返回值漏 洞和代码重入漏洞; 0027 通过micro-F1、 macro-F1和F1-score评价指标将各个多标签分类模型输出的样本 的分类结果与样本的漏洞的细化分类结果进行比较, 根据比较结果对各个多标签分类模型 的分类效果进行评价, 选取训练好的分类效果最好的多标签分类模型。 0028 优选地, 所述样本否具有漏洞及具有哪几种漏洞的分类结果通过分类标签来表 示, 分类标签中的每一项代表一种漏洞, 每一项的值为1代表具有该种漏洞, 为0代表不具有 该种漏洞。 0029 由上述本发明的实施例提。
17、供的技术方案可以看出, 本发明实施例提出的多标签分 类和漏洞检测方法通过提取静态特征和利用机器学习算法, 实现了对6种合约漏洞准确且 高效地自动检测, 本方法更适用于大批量合约漏洞检测的应用场景。 0030 本发明附加的方面和优点将在下面的描述中部分给出, 这些将从下面的描述中变 得明显, 或通过本发明的实践了解到。 附图说明 0031 为了更清楚地说明本发明实施例的技术方案, 下面将对实施例描述中所需要使用 的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本发明的一些实施例, 对于本 领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以根据这些附图获得其他的 附图。 003。
18、2 图1为本发明实施例提供的一种基于机器学习算法的以太坊智能合约漏洞检测方 法的处理流程图。 具体实施方式 0033 下面详细描述本发明的实施方式, 所述实施方式的示例在附图中示出, 其中自始 至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。 下面通过参 考附图描述的实施方式是示例性的, 仅用于解释本发明, 而不能解释为对本发明的限制。 0034 本技术领域技术人员可以理解, 除非特意声明, 这里使用的单数形式 “一” 、“一 个” 、“所述” 和 “该” 也可包括复数形式。 应该进一步理解的是, 本发明的说明书中使用的措 辞 “包括” 是指存在所述特征、 整数、 步骤、 。
19、操作、 元件和/或组件, 但是并不排除存在或添加 一个或多个其他特征、 整数、 步骤、 操作、 元件、 组件和/或它们的组。 应该理解, 当我们称元 件被 “连接” 或 “耦接” 到另一元件时, 它可以直接连接或耦接到其他元件, 或者也可以存在 中间元件。 此外, 这里使用的 “连接” 或 “耦接” 可以包括无线连接或耦接。 这里使用的措辞 “和/或” 包括一个或更多个相关联的列出项的任一单元和全部组合。 0035 本技术领域技术人员可以理解, 除非另外定义, 这里使用的所有术语(包括技术术 语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。 还应该 说明书 3/7 页 。
20、6 CN 112115326 A 6 理解的是, 诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意 义一致的意义, 并且除非像这里一样定义, 不会用理想化或过于正式的含义来解释。 0036 为便于对本发明实施例的理解, 下面将结合附图以几个具体实施例为例做进一步 的解释说明, 且各个实施例并不构成对本发明实施例的限定。 0037 本发明实施例提供了一种基于机器学习算法的以太坊智能合约漏洞自动检测方 法, 该方法可以充分利用机器学习算法的优势, 提高检测的效率。 本发明采用了较全面的特 征集, 因此可以有效地描述合约的静态特性。 0038 本发明提供的一个基于机器学习算法的以。
21、太坊智能合约漏洞检测方法的处理流 程如图1所示, 包括如下的处理步骤: 0039 步骤S110: 从Etherscan网站爬取已验证的智能合约数据,利用智能合约数据构成 样本数据集。 0040 Etherscan是最著名的以太坊浏览器之一, 其域名为etherscan.io。 它实质上是一 个搜索引擎, 可让用户在以太坊分布式智能合约平台上查找、 确认和验证交易。 在 Etherscan上有大量的开源智能合约代码, 包括智能合约的源码、 对应Token名称和 Solidity版本等有用的信息, 为研究者对区块链的研究提供了便利。 但是Etherscan不提供 公开的智能合约下载接口, 需要编写。
22、脚本来进行爬取。 在实际中, 我们爬取了49502个以太 坊智能合约数据。 0041 本发明实施例从Etherscan网站爬取已验证的智能合约数据,利用智能合约数据 构成样本数据集。 0042 步骤S120: 对样本数据集中的样本有无漏洞进行标定, 并对有漏洞的样本进行进 一步的细化分类。 0043 (1)样本标定 0044 首先, 通过Oyente、 Securify和Mythril三种工具扫描样本数据集中的样本的合约 源码, 判别合约源码是否具有漏洞, 以及具有哪几种漏洞, 得到样本的初步数据标定结果。 接着对标定有漏洞的样本的合约源码通过编写合约交易测试用例, 并在Remix IDE中部。
23、署 调试交易, 人工验证合约是否具有漏洞, 以此得到最终的表1所示的样本的数据标定结果。 0045 表1有漏洞样本的细化类别标定 0046 编号漏洞类型样本数量 1整数上溢漏洞(C1)22128 2整数下溢漏洞(C2)9699 3交易顺序依赖漏洞(C3)1436 4未检查返回值漏洞(C4)192 5时间戳依赖漏洞(C5)477 6代码重入漏洞(C6)100 0047 步骤S130: 对样本进行特征提取, 得到操作码静态特征。 0048 通过对样本的合约源码进行编译和字节码解析, 将编写智能合约的Solidity高级 语言转化为操作码流, 再利用表2所示的操作码抽象规则对操作码流进行抽象化处理,。
24、 避免 了由于特征数目过多而引发的维度灾难。 然后采用n-gram算法把抽象化的操作码数据流分 割成一系列bigram特征片段, 对所有的bigram特征片段共提取了1619维bigram特征, 用以 说明书 4/7 页 7 CN 112115326 A 7 刻画样本的行为。 然后通过定义特征计算公式计算bigram特征的特征值, 将所有的特征值 组成特征集合。 0049 表2操作码抽象规则 0050 0051 步骤S140: 对特征集合进行向量化, 使用特征向量来表示应用样本。 0052 对上述特征集合格式化处理成向量格式, 得到样本的特征向量集合。 每一个特征 向量代表一个样本, 每个特征。
25、向量中包含样本的分类和特征数据。 0053 步骤S150: 基于样本的特征向量集合, 训练各种多标签分类模型, 对各个多标签分 类模型的分类效果进行评价, 选取训练好的分类效果最好的多标签分类模型。 0054 基于样本的特征向量集合中的特征向量数据采用机器学习分类算法, 训练样本的 多标签分类模型, 利用多标签分类模型对样本是否具有漏洞及具有哪几种漏洞进行判别。 本发明中采用了XGBoost、 AdaBoost、 随机森林(Random Forest, RF), 支持向量机(SVM)和k 近邻(KNN)5种样本的多标签分类模型, 将上述样本的特征向量集合分别输入到各个样本的 多标签分类模型中,。
26、 每个样本的多标签分类模型输出样本否具有漏洞及具有哪几种漏洞的 分类结果, 样本的漏洞包括整数下溢漏洞、 整数上溢漏洞、 交易顺序依赖漏洞、 时间戳依赖 漏洞、 返回值漏洞和代码重入漏洞等。 上述分类结果可以通过分类标签来表示, 分类标签中 的每一项代表一种漏洞, 每一项的值为1代表具有该种漏洞, 为0代表不具有该种漏洞。 例如 一个智能合约被分类的标签为0, 1, 1, 0, 1, 0, 则说明该合约具有整数下溢漏洞、 交易顺序 依赖漏洞和时间戳依赖漏洞, 不具有整数上溢漏洞、 未检查返回值漏洞和代码重入漏洞。 0055 然后, 通过micro-F1、 macro-F1和F1-score评价。
27、指标将各个多标签分类模型输出 的样本的分类结果与样本的漏洞的细化分类结果进行比较, 根据比较结果对各个多标签分 类模型的分类效果进行评价, 选取训练好的分类效果最好的多标签分类模型。 0056 经过实验验证, 如表3所示, 基于XGBoost多标签分类模型检测智能合约漏洞效果 最好。 如表4所示, XGBoost多标签分类模型检测一份合约大约需要4秒, Oyente大约需要28 秒, Securify大约需要18秒。 由此可得, XGBoost多标签分类模型对合约漏洞检测的准确性 和高效性, 更适用于大批量检测智能合约漏洞的应用场景。 0057 表3 5种分类模型分类性能比较 说明书 5/7 。
28、页 8 CN 112115326 A 8 0058 0059 表4 XGBoost多标签分类模型、 Oyente和Securify漏洞检测时间对比 0060 0061 步骤S160: 将待分类的以太坊智能合约输入到训练好的分类效果最好的多标签分 类模型中, 该多标签分类模型输出上述待分类的以太坊智能合约的漏洞检测结果, 该漏洞 检测结果中包括以太坊智能合约具有或者不具有那些漏洞, 该漏洞包括整数下溢漏洞、 整 数上溢漏洞、 交易顺序依赖漏洞、 时间戳依赖漏洞、 返回值漏洞和代码重入漏洞等。 0062 综上所述, 本发明实施例提出的多标签分类和漏洞检测方法通过提取静态特征和 利用机器学习算法, 。
29、实现了对6种合约漏洞准确且高效地自动检测, 本方法更适用于大批量 合约漏洞检测的应用场景。 0063 本发明首次提出了以太坊智能合约的静态特征并首次应用这些静态特征在合约 漏洞检测方面, 通过机器学习算法对以太坊智能合约漏洞进行自动检测, 实现以太坊智能 合约漏洞自动且高效地检测, 本方法更适用于大批量合约漏洞检测的应用场景。 0064 本领域普通技术人员可以理解: 附图只是一个实施例的示意图, 附图中的模块或 流程并不一定是实施本发明所必须的。 0065 通过以上的实施方式的描述可知, 本领域的技术人员可以清楚地了解到本发明可 借助软件加必需的通用硬件平台的方式来实现。 基于这样的理解, 本。
30、发明的技术方案本质 上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来, 该计算机软件产品 可以存储在存储介质中, 如ROM/RAM、 磁碟、 光盘等, 包括若干指令用以使得一台计算机设备 (可以是个人计算机, 服务器, 或者网络设备等)执行本发明各个实施例或者实施例的某些 部分所述的方法。 0066 本说明书中的各个实施例均采用递进的方式描述, 各个实施例之间相同相似的部 分互相参见即可, 每个实施例重点说明的都是与其他实施例的不同之处。 尤其, 对于装置或 系统实施例而言, 由于其基本相似于方法实施例, 所以描述得比较简单, 相关之处参见方法 实施例的部分说明即可。 以上所描述的。
31、装置及系统实施例仅仅是示意性的, 其中所述作为 分离部件说明的单元可以是或者也可以不是物理上分开的, 作为单元显示的部件可以是或 者也可以不是物理单元, 即可以位于一个地方, 或者也可以分布到多个网络单元上。 可以根 据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。 本领域普通技术 人员在不付出创造性劳动的情况下, 即可以理解并实施。 说明书 6/7 页 9 CN 112115326 A 9 0067 以上所述, 仅为本发明较佳的具体实施方式, 但本发明的保护范围并不局限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内, 可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本发明的保护范围应该以权利要求的保护范围 为准。 说明书 7/7 页 10 CN 112115326 A 10 图1 说明书附图 1/1 页 11 CN 112115326 A 11 。
- 内容关键字: 以太 智能 合约 标签 分类 漏洞 检测 方法
相关文档
更多



















链接地址:https://www.zhuanlichaxun.net/pdf/10148553.html