【论文阅读】 智能合约安全漏洞检测技术研究综述

这篇具有很好参考价值的文章主要介绍了【论文阅读】 智能合约安全漏洞检测技术研究综述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、SC安全漏洞事件

2016 年 6 月,黑客利用 DAO(decentralized autonomous organization)合约的可重入漏洞, 窃取了价值约 6000 万美元的以太币(即以太坊数字货币);
2017 年 7 月, 由于 Parity 多签名钱包合约的 Delegatecall 漏洞(parity multi-sig wallet delegatecall), 价值近 3 亿美元的以太币被冻结; 2018 年 4 月, 恶意攻击者利用美链 BEC 合约的整数溢出漏洞无限复制代币, 导致 BEC 代币的价值蒸发归零;
2018 年 11 月, 攻击者向 EOS.WIN 发起连续随机数攻击, 获利超过 20000 枚 EOS(即 EOS 数字货币);
2019 年 5 月, Binance 交易所遭到黑客恶意攻击, 导致7000多枚比特币被盗; 2020 年以来, 智能合约游戏 FarmEOS, Playgames, LuckBet, EOSPlaystation 等都遭遇了不同程度的黑客攻击, 累计造成近百万美元的损失。

危害:经济损失+区块链信危机

二、智能合约容易受到影响的原因

  1. 智能合约编程语言和工具(如 Solidity)仍然是新颖且粗糙的, 而使用新的编程语言和运行环境编写的智能合约相对更难以测试,尤其因为智能合约运行时被允许与外部合约函数或接口交互, 这可能导致重复的外部调用, 从而引发安全漏洞;
  2. 智能合约开发人员一时间无法完全理解新颖的智能合约编程语言和工具的基本执行逻辑, 因此无法预见合约在将来遇到的所有可能状态和环境,导致了开发人员容易编写出存在漏洞或易受攻击的合约;
  3. 区别于传统程序,由于智能合约二进制码及其状态是存储在不可篡改且不可变的区块链网络上, 智能合约一旦部署便是不可逆的, 也无法进行更新或修改这就导致区块链网络上可能存在一些有潜在安全问题而无法修补的合约;
  4. 由于区块链平台上的数字货币(如比特币和以太币)被智能合约保管和操控, 使得智能合约成为极具诱惑力的被攻击目标,吸引了很多恶意攻击者, 他们尝试各种手段挖掘并利用智能合约中可能存在的漏洞, 以窃取资金或阻塞区块链网络。

三、智能合约常见的漏洞类型&典型案例

  • 以太坊是当前影响力最大的开源区块链平台, 也是目前为止智能合约数量最多、漏洞类型最多、漏洞造成的损失最大的区块链平台。
  • 根据以太坊智能合约漏洞发生的层次不同,可以将合约漏洞分为 3 个层面, 分别是 Solidity
    代码层、EVM执行层、区块链系统层

    智能合约漏洞检测,论文阅读,智能合约,区块链
1、Solidity代码层

(1)可重入漏洞
智能合约执行具有原子性和顺序性。不同于一般情况,智能合约的回调机制可能导致恶意攻击者在程序执行结束前再次进入函数。智能合约涉及跨合约的转账等敏感操作,而这些外部调用容易被攻击者利用,导致危险操作。
可重入漏洞是由回调机制引起的,曾导致历史上最著名的智能合约安全漏洞事件(DAO攻击),损失价值近6000万美元的以太币,并引发了以太坊的硬分叉。

(2) 整数溢出漏洞
整数溢出漏洞具有普遍性, 很多程序中都可能存在整数溢出问题. 整数溢出一般分为上溢和下溢, 智能合约中的整数溢出类型包括 3 种: 乘法溢出、加法溢出和减法溢出。 以太坊智能合约中, 一般指定整数为固定大小且无符号整数类型, 即表示整型变量只能是一定范围内的数值, 超过这个范围则会产生整数溢出错误。

Solidity 语言的整型变量步长一般以 8 递增, 支持从 uint8 到 uint256. 以 uint8 类型为例, 其变量长度为 8 位,支持存储的数字范围是[0,255]. 若试图将大小超过这个范围的数据存储到 uint8 类型变量中, 以太坊虚拟机(Ethereum virtual machine, EVM)将会自动截断高位, 从而导致运算结果异常, 产生整数溢出错误.
不同于其他程序, 智能合约整数溢出漏洞造成的损失是巨大且不可弥补的。 例如美链 BEC 合约的整数溢出漏洞导致其代币价值瞬间归零. 目前, 为了防止智能合约的整数溢出, 一方面可以在算数逻辑前后进行验证; 另一方面, 开发人员能使用 SafeMath 安全库处理算术逻辑, 防止整数溢出。

(3)权限控制漏洞
智能合约权限控制漏洞产生的最根本原因是未能明确或未仔细检查合约中函数的访问权限, 从而允许恶意攻击者能进入本不该被其访问的函数或变量. 权限控制漏洞主要体现在两个层面:

合约代码层:Solidity 智能合约函数和变量的访问限制有 4 种, 即 public, private, external, internal.如果函数未使用这些标识符, 那么默认情况下, 智能合约函数的访问权限为 public, 亦即该函数允许被本合约或其他合约的任何函数调用, 这种情况可能导致该函数被攻击者恶意调用;

合约逻辑层面:通常使用函数修饰器对函数或变量进行约束. 例如, 某些关键函数需要使用修饰器onlyOwner 或 onlyAdmin 来约束. 若未给这些函数添加修饰器, 任何人都有权利访问并操纵这些关键函数, 则很有可能导致关键函数被恶意攻击者操纵, 从而进一步地破坏智能合约逻辑.

(4)异常处理漏洞
以太坊智能合约中, 有 3 种情况会抛出异常:
① 执行过程中的 Gas(即部署或执行智能合约的费用)消耗殆尽;
② 调用栈溢出;
③ 执行语句中有 throw 命令。
一般来说, 如果被调用的合约抛出异常时, 合约将会通过回滚的方式处理异常行为, 即终止当前合约执行并恢复到上一步状态, 同时返回一个错误标识符(即 false).然而, 当一个合约以不同的方式调用另一个合约时, 以太坊智能合约却没有统一的方法处理异常, 发起调用的合约可能无法获取被调用合约中的异常信息. 例如, 智能合约中的子调用发生异常时, 通常会自动向上级传播, 但是一些底层调用函数(如 send, call, delegatecall)发生异常时只返回 False, 而不抛出异常 . 因此,仅仅根据有无异常抛出就判断合约执行是否成功是不安全的, 在调用底层函数时必须严格检查返回值, 并且对异常采用一致性的处理方式。

(5)拒绝服务漏洞
攻击者通过破坏合约中原有的逻辑, 消耗以太坊网络中的资源(如以太币和 Gas), 从而使合约在一段时间内无法正常执行或提供正常服务。

(6)类型混乱漏洞
编代码时人工类型错误。

(7)未知函数调用漏洞
当一个智能合约调用另一个合约中的函数时, 若函数和参数类型无法匹配到被调用合约中的函数, 此时将会默认调用该合约中的Fallback函数. 攻击者可以Fallback函数中隐藏恶意操作。

(8)以太冻结漏洞
转账操作是智能合约最重要且最独特的功能之一。 一些合约自身不实现转账函数, 是通过 delegatecall 调用外部合约中的转账函数来实现。 若外部合约带有 Self-destruct 或 Suicide 等操作时, 通过delegatecall 调用转账函数的合约很可能会发生因为被调用合约的自毁操作而导致自身以太币被冻结的情况。

2、EVM 执行层

