CN115022026A - 一种区块链智能合约威胁检测装置及方法 - Google Patents
一种区块链智能合约威胁检测装置及方法 Download PDFInfo
- Publication number
- CN115022026A CN115022026A CN202210612209.8A CN202210612209A CN115022026A CN 115022026 A CN115022026 A CN 115022026A CN 202210612209 A CN202210612209 A CN 202210612209A CN 115022026 A CN115022026 A CN 115022026A
- Authority
- CN
- China
- Prior art keywords
- codes
- intelligent contract
- byte
- normalization
- operation codes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明属于区块链威胁检测领域,提出了一种能够对区块链智能合约进行威胁检测的装置及方法。主旨在于对存在风险的合约具体功能进行准确定位,以保证其安全性。方案主要能够提取智能合约源代码中的关键语义信息,生成调用关系拓扑图,并获取合约中每个功能的位置信息;从solc中获取智能合约的各种操作码及其位置信息,完成其与从remix中获取的字节码所对应的操作码的映射,然后创建合约的控制流图,完成符号执行环节;对合约进行检测,使用符号执行环节所得数据与多种威胁情况进行匹配,后对相应操作码进行标记;将标记的操作码与编译所得操作码进行映射,从而标记具有风险的智能合约,并定位包含风险的函数或事件等信息,最后将所得结果输出。
Description
技术领域
本发明属于区块链威胁检测领域。智能合约在区块链上的应用越来越多,本方案能够对智能合约进行威胁检测,并能准确定位至合约中存在风险的具体功能,从而让开发人员及时完成修改,以保证其安全性。
背景技术
近年来,区块链技术受到越来越多人的关注,它也得到了愈发广泛的应用。区块链是一种分布式分类账本,具有去中心化、不可变性、匿名性、持久性以及可审计性等特点,应用场景包括物联网、政府服务、金融、供应链管理和医疗保健等。随着区块链研究的快速推进,目前已经是以智能合约为特征的区块链2.0时代。以太坊是支持智能合约的最大区块链平台。智能合约最初形态是一种能够对处理交易的规则或脚本进行编码的功能,目前已渐趋成熟,演变为在分布式分类账本上运行的一个程序。相关开发人员通常使用Solidity等高级语言完成它的编写,并借助EVM编译器将其转化为字节码的形式,后借助客户端将其上传至以太坊。当它被部署于以太坊上时,仍是通过字节码对其完成调用等操作。以太坊中智能合约的特征主要有:面对所有用户开放;它是不可更改的;大部分都能够操纵有现实意义价值的财产。这些特征的确有着对加密货币等交易的许多便利,但同时将带来安全隐患。智能合约的有效性是基于它的正确执行,但这并不能保证其安全性。当某个智能合约存在安全隐患如漏洞时,无法对已部署的合约进行补完。相关问题如Dao等漏洞被恶意攻击者利用后在以太坊上已造成数亿美元的损失。因此,在将智能合约上链之前,对其进行必要的威胁检测等是有必要的。
过去几年中,基于静态分析、动态分析和机器学习等都开发了各种工具与框架等对智能合约中的漏洞进行威胁检测。
Luu等主要对事务排序依赖性,重新转换,时间戳依赖性和未处理的异常进行研究,设计了OYENTE来检测智能合约上潜在的安全漏洞,它是一种专门用于分析以太坊智能合约的符号执行工具。它遵循以太坊智能合约的执行模型,直接与字节码一起工作,无需访问高级表示。OYENTE由四个主要部分组成:控制流图(CFG)生成器,资源管理器,核心检测和验证器。
Torres等主要针对与整数错误相关的漏洞,设计了Osiris,一个结合了符号执行和污点分析的框架。它主要有三个模块:符号分析、污点分析和整数错误检测。符号分析可以构造CFG并执行合约的不同路径。污点分析用于区分良性溢出和恶意溢出。它能准确地找到以太坊智能合约中的整数错误。
Tsankov等设计并实现了一个名为Securify的工具。它是一个以太坊智能合约静态安全分析器,以太坊EVM字节码和漏洞规范作为输入。它将检查与输入漏洞规范相关的智能合约行为,并给出检查结果。它在字节码级别工作:首先,它解析并对EVM字节码完成反编译,然后使用静态分析将生成的代码转换为语义事实。最后,它将转换后的事实与预定义模式列表进行匹配,以检测常见的安全性漏洞等。
Chen等开发了一个名为SODA的智能合约在线检测框架,可用于支持以太坊虚拟机(EVM)的任何区块链上的智能合约,他们还开发了八个基于SODA的检测应用程序来检测智能合约中的主要漏洞。SODA通过分层设计分离了信息收集环节以及攻击检测环节,并利用按需信息检索来减少信息收集的开销,采用动态链接来消除进程间通信的开销。
Narayana等借助深度学习方法,使用二元、多类和多标签分类技术来识别智能合约漏洞。他们直接从SC源码中提取相关特征,并利用从Solidity解析器生成的AST来构建训练数据集,主要由六个步骤组成:数据收集、AST生成、标记序列、数据集生成、深度学习模型训练以及输出结果。
发明内容
本发明公开了一种对区块链智能合约进行威胁检测的框架。在区块链中,智能合约通常是一种程序,充当用户间值得信赖的中介,广泛应用于各种行业中。智能合约的不可更改性带来了许多便利,但在某个智能合约存在安全隐患时,无法对已部署的合约进行修补,将会对用户的财产造成威胁。因此亟需针对智能合约的威胁检测方法,能够发现合约中存在的安全性风险,避免潜在的漏洞,从而保护链上的资产。本发明的威胁检测框架,能够发现多种潜在风险,并对存在风险的功能进行定位,有效且高效。
本发明为解决上述技术问题,将采用以下技术方案:
本发明提供了一种对区块链智能合约进行威胁检测的装置,包括以下模块:
源代码分析模块:对Solidity智能合约源代码进行分析,以提取其中的关键语义信息,通过Solidity解析器从智能合约源代码中提取包括变量、修饰符、函数以及事件信息,通过关键语义信息以及源代码生成智能合约调用关系拓扑图,并获取合约中每个函数实现功能的位置信息;
操作码处理映射模块:从Solidity编译器获取智能合约的字节码中的各种操作码,其中会包含操作码的位置信息,在将其从Solidity编译器获取的操作码和操作码的位置信息与remix编译器从智能合约的字节码中获取的操作码进行比对后,完成它们间的映射,从而为字节码中转换的操作码添加位置信息,并修剪其中的噪声码;
噪声码其实就是无效的操作码,因为solc是直接从智能合约源码对应编译过来的,里面包含一些与函数或者事件无关的信息,它们也被统一地编译为操作码的形式,而从remix编译所得并无对应的操作码。
操作码处理映射模块:从Solidity编译器solc中获取智能合约的各种第一操作码与第一操作码的位置信息,再与solidity编译器remix从字节码中获取的第二操作码进行比对,完成它们间的映射,从而为字节码转换的第二操作码添加位置信息,得到没有噪音的具有位置信息的第二操作码。
字节码规范化及符号执行模块:借助数据规范化和指令规范化,完成对操作码处理映射模块得到的具有位置信息的第二操作码对应的字节码的规范化来增强字节码匹配,然后通过对合约的控制流图的创建完成符号执行环节,符号执行结束后,将生成一组用于具体分析的数据;
具体分析模块:完成对合约的检测,使用字节码规范化及符号执行模块生成的相应数据,对其进行具体分析,与多种威胁情况进行匹配,后完成对相应操作码的标记,威胁匹配的对象包括扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险;
信息汇报模块:在具体分析模块完成智能合约威胁匹配后,将具体分析模块得到的标记的具有位置信息的第二操作码的信息传递至本模块,通过具有位置信息的第二操作码标记智能合约,定位包含风险的函数或事件信息后将所得结果输出。
上述技术方案中,源代码分析模块中将生成智能合约调用关系拓扑图,具体包括:
步骤2a、借助Solidity-praser工具完成智能合约的解析工作,对源代码中包含的关键信息进行解析分类,得到分类结果,分类结果包括变量、修饰符、函数以及事件类别,并将分类结果添加入解析器构建的数据库中;
步骤2b、在构建数据库的基础上,对智能合约源码进行分析,将数据库中的变量、函数、修饰符、事件类别设置为图中节点,再根据源码结合调用规则及搜索范围,以有向边反映各节点在源码中体现出的调用关系,生成调用关系拓扑图;
变量及事件类别仅作为有向边的入点,作为被调用者;
函数、修饰符作为出点或者入点,作为调用者或被调用者。
智能合约调用关系的拓扑图,能够面向跨文件智能合约等结构较复杂的合约类型,使得定位威胁后更好地进行修复。
上述技术方案中,字节码规范化及符号执行模块中,将会实现字节码的规范化,以增强字节码匹配,包括以下步骤:
步骤3a、通过将智能合约中的常量或者变量数据与对应字节码中的操作码附加以形成一个节点,对该常量或者变量数据进行标记后对标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对结果进行标记,将指定的数据标签与操作数标签对应起来,对不同版本Solidity编译器生成的字节码实现数据规范化;
步骤3b、按字母顺序对步骤3a中的数据规范化标签进行重新排序有利于指令规范化,从而减少对相同常量或者变量数据进行操作时它们间标签的差异。
上述技术方案中,字节码规范化及符号执行模块中,将会通过构建控制流图,并在其基础上完成符号执行,最终生成可分析的数据,具体包括:
步骤4a、在完成字节码的规范化后,对字节码进行预处理,得到字节码不直接携带操作数信息和指令的基础执行块,将然基础执行块作为基础节点,根据基础节点生成初步控制流图;
步骤4b:在步骤4a的基础上,结合预处理过程中展现的基础节点间跳转关系,生成代表跳跃关系的边,形成“骨架型”控制流图;
步骤4c:从控制流图的入口节点开始,进行符号执行环节,读取各个节点的状态信息,通过状态信息的获取执行单个指令,然后借助相应的执行结果在控制流图中不断探索,最终形成路径,抽象地实现合约执行,该过程中动态地向控制流图中添加更多代表执行等关系的边。执行结果就是指令执行后能够展示出通过本次执行在图上将要去往哪个节点,从而在控制流图添加相应的边。
本发明还提供了一种对区块链智能合约进行威胁检测的方法,包括以下步骤:
源代码分析步骤:对Solidity智能合约源代码进行分析,以提取其中的关键语义信息,通过Solidity解析器从智能合约源代码中提取包括变量、修饰符、函数以及事件信息,通过关键语义信息以及源代码生成智能合约调用关系拓扑图,并获取合约中每个函数实现功能的位置信息;
操作码处理映射步骤:从Solidity编译器获取智能合约的字节码中的各种操作码,其中会包含操作码的位置信息,在将其从Solidity编译器获取的操作码和操作码的位置信息与remix编译器从智能合约的字节码中获取的操作码进行比对后,完成它们间的映射,从而为字节码中转换的操作码添加位置信息,并修剪其中的噪声码;
操作码处理映射步骤:从Solidity编译器solc中获取智能合约的各种第一操作码与第一操作码的位置信息,再与solidity编译器remix从字节码中获取的第二操作码进行比对,完成它们间的映射,从而为字节码转换的第二操作码添加位置信息,得到没有噪音的具有位置信息的第二操作码。
字节码规范化及符号执行步骤:借助数据规范化和指令规范化,完成对操作码处理映射步骤得到的具有位置信息的第二操作码对应的字节码的规范化来增强字节码匹配,然后通过对合约的控制流图的创建完成符号执行环节,符号执行结束后,将生成一组用于具体分析的数据;
具体分析步骤:完成对合约的检测,使用字节码规范化及符号执行步骤生成的相应数据,对其进行具体分析,与多种威胁情况进行匹配,后完成对相应操作码的标记,威胁匹配的对象包括扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险;
信息汇报步骤:在具体分析步骤完成智能合约威胁匹配后,将具体分析步骤得到的标记的具有位置信息的第二操作码的信息传递至本步骤,通过具有位置信息的第二操作码标记智能合约,定位包含风险的函数或事件信息后将所得结果输出。
上述技术方案中,源代码分析步骤中将生成智能合约调用关系拓扑图,具体包括:
步骤2a、借助Solidity-praser工具完成智能合约的解析工作,对源代码中包含的关键信息进行解析分类,得到分类结果,分类结果包括变量、修饰符、函数以及事件类别,并将分类结果添加入解析器构建的数据库中;
步骤2b、在构建数据库的基础上,对智能合约源码进行分析,将数据库中的变量、函数、修饰符、事件类别设置为图中节点,再根据源码结合调用规则及搜索范围,以有向边反映各节点在源码中体现出的调用关系,生成调用关系拓扑图;
变量及事件类别仅作为有向边的入点,作为被调用者;
函数、修饰符作为出点或者入点,作为调用者或被调用者。
上述技术方案中,字节码规范化及符号执行步骤中,将会实现字节码的规范化,以增强字节码匹配,包括以下步骤:
步骤3a、通过将智能合约中的常量或者变量数据与对应字节码中的操作码附加以形成一个节点,对该常量或者变量数据进行标记后对标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对结果进行标记,将指定的数据标签与操作数标签对应起来,对不同版本Solidity编译器remix生成的字节码实现数据规范化;
步骤3b、按字母顺序对步骤3a中的数据规范化标签进行重新排序有利于指令规范化,从而减少对相同常量或者变量数据进行操作时它们间标签的差异。
上述技术方案中,字节码规范化及符号执行步骤中,将会通过构建控制流图,并在其基础上完成符号执行,最终生成可分析的数据,具体包括:
步骤4a、在完成字节码的规范化后,对字节码进行预处理,得到字节码不直接携带操作数信息和指令的基础执行块,将然基础执行块作为基础节点,根据基础节点生成初步控制流图;
步骤4b:在步骤4a的基础上,结合预处理过程中展现的基础节点间跳转关系,生成代表跳跃关系的边,形成“骨架型”控制流图;
步骤4c:从控制流图的入口节点开始,进行符号执行环节,读取各个节点的状态信息,通过状态信息的获取执行单个指令,然后借助相应的执行结果在控制流图中不断探索,最终形成路径,抽象地实现合约执行,该过程中动态地向控制流图中添加更多代表执行等关系的边。
本发明因为采用上述技术方案,同现有技术相比,有以下有益效果:
1、使用本方案,能够对Solidity语言编写的智能合约进行威胁检测,具备较好的可扩展性、有效性、准确性,为智能合约提供了安全性保证。
2、通过对源代码进行分析,生成智能合约内部调用关系的拓扑图,能够对合约有更清晰直观的认识,有助于对潜在的安全性威胁进行规避。
3、对字节码进一步的规范化,能够统一不同版本Solidity编译器remix生成的字节码,使得本框架的适用性更广。
附图说明
图1合约关键信息存储方式;
图2智能合约威胁检测模型。
具体实施方式
接下来对框架中某些模块的具体实施方式进行进一步描述:
1、源代码分析模块:对Solidity智能合约源代码进行分析,以提取其中的关键语义信息。通过Solidity解析器能够从智能合约源代码中提取包括变量、修饰符、函数以及事件等信息,借助它们以及源代码能够生成调用关系拓扑图,并获取合约中每个功能的位置信息。
(1)借助Solidity-praser工具完成智能合约的解析工作。对源代码中包含的关键信息进行解析分类,包括变量、修饰符、函数以及事件等类别,并将其添加入解析器构建的数据库中。
(2)结合智能合约源代码以及构建的数据库来生成拓扑图,以反映智能合约内部的调用关系。借助数据的确切信息和Solidity语言的特点,使用多种调用规则和确定的搜索范围来生成调用关系。
2、操作码处理映射模块:从Solidity编译器获取智能合约的各种操作码,其中会包含操作码的位置信息,在将其与从字节码中获取的操作码进行比对后,完成它们间的映射,从而为字节码中转换的操作码添加位置信息,并修剪其中的噪声码。
3、字节码规范化及符号执行模块:借助数据规范化和指令规范化,完成对字节码的规范化来增强字节码匹配,后通过对合约的控制流图的创建完成符号执行环节。符号执行结束后,将生成一组用于具体分析的数据。
在实现字节码的规范化,以增强字节码匹配时,
(1)通过将合约中的数据与对应字节码中的操作码附加以形成一个节点,对该数据进行标记后对标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对结果进行标记。通过这个方法,能够将指定的数据标签与操作数标签对应起来,因此就能对不同版本solidity编译器remix生成的字节码实现数据规范化。
(2)按字母顺序对(1)中的数据规范化标签进行重新排序有利于指令规范化,从而减少对相同数据进行操作时它们间标签的差异。
通过构建控制流图,并在其基础上完成符号执行,最终生成可分析的数据。具体包括:
(1)在完成字节码的规范化后,对其进行预处理,使其不直接携带操作数信息和指令,后模拟字节码的执行并构建控制流图(CFG),其中的节点是最基础的执行块,边代表它们间的执行跳转等关系,边将在符号执行阶段动态形成。
(2)从控制流图的入口节点开始,进行符号执行。它的关键操作在于对将要运行的状态的获取,然后在该状态的上下文中抽象地执行单个指令,直到没有剩余运行状态或完成超时。在完成该环节后,将生成一组用于具体分析的数据。
4、具体分析模块:完成对合约的检测。威胁匹配对象包括扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险等。使用上个模块生成的相应数据,对其进行具体分析,与多种威胁情况进行匹配,后完成对相应操作码的标记。
5、信息汇报模块:在具体分析阶段完成智能合约威胁匹配后,将标记的字节码中操作码与编译所得操作码进行映射,添加位置信息所得的结果将被传递至本模块。将标记具有风险的智能合约,并定位包含风险的函数或事件等信息,后将所得结果输出。
本框架的输入包括Solidity语言编写的智能合约源代码、来自两种类型的Solidity编译器的操作码以及字节码,最后的输出是对智能合约的检测结果,若存在已知的安全性威胁,还将输出包含威胁的函数或事件等的位置信息。基于输出,能够及时地对出现隐患的智能合约代码进行修改,保证了安全性。
一、源代码分析模块中拓扑图的生成
Solidity-praser是Solidity智能合约的解析工具,但它每次只能分析单个文件的智能合约,且无法分析智能合约中的调用关系。因此首先对智能合约源代码中包含的关键信息进行解析分类,具体来说,包括变量、修饰符、函数以及事件等类别。接下来如图1所示,借助Solidity解析器构建一个数据库,对这些信息进行存储。其中每个列表都将存储一类信息,每类信息中的数据将包含以下几种属性:
具体名称:数据具体的名称,它可以是函数列表中的某个函数名,或者是事件列表中的某个事件名。
父种类:这个属性主要代表该信息是从何处提取出来的,目前只有两种已定义的父种类,包括智能合约和库。
父名称:父种类中展现了提取信息来源的种类,本属性能够记录提取信息来源的名称。
文件名:针对多个文件的跨文件智能合约,这个属性反映出从哪个文件解析得到的该信息。
借助这些属性,我们能够保证关键信息的唯一性。然后借助这些信息和Solidity语言的特点,使用多种调用规则和确定的搜索范围来生成调用关系,并形成拓扑图。
在Solidity中,修饰符是一种可继承属性,能够被派生合约覆盖,它可用于对函数具体功能的改变。基于这些特征,设计生成调用关系的规则为:某个函数中可能存在两个或以上的变量、修饰符或事件;修饰符可能包含变量、函数和事件;变量和事件只能被修饰符或函数调用。在针对合约具体生成时,通常将函数名或修饰符名等作为节点名称,将调用关系反映为有向边,从而生成拓扑图。
上段中,描述了函数、修饰符、事件还有变量四者间调用关系生成的具体规则。确定的搜索范围主要面对的是跨文件智能合约或多个分包合同构建的单智能合约难以笃定数据来源的情况,由于solidity中通常借助‘is’实现多重继承,因此在面对这两类智能合约时,可通过‘is’情况将数据具体搜索范围确定到其继承的相关合约。举例:如合约C1、C2中有两个函数c1、c2,另一个合约S用‘is’表示其继承于C1和C2,并在自身定义的函数s1中调用函数c1,此时若要生成调用关系,则将搜索范围确定为C1、C2、S,再进行分析,确定具体调用关系。
二、字节码规范化及符号执行模块中实现字节码的规范化
不同的Solidity编译器版本可能会导致字节码存在差异,从而对字节码匹配环节带来困扰。
数据规范化。在本模块中,将合约中的数据与对应字节码中的操作码附加以形成一个节点,对该数据进行标记后对生成的标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对所得结果进行标记。例如,我们假定接下来将进行“加”的操作,即将相加的两个操作数标签分别为tx_data以及us_data,那么,将为生成的结果加上一个标签“add_result|tx_data|us_data”。通过这个方法,能够将指定的数据标签与操作数标签对应起来,因此就能对不同版本Solidity编译器生成的字节码实现数据规范化。
指令规范化。按字母顺序对的数据规范化标签进行重新排序,从而减少对相同数据进行操作时它们间标签的差异。例如同样是上面的“加”,只是更换了两个操作数间的顺序而生成“add_result|us_data|tx_data”,这两者显然代表同一个结果。因此,可以针对加、并、或等操作的结果标签按标签的首字母顺序重新进行排序,以完成统一标识。
完成数据及指令的规范化后,能够实现对不同版本编译器所产生字节码形式的统一,从而增强字节码匹配的合理性与适用性。
三、具体分析模块中的威胁检测
在具体分析模块中,将借助字节码规范化及符号执行模块获取的符号执行数据,针对扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险等进行威胁检测。
以对重入攻击风险的检测为例。在符号执行数据中,借助执行路径条件信息对重入威胁进行检测。当遇到CALL操作时,在执行该操作前获取过去的执行路径条件信息。接下来,验证其中能够对变量等进行更新或对事件进行更改的路径条件是否在当前时间戳仍成立,若成立,则可将该智能合约标记为具有重入攻击风险的合约,因为可能在已执行的路径完成之前再次将它执行调用。
Claims (8)
1.一种对区块链智能合约进行威胁检测的装置,其特征在于:
源代码分析模块:对Solidity智能合约源代码进行分析,以提取其中的关键语义信息,通过Solidity解析器从智能合约源代码中提取包括变量、修饰符、函数以及事件信息,通过关键语义信息以及源代码生成智能合约调用关系拓扑图,并获取合约中每个函数实现功能的位置信息;
操作码处理映射模块:从Solidity编译器获取智能合约的字节码中的各种操作码,其中会包含操作码的位置信息,在将其从Solidity编译器获取的操作码和操作码的位置信息与remix编译器从智能合约的字节码中获取的操作码进行比对后,完成它们间的映射,从而为字节码中转换的操作码添加位置信息;
操作码处理映射模块:从Solidity编译器solc中获取智能合约的各种第一操作码与第一操作码的位置信息,再与solidity编译器remix从字节码中获取的第二操作码进行比对,完成它们间的映射,从而为字节码转换的第二操作码添加位置信息,得到没有噪音的具有位置信息的第二操作码。
字节码规范化及符号执行模块:借助数据规范化和指令规范化,完成对操作码处理映射模块得到的具有位置信息的第二操作码对应的字节码的规范化来增强字节码匹配,然后通过对合约的控制流图的创建完成符号执行环节,符号执行结束后,将生成一组用于具体分析的数据;
具体分析模块:使用字节码规范化及符号执行模块生成的相应数据,对其进行具体分析,与多种威胁情况进行匹配,后标记相应的操作码,完成检测,威胁匹配的对象包括扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险;
信息汇报模块:在具体分析模块完成智能合约威胁匹配后,将具体分析模块得到的标记的具有位置信息的第二操作码的信息传递至本模块,通过操作码标记智能合约,定位包含风险的函数或事件信息后将所得结果输出。
2.根据权利要求1所述的一种对区块链智能合约进行威胁检测的装置,其特征在于:源代码分析模块中将生成智能合约调用关系拓扑图,具体包括:
步骤2a、借助Solidity-praser工具完成智能合约的解析工作,对源代码中包含的关键信息进行解析分类,得到分类结果,分类结果包括变量、修饰符、函数以及事件类别,并将分类结果添加入解析器构建的数据库中;
步骤2b、在构建数据库的基础上,对智能合约源码进行分析,将数据库中的变量、函数、修饰符、事件类别设置为图中节点,再根据源码结合调用规则及搜索范围,以有向边反映各节点在源码中体现出的调用关系,生成调用关系拓扑图;
变量及事件类别仅作为有向边的入点,作为被调用者;
函数、修饰符作为出点或者入点,作为调用者或被调用者。
3.根据权利要求1所述的一种对区块链智能合约进行威胁检测的装置,其特征在于:字节码规范化及符号执行模块中,将会实现字节码的规范化,以增强字节码匹配,包括以下步骤:
步骤3a、通过将智能合约中的常量或者变量数据与对应字节码中的操作码附加以形成一个节点,对该常量或者变量数据进行标记后对标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对结果进行标记,将指定的数据标签与操作数标签对应起来,对不同版本Solidity编译器remix生成的字节码实现数据规范化;
步骤3b、按字母顺序对步骤3a中的数据规范化标签进行重新排序有利于指令规范化,从而减少对相同常量或者变量数据进行操作时它们间标签的差异。
4.根据权利要求1所述的一种对区块链智能合约进行威胁检测的装置,其特征在于:字节码规范化及符号执行模块中,将会通过构建控制流图,并在其基础上完成符号执行,最终生成可分析的数据,具体包括:
步骤4a、在完成字节码的规范化后,对字节码进行预处理,得到字节码不直接携带操作数信息和指令的基础执行块,将然基础执行块作为基础节点,根据基础节点生成初步控制流图;
步骤4b:在步骤4a的基础上,结合预处理过程中展现的基础节点间跳转关系,生成代表跳跃关系的边,形成“骨架型”控制流图;
步骤4c:从控制流图的入口节点开始,进行符号执行环节,读取各个节点的状态信息,通过状态信息的获取执行单个指令,然后借助相应的执行结果在控制流图中不断探索,最终形成路径,抽象地实现合约执行,该过程中动态地向控制流图中添加更多代表执行等关系的边。
5.一种对区块链智能合约进行威胁检测的方法,其特征在于:包括以下步骤:
源代码分析步骤:对Solidity智能合约源代码进行分析,以提取其中的关键语义信息,通过Solidity解析器从智能合约源代码中提取包括变量、修饰符、函数以及事件信息,通过关键语义信息以及源代码生成智能合约调用关系拓扑图,并获取合约中每个函数实现功能的位置信息;
操作码处理映射步骤:从Solidity编译器获取智能合约的字节码中的各种操作码,其中会包含操作码的位置信息,在将其从Solidity编译器获取的操作码和操作码的位置信息与remix编译器从智能合约的字节码中获取的操作码进行比对后,完成它们间的映射,从而为字节码中转换的操作码添加位置信息,并修剪其中的噪声码;
操作码处理映射步骤:从Solidity编译器solc中获取智能合约的各种第一操作码与第一操作码的位置信息,再与solidity编译器remix从字节码中获取的第二操作码进行比对,完成它们间的映射,从而为字节码转换的第二操作码添加位置信息,得到没有噪音的具有位置信息的第二操作码。
字节码规范化及符号执行步骤:借助数据规范化和指令规范化,完成对操作码处理映射步骤得到的具有位置信息的第二操作码对应的字节码的规范化来增强字节码匹配,然后通过对合约的控制流图的创建完成符号执行环节,符号执行结束后,将生成一组用于具体分析的数据;
具体分析步骤:完成对合约的检测,使用字节码规范化及符号执行步骤生成的相应数据,对其进行具体分析,与多种威胁情况进行匹配,后完成对相应操作码的标记,威胁匹配的对象包括扩展时间戳风险、零分割风险、tx.origin风险、调用堆栈风险、重入风险以及交易订单风险;
信息汇报步骤:在具体分析步骤完成智能合约威胁匹配后,将具体分析步骤得到的标记的具有位置信息的第二操作码的信息传递至本步骤,通过具有位置信息的第二操作码标记智能合约,定位包含风险的函数或事件信息后将所得结果输出。
6.根据权利要求5所述的一种对区块链智能合约进行威胁检测的方法,其特征在于:源代码分析步骤中将生成智能合约调用关系拓扑图,具体包括:
步骤2a、借助Solidity-praser工具完成智能合约的解析工作,对源代码中包含的关键信息进行解析分类,得到分类结果,分类结果包括变量、修饰符、函数以及事件类别,并将分类结果添加入解析器构建的数据库中;
步骤2b、在构建数据库的基础上,对智能合约源码进行分析,将数据库中的变量、函数、修饰符、事件类别设置为图中节点,再根据源码结合调用规则及搜索范围,以有向边反映各节点在源码中体现出的调用关系,生成调用关系拓扑图;
变量及事件类别仅作为有向边的入点,作为被调用者;
函数、修饰符作为出点或者入点,作为调用者或被调用者。
7.根据权利要求5所述的一种对区块链智能合约进行威胁检测的方法,其特征在于:字节码规范化及符号执行步骤中,将会实现字节码的规范化,以增强字节码匹配,包括以下步骤:
步骤3a、通过将智能合约中的常量或者变量数据与对应字节码中的操作码附加以形成一个节点,对该常量或者变量数据进行标记后对标签进行传播,当该标签从操作数传播到结果处时,再引入一个标签对结果进行标记,将指定的数据标签与操作数标签对应起来,对不同版本Solidity编译器生成的字节码实现数据规范化;
步骤3b、按字母顺序对步骤3a中的数据规范化标签进行重新排序有利于指令规范化,从而减少对相同常量或者变量数据进行操作时它们间标签的差异。
8.根据权利要求5所述的一种对区块链智能合约进行威胁检测的方法,其特征在于:字节码规范化及符号执行步骤中,将会通过构建控制流图,并在其基础上完成符号执行,最终生成可分析的数据,具体包括:
步骤4a、在完成字节码的规范化后,对字节码进行预处理,得到字节码不直接携带操作数信息和指令的基础执行块,将然基础执行块作为基础节点,根据基础节点生成初步控制流图;
步骤4b:在步骤4a的基础上,结合预处理过程中展现的基础节点间跳转关系,生成代表跳跃关系的边,形成“骨架型”控制流图;
步骤4c:从控制流图的入口节点开始,进行符号执行环节,读取各个节点的状态信息,通过状态信息的获取执行单个指令,然后借助相应的执行结果在控制流图中不断探索,最终形成路径,抽象地实现合约执行,该过程中动态地向控制流图中添加更多代表执行等关系的边。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210612209.8A CN115022026A (zh) | 2022-05-31 | 2022-05-31 | 一种区块链智能合约威胁检测装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210612209.8A CN115022026A (zh) | 2022-05-31 | 2022-05-31 | 一种区块链智能合约威胁检测装置及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115022026A true CN115022026A (zh) | 2022-09-06 |
Family
ID=83070788
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210612209.8A Pending CN115022026A (zh) | 2022-05-31 | 2022-05-31 | 一种区块链智能合约威胁检测装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115022026A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578988A (zh) * | 2023-05-23 | 2023-08-11 | 海南大学 | 一种智能合约的漏洞检测方法和装置、存储介质 |
CN117453280A (zh) * | 2023-09-12 | 2024-01-26 | 湖南长银五八消费金融股份有限公司 | 一种代码拓扑和业务拓扑生成方法、装置、设备及介质 |
CN117688564A (zh) * | 2024-02-01 | 2024-03-12 | 山东大学 | 一种用于智能合约事件日志的检测方法、装置和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508981A (zh) * | 2017-09-15 | 2019-03-22 | 富士通株式会社 | 用于测试智能合约的方法和装置 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
US11036614B1 (en) * | 2020-08-12 | 2021-06-15 | Peking University | Data control-oriented smart contract static analysis method and system |
CN114510723A (zh) * | 2022-02-18 | 2022-05-17 | 北京大学 | 一种智能合约权限管理漏洞检测方法及装置 |
-
2022
- 2022-05-31 CN CN202210612209.8A patent/CN115022026A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109508981A (zh) * | 2017-09-15 | 2019-03-22 | 富士通株式会社 | 用于测试智能合约的方法和装置 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
US11036614B1 (en) * | 2020-08-12 | 2021-06-15 | Peking University | Data control-oriented smart contract static analysis method and system |
CN114510723A (zh) * | 2022-02-18 | 2022-05-17 | 北京大学 | 一种智能合约权限管理漏洞检测方法及装置 |
Non-Patent Citations (1)
Title |
---|
韩松明等: "DC-Hunter:一种基于字节码匹配的危险智能合约检测方案", 《信息安全学报》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578988A (zh) * | 2023-05-23 | 2023-08-11 | 海南大学 | 一种智能合约的漏洞检测方法和装置、存储介质 |
CN116578988B (zh) * | 2023-05-23 | 2024-01-23 | 海南大学 | 一种智能合约的漏洞检测方法和装置、存储介质 |
CN117453280A (zh) * | 2023-09-12 | 2024-01-26 | 湖南长银五八消费金融股份有限公司 | 一种代码拓扑和业务拓扑生成方法、装置、设备及介质 |
CN117453280B (zh) * | 2023-09-12 | 2024-05-14 | 湖南长银五八消费金融股份有限公司 | 一种代码拓扑和业务拓扑生成方法、装置、设备及介质 |
CN117688564A (zh) * | 2024-02-01 | 2024-03-12 | 山东大学 | 一种用于智能合约事件日志的检测方法、装置和存储介质 |
CN117688564B (zh) * | 2024-02-01 | 2024-05-03 | 山东大学 | 一种用于智能合约事件日志的检测方法、装置和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Howar et al. | Active automata learning in practice: an annotated bibliography of the years 2011 to 2016 | |
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
US8935677B2 (en) | Automatic reverse engineering of input formats | |
CN102054149B (zh) | 一种恶意代码行为特征提取方法 | |
CN115022026A (zh) | 一种区块链智能合约威胁检测装置及方法 | |
CN110287702B (zh) | 一种二进制漏洞克隆检测方法及装置 | |
Howar et al. | Combining black-box and white-box techniques for learning register automata | |
Bernardi et al. | Design pattern detection using a DSL‐driven graph matching approach | |
US8589888B2 (en) | Demand-driven analysis of pointers for software program analysis and debugging | |
CN111931181B (zh) | 基于图挖掘的软件逻辑漏洞检测方法 | |
CN112000952B (zh) | Windows平台恶意软件的作者组织特征工程方法 | |
CN112256271B (zh) | 一种基于静态分析的区块链智能合约安全检测系统 | |
CN114911711A (zh) | 一种代码缺陷分析方法、装置、电子设备及存储介质 | |
Xue et al. | Hecate: Automated customization of program and communication features to reduce attack surfaces | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Benzinger | Automated complexity analysis of Nuprl extracted programs | |
Alalfi et al. | An approach to clone detection in sequence diagrams and its application to security analysis | |
Nguyen | Automatic extraction of x86 formal semantics from its natural language description | |
CN115017514A (zh) | 基于抽象语法树的智能合约漏洞检测的方法及应用 | |
CN113901459A (zh) | 固件内部二进制程序脆弱性发现方法及装置 | |
Semenov et al. | Obfuscated Code Quality Measurement | |
KR102671575B1 (ko) | 교차 아키텍처 바이너리에 대한 이진 비교 방법 | |
CN116305131B (zh) | 脚本静态去混淆方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |