CN115098863A - 一种基于静态与动态分析的智能合约重入漏洞检测方法 - Google Patents
一种基于静态与动态分析的智能合约重入漏洞检测方法 Download PDFInfo
- Publication number
- CN115098863A CN115098863A CN202210641690.3A CN202210641690A CN115098863A CN 115098863 A CN115098863 A CN 115098863A CN 202210641690 A CN202210641690 A CN 202210641690A CN 115098863 A CN115098863 A CN 115098863A
- Authority
- CN
- China
- Prior art keywords
- contract
- function
- intelligent contract
- tested
- attacker
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及区块链技术领域,公开了一种基于静态与动态分析的智能合约重入漏洞检测方法,包括以下步骤:步骤S1,输入待测智能合约;步骤S2,使用静态分析方法初步识别待测智能合约中潜在的易受攻击函数;步骤S3,根据潜在的易受攻击函数自动生成攻击者合约;步骤S4,搭建私有区块链以作为动态分析的环境;步骤S5,使用攻击者合约与待测智能合约在搭建的私有区块链上进行交互,复现重入攻击过程;步骤S6,使用动态分析方法确认待测智能合约中是否存在重入漏洞,如果是,检测结束,如果否,继续检测下一个潜在易受攻击对象。本发明用于采用的静态与动态分析结合的技术提高重入漏洞的检测性能并减少误报率。
Description
技术领域
本发明涉及区块链技术领域,具体地说,是一种基于静态与动态分析的智能合约重入漏洞检测方法,用于采用的静态与动态分析结合的技术提高重入漏洞的检测性能并减少误报率。
背景技术
近年来,区块链技术因其去中心化特性和较强的应用潜力而受到越来越多的关注。它已经被应用于包含电子商务、制造业和游戏业在内的诸多领域,尤其是支持智能合约的区块链(如以太坊)的出现,使得大量资金涌入区块链。同时,这也吸引了大量攻击者的恶意攻击。其中,重入攻击是最具破坏性的攻击之一。
到目前为止,大多数对重入漏洞的检测均使用静态分析,包括符号执行、模糊测试等技术。姜博等人在“ContractFuzzer: Fuzzing Smart Contracts for VulnerabilityDetection”一文中提出使用模糊测试技术来检测智能合约重入漏洞的方法,该方法首先对智能合约公开的接口进行初步分析,然后为这些接口随机生成模糊输入,并在程序执行过程中观察应用程序的执行日志。此类方法通常会对智能合约的所有接口进行测试,而不是将主要注意力集中在潜在的威胁产生点,导致性能开销较大,检测时间较长。其次,静态分析不考虑程序实际运行时的情况,导致无法高效地验证检测出的漏洞是否真实。另外,模糊测试随机产生的测试用例可能无法触发重入,所以检测准确率有所不足。
因此,为了解决上述问题,本发明提供了一种基于静态与动态分析的智能合约重入漏洞检测方法,采用的静态与动态分析结合的技术能够提高重入漏洞的检测性能并减少误报率。
发明内容
本发明的目的在于提供一种基于静态与动态分析的智能合约重入漏洞检测方法,采用的静态与动态分析结合的技术提高重入漏洞的检测性能并减少误报率。
本发明通过下述技术方案实现:一种基于静态与动态分析的智能合约重入漏洞检测方法,包括以下步骤:
步骤S1,在静态分析工具中输入待测智能合约;
步骤S2,使用静态分析方法初步识别待测智能合约中潜在的易受攻击函数;
步骤S3,根据潜在的易受攻击函数自动生成攻击者合约;
步骤S4,搭建私有区块链以作为动态分析的环境;
步骤S5,使用所述攻击者合约与待测智能合约在搭建的私有区块链上进行交互,复现重入攻击过程;
步骤S6,使用动态分析方法确认待测智能合约中是否存在重入漏洞,如果是,检测结束,如果否,继续检测下一个潜在易受攻击对象。
为了更好地实现本发明,进一步地,步骤S2包括:
使用静态分析技术对待测智能合约进行静态分析,遍历所述待测智能合约中的每个函数,检测所述函数中是否包括内置转账函数,如果是,将所述函数标记为潜在易受攻击函数,如果否,视为该合约不存在重入漏洞,检测结束。
为了更好地实现本发明,进一步地,所述内置转账函数指智能合约编程语言内置的转账函数,这些函数可以触发外部函数调用。
为了更好地实现本发明,进一步地,所述步骤S3包括:
收集潜在的易受攻击函数的函数签名;
根据函数签名自动生成针对潜在易受攻击函数的攻击者合约;
攻击者合约导入待测智能合约后实现fallback函数,并在fallback函数内对潜在易受攻击函数进行调用。
为了更好地实现本发明,进一步地,所述步骤S4包括:
选择以太坊专用测试网络规范,使用Golang实现的以太坊客户端创建私有区块链,所述私有区块链不会连接到以太坊主网;
创建多个节点,加入到创建的私有区块链中以此模拟真实的多节点环境。
为了更好地实现本发明,进一步地,所述步骤S5包括:
先后编译待测智能合约和攻击者合约,然后部署到搭建的私有区块链上;
使用待测智能合约的应用程序接口调用潜在易受攻击函数,使所述易受攻击函数在执行过程中产生对攻击者合约的调用,启动二者的交互,即待测智能合约的潜在易受攻击函数与攻击者合约的fallback函数进行交互。
为了更好地实现本发明,进一步地,所述步骤S6包括:
监控待测智能合约与攻击者合约的智能合约余额,若出现待测智能合约余额被耗尽,而攻击者合约的余额增加量超过其请求,则确认潜在易受攻击函数确实存在重入漏洞,检测结束;反之,本次检测的潜在易受攻击函数不存在重入漏洞,继续测试下一个潜在易受攻击函数。
本发明与现有技术相比,具有以下优点及有益效果:
(1)本发明结合静态和动态分析精确识别重入漏洞:使用静态分析初步识别出潜在易受攻击函数,然后借助动态分析精确识别潜在威胁中的重入漏洞,提供了一个结合静态和动态分析的自动化漏洞检测方法,能够高效准确地检测智能合约重入漏洞;
(2)本发明自动生成攻击者合约:根据潜在易受攻击函数自动生成攻击者合约,利用该合约与待测合约的交互复现重入攻击过程,与其它方案相比,性能开销更小,准确率更高。
附图说明
本发明结合下面附图和实施例做进一步说明,本发明所有构思创新应视为所公开内容和本发明保护范围。
图1为本发明提供的一种基于静态与动态分析的智能合约重入漏洞检测方法的流程图。
具体实施方式
为了更清楚地说明本发明实施例的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,应当理解,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例,因此不应被看作是对保护范围的限定。基于本发明中的实施例,本领域普通技术工作人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,智能合约是运行在支持智能合约的区块链(如以太坊)上的计算机程序;重入攻击是指如果一个智能合约在状态更新之前调用了另一个恶意的合约,控制流会从原合约转移到恶意合约,攻击者可以对原合约进行递归调用,重复执行预期之外的交易,而状态更新次数少于交易执行次数。例如:多次执行取款操作而余额只减少一次;静态分析是在不执行程序的情况下快速高效地对代码进行自动扫描,以发现隐含的安全漏洞的技术;动态分析是在程序实际运行的情况下,对软件运行时产生的错误进行检测的技术。
实施例1:
本实施例的一种基于静态与动态分析的智能合约重入漏洞检测方法的流程图,如图1所示,本发明通过识别潜在的易受攻击函数、自动生成攻击者合约、分析智能合约之间的交互精确地识别重入漏洞。
本发明创造性地结合静态和动态分析,首先使用静态分析对智能合约进行测试,本漏洞检测方法以待测智能合约的源代码作为输入,高效准确地识别潜在的攻击场景。其次,根据静态分析获得的信息自动生成攻击者智能合约。最后,将该合约与被测合约进行交互,利用动态分析来确认被测合约中的重入漏洞。最终实现高效准确的重入漏洞检测。本发明采用的静态与动态分析结合的技术能够提高检测性能并减少误报率。本发明先后使用了静态分析和动态分析,首先初步筛选出潜在威胁,然后再精确识别重入漏洞,针对潜在易受攻击函数生成攻击者合约,并与待测合约进行交互。
实施例2:
本实施例在实施例1的基础上做进一步优化,通过静态分析智能合约来识别潜在的易受攻击函数,高效准确地捕获可能的攻击场景,静态分析技术是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
自动生成攻击者合约并使其与被测合约进行交互,在此过程中使用动态分析来确认待测智能合约中是否存在重入漏洞。动态分析技术。在真实或虚拟处理器环境下运行待测程序来进行测试和评估的方法。目标是在程序实际运行时发现错误,而不是离线重复检查代码。动态分析工具有助于阐明性能问题、内存使用问题和内存泄漏。
本发明使用静态分析技术对待测智能合约进行静态分析,如使用TXL编程语言对待测智能合约进行静态分析,遍历该合约中的每个函数,检测它们是否包含由以下三个Solidity内置转账函数触发的外部调用:transfer()、call()、send()。若包含三个内置转账函数中的任何一个,则将该待测函数标记为潜在易受攻击函数。若检测发现待测合约不存在潜在易受攻击函数,则视为该合约不存在重入漏洞,检测结束。反之,执行下根据对潜在易受攻击函数的标记,使用TXL收集这些函数的函数签名(function signatures)。TXL是一种专门用于计算机软件分析和源代码转换任务的编程语言。本方法借助TXL可以快速地识别和解析待测智能合约中的函数。
自动生成攻击者合约:利用收集的函数签名,自动生成针对潜在易受攻击函数的攻击者合约。攻击者合约首先导入(import)待测合约,以便攻击者合约在部署时可以创建一个待测合约的实例,从而进行交互,为启动合约交互提供支持。
攻击者合约实现fallback函数,并在fallback函数内对潜在易受攻击函数进行调用。
搭建私有区块链:选择以太坊专用测试网络规范,使用Golang实现的以太坊客户端创建私有区块链,以此作为动态分析的环境。该私有区块链不会连接到以太坊主网,因此它使用的不是真正的以太币,而是专门用于测试的以太币。创建多个节点,加入到创建的私有区块链中,以此模拟真实的多节点环境。
启动合约交互:先后编译待测合约和攻击者合约,然后部署到搭建的私有区块链中。使用待测合约的应用程序接口(ABI)调用潜在易受攻击函数,使该函数在执行过程中产生对攻击者合约的调用,从而启动二者的交互,即待测合约的潜在易受攻击函数与攻击者合约的fallback函数进行交互。
确认是否存在重入漏洞:监控待测合约与攻击者合约的以太币余额,若出现待测智能合约余额被耗尽,而攻击者合约的余额增加量超过其请求,则确认潜在易受攻击函数确实存在重入漏洞,检测结束。反之,本次检测的函数不存在重入漏洞,继续测试下一个潜在易受攻击函数。
本实施例的其他部分与实施例1相同,故不再赘述。
实施例3:
本实施例在上述实施例1或2的基础上做进一步优化,内置转账函数指智能合约编程语言(如Solidity)内置的转账函数,这些函数可以触发外部函数调用。
函数签名是由函数名和函数参数列表决定的。若已知函数名和函数参数列表,用智能合约的编译器自带的功能就能轻松获得函数签名。使用静态分析方法初步识别识别到了一些易受攻击函数,相当于就已经获取到了这些函数名和函数参数列表,使用编辑器就能获得我们所需的函数签名。
本实施例的其他部分与上述实施例1或2相同,故不再赘述。
实施例4:
本实施例在上述实施例1-3任一项的基础上做进一步优化,以重入漏洞案例进行举例:
contract transferBalance(address receiver, uint amount) public{
require(balances[msg.sender] >= amount);
receiver.transfer(amount);
balances[receiver] -= amount;
}。
如代码片段所示,该函数在更改状态之前(即balances)调用transfer向receiver发送以太币。若receiver是带有fallback函数的外部合约,则transfer会在转账的同时调用其fallback函数。如果该外部合约是攻击者精心设计的恶意合约,那么恶意合约得到控制流后有能力执行许多预期之外的操作。例如:恶意合约在fallback函数内再次调用transferBalance,并在设定的递归次数完成后返回,最后可导致多次取款但余额只减少一次。
如重入漏洞案例所示,本发明通过分析待测合约源代码来生成攻击者合约,然后自动生成攻击交易,这个交易不是区块链中发生过的,在攻击交易执行的过程中分析攻击者合约和待测合约的交互来判断是否发生重入。本方法对待测智能合约进行模拟地攻击,从而发现漏洞。本发明的目的是检测智能合约的重入漏洞,本发明不是在智能合约部署后,遭受到实际攻击时进行检测,而是在智能合约部署前模拟出实际运行环境,从而在智能合约在遭受到实际攻击之前就识别出漏洞。能够更好的解决重入漏洞案例所示问题。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化,均落入本发明的保护范围之内。
Claims (7)
1.一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,包括以下步骤:
步骤S1,在静态分析工具中输入待测智能合约;
步骤S2,使用静态分析方法初步识别待测智能合约中潜在的易受攻击函数;
步骤S3,根据潜在的易受攻击函数自动生成攻击者合约;
步骤S4,搭建私有区块链以作为动态分析的环境;
步骤S5,使用所述攻击者合约与待测智能合约在搭建的私有区块链上进行交互,复现重入攻击过程;
步骤S6,使用动态分析方法确认待测智能合约中是否存在重入漏洞,如果是,检测结束,如果否,继续检测下一个潜在易受攻击对象。
2.根据权利要求1所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述步骤S2包括:
使用静态分析技术对待测智能合约进行静态分析,遍历所述待测智能合约中的每个函数,检测所述函数中是否包括内置转账函数,如果是,将所述函数标记为潜在易受攻击函数,如果否,视为该合约不存在重入漏洞,检测结束。
3.根据权利要求2所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述内置转账函数指智能合约编程语言内置的转账函数,这些函数可以触发外部函数调用。
4.根据权利要求1所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述步骤S3包括:
收集潜在的易受攻击函数的函数签名;
根据函数签名自动生成针对潜在易受攻击函数的攻击者合约;
攻击者合约导入待测智能合约后实现fallback函数,并在fallback函数内对潜在易受攻击函数进行调用。
5.根据权利要求1所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述步骤S4包括:
选择以太坊专用测试网络规范,使用Golang实现的以太坊客户端创建私有区块链,所述私有区块链不会连接到以太坊主网;
创建多个节点,加入到创建的私有区块链中以此模拟真实的多节点环境。
6.根据权利要求1-5任一项所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述步骤S5包括:
先后编译待测智能合约和攻击者合约,然后部署到搭建的私有区块链上;
使用待测智能合约的应用程序接口调用潜在易受攻击函数,使所述易受攻击函数在执行过程中产生对攻击者合约的调用,启动二者的交互,即待测智能合约的潜在易受攻击函数与攻击者合约的fallback函数进行交互。
7.根据权利要求1所述的一种基于静态与动态分析的智能合约重入漏洞检测方法,其特征在于,所述步骤S6包括:
监控待测智能合约与攻击者合约的智能合约余额,若出现待测智能合约余额被耗尽,而攻击者合约的余额增加量超过其请求,则确认潜在易受攻击函数确实存在重入漏洞,检测结束;反之,本次检测的潜在易受攻击函数不存在重入漏洞,继续测试下一个潜在易受攻击函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641690.3A CN115098863A (zh) | 2022-06-08 | 2022-06-08 | 一种基于静态与动态分析的智能合约重入漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641690.3A CN115098863A (zh) | 2022-06-08 | 2022-06-08 | 一种基于静态与动态分析的智能合约重入漏洞检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115098863A true CN115098863A (zh) | 2022-09-23 |
Family
ID=83289541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210641690.3A Pending CN115098863A (zh) | 2022-06-08 | 2022-06-08 | 一种基于静态与动态分析的智能合约重入漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115098863A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023078097A1 (zh) * | 2021-11-04 | 2023-05-11 | 深圳前海微众银行股份有限公司 | 一种区块链攻击拦截方法及装置 |
CN116226871A (zh) * | 2023-05-08 | 2023-06-06 | 中汽智联技术有限公司 | 基于静态和动态结合的漏洞验证方法、设备和介质 |
CN116663012A (zh) * | 2023-05-31 | 2023-08-29 | 烟台大学 | 一种跨合约漏洞的检测方法、系统和设备 |
-
2022
- 2022-06-08 CN CN202210641690.3A patent/CN115098863A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023078097A1 (zh) * | 2021-11-04 | 2023-05-11 | 深圳前海微众银行股份有限公司 | 一种区块链攻击拦截方法及装置 |
CN116226871A (zh) * | 2023-05-08 | 2023-06-06 | 中汽智联技术有限公司 | 基于静态和动态结合的漏洞验证方法、设备和介质 |
CN116226871B (zh) * | 2023-05-08 | 2023-08-01 | 中汽智联技术有限公司 | 基于静态和动态结合的漏洞验证方法、设备和介质 |
CN116663012A (zh) * | 2023-05-31 | 2023-08-29 | 烟台大学 | 一种跨合约漏洞的检测方法、系统和设备 |
CN116663012B (zh) * | 2023-05-31 | 2023-11-03 | 烟台大学 | 一种跨合约漏洞的检测方法、系统和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115098863A (zh) | 一种基于静态与动态分析的智能合约重入漏洞检测方法 | |
Le Goues et al. | Genprog: A generic method for automatic software repair | |
Wang et al. | Blockeye: Hunting for defi attacks on blockchain | |
US8028336B2 (en) | Intrusion detection using dynamic tracing | |
Liang et al. | Deepfuzzer: Accelerated deep greybox fuzzing | |
CN111859380B (zh) | Android App漏洞的零误报检测方法 | |
Liao et al. | SmartDagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability | |
KR101972825B1 (ko) | 하이브리드 분석 기술을 이용한 임베디드 기기 취약점 자동 분석 방법, 장치 및 그 방법을 실행하는 컴퓨터 프로그램 | |
CN111259399B (zh) | 用于web应用的动态检测漏洞攻击的方法及系统 | |
CN109948338B (zh) | 基于静态分析的安卓应用敏感路径触发方法 | |
CN117556431B (zh) | 一种混合软件漏洞分析方法和系统 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
CN113836009A (zh) | 一种基于强化学习的智能合约模糊测试方法及系统 | |
Fang et al. | Ics3fuzzer: A framework for discovering protocol implementation bugs in ics supervisory software by fuzzing | |
Liu et al. | IFIZZ: Deep-state and efficient fault-scenario generation to test IoT firmware | |
CN113849817B (zh) | 一种JavaScript原型链污染漏洞的检测方法及装置 | |
CN113919841A (zh) | 一种基于静态特征和动态插桩的区块链交易监测方法及系统 | |
CN117130906A (zh) | 嵌入式设备中网络服务器的模糊测试方法及装置 | |
CN117081818A (zh) | 基于智能合约防火墙的攻击交易识别与拦截方法及系统 | |
CN117118661A (zh) | 基于模糊测试的闭源攻击合约自动识别方法、系统及设备 | |
Morais et al. | Generating attack scenarios for the system security validation | |
CN111190813B (zh) | 基于自动化测试的安卓应用网络行为信息提取系统及方法 | |
Kwon et al. | OCTOPOCS: automatic verification of propagated vulnerable code using reformed proofs of concept | |
CN113923007A (zh) | 一种安全渗透测试方法、装置、电子设备及存储介质 | |
Tran-Jørgensen et al. | Security analysis of cloud-connected industrial control systems using combinatorial testing |
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 |