(1) 短地址漏洞
利用了以太坊虚拟机自动补0的特性. 在智能合约ABI规范中, 输入的合约地址长度必须为20字节, 当地址长度小于20字节时, 以太坊虚拟机会通过在末尾自动补0来满足地址长度的要求. 然而, 正是因为这个特性使得恶意攻击者有机可趁. 例如, 攻击者故意把账户地址少输一个字节, 以太坊虚拟机解析时就会从下一个参数(即以太币数量)取缺少的编码位数对地址进行补全, 然后在整串二进制码的末位补0至正常的编码位数, 这就意味着以太币数量这个参数被左移了一个字节, 此时若是执行的是转账操作, 则可能使合约转出超出实际应该转发的以太币数量给攻击者。(真坏啊)

(2) 以太丢失漏洞
智能合约转账以太币时必须指定接收方的合约地址, 并且地址必须是规范的. 若是接收方的合约地址是完全独立的空地址, 即它们与任何其他用户或合约都没有关联, 如果将以太币转账给这样的合约地址, 将会导致以太币永远丢失。

(3) 调用栈溢出漏洞
智能合约每调用一次外部合约或者自身调用, 都会增加一次合约的调用栈深度. 在以太坊虚拟机中, 调用栈的限制为1 024, 若攻击者设计一系列的嵌套调用, 最终可能会成功引发调用栈的溢出, 从而进一步使智能合约处于不安全的状态。

(4) Tx.Origin 漏洞
全局变量tx.origin, 它能够回溯整个调用栈返回最初发起调用的合约地址. 若是合约使用这个变量做用户验证或授权操作时, 攻击者便可以利用tx.origin的特性创建相应的攻击合约盗取以太币.

3、区块链系统层

(1) 时间戳依赖漏洞
智能合约通常使用区块时间戳(block.timestamp),由矿工在区块链网络中确认。合约可以检索区块的时间戳,而且一个区块中的所有交易共享同一个时间戳,以确保合约执行后状态的一致性。然而,矿工在创建区块时可以在一定程度上选择有利于他们的时间戳,以谋取利益。

(2) 区块参数依赖漏洞
在以太坊智能合约中,无法直接创建真正的随机数。为了产生随机数,合约开发者通常会编写随机函数,并使用区块号(block.number)、区块时间戳(block.timestamp)或者区块哈希(block.blockhash)等相关的区块参数或信息作为种子来生成随机数。然而,类似于时间戳依赖漏洞,由于这些区块参数可以被矿工提前获取,导致生成的随机数是可预测的。因此,恶意攻击者可能会利用这一漏洞,产生对他们有利的随机数。

(3) 交易顺序依赖漏洞
在区块链网络中,交易的执行顺序由矿工决定。某些合约对交易执行顺序有严格要求,错误的顺序可能对合约造成负面影响。在图2所示的交易顺序依赖案例中,用户1和用户2在t时刻同时提交了交易T1和T2。然而,T1和T2的执行顺序由区块中的矿工决定。如果T1先执行,合约状态将由S变为S1;反之,将变为S2。因此,最终的合约状态取决于矿工选择的交易执行顺序。如果恶意的矿工监听到区块中对应的合约交易,便可以通过提交恶意的交易改变当前合约状态,从而有机会提前部署攻击。

4、典型案例
  • The DAO案例
    智能合约漏洞检测,论文阅读,智能合约,区块链
  • KoET案例

智能合约漏洞检测,论文阅读,智能合约,区块链
智能合约漏洞检测,论文阅读,智能合约,区块链

  • Parity Multi-Sig Wallet案例
    智能合约漏洞检测,论文阅读,智能合约,区块链
  • 美链BEC合约整数溢出案例
  • 庞氏骗局合约Rubixi案例(好离谱啊)
    智能合约漏洞检测,论文阅读,智能合约,区块链

四、智能合约安全分析方法

https://www.mubu.com/doc/B8-6SK8MQV

五、智能合约漏洞检测工具的性能评估

