CN111737357B - 一种智能合约污点追踪方法及装置 - Google Patents
一种智能合约污点追踪方法及装置 Download PDFInfo
- Publication number
- CN111737357B CN111737357B CN202010693668.4A CN202010693668A CN111737357B CN 111737357 B CN111737357 B CN 111737357B CN 202010693668 A CN202010693668 A CN 202010693668A CN 111737357 B CN111737357 B CN 111737357B
- Authority
- CN
- China
- Prior art keywords
- external input
- input data
- taint
- data
- instruction
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/02—Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Accounting & Taxation (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- Strategic Management (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Finance (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种智能合约污点数据追踪方法及装置,该智能合约被编译为字节码部署在区块链上,该方法通过所述区块链的节点中部署的虚拟机执行,该方法包括,响应于调用智能合约的交易,执行所述字节码,其中,执行字节码的过程包括:通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成外部输入数据对应的污点标识;将外部输入数据,及其对应的污点标识存入第一存储空间,其中第一存储空间具有存储污点标识的存储区域;在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在第一存储空间中传递所述外部输入数据及其对应的污点标识。
Description
技术领域
本说明书一个或多个实施例涉及区块链领域,尤其涉及一种智能合约污点追踪方法及装置。
背景技术
智能合约(smart contract),一种基于区块链技术的分布式程序,允许在没有第三方的情况下完成程序实现的决策,存储资料等功能,智能合约的执行结果可追踪且不可逆转。执行智能合约的虚拟机,是一种在区块链上使用的栈式虚拟机。
现有技术中,在虚拟机对智能合约的执行中,通过模糊测试来分析数据流中的虚拟机指令执行依赖关系,从而判断合约执行中存在的风险性因素,但是在实际的合约检测场景中,上述方法存在较高的误报和漏报率。
因此,需要一种新的跟踪指令执行数据流的方法。
发明内容
本说明书一个或多个实施例描述了一种智能合约污点数据追踪方法及装置,对外部输入数据附着污点标识,在将外部输入数据放入存储空间时, 亦将污点标识放入存储空间;然后,在存储空间中传递外部输入数据时,也传递其对应的污点标识。通过该方法,可以通过污点标识,准确的追踪智能合约执行中的污点数据。
根据第一方面,提供了一种智能合约污点数据追踪方法,所述智能合约被编译为字节码部署在区块链上,所述方法通过所述区块链的节点中部署的虚拟机执行,该方法包括,响应于调用智能合约的交易,执行所述字节码,其中,执行所述字节码的过程包括:
通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识;
将所述外部输入数据,及其对应的污点标识存入第一存储空间,其中所述第一存储空间具有存储所述污点标识的存储区域;
在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
在一个实施例中,所述智能合约污点数据追踪方法还可以包括,执行用于调用所述第一存储空间中的存储数据的第三虚拟机指令;根据被调用数据是否具有对应的污点标识,确定是否进行漏洞报告。
进一步,在更具体的例子中,所述第三虚拟机指令可以包括CALL指令、JUMP指令。
在一个实施例中,所述外部输入数据包括,通过所述交易传入的用户输入数据。
在另一个实施例中, 所述外部输入数据包括,记账节点打包交易时生成的外部变量,所述外部变量可以包括以下中的一个或多个:时间戳、区块哈希值、区块号、难度值。
根据不同的实施例, 所述第一虚拟机指令,可以包括CALLDATALOAD指令、BLOCKHASH指令、TIMESTAMP指令、NUMBER指令、DIFFICULTY指令。
根据一个实施例, 所述第一存储空间包括操作栈空间,所述操作栈空间在原有栈之外还包括污点栈;所述污点栈用于保存外部输入数据对应的污点标识。
进一步,在一个具体的例子中, 可以将外部输入数据存入所述原有栈,将其对应的污点标识存入所述污点栈;以及,在所述原有栈中,对所述外部输入数据进行移出/复制/交换操作;并且在污点栈中,对所述外部输入数据对应的污点标识进行移出/复制/交换操作。
根据另一个实施例,所述第一存储空间包括操作栈空间,所述操作栈空间包括若干操作栈,所述若干操作栈中设置有污点结构区,所述污点结构区用于保存外部输入数据对应的污点标识。
在一个例子中,在所述操作栈空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令可以包括DUP指令、SWAP指令。
根据又一个实施例,所述第一存储空间包括非持久化存储空间,所述非持久化存储空间包括数据区和污点区;所述污点区用于保存外部输入数据在所述数据区中的存储地址,以及该外部输入数据对应的污点数据。
进一步,在一个具体的例子中,所述污点区包含链表,所述链表用于保存外部输入数据在所述数据区中的起始存储地址和结尾存储地址,以及该外部输入数据对应的污点标识;可以将外部输入数据存入所述数据区,并将外部输入数据在数据区的起始存储地址和结尾存储地址,以及对应的污点标识,存入所述污点区。在一个例子中,还可以根据该待传递数据在所述数据区的存储地址,以及污点区的链表中各外部输入数据在所述数据区中的起始存储地址和结尾存储地址,判断该待传递数据是否为外部输入数据; 若该待传递数据的存储地址在任一外部数据的起始存储地址和结尾存储地址之间,则确定该待传递数据为外部输入数据,则在所述非持久化存储空间中传递外部输入数据及其对应的污点标识;否则,确定该待传递数据不是外部输入数据,只在所述非持久化存储空间中传递该数据本身。
在一个例子中,在所述非持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括MLOAD指令、MSTORE指令。
根据再一个实施例,所述第一存储空间包括持久化存储空间,所述持久化存储空间包含键-值对集合,其中,对于该键-值对集合中的每个键-值对,附加有一个与键对应的附加值;该附加值用于存储外部输入数据对应的污点标识;可以将外部输入数据存入所述键-值对中与键对应的原有值中,将所述外部输入数据对应的污点标识存入该键-值对中与键对应的附加值中。
在一个例子中,在所述持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括SLOAD指令、SSTORE指令。
根据第二方面,提供了一种智能合约污点数据追踪装置,一种智能合约污点数据追踪装置,所述智能合约被编译为字节码部署在区块链上,所述装置包括:
污点生成单元,配置为通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识;
污点保存单元,配置为将所述外部输入数据,及其对应的污点标识存入第一存储空间,其中所述第一存储空间具有存储所述污点标识的存储区域;
污点传递单元,配置为在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
根据本说明书实施例提供的方法和装置,响应于调用智能合约发起的交易,对交易传入的用户数据或记账节点打包交易时生成的外部变量附着污点标识,然后,将外部输入数据和其污点数据保存于栈(Stack)空间、持久存储空间(Storage)或非持久存储空间(Memory)中,此三种存储空间的数据结构经预先修改,使其在保存外部输入数据的同时,容易保存其污点数据和对应关系,最后,在识别到发生诸如复制/交流等在以太坊存储空间中传递数据的操作时,将外部输入数据和污点数据同时传递,并保持其对应关系。由于各个来源的外部数据均被附着污点标识,且在其于存储空间的传递过程中,污点标识亦始终跟随传递,因此可以精确地识别和追踪智能合约执行中调用的数据中的外部数据。
附图说明
为了更清楚说明本发明实施例的技术方案,下面将对实施例描述中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本说明书实施例提供的一种智能合约污点数据追踪方法的原理示意图;
图2示出本说明书实施例提供的一种智能合约污点数据追踪方法的流程图;
图3示出本说明书实施例提供的栈空间操作效果图;
图4示出本说明书实施例提供的一种智能合约污点数据追踪装置的结构图。
具体实施方式
下面将结合附图,对本发明书提供的方案进行描述。
如前所述,现有技术中, 通过模糊测试分析智能合约执行过程的数据流和虚拟机指令执行依赖关系,从而判断合约执行过程存在的风险性因素,但是在实际的合约检测场景中,上述方法存在较高的误报或漏报率。
针对上述现有技术的不足,发明人在进一步研究中发现,数据流中存在一些敏感数据,主要是运行合约中的外部可以控制或部分控制的数据,比如,发起交易时用户输入数据或打包交易的节点可以调节的变量比如时间戳(timestamp)、区块哈希值(blockhash)、区块号(blocknum)等,这些敏感数据给合约执行带来的潜在风险较高。现有技术中没有对这些敏感数据进行跟踪和分析,因此在进行漏洞特征分析时,缺少必要的判定条件,从而导致检出效果不好。
为解决上述问题,在本说明书的实施例中,提出一种智能合约污点数据追踪方法,在整个合约运行的数据传递过程中,对上述敏感数据进行污点标识,从而能够基于污点标识,对数据流中的污点数据进行识别,为进一步对污点数据的流向和特征进行跟踪和分析提供基础。
一般而言,智能合约被编译为字节码,并保存于区块链中,运行时由虚拟机解释执行。所以,也可以说,字节码是由虚拟机指令集合组成。图1示出本说明书实施例提供的一种智能合约污点数据追踪方法的原理示意图。如图中所示,当虚拟机在执行第一虚拟机指令时,会引入前述的敏感数据,即外部可以控制的或部分控制的数据,在这里,本说明书中将其称之为外部输入数据,对各外部输入数据附着一个对应的浮点标识,然后将其放入虚拟机的存储空间中。
本说明实施例所述的虚拟机具有三种存储空间,即栈(Stack)空间、非持久性空间(Memory)和持久性存储空间(Storage),非持久性空间也可以叫内存空间。这里的非持久性空间(内存空间)并非完全等同于常规意义上内存空间,而是指某个合约在运行时,由虚拟机在内存中为其开辟的一块专有存储空间,会随着合约执行完毕而释放,当然,其中的数据也会随合约结束而丢失。与此不同,持久性存储空间(Storage) 不会随合约执行完毕而释放,其中保存的数据业也会持续保存于区块链中。此外,本说明书实施例所述的虚拟机是基于栈的虚拟机,所有虚拟机指令的执行依赖于栈,虚拟机不存在寄存器,也没有网络IO相关的指令,只存在对栈(stack),内存(memory), 持久存储(storage)的读写操作。因此,在栈、内存、持久性存储空间中跟踪数据的传递,即可以跟踪到智能合约运行中全部数据的传递。
在此前提下,发明人认为,通过常规的三种存储空间(类似于以太坊虚拟机存储空间)中的存储数据结构并不方便于存储外部输入数据及其对应的污点标识,以及在数据传递过程中保持它们的对应关系。因此,如图1所示中,本说明书实施例中对三种存储空间进行了改造,使得相对于常规三种存储空间,基于改造后的三种存储空间,更易于进行具有对应关系的外部输入数据和污点标识的存储和传递。具体的改造方式,将在后文中进行阐述。
然后,虚拟机通过执行第二虚拟机指令,在三种存储空间之内或之间传递数据,当传递的数据为上述外部输入数据时,基于上述改造的三种存储空间,将其对应的污点标识与其一同传递。
下面结合实施例,更详细的阐述本发明提供的方法。
图2示出本说明书实施例提供的一种智能合约污点数据追踪方法的流程图。可以理解,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。下面结合具体实施例,对如图3所示的智能合约污点数据追踪方法中的各个步骤进行描述。
所述智能合约被编译为字节码部署在区块链上,该方法通过所述区块链的节点中部署的虚拟机执行,该方法包括,响应于调用智能合约的交易,执行所述字节码,其中,执行所述字节码的过程包括如下步骤:
首先,在步骤21,通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识。
如前所述,通过调用智能合约而发起的交易中传入的用户输入数据,和记账节点打包交易时生成的外部变量,是在智能合约运行可能受到外部控制或部分控制的数据,对于这两种数据生成对应的污点标识,目的是为了后续的追踪。
在不同的实施例中,所述第一虚拟机指令,可以包括CALLDATALOAD指令、BLOCKHASH指令、TIMESTAMP指令、NUMBER指令、DIFFICULTY指令。其中,执行CALLDATALOAD指令,会传入交易中的用户输入数据,执行BLOCKHASH指令、TIMESTAMP指令、NUMBER指令或DIFFICULTY指令,会调用记账节点打包交易时生成的外部变量,执行BLOCKHASH指令、TIMESTAMP指令、NUMBER指令或DIFFICULTY指令分别调用的外部变量为时间戳、区块哈希值、区块号、难度值。
接着,在步骤22,将所述外部输入数据,及其对应的污点标识存入第一存储空间,第一存储空间具有存储所述污点标识的存储区域。
第一存储空间,即虚拟机可以访问的存储空间,由于常规存储空间并不提供合适的存储结构,使得在此之上可以以一种简洁、高效的方式,进行外部输入数据及其对应的污点标识的关联存储。所以,在不同的实施例中,对常规存储空间进行了预先的改造。
在一个实施例中,第一存储空间可以包括:操作栈空间,操作栈空间在原有栈之外还包括污点栈;该污点栈用于保存外部输入数据对应的污点标识。
栈是一种后进先出的数据结构,虚拟机的操作基于栈,因此常规的虚拟机访问的存储空间,必然包含操作栈。该实施例中,在操作栈之外,设立一个专用于存储污点标识的污点栈。在一个例子中,基于上述结构,可以将外部输入数据存入原有的操作栈,将其对应的污点标识存入污点栈。
在另一个实施例中,第一存储空间包括操作栈空间,操作栈空间包括若干操作栈,该若干操作栈中也可以设置有污点结构区,污点结构区用于保存外部输入数据对应的污点标识。
在一个实施例中,第一存储空间可以包括非持久化存储空间,该非持久化存储空间包括数据区和污点区;该污点区用于保存外部输入数据在所述数据区中的存储地址,以及该外部输入数据对应的污点数据。
这种设计的原因在于,非持久化存储空间中以字节为基本存储单位,由于其基本单位太小,如果采用上述栈空间(栈的基本存储单位为256位字节)中的方法,非常不方便,且需要消耗的空间较大。因此只保存外部输入数据在数据区中的存储地址,用于关联其对应的污点数据。
根据一种具体的实施方式,污点区中可以包含链表,所述链表中保存外部输入数据在数据区中的起始存储地址和结尾存储地址,以及该外部输入数据对应的污点标识。根据该实施方式,可以将外部输入数据存入数据区,并将外部输入数据在数据区的起始存储地址和结尾存储地址,以及对应的污点标识,存入污点区。
在一个实施例中,第一存储空间包括持久化存储空间,持久化存储空间包含键-值对集合,其中,对于该键-值对集合中的每个键-值对,附加有一个与键对应的附加值;该附加值用于存储外部输入数据对应的污点标识。
在常规的以太坊持久化存储空间中,所有的数据均保存在键值对集合,其中每个键值对包括一条基本数据,每个键和值的长度均为256位。在一个例子中,可以将外部输入数据存入一个键-值对中与键对应的原有的值中,将外部输入数据对应的污点标识存入该键-值对中与键对应的增加的值中。由于键值对具有结构上的天然匹配关系,在该实施例中,外部输入数据和其污点标识可以通过共同的键被匹配。
然后,在步骤23中,在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
如前所述,虚拟机通过执行第二虚拟机指令,在存储空间内传递数据,而存储空间分为三种。因此,在不同的实施例中,在存储空间内传递数据,可以包括在三种存储空间之内或之间传递数据,具体的实施方式可以包括:
在一个实施例中,通过执行第二虚拟机指令,在所述原有栈中,对所述外部输入数据进行移出/复制/交换操作;并且在污点栈中,对所述外部输入数据对应的污点标识进行移出/复制/交换操作。在更具体的例子中,第二虚拟机指令,可以包括DUP指令、SWAP指令。
在另一个实施例中,在确定待传递数据为外部输入数据的情况下,在第一存储空间中传递外部输入数据及其对应的污点标识中,还根据该待传递数据在所述数据区的存储地址,以及污点区的链表中各外部输入数据在所述数据区中的起始存储地址和结尾存储地址,判断该待传递数据是否为外部输入数据; 若该待传递数据的存储地址在任一外部数据的起始存储地址和结尾存储地址之间,则确定该待传递数据为外部输入数据,则在所述非持久化存储空间中传递外部输入数据及其对应的污点标识;否则,确定该待传递数据不是外部输入数据,只在所述非持久化存储空间中传递该数据本身。
在更具体的例子中,第二虚拟机指令,可以包括MLOAD指令、MSTORE指令。其中,MLOAD为读取内存空间数据的指令,MSTORE为写入内存空间数据的指令。需要注意的是,虽然MLOAD、 MSTORE指令是从内存中存取数据,但是由于该虚拟机是基于栈的虚拟机,在它们的执行中,需要基于栈进行操作,会从栈中读取或写入数据,比如,执行MSTORE会取出栈顶的两个数据单位,一个作为键(key),一个作为值(value),写入内存,而执行MLOAD会取出栈顶的数据单位作为键,从内存中取出该键对应的值,并且把该值压入栈中。因此,在其执行中,存在与栈中的外部输入数据交互传递的情况,在这种情况下,需要将污点标识与外部输入数据一同传递到目标存储空间,并将污点标识放入目标存储空间中,与该外部输入数据目标对应的存储区域。
在又一个实施例中,在持久化存储空间中传递外部输入数据及其对应的污点标识,如前所述,由于持久化存储空间的键值对存储结构具有天然的匹配关系,容易想到,在该实施例中,只需通过外部输入数据和其污点标识共同的键读取/或保存两者即可。在具体的例子中,所述第二虚拟机指令,可以包括SLOAD指令、SSTORE指令。其中,SLOAD为读取持久性存储空间中数据的指令,MSTORE为写入持久性存储空间数据的指令。需要注意的是,与前述实施例中内存空间的存取类似,在SLOAD、SSTORE指令执行中,需要基于栈进行操作,会从栈中读取或写入数据。比如,SLOAD从持久性存储空间数据中取出合约地址下的某个键(key)对应的值(value),将其存入栈中;SSTORE从栈中取出两个数据单位的值作为键(key)和值(value),存入持久性存储空间数据中。因此,在其执行中,也存在与栈中的外部输入数据交互传递的情况,在这种情况下,进行与上述实施例中类似的处理,需要将污点标识与外部输入数据一同传递到目标存储空间,并将污点标识放入目标存储空间中,与该外部输入数据目标对应的存储区域。
在上述过程中,通过步骤21-23,可以对外部输入数据在合约执行的全流程中进行污点附着。在步骤23之后,还可以基于合约执行中存储空间的数据是否附着污点,判断其是否为外部输入数据,从而跟踪外部数据在存储空间的流动。根据一种实施方式,在步骤23之后,可以通过执行第三虚拟机指令,调用以太坊存储空间中的数据,根据被调用数据是否具有对应的污点标识,还可以确定是否进行漏洞报告。
在不同的实施例中,根据具体的数据跟踪或业务需要,据以执行漏洞检测的第三虚拟机指令可以是不同的,在一个实施例中,第三虚拟机指令可以根据需要预先指定。在更具体的实施例中,第三虚拟机指令可以包括CALL指令、JUMP指令。
下面通过一个实施例提供的较完整的流程,更清晰的阐述该智能合约污点数据追踪方法在存储空间中的实际效果。图3示出本说明书实施例提供的栈空间操作效果图。如图所示,该实施例提供的一段智能合约字节码包含的虚拟机指令依次为,
CALLDATALOAD,DUP1,POP,PUSH,CALL;
首先,执行CALLDATALOAD指令,CALLDATALOAD指令的作用是将交易执行中的,用户输入的数据加载到栈中。从图3中可以看到,该指令执行后,将附着了污点的外部输入数据A(图中A为msg.data[p:p+32],msg.data为用户调用合约时输入的数据参数,msg.data[p:p+32]的表示msg.data中位置为i到i+32位的数据)加载到栈顶。
然后,执行DUP1指令,DUP1指令将从栈顶开始数的第1个存储单元复制后,压入栈顶。图3中,该指令执行后,从栈顶依次存有两个相同的附着了污点的msg.data[p:p+32](简称为污点数据)。
接着,执行POP指令,POP指令从栈顶弹出一个存储单元的数据。图3中,该指令执行后,栈顶只有一个附着了污点的msg.data[p:p+32]。
再接着,执行PUSH指令,PUSH指令把其后的操作数压入栈顶,图3中,PUSH指令把其后的2300压入栈顶之后,从栈顶依次存有2300和附着了污点的msg.data[p:p+32],需要注意的是,由于2300是纯粹的操作数,因此其没有被附着污点标识。
最后,执行CALL指令,CALL指令实现的是调用其它的智能合约,其调用的栈的数据包括2300和msg.data[p:p+32]。
由于其中的msg.data[p:p+32]为污点数据,也就是说,此次CALL执行的参数包括外部输入数据,具有出现安全漏洞的可能性,因此发出安全漏洞报告。
可以看到,在该实施例中,第一虚拟机指令为CALLDATALOAD指令,第二虚拟机指令为DUP1指令,第三虚拟机指令为CALL指令,根据前述可知,在不同的实施例中,上述第一、第二、第三虚拟机指令可以为其它的虚拟机指令,这里不再赘述。从该实施例的流程还可以清楚地看到,由于对栈空间中的外部数据附着了污点标识,使其成为污点数据,并且其在栈空间的传递中始终表示为污点数据,因此分析者可以方便的识别栈空间中哪些数据为污点数据,哪些不是污点数据,并根据预选指令调用的栈空间数据是否包括污点数据,进行安全漏洞提示。
根据另一方面的实施例,提供了一种智能合约污点数据追踪装置,所述智能合约被编译为字节码部署在区块链上。该装置可以部署在任何具有计算、处理能力的设备、平台或设备集群中。图4示出根据一个实施例的智能合约污点数据追踪装置的示意性框图。如图4所示,该装置400包括:
污点生成单元41,配置为通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识;
污点保存单元42,配置为将所述外部输入数据,及其对应的污点标识存入第一存储空间,其中所述第一存储空间具有存储所述污点标识的存储区域;
污点传递单元43,配置为在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
根据一个实施例中,该处理装置400还包括,
漏洞报告生成单元44,配置为执行用于调用所述第一存储空间中的存储数据的第三虚拟机指令;根据被调用数据是否具有对应的污点标识,确定是否进行漏洞报告。
进一步的,在一个具体的实施例中,所述第三虚拟机指令可以包括CALL指令、JUMP指令。
在一个实施例中,所述外部输入数据包括,通过所述交易传入的用户输入数据。
在另一个实施例中, 所述外部输入数据包括,记账节点打包交易时生成的外部变量,所述外部变量可以包括以下中的一个或多个:时间戳、区块哈希值、区块号、难度值。
根据不同的实施例, 所述第一虚拟机指令,可以包括CALLDATALOAD指令、BLOCKHASH指令、TIMESTAMP指令、NUMBER指令、DIFFICULTY指令。
根据一个实施例, 所述第一存储空间包括操作栈空间,所述操作栈空间在原有栈之外还包括污点栈;所述污点栈用于保存外部输入数据对应的污点标识。
进一步,在一个具体的例子中, 可以将外部输入数据存入所述原有栈,将其对应的污点标识存入所述污点栈;以及,在所述原有栈中,对所述外部输入数据进行移出/复制/交换操作;并且在污点栈中,对所述外部输入数据对应的污点标识进行移出/复制/交换操作。
根据另一个实施例,所述第一存储空间包括操作栈空间,所述操作栈空间包括若干操作栈,所述若干操作栈中设置有污点结构区,所述污点结构区用于保存外部输入数据对应的污点标识。
在一个例子中,在所述操作栈空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令可以包括DUP指令、SWAP指令。
根据又一个实施例,所述第一存储空间包括非持久化存储空间,所述非持久化存储空间包括数据区和污点区;所述污点区用于保存外部输入数据在所述数据区中的存储地址,以及该外部输入数据对应的污点数据。
进一步,在一个具体的例子中,所述污点区包含链表,所述链表用于保存外部输入数据在所述数据区中的起始存储地址和结尾存储地址,以及该外部输入数据对应的污点标识;可以将外部输入数据存入所述数据区,并将外部输入数据在数据区的起始存储地址和结尾存储地址,以及对应的污点标识,存入所述污点区。在一个例子中,还可以根据该待传递数据在所述数据区的存储地址,以及污点区的链表中各外部输入数据在所述数据区中的起始存储地址和结尾存储地址,判断该待传递数据是否为外部输入数据; 若该待传递数据的存储地址在任一外部数据的起始存储地址和结尾存储地址之间,则确定该待传递数据为外部输入数据,则在所述非持久化存储空间中传递外部输入数据及其对应的污点标识;否则,确定该待传递数据不是外部输入数据,只在所述非持久化存储空间中传递该数据本身。
在一个例子中,在所述非持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括MLOAD指令、MSTORE指令。
根据再一个实施例,所述第一存储空间包括持久化存储空间,所述持久化存储空间包含键-值对集合,其中,对于该键-值对集合中的每个键-值对,附加有一个与键对应的附加值;该附加值用于存储外部输入数据对应的污点标识;可以将外部输入数据存入所述键-值对中与键对应的原有值中,将所述外部输入数据对应的污点标识存入该键-值对中与键对应的附加值中。
在一个例子中,在所述持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括SLOAD指令、SSTORE指令。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (16)
1.一种智能合约污点数据追踪方法,所述智能合约被编译为字节码部署在区块链上,所述方法通过所述区块链的节点中部署的虚拟机执行,该方法包括,响应于调用智能合约的交易,执行所述字节码,其中,执行所述字节码的过程包括:
通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识;
将所述外部输入数据,及其对应的污点标识存入第一存储空间,其中所述第一存储空间具有存储所述污点标识的存储区域;所述第一存储空间至少包括操作栈空间,所述操作栈空间包括若干操作栈,所述若干操作栈中设置有污点结构区,所述污点结构区用于保存外部输入数据对应的污点标识;所述第一存储空间还包括持久化存储空间,所述持久化存储空间包含键-值对集合,其中,对于该键-值对集合中的每个键-值对,附加有一个与键对应的附加值;该附加值用于存储外部输入数据对应的污点标识;
在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
2.根据权利要求1所述的方法,还包括:
执行用于调用所述第一存储空间中的存储数据的第三虚拟机指令;
根据被调用数据是否具有对应的污点标识,确定是否进行漏洞报告。
3.根据权利要求2所述的方法,其中,所述第三虚拟机指令包括CALL指令、JUMP指令。
4.根据权利要求1所述的方法,其中,所述外部输入数据包括:通过所述交易传入的用户输入数据。
5.根据权利要求1所述的方法,其中,所述外部输入数据包括,记账节点打包交易时生成的外部变量,所述外部变量包括以下中的一个或多个:时间戳、区块哈希值、区块号、难度值。
6.根据权利要求1所述的方法,其中,所述第一虚拟机指令,包括CALLDATALOAD指令、BLOCKHASH指令、TIMESTAMP指令、NUMBER指令、DIFFICULTY指令。
7.根据权利要求1所述的方法,其中,所述第一存储空间包括非持久化存储空间,所述非持久化存储空间包括数据区和污点区;所述污点区用于保存外部输入数据在所述数据区中的存储地址,以及该外部输入数据对应的污点数据。
8.根据权利要求7所述的方法,其中,所述污点区包含链表,所述链表用于保存外部输入数据在所述数据区中的起始存储地址和结尾存储地址,以及该外部输入数据对应的污点标识;
所述将外部输入数据,及其对应的污点标识存入第一存储空间,包括,
将外部输入数据存入所述数据区,并将外部输入数据在数据区的起始存储地址和结尾存储地址,以及对应的污点标识,存入所述污点区。
9.根据权利要求8所述的方法,其中,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识,包括:
根据该待传递数据在所述数据区的存储地址,以及污点区的链表中各外部输入数据在所述数据区中的起始存储地址和结尾存储地址,判断该待传递数据是否为外部输入数据;
若该待传递数据的存储地址在任一外部数据的起始存储地址和结尾存储地址之间,则确定该待传递数据为外部输入数据,则在所述非持久化存储空间中传递外部输入数据及其对应的污点标识;
否则,确定该待传递数据不是外部输入数据,只在所述非持久化存储空间中传递该数据本身。
10.根据权利要求7所述的方法,其中,在第一存储空间中传递外部输入数据及其对应的污点标识,包括,
在所述非持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括MLOAD指令、MSTORE指令。
11.根据权利要求1所述的方法,其中,
所述将外部输入数据,及其对应的污点标识存入第一存储空间,包括:
将外部输入数据存入所述键-值对中与键对应的原有值中,将所述外部输入数据对应的污点标识存入该键-值对中与键对应的附加值中。
12.根据权利要求1所述的方法,其中,在第一存储空间中传递外部输入数据及其对应的污点标识,包括,
在所述操作栈空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令包括DUP指令、SWAP指令。
13.根据权利要求1所述的方法,其中,在第一存储空间中传递外部输入数据及其对应的污点标识,包括,
在所述持久化存储空间中传递外部输入数据及其对应的污点标识,所述第二虚拟机指令,包括SLOAD指令、SSTORE指令。
14.一种智能合约污点数据追踪装置,所述智能合约被编译为字节码部署在区块链上,所述装置包括:
污点生成单元,配置为通过执行用于引入外部输入数据的第一虚拟机指令,获取外部输入数据,并生成所述外部输入数据对应的污点标识;
污点保存单元,配置为将所述外部输入数据,及其对应的污点标识存入第一存储空间,其中所述第一存储空间具有存储所述污点标识的存储区域;所述第一存储空间包括操作栈空间,所述操作栈空间包括若干操作栈,所述若干操作栈中设置有污点结构区,所述污点结构区用于保存外部输入数据对应的污点标识;所述第一存储空间还包括持久化存储空间,所述持久化存储空间包含键-值对集合,其中,对于该键-值对集合中的每个键-值对,附加有一个与键对应的附加值;该附加值用于存储外部输入数据对应的污点标识;
污点传递单元,配置为在执行用于传递数据的第二虚拟机指令时,在确定待传递数据为外部输入数据的情况下,在所述第一存储空间中传递所述外部输入数据及其对应的污点标识。
15.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-13中任一项的所述的方法。
16.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-13中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010693668.4A CN111737357B (zh) | 2020-07-17 | 2020-07-17 | 一种智能合约污点追踪方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010693668.4A CN111737357B (zh) | 2020-07-17 | 2020-07-17 | 一种智能合约污点追踪方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111737357A CN111737357A (zh) | 2020-10-02 |
CN111737357B true CN111737357B (zh) | 2021-02-05 |
Family
ID=72655920
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010693668.4A Active CN111737357B (zh) | 2020-07-17 | 2020-07-17 | 一种智能合约污点追踪方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111737357B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112749389B (zh) * | 2020-12-29 | 2023-03-14 | 华南师范大学 | 一种检测智能合约破坏敏感数据漏洞的检测方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102306098A (zh) * | 2011-08-18 | 2012-01-04 | 电子科技大学 | 一种隐式污点传播系统及其方案 |
CN102521543B (zh) * | 2011-12-23 | 2014-03-26 | 中国人民解放军国防科学技术大学 | 一种基于动态污点分析进行消息语义解析的方法 |
CN107330345B (zh) * | 2017-07-05 | 2020-11-27 | 北京理工大学 | 一种检测隐私数据泄露的方法和装置 |
-
2020
- 2020-07-17 CN CN202010693668.4A patent/CN111737357B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN111737357A (zh) | 2020-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111770206B (zh) | 一种部署智能合约的方法、区块链节点和存储介质 | |
US6253317B1 (en) | Method and apparatus for providing and handling traps | |
US11507669B1 (en) | Characterizing, detecting and healing vulnerabilities in computer code | |
US20060095895A1 (en) | Method and apparatus for inserting code | |
US9213562B2 (en) | Garbage collection safepoint system using non-blocking asynchronous I/O call to copy data when the garbage collection safepoint is not in progress or is completed | |
US20230065259A1 (en) | Method and apparatus for protecting smart contracts against attacks | |
US20120311531A1 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
CN111768187A (zh) | 一种部署智能合约的方法、区块链节点和存储介质 | |
WO2019237866A1 (zh) | 一种运行时访问控制方法及计算装置 | |
CN111800490A (zh) | 获取网络行为数据的方法、装置及终端设备 | |
CN103309796A (zh) | 一种组件对象模型对象的监控方法和装置 | |
CN111768200A (zh) | 一种部署智能合约的方法、区块链节点和存储介质 | |
CN111737357B (zh) | 一种智能合约污点追踪方法及装置 | |
US7168625B2 (en) | Making secure downloaded application in particular in a smart card | |
CN108710504A (zh) | 数据库操作方法及装置 | |
US20220308991A1 (en) | Test processing method and information processing apparatus | |
US11593474B2 (en) | Container behavior representation | |
US8458790B2 (en) | Defending smart cards against attacks by redundant processing | |
CN114723446A (zh) | 一种智能合约执行引擎、智能合约执行方法及相关设备 | |
US20240193100A1 (en) | Heap Protection System | |
CN116502239B (zh) | 二进制程序的内存漏洞检测方法、装置、设备及介质 | |
US11989572B2 (en) | Computer system enabled with runtime software module tracking | |
US20240104000A1 (en) | Determining and providing representations of program flow control | |
CN113238915B (zh) | 调用信息的处理方法、装置、设备、存储介质及程序 | |
CN118519860B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40038759 Country of ref document: HK |