CN110597731B - 一种漏洞检测方法、装置及电子设备 - Google Patents

一种漏洞检测方法、装置及电子设备 Download PDF

Info

Publication number
CN110597731B
CN110597731B CN201910891907.4A CN201910891907A CN110597731B CN 110597731 B CN110597731 B CN 110597731B CN 201910891907 A CN201910891907 A CN 201910891907A CN 110597731 B CN110597731 B CN 110597731B
Authority
CN
China
Prior art keywords
function
vulnerability
reentrant
exists
calling
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
Application number
CN201910891907.4A
Other languages
English (en)
Other versions
CN110597731A (zh
Inventor
王忠儒
姜海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Digapis Technology Co ltd
Original Assignee
Beijing Digapis Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Digapis Technology Co ltd filed Critical Beijing Digapis Technology Co ltd
Priority to CN201910891907.4A priority Critical patent/CN110597731B/zh
Publication of CN110597731A publication Critical patent/CN110597731A/zh
Application granted granted Critical
Publication of CN110597731B publication Critical patent/CN110597731B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种漏洞检测方法、装置及电子设备,获取待检测的智能合约,识别所述智能合约中的函数调用关系,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,若存在所述可重入漏洞,对所述可重入漏洞进行修复。即通过本发明,可以自动检测和修复可重入漏洞,避免可重入漏洞带来的后续影响。

Description

一种漏洞检测方法、装置及电子设备
技术领域
本发明涉及漏洞检测领域,更具体的说,涉及一种漏洞检测方法、装置及电子设备。
背景技术
近年来,随着比特币的兴起,区块链去中心化技术逐渐得到大家的重视并广泛应用。区块链起源于比特币,作为比特币的底层技术,本质上是一个去中心化的数据库,通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。在无法建立信任关系的互联网上,无需借助任何第三方中心的介入就可以使参与者达成共识,以极低的成本解决了信任与价值的可靠传递难题。任何人都可对这个账本进行核查,但不存在单一的用户可以对它控制。
区块链采用的智能合约是开发人员去编写的脚本代码,因为缺乏有效的漏洞检测模型,导致容易出现智能合约漏洞,可重入漏洞就是其中一种常见的智能合约漏洞。可重入性问题在被编写到智能合约中的区块链安全漏洞中排在极高的位置。可重入性通过对同一事务的多个支出来消耗一个账户。处理退款的用例适合这种利用,但是如果不在设计和编码阶段检测并修复可重入漏洞,这种缺陷就会影响到所有事务。
发明内容
有鉴于此,本发明提供一种漏洞检测方法、装置及电子设备,以解决亟需检测并修复区块链的智能合约中可重入漏洞的问题。
为解决上述技术问题,本发明采用了如下技术方案:
一种漏洞检测方法,包括:
获取待检测的智能合约;
识别所述智能合约中的函数调用关系;
依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
若存在所述可重入漏洞,对所述可重入漏洞进行修复。
优选地,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,包括:
依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
若存在敏感函数,确定所述敏感函数是否跨函数;
若不跨函数,则确定可能存在单一函数可重入漏洞;
若跨函数,则确定可能存在跨函数可重入漏洞。
优选地,对所述可重入漏洞进行修复,包括:
若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;
从所述函数调用序列中识别出是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
优选地,对所述可重入漏洞进行修复,还包括:
若识别出所述敏感函数或所述函数调用序列中存在预设调用函数,判断所述预设调用函数是否可被替换;
若可被替换,执行将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
若不可被替换,修改所述函数调用关系以及在所述智能合约中插入不安全标识。
一种漏洞检测装置,包括:
智能合约获取模块,用于获取待检测的智能合约;
关系识别模块,用于识别所述智能合约中的函数调用关系;
漏洞检测模块,用于依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
漏洞修复模块,用于若存在所述可重入漏洞,对所述可重入漏洞进行修复。
优选地,所述漏洞检测模块包括:
函数识别子模块,用于依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
漏洞确定子模块,用于若存在敏感函数,确定所述敏感函数是否跨函数;若不跨函数,则确定可能存在单一函数可重入漏洞;若跨函数,则确定可能存在跨函数可重入漏洞。
优选地,所述漏洞修复模块包括:
第一识别子模块,用于若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
替换子模块,用于若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
第二识别子模块,用于若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;从所述函数调用序列中识别出是否存在预设调用函数;
所述替换子模块,还用于若从所述函数调用序列中识别出存在预设调用函数,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
优选地,所述漏洞修复模块还包括:
判断子模块,用于若识别出所述敏感函数或所述函数调用序列中存在预设调用函数,判断所述预设调用函数是否可被替换;
所述替换子模块,还用于若可被替换,执行将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
修改子模块,用于若不可被替换,修改所述函数调用关系以及在所述智能合约中插入不安全标识。
一种电子设备,包括:存储器和处理器;
其中,所述存储器用于存储程序;
处理器调用程序并用于:
获取待检测的智能合约;
识别所述智能合约中的函数调用关系;
依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
若存在所述可重入漏洞,对所述可重入漏洞进行修复。
相较于现有技术,本发明具有以下有益效果:
本发明提供了一种漏洞检测方法、装置及电子设备,获取待检测的智能合约,识别所述智能合约中的函数调用关系,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,若存在所述可重入漏洞,对所述可重入漏洞进行修复。即通过本发明,可以自动检测和修复可重入漏洞,避免可重入漏洞带来的后续影响。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种漏洞检测方法的方法流程图;
图2为本发明实施例提供的另一种漏洞检测方法的方法流程图;
图3为本发明实施例提供的再一种漏洞检测方法的方法流程图;
图4为本发明实施例提供的一种漏洞检测装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对智能合约可重入漏洞的主要表现形式,将可重入漏洞分为单一函数可重入漏洞、跨函数可重入漏洞、跨文件可重入漏洞三类,本发明实施例适用于单一函数可重入漏洞、跨函数可重入漏洞的检测及防护。
在单一函数可重入漏洞中,代码的执行逻辑为在函数的第一次调用结束之前可重复调用该函数。以用户取款函数withdrawBalance()为例,执行账户发起转账msg.sender.call.value()时,会调用的合约账户sender账户的发起转账fallback回退函数,如果withdrawBalance()函数位于fallback回退函数中,在withdrawBalance()第一次调用结束之前,账户余额userBalances的值还没有更新,所以调用第二次取款时,会再次成功执行取款的操作,造成函数递归调用。由于用户的余额直到函数结束时才设置为0,因此第二次及以后的函数调用仍将成功,并循环地对用户余额进行提现,其代码表现形式如下:
Figure BDA0002209009080000051
单一函数可重入漏洞是通过对同一函数的不断调用来利用的,而跨函数可重入漏洞则是通过对不同函数的组合调用来实现的。在跨函数可重入漏洞中,攻击者可能会使用不同的函数共享相同的状态,发起类似的可重入攻击,其攻击形式如下:
Figure BDA0002209009080000052
Figure BDA0002209009080000061
在上述情况下,调用withdrawBalance函数执行msg.sender.call.value时,sender是一个外部智能合约地址,该合约在fallback函数中会执行transfer函数,因为withdrawBalance()中用户的账户余额还没有清零,因此能够进行转账,当执行完后调用者的账户才清零,对于调用者来说多转了1倍的钱,此漏洞也可用于可重入攻击。
本发明实施例提供了一种漏洞检测方法,主要用于检测和修复上述的单一函数可重入漏洞和跨函数可重入漏洞,参照图1,漏洞检测方法可以包括:
S11、获取待检测的智能合约。
其中,本发明实施例中的漏洞检测方法的应用对象是区块链的智能合约。在进行漏洞检测之前,先获取待检测的智能合约。
S12、识别所述智能合约中的函数调用关系。
函数调用关系即函数之间的调用关系,如函数A调用函数B,函数B调用函数C。
S13、依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞。
S14、若存在所述可重入漏洞,对所述可重入漏洞进行修复。
步骤S13和步骤S14主要是可重入漏洞的检测和修复,若智能合约中存在上述的单一函数可重入漏洞和/或单一函数可重入漏洞,则对其进行修复。
本实施例中,获取待检测的智能合约,识别所述智能合约中的函数调用关系,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,若存在所述可重入漏洞,对所述可重入漏洞进行修复。即通过本发明,可以自动检测和修复可重入漏洞,避免可重入漏洞带来的后续影响。
上述提出了需要检测智能合约中是否可能存在可重入漏洞,现对其实现方法进行具体介绍,参照图2,步骤S12可以包括:
S21、依据所述函数调用关系,确定所述智能合约中是否存在敏感函数。
敏感函数可以是技术人员预先指定,如可以将msg.sender.call.value()作为敏感函数。
在函数调用关系中也写出了都有哪些函数,此处只需要从函数调用关系包括的函数中识别出敏感函数即可。
S22、若存在敏感函数,确定所述敏感函数是否跨函数;若为跨函数,执行步骤S24;若不为跨函数,则执行步骤S23。
S23、确定可能存在单一函数可重入漏洞。
S24、确定可能存在跨函数可重入漏洞。
具体的,单一函数可重入漏洞和跨函数可重入漏洞的区别在于该敏感函数是否是跨函数,若跨函数,则为跨函数可重入漏洞,若不跨函数,则为单一函数可重入漏洞。
本实施例中,给出了可能存在单一函数可重入漏洞和跨函数可重入漏洞的判定方法,进而可以通过本实施例进行可重入漏洞的判定。
上述中给出了可重入漏洞的判定,在判断出可能存在可重入漏洞时,则需要对其进行修复,具体的,参照图3,对所述可重入漏洞进行修复。包括:
S34、确定出包括所述敏感函数的函数调用序列。
当为跨函数可重入漏洞时,执行步骤S34,然后执行步骤S35。由于敏感函数会涉及至少两个函数,则此时需要知道该敏感函数会存在于哪些函数调用序列中。
S36、识别所述敏感函数中是否存在预设调用函数;若存在,执行步骤S37;若不存在,结束。
其中,预设调用函数可以是调用call.value()函数。当为单一函数可重入漏洞时,直接执行步骤S36,即直接在敏感函数中识别是否存在用call.value()函数,若为跨函数可重入漏洞时,则需要在步骤S35中得到的函数调用序列中识别是否存在call.value()函数。
S37、判断所述预设调用函数是否可被替换;若可替换,执行步骤S38;若不可替换,执行步骤S39。
当call.value()函数可被替换时,说明不存在外部调用,当call.value()函数不可被替换时,说明存在外部调用。
S38、将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
具体的,与call.value()函数功能等同的目标函数为send()函数。即在针对call.value()函数的漏洞检测可以通过识别该调用方法,使用send()函数替换call.value()函数限制外部代码的执行。
S39、修改所述函数调用关系以及在所述智能合约中插入不安全标识。
具体的,对于单一函数或跨函数可重入漏洞,如果发现智能合约的函数调用序列受到可重入漏洞攻击,该情形的漏洞修复方法为:函数替换或业务逻辑置换。将call.value()替换为send()阻止外部代码执行。
如果无法避免调用外部代码时,函数替换方法无法完成正常的业务逻辑,此时,可识别代码中的错误逻辑,自动调整代码执行顺序进行业务逻辑置换,防止此类攻击的方法为确保在完成所有需要执行的内部工作之前,不会调用外部函数,将用户余额更新代码置于合理位置,即调整userBalances[msg.sender]=0的位置,放于外部调用函数的前面,先完成所有内部工作,然后才调用外部函数,进而避免由于可重入而导致的漏洞,即在调用msg.sener.call.value()之前,先执行userBalances[msg.sender]=0;因为此时用户的账户已经清零,之后的转账不会被重复执行,可重入漏洞被修复。
其代码保护形式如下:
mapping(address=>uint)private userBalances;
function withdrawBalance()public{
uint amountToWithdraw=userBalances[msg.sender];
userBalances[msg.sender]=0;
require(msg.sender.call.value(amountToWithdraw)());
}
另外,除了进行修改所述函数调用关系的步骤之外,还可以在所述智能合约中插入不安全标识,具体的:
调用不受信任的合约会带来不安全的风险,外部调用可能在该合约或其依赖的其他合约中执行恶意代码。因此,每个外部调用都应被视为潜在的安全风险。通过标记函数调用序列并识别出敏感函数调用,发现不安全的合约调用隐患。尽管getFirstWithdrawalBonus()没有直接调用外部合约,但该函数调用了withdrawReward(),withdrawReward()又调用了call.value(),可引起可重入攻击,因此需要将获得首次提款奖金getFirstWithdrawalBonus()和withdrawReward()标记为不可信函数。也即为该函数设置不安全标识。
除了修复可重入漏洞,还需要将withdrawReward()视为不可信函数,并标记其为不受信任的函数。由于不安全的获取首次提款奖金untrustedGetFirstWithdrawalBonus()调用了不安全的获取奖励untrustedWithdrawReward(),untrustedWithdrawReward()需要调用一个外部合约,因此必须将untrustedgetfirstdrawAlbonus()视为不安全的函数。
本实施例中,通过自动化解析智能合约代码,标记、识别同一文件中的单一函数可重入漏洞和跨函数可重入漏洞,实现自动化漏洞修复。对于存在的漏洞尽可能进行调整和修复,对于无法修复的漏洞给出不安全的提示和标记进行安全提示,尽可能避免出现同一文件下的跨函数可重入漏洞,增强智能合约代码的安全性。
可选的,在上述漏洞检测方法的实施例的基础上,本发明的另一实施例提供了一种漏洞检测装置,参照图4,可以包括:
智能合约获取模块,用于获取待检测的智能合约;
关系识别模块,用于识别所述智能合约中的函数调用关系;
漏洞检测模块,用于依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
漏洞修复模块,用于若存在所述可重入漏洞,对所述可重入漏洞进行修复。
本实施例中,获取待检测的智能合约,识别所述智能合约中的函数调用关系,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,若存在所述可重入漏洞,对所述可重入漏洞进行修复。即通过本发明,可以自动检测和修复可重入漏洞,避免可重入漏洞带来的后续影响。
需要说明的是,本实施例中的各个模块的工作过程,请参照上述实施例中的相应说明,在此不再赘述。
可选的,在上述漏洞检测装置的实施例的基础上,所述漏洞检测模块包括:
函数识别子模块,用于依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
漏洞确定子模块,用于若存在敏感函数,确定所述敏感函数是否跨函数;若不跨函数,则确定可能存在单一函数可重入漏洞;若跨函数,则确定可能存在跨函数可重入漏洞。
本实施例中,给出了可能存在单一函数可重入漏洞和跨函数可重入漏洞的判定方法,进而可以通过本实施例进行可重入漏洞的判定。
需要说明的是,本实施例中的各个模块和子模块的工作过程,请参照上述实施例中的相应说明,在此不再赘述。
可选的,在上述漏洞检测装置的实施例的基础上,所述漏洞修复模块包括:
第一识别子模块,用于若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
替换子模块,用于若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
第二识别子模块,用于若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;从所述函数调用序列中识别出是否存在预设调用函数;
所述替换子模块,还用于若从所述函数调用序列中识别出存在预设调用函数,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
进一步,所述漏洞修复模块还包括:
判断子模块,用于若识别出所述敏感函数或所述函数调用序列中存在预设调用函数,判断所述预设调用函数是否可被替换;
所述替换子模块,还用于若可被替换,执行将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
修改子模块,用于若不可被替换,修改所述函数调用关系以及在所述智能合约中插入不安全标识。
本实施例中,通过自动化解析智能合约代码,标记、识别同一文件中的单一函数可重入漏洞和跨函数可重入漏洞,实现自动化漏洞修复。对于存在的漏洞尽可能进行调整和修复,对于无法修复的漏洞给出不安全的提示和标记进行安全提示,尽可能避免出现同一文件下的跨函数可重入漏洞,增强智能合约代码的安全性。
需要说明的是,本实施例中的各个模块和子模块的工作过程,请参照上述实施例中的相应说明,在此不再赘述。
可选的,在上述漏洞检测方法及装置的实施例的基础上,本发明的另一实施例提供了一种电子设备,包括:存储器和处理器;
其中,所述存储器用于存储程序;
处理器调用程序并用于:
获取待检测的智能合约;
识别所述智能合约中的函数调用关系;
依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
若存在所述可重入漏洞,对所述可重入漏洞进行修复。
本实施例中,获取待检测的智能合约,识别所述智能合约中的函数调用关系,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,若存在所述可重入漏洞,对所述可重入漏洞进行修复。即通过本发明,可以自动检测和修复可重入漏洞,避免可重入漏洞带来的后续影响。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (5)

1.一种漏洞检测方法,其特征在于,包括:
获取待检测的智能合约;
识别所述智能合约中的函数调用关系;
依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
若存在所述可重入漏洞,对所述可重入漏洞进行修复;
其中,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,包括:
依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
若存在敏感函数,确定所述敏感函数是否跨函数;
若不跨函数,则确定可能存在单一函数可重入漏洞;
若跨函数,则确定可能存在跨函数可重入漏洞;
其中,对所述可重入漏洞进行修复,包括:
若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;
从所述函数调用序列中识别出是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
2.根据权利要求1所述的漏洞检测方法,其特征在于,对所述可重入漏洞进行修复,还包括:
若识别出所述敏感函数或所述函数调用序列中存在预设调用函数,判断所述预设调用函数是否可被替换;
若可被替换,执行将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
若不可被替换,修改所述函数调用关系以及在所述智能合约中插入不安全标识。
3.一种漏洞检测装置,其特征在于,包括:
智能合约获取模块,用于获取待检测的智能合约;
关系识别模块,用于识别所述智能合约中的函数调用关系;
漏洞检测模块,用于依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
漏洞修复模块,用于若存在所述可重入漏洞,对所述可重入漏洞进行修复;
其中,所述漏洞检测模块包括:
函数识别子模块,用于依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
漏洞确定子模块,用于若存在敏感函数,确定所述敏感函数是否跨函数;若不跨函数,则确定可能存在单一函数可重入漏洞;若跨函数,则确定可能存在跨函数可重入漏洞;
其中,所述漏洞修复模块包括:
第一识别子模块,用于若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
替换子模块,用于若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
第二识别子模块,用于若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;从所述函数调用序列中识别出是否存在预设调用函数;
所述替换子模块,还用于若从所述函数调用序列中识别出存在预设调用函数,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
4.根据权利要求3所述的漏洞检测装置,其特征在于,所述漏洞修复模块还包括:
判断子模块,用于若识别出所述敏感函数或所述函数调用序列中存在预设调用函数,判断所述预设调用函数是否可被替换;
所述替换子模块,还用于若可被替换,执行将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
修改子模块,用于若不可被替换,修改所述函数调用关系以及在所述智能合约中插入不安全标识。
5.一种电子设备,其特征在于,包括:存储器和处理器;
其中,所述存储器用于存储程序;
处理器调用程序并用于:
获取待检测的智能合约;
识别所述智能合约中的函数调用关系;
依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞;
若存在所述可重入漏洞,对所述可重入漏洞进行修复;
其中,依据所述函数调用关系,确定所述智能合约中是否可能存在可重入漏洞,包括:
依据所述函数调用关系,确定所述智能合约中是否存在敏感函数;
若存在敏感函数,确定所述敏感函数是否跨函数;
若不跨函数,则确定可能存在单一函数可重入漏洞;
若跨函数,则确定可能存在跨函数可重入漏洞;
其中,对所述可重入漏洞进行修复,包括:
若可能存在所述单一函数可重入漏洞,识别所述敏感函数中是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数;
若可能存在所述跨函数可重入漏洞,确定出包括所述敏感函数的函数调用序列;
从所述函数调用序列中识别出是否存在预设调用函数;
若存在,则将所述预设调用函数替换为与所述预设调用函数功能等同的目标函数。
CN201910891907.4A 2019-09-20 2019-09-20 一种漏洞检测方法、装置及电子设备 Active CN110597731B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910891907.4A CN110597731B (zh) 2019-09-20 2019-09-20 一种漏洞检测方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910891907.4A CN110597731B (zh) 2019-09-20 2019-09-20 一种漏洞检测方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN110597731A CN110597731A (zh) 2019-12-20
CN110597731B true CN110597731B (zh) 2023-04-07

Family

ID=68861732

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910891907.4A Active CN110597731B (zh) 2019-09-20 2019-09-20 一种漏洞检测方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN110597731B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112749389B (zh) * 2020-12-29 2023-03-14 华南师范大学 一种检测智能合约破坏敏感数据漏洞的检测方法及装置
CN112711760B (zh) * 2020-12-29 2022-11-29 华南师范大学 检测智能合约恶意消除重入影响漏洞的检测方法和装置
CN117834263A (zh) * 2023-12-29 2024-04-05 蚂蚁智安安全技术(上海)有限公司 一种针对区块链合约的重入攻击检测方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108985066A (zh) * 2018-05-25 2018-12-11 北京金山安全软件有限公司 一种智能合约安全漏洞检测方法、装置、终端及存储介质
CN109063477A (zh) * 2018-07-18 2018-12-21 成都链安科技有限公司 一种自动化的智能合约代码缺陷检测系统和方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190095621A1 (en) * 2017-09-27 2019-03-28 Qualcomm Incorporated Methods for mitigating fault attacks in microprocessors using value prediction
CN109801166B (zh) * 2019-01-28 2023-04-18 浙江师范大学 一种基于状态锁的智能合约的安全函数的设计方法及系统
CN109800175B (zh) * 2019-02-20 2020-08-11 河海大学 一种基于代码插桩的以太坊智能合约重入漏洞检测方法
CN109948345A (zh) * 2019-03-20 2019-06-28 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、系统
CN109933991A (zh) * 2019-03-20 2019-06-25 杭州拜思科技有限公司 一种智能合约漏洞检测的方法、装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108985066A (zh) * 2018-05-25 2018-12-11 北京金山安全软件有限公司 一种智能合约安全漏洞检测方法、装置、终端及存储介质
CN109063477A (zh) * 2018-07-18 2018-12-21 成都链安科技有限公司 一种自动化的智能合约代码缺陷检测系统和方法

Also Published As

Publication number Publication date
CN110597731A (zh) 2019-12-20

Similar Documents

Publication Publication Date Title
CN110597731B (zh) 一种漏洞检测方法、装置及电子设备
US8443354B1 (en) Detecting new or modified portions of code
CN103744686B (zh) 智能终端中应用安装的控制方法和系统
US6928548B1 (en) System and method for verifying the integrity of stored information within an electronic device
CN110018840B (zh) 一种智能合约升级方法、装置、区块链节点设备及介质
CN104573435A (zh) 用于终端权限管理的方法和终端
CN104517054A (zh) 一种检测恶意apk的方法、装置、客户端和服务器
CN104731623B (zh) 主程序中启动插件的方法及装置
KR20160110276A (ko) 다이나믹 보안모듈 생성방법 및 생성장치
CN111523097B (zh) 基于安卓系统的app刷子用户识别方法、设备及存储介质
CN108958785B (zh) 一种应用程序升级方法及装置
CN112231702A (zh) 应用保护方法、装置、设备及介质
CN111538985A (zh) Android应用运行环境检测方法及其装置
CN105653960A (zh) 一种Linux能力分配方法及装置
CN105873030A (zh) 一种对终端应用进行副署签名的方法
CN113312623B (zh) 访问控制中的进程检测方法、装置、电子设备和存储介质
CN112395603A (zh) 基于指令执行序列特征的漏洞攻击识别方法、装置及计算机设备
KR20190105774A (ko) 스마트 계약 언어에서 함수 호출의 안전성 향상 방법
CN109766115A (zh) 一种智能设备升级的防呆方法及系统
US20220300256A1 (en) Validating Binary Image Content
Titze et al. Preventing library spoofing on android
CN114493862A (zh) 跨链交易的验证方法、装置、电子设备、系统及存储介质
CN114237665A (zh) 补丁更新方法、装置、计算设备及存储介质
CN108959915B (zh) 一种rootkit检测方法、装置及服务器
CN110597557A (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