(1) 准确率
漏洞检测其实是一个二分类问题,即检测工具判断合约是否存在某类漏洞,而对于二分类问题,通常将真实情况和检测结果的匹配结果作为重要评估指标,其中:

  • TP:True Positive,分类器预测结果为正样本,实际也为正样本,即正样本被正确识别的数量。
  • FP:False Positive,分类器预测结果为正样本,实际为负样本,即误报的负样本数量。
  • TN:True Negative,分类器预测结果为负样本,实际也为负样本,即负样本被正确识别的数量。
  • FN:False Negative,分类器预测结果为负样本,实际为正样本,即漏报的正样本数量。

● 真阳性(true positive, TP): 对于某一合约, 检测工具的检测结果是有漏洞且真实情况也是有漏洞, 即检测结果是正确的;
● 假阳性(false positive, FP): 对于某一合约, 检测工具的检测结果是有漏洞而真实情况却是无漏洞, 即检测结果存在误判;
● 假阴性(false negative, FN): 对于某一合约, 检测工具的检测结果是无漏洞而真实情况却是有漏洞, 即检测结果存在漏判;
● 真阴性(true negative, TN): 对于某一合约, 检测工具的检测结果是无漏洞且真实情况也是无漏洞, 即检测结果是正确的。
其中,TP+FP+FN+TN的结果是所有智能合约的测试样本, 智能合约真实值和检测值的混淆矩阵(confusion matrix)如图 , 其中, 准确率的计算方法如公式(1)所示:
智能合约漏洞检测,论文阅读,智能合约,区块链
智能合约漏洞检测,论文阅读,智能合约,区块链
(2) F1-Score
F1-Score是分类问题中重要的衡量指标, 它是精确率(precision)和召回率(recall)调和平均数, 常被用作一些分类问题的最终评估标准。
智能合约漏洞检测,论文阅读,智能合约,区块链

(3) 平均检测时间

一些相关概念文章来源地址https://www.toymoban.com/news/detail-839837.html

 - 图灵完备:图灵完备性 (Turing Completeness) 是针对一套数据操作规则而言的概念。数据操作规则可以是门编程语言,也可以是计算机里具体实现了的指令集。当这套规则可以实现图灵机模型里的全部功能时,就称它具有图灵完备性。直白一点,图灵完备性就是给一个工具箱内容:包括无限内存、if/else 控制流、while 循环......从而实现所有可计算的问题。
 - DAO:DAO的全称为Decentralized Autonomous Organization,直译为分布式的自治组织,是一种将组织的管理和运营规则以“智能合约”的形式编码在区块链上,从而在没有集中控制或第三方干预的情况下自主运行的组织形式。
 - 分叉:随着比特币越来越为人所知,比特币的交易越来越大,比特币网络原本的区块容量变得不够用。分叉就是复制了比特币原有的代码特性基础上,修改了部分的代码,并产生了一套新的代码。分叉主要是为了解决拥堵和扩容问题。不同的团队针对这些问题在比特币现有网络的基础上提出了新的解决方案,这就是分叉。在分叉的过程中,又有新的币产生,这些币就叫分叉币。
 - 软分叉:区块链网络系统版本或协议升级后,旧的节点并不会意识到比特币代码发生改变,并继续接受由新节点创造的区块,新老节点始终还是在同一条链上工作。
 - 硬分叉:指比特币区块格式或交易格式(共识机制)发生改变时,未升级的节点拒绝验证已经升级的节点产生的区块,然后大家各自延续自己认为正确的链,所以分成两条链。
 - EVM 字节码:是以太坊虚拟机的指令集,用于执行以太坊智能合约。EVM字节码是一种低级的、面向栈的编程语言,由一系列操作码(opcodes)组成。

到了这里,关于【论文阅读】 智能合约安全漏洞检测技术研究综述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第一套智能合约安全漏洞测试(0基础版)

    第一套题的智能合约安全漏洞测试题目 漏洞合约代码 总结: EtherStore合约 是一个简单的储蓄合约,用户可以存入和提取以太币。 Attack合约 是针对 EtherStore 合约设计的,它包含了一个构造函数来引用目标 EtherStore 合约 ,并提供了一个 attack 函数 ,试图通过先存入再立即提取

    2024年04月11日
    浏览(27)
  • Solidity 合约安全,常见漏洞 (下篇)

    Solidity 合约安全,常见漏洞 (上篇) 目前不可能用区块链上的单一交易安全地产生随机数。区块链需要是完全确定的,否则分布式节点将无法达成关于状态的共识。因为它们是完全确定的,所以任何 \\\"随机\\\"的数字都可以被预测到。下面的掷骰子函数可以被利用。 如何来产生

    2024年02月11日
    浏览(23)
  • Solidity 合约安全,常见漏洞(第三篇)

    如果你只处理受信任的 ERC20 代币,这些问题大多不适用。然而,当与任意的或部分不受信任的 ERC20 代币交互时,就有一些需要注意的地方。 ERC20:转账扣费 当与不信任的代币打交道时,你不应该认为你的余额一定会增加那么多。一个 ERC20 代币有可能这样实现它的转账函数,

    2024年02月09日
    浏览(16)
  • Github用人工智能(AI)帮你的代码修正安全漏洞

      每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与

    2024年02月20日
    浏览(31)
  • 面向人工智能的自动化安全检测与漏洞挖掘

    作者:禅与计算机程序设计艺术 《面向人工智能的自动化安全检测与漏洞挖掘》 1.1. 背景介绍 随着人工智能技术的快速发展,各种网络安全威胁也随之而来。为了保障国家的网络安全,人工智能安全检测与漏洞挖掘技术应运而生。人工智能安全检测与漏洞挖掘技术,可以通

    2024年02月14日
    浏览(23)
  • AI技术在智能家居安全系统中的应用:漏洞和风险分析

    作者:禅与计算机程序设计艺术 引言 智能家居安全系统是人工智能技术在家庭安全领域的重要应用之一。通过智能化手段,如语音识别、图像识别、自然语言处理、机器学习等,可以实现对家庭环境的智能感知、安全监控和智能控制。近年来,AI技术取得了飞速发展,逐渐成

    2024年02月16日
    浏览(16)
  • 【论文笔记06】智能合约的合约安全和隐私安全研究综述

    计算机学报 原文作者: 胡甜媛 李泽成 李必信 包骐豪* 原文标题: 智能合约的合约安全和隐私安全研究综述* 原文链接: 智能合约的合约安全和隐私安全研究综述 - 中国知网 原文来源: 计算机学报 笔记作者:quangaoyuan 笔记小编:quangaoyu an 区块链;智能合约;合约安全;

    2024年02月06日
    浏览(23)
  • 移动应用安全合规动态:网信办发布2大重磅文件!《儿童智能手表个人信息和权益保护指南》发布;iOS出现0 day漏洞(第2期)

    一、监管部门动向: 网信办发布《网络安全事件报告管理办法(征求意见稿)》、《粤港澳大湾区(内地、香港)个人信息跨境流动标准合同实施指引》;《 儿童智能手表个人信息和权益保护指南》爱加密深度参编! 二、安全新闻: 苹果\\\'Lockdown Mode\\\'的破解之法被发现;中国

    2024年02月03日
    浏览(22)
  • 2023安全与软工顶会/刊中区块链智能合约相关论文

    主要整理了2023年四大安全顶会、四大软工顶会和两个软工顶刊中,有关区块链智能合约的相关论文。 搜索方式 是:在 dblp 中该顶会的页面列表直接使用 Ctrl + F 搜索 block 、smart contract,所以如若名字中没有,可能会有遗漏。 搜集包含有: 软工顶会:ISSTA、FSE、ASE、ICSE 软工顶

    2024年02月13日
    浏览(18)
  • 常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍

    Web安全漏洞是指在Web应用程序中存在的可能被攻击者利用的漏洞,正确认识和了解这些漏洞对于Web应用程序的开发和测试至关重要。 一、常见的Web安全漏洞类型: 1、跨站脚本攻击(Cross-Site Scripting,XSS):攻击者通过向Web页面注入恶意脚本来执行恶意操作,例如窃取用户敏感信

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包