论文 | 来源 | 内容 |
---|---|---|
区块链安全问题:研究现状与展望 | 自动化学报 2019 | 本文定义了区块链系统设计追求的安全目标, 从机制漏洞、攻击手段和安全措施三方面对区块链各层级的安全问题进行分析, 提出了区块链的平行安全概念框架 |
区块链公链应用的典型安全问题综述 | 软件学报 2022 | 以比特币和以太坊为例, 剖析了针对面向代币交易和应用的区块链系统的各类安全威胁以及应对方法; 接着分析钱包和用户的安全隐患 |
区块链系统攻击与防御技术研究进展 | 软件学报 2020 | 本文从层级分类、攻击关联分析两个维度对区块链已有安全问题的系统架构、攻击原理、防御策略展开研究 |
区块链中攻击方式的研究 | 计算机学报 2021 | 分析区块链攻击方式,提出了对攻击方式的分类方法,体现了不同攻击方式间的差异性和关联性,归纳攻击的特点并给出了预防措施和检测方法 |
智能合约漏洞检测研究综述 | 计算机科学与探索 2022 | 通过对常见漏洞的分析,漏洞检测方法和工具的国内外现状调研并分析优缺点,复现部分工具进行实验,以检测速度、准确率以及支持的漏洞数量为标准,展示漏洞检测工具的性能 |
区块链的网络安全:威胁与对策 | 信息安全学报 2018 | 本文针对区块链数据的完整性、匿名性与隐私保护的安全需求, 系统分析了区块链的安全攻击, 综述了安全保护技术研究进展 |
智能合约漏洞及检测技术研究综述 | 网络安全技术与应用 2022 | 详细介绍了智能合约的14种典型安全漏洞,总结了漏洞防范的方法;针对漏洞检测技术进行分类,介绍检测工具解决的问题,实现原理,比较检测技术和工具的优劣 |
区块链安全能力测评与分析报告 | 中国信通院 2021 | 综合分析区块链基础设施安全能力测评情况,总结了安全隐患,对2021-2023年区块链基础设施安全新方向提出展望 |
网络安全国家标准研究项目研究报告 | 北航 伍前红 2018 | 国内外区块链发展现状和相关政策;区块链安全需求以及面临的主要威胁;区块链应用典型案例;区块链安全参考架构;区块链安全标准化建议 |
区块链的安全威胁与取证 | 付章杰-南京信息工程大学 | 本报告介绍了区块链取证的背景,区块链取证的研究现状与存在的技术挑战,研究内容主要包括通用感知和精准取证 |
智能合约漏洞检测技术综述 | 董伟良-软件学报 2023 | 本文搜集了84篇智能合约相关的论文并按照核心方法进行分类,分析了实现方法、漏洞类型、实验数据等方面的分析 |
智能合约漏洞检测研究综述-李雷孝-计算机科学与探索
介绍了重入攻击漏洞、整数溢出以及访问控制漏洞的分析
给出了形式化验证、符号执行、机器学习等方法和工具的现状以及优缺点
复现了部分工具,给出了检测速度、准确率、漏洞数量等性能对比
区块链和智能合约
安全问题出现的原因主要有:
智能合约一旦部署不可修改
合约执行后不可逆
编程语言自身问题或程序员的逻辑问题
智能合约的设计准则:
- 可观察性
- 客观可核查
- 相对性
- 可执行性
智能合约一般采用高级语言Solidity编写,智能合约应用采用EVM字节码编码后存储在区块链上
智能合约的漏洞
重入漏洞:
fallback
函数在调用结束前让攻击者有机会再执行被调用的函数,类似于递归调用fallback
在合约调用没有匹配到函数签名,或者调用没有带任何数据时被自动调用。
整数溢出:以太坊提供了SafeMath库,会提前检测整数溢出
- 乘法
- 加法
- 减法
访问控制漏洞:合约中函数的权限设置不合理,如未定义类型的函数默认为public
- 交易顺序依赖攻击:算出PoW的矿工可以选择打包哪些交易,攻击者可以观察交易池中存在哪些可能对自己不利的交易,攻击者可以创建包含更高gas的交易,使得自己被优先打包,核心问题是矿工根据gas交易来选择打包的交易
- 对可预测变量的依赖:以太坊的随机数通过区块的某些属性来生成,攻击者可能能够预测到随机数的生成
- tx-origin滥用:
tx-origin
作为一个全局变量,能够回溯整个调用栈被返回租出发起交易的合约地址,当合约使用该变量进行验证或授权,可能能够绕过某些判断语句 - DoS:可能导致合约被锁定,用户的加密货币无法取回
- 动态数组双重访问攻击:不同变量可能存储在同一个位置,可能导致变量被覆盖,目前没有有效的工具
- 绕过
- 提权
智能合约漏洞检测方法
不可篡改性:上链前
形式化验证
- BAN逻辑
- 模型检验
- 密码学原语代数属性的形式化方法
基于定理证明
形式化验证包括
- 模型检验:列举出所有可能的状态主义检验
- 演绎验证
- 形式化验证的工具:
- ZEUS. KALRA S, GOEL S, DHAWAN M, et al. ZEUS: analyzing safety of smart contracts[C]//Proceedings of the 25th Annual Network and Distributed System Security Symposium, San Diego, Feb 18-21, 2018: 1-15.
- 无法检测重入攻击和跨功能的分析策略
- Isabelle/HOL:针对EVM 字节码进行检测
- ZEUS. KALRA S, GOEL S, DHAWAN M, et al. ZEUS: analyzing safety of smart contracts[C]//Proceedings of the 25th Annual Network and Distributed System Security Symposium, San Diego, Feb 18-21, 2018: 1-15.
符号执行的审计方法
将代码中的变量符号化符号化程序输入,符号执行能够为所有的执行路径维护一组约束,执行之后,约束求解
器将用于求解约束并确定该执行的输入,最后利用约束求解器得到新的测试输入,检测符号值是否可以产生漏洞。
步骤:符号化、逐条解释、更新状态搜集路径约束,完成所有路径的探索(安全问题)
Oyente 第一个用于以太坊上的漏洞检测支持重入漏洞、交易顺序依赖以及伪随机等安全漏洞的检测,但是该工具对于自杀合约和
tx-origin
的滥用问题并不能做到有效的检测Mythril mythril · PyPImythril · PyPI
- MythX MythX: Smart contract security service for Ethereum
利用模糊测试的审计方法
提供非预期输入监视异常结果来发现软件漏洞。
核心思想是将自动或半自动生成的随机数输入程序并检测到程序的异常。
工具:
- ContractFuzzer 分析日志进行分析检测 JIANG B, LIU Y, CHAN W K. ContractFuzzer: fuzzing smart contracts for vulnerability detection[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering, Montpellier, Sep 3-7, 2018. New York: ACM, 2018: 259-269.
- SoliAudit 机器学习和模糊测试结合 LIAO J W, TSAI T T, HE C K, et al. SoliAudit: smart contract
vulnerability assessment based on machine learning and fuzz testing[C]//Proceedings of the 6th International Conference on Internet of Things: Systems, Management and Security, Granada, Oct 22-25, 2019. Piscataway: IEEE, 2019: 458-465. - GasFuzzer 检测交易中有较高gas 消耗异常的工具
机器学习
多将代码转换为控制流图,利用CFG进行切片,对切片矩阵建立了机器学习的决策模型
准确率较高,研究丰富
其他方法的漏洞检测技术
以太坊中,透明公开的智能合约占了总交易量和总交易金额的2/3 左右,但是有大约77.3%的智能合约是不透明非开源的
Erays 采用逆向工程进行漏洞检测,难以实现高自动化,更适合于手动分析并且高度依赖专家经验 ZHOU Y, KUMAR D, BAKSHI S, et al. Erays: reverse engineering Ethereum’s opaque smart contracts[C]//Proceedings of the 27th USENIX Security Symposium, Baltimore, Aug 15-17, 2018. Berkeley: USENIX Association, 2018: 1371-1385.
Dc-Hunter 计算待检测合约和已知合约的相似性
- Slither 将智能合约转化为中间表示SlithIR FEIST J, GREICO G, GROCE A. Slither: a static analysis
framework for smart contracts[C]//Proceedings of the 2nd International Workshop on Emerging Trends in Software Engineering for Blockchain, Montreal, May 27, 2019. Piscataway: IEEE, 2019: 8-15. - EASYFLOW GAO J B, LIU H, LIU C, et al. EASYFLOW: keep Ethereum away from overflow[C]//Proceedings of the 41st International Conference on Software Engineering: Companion Proceedings, Montreal, May 25-31, 2019. Piscataway: IEEE, 2019: 23-26.
- SmartCheck TIKHOMIROV S, VOSKRESENSKAYA E, IVANITSKIY I, et al. SmartCheck: static analysis of ethereum smart contracts [C]//Proceedings of the 1st IEEE/ACM International Workshop on Emerging Trends in Software Engineering for Blockchain, Gothenburg, May 27-Jun 3, 2018. New York:ACM, 2018: 9-16.
各类方案存在的问题
- 形式化验证:数学推导和证明门槛高,自动化程度低
- 符号执行:涉及到路径遍历和约束问题,耗时
- 模糊测试:随机种子难以设计
- 机器学习方法:检测结果最好,依赖于开源的智能合约;需要对每种漏洞进行建模,降低了通用性
- 特征匹配:依赖开源代码,误报率高
实验
450个智能合约
对VaaS、Oyente、ContractFuzzer、DR-GCN、Slither进行了对比,主要测试可重入和可预测变量的依赖两种类型漏洞进行检测
实验结果显示机器学习的准确率最高,效率较高,但是支持的漏洞少,通用性差
Vaas 是商用级别的漏洞检测工具
未来研究方向
- 符号执行的路径优化
- 提高自动化程度:深度学习
- 提高漏洞类型覆盖率:目前众多漏洞检测工具个体支持检测的漏洞类型最多不超过10 种,但现有常见的漏洞类型多达 20 多种。机器学习实现通用模型
- 准确率和效率:解决假阳等问题
- 智能合约开源程度较低
- 机器学习方法构建通用模型
- 跨平台的漏洞检测工具
- 缺乏统一的评价指标
区块链安全问题: 研究现状与展望-袁勇-自动化学报
定义了区块链系统设计追求的安全目标, 从机制漏洞、攻击手段和安全措施三方面对区块链各层级的安全问题进行全面分析, 提出了区块链的平行安全概念框架, 并总结未来区块链安全问题的研究重点.
区块链的安全目标
实现保密性需要设计三类机制
共识安全部分主要参考了backbone,需要阅读这篇
强一致性不会出现分叉,确认快,前向安全
隐私保护
- 身份隐私保护身份信息、物理地址、IP和链上的公私钥不关联
- 交易隐私保护:交易本身对非授权节点匿名,交易之间的关联被切断
智能合约安全
- 编写安全
- 设计没问题
- 代码安全
- 运行安全:合约执行出现漏洞或被攻击后,不会对节点和本地设备造成影响,不会影响调用合约的其他合约异常
- 模块化:智能合约的高内聚低耦合
- 隔离运行:运行在虚拟化等隔离环境中
- 编写安全
安全问题
数据层、网络层、共识层、激励层、合约层和应用层六层
- 数据层:
- 量子计算
- 密钥管理:区块链应用中的主流密钥管理方法包括本地存储、离线存储、托管钱包和门限钱包.
- 密钥保护秘密分享[CCS11]
- 交易联系:环签名、零知识证明、zk-SNARK
- 代码漏洞:数字签名的延展性
- 网络层
- P2P: 缺乏身份认证、节点实际上身份不对等
- 网络拓扑:日蚀攻击
- 隐私:数据与IP地址的关联性;Tor;
- 混币:去中心化和中心化混币
- 共识层:共识机制在安全性建模时需要考虑网络时序性、节点数量拓展、在线离线切换、算力或权益的动态分布、共识难度变更、区块链增长速率等多变量因素. 由于共识机制下层的网络环境复杂, 新的共识机制不断涌现, 传统的可证明安全框架无法完全适用于区块链. 共识机制的安全性面临建模困难、安全性证明不完备的问题.
- 又提到了backbone
- 目前对共识机制的可证明安全研究集中在PoW和PoS中
- 假设不可靠:依赖诚实节点拥有的算力和权益大多数
- 一致性:弱一致性共识算法可能存在分叉
- 受网络影响严重,同步性缺失时无法保持强一致性
- 分片:周期性节点轮换、跨片交易的原子性
- Dust Attack: 造成网络拥堵、大量交易排队验证;可能泄露账户关联性
- 区块链初始化困难问题:创世区块的安全生成
- 依赖第三方
- 由现有的、成熟的区块链过渡到新区块的创世区块
- 激励层:激励层还需要策略性行为检测和动态的奖励机制优化,主要解决经济学的 激励不相容问题
- 无利害关系攻击Nothing at Stake: 利益最大化的矿工会同时在分叉上进行挖矿
- 区块奖励归零0,仅依赖交易费是否安全
- 合约层:
- 外部数据调用问题:Oracle作为可信实体,实际上无法保证一致性和真实性
- 形式化验证和程序分析工具不完善
区块链公链应用的典型安全问题综述-魏松杰-软件学报
本文首先介绍了区块链技术, 回顾其面临的安全风险; 其次以比特币和以太坊两个典型系统为例, 剖析了针对面向代币交易和应用的区块链系统的各类安全威胁以及应对方法; 接着分析了钱包交易所等区块链周边设施和区块链用户的安全隐患; 最后对文中安全问题进行了分类总结, 提出可行技术线路和防御方法, 展望当前区块链安全的研究热点和发展趋势.
区块链1.0 比特币的安全问题
重放攻击往往出现在存在硬分叉的区块链中,一条链上的交易数据在另一条链上也有极大可能也是合法的. 攻击者只需抓取一条链上的交易数据, 再复制到另一条链上广播, 即可发动重放攻击
空快攻击的防御思路:区块链设计者可以设计共识, 使矿工的收益与块中的交易数目挂钩, 打包的块中的交易越多, 矿工的奖励就越高; 使矿工的挖矿难度与块中的交易数目挂钩, 根据打包的块中的交易数目略微减少矿工的挖矿难度,使得包含交易多的块更容易被挖出, 从而激励矿工们打包更多的交易.
长程攻击(PoS):
- 变节攻击:利用其他地址里的权利, 例如B 的地址, 哪怕在攻击者进行攻击时B地
址内的权益已经清空了, 只要B的地址内在攻击者需要的历史时刻下有大量的权益, 攻击者在获得该地址的私钥后, 就可以利用自己和B 的权益进行变节攻击
比特币等典型区块链中每个节点拥有两个节点表, NEW TABLE 存储了节点知晓但还未连接过的其他节点IP; TRIED TABLE 存储了曾经连接过但现在可能没有建立连接的其他节点IP. 攻击者需要利用傀儡节点IP或无效IP 填满两个节点表, 才能达到隔离节点的目的
区块链2.0 以太坊的安全问题
Gas 是以太坊为了防止恶意用户部署无限循环运行的合约, 而要求用户为所部署合约的每一步支付的费用, 智能合约的逻辑越复杂, 花费的 Gas 就越多. Gas价格是指花费每个Gas 所需要的以太币的数量, 可由用户自行调整
GHOST 协议, 以权重最高的子树作为合法主链
交易顺序依赖攻击:降低实际开销成本
区块链周边安全问题
- 钱包
- 在线钱包(热钱包)外界通过互联网访问私钥存储的地方
- 冷钱包:非联网状态,能够避免黑客攻击。硬件设备设计的缺陷可能存在==导致漏洞
- 矿池:
- 远程管理机制
- 恶意挖矿策略
- 自私挖矿:诚实节点为了获得超额的挖矿奖励,可能转入恶意矿池进行挖矿
- 跳池攻击:根据算力大小给矿池内参与挖矿的矿工结算收益, 结算模式有很多, 例如Proportional 模式、PPS 模式、PPLNS 模式等;
- 在Proportional 模式下, 从矿池挖到上个区块到挖到当前区块的时
间被称为一个挖矿周期, 每个矿工的区块奖励与一个挖矿周期内其有效工作量证明(share) 所占全部有效工作量的百分比成正比. 因此矿工们收益最高的策略是当当前挖矿周期长度到达一个阀值后, 跳槽到另一个才发现新区块、挖矿周期较短的矿池重新开始挖矿 - 可以采用更优的收益结算模式,如PPS模式或者PPLNS模式
- PPS: 矿工的收益=矿池用于奖励矿工的总币量×某个矿工提供的算力/当前网络难度.
- PPLNS: 矿工的收益=矿池用于奖励矿工的总币量×出块时该名矿工提交的有效工作量证明在总有效提交中占比.
- 在Proportional 模式下, 从矿池挖到上个区块到挖到当前区块的时
- 扣块攻击:恶意矿工在挖到新区块后不向矿池提交, 而是直接丢弃该区块, 从而减少矿池收入的攻击.
用户的安全问题
- 社会工程学
- 中间人攻击
- 撞库攻击
总结
大多数攻击针对的是区块链的共识层,设计漏洞较少、安全性较高的共识算法
针对PoW的攻击比较多
研究问题与最新进展
- 数据层
- 量子计算
- 隐私保护:多方零知识证明
- 网络层
- 针对区块链网络的异常检测系统
- 共识层
- 避免双花攻击:跨链的双花攻击 doi: 10.1109/TPS-ISA48467.2019.00014
- 其他类型的双花攻击
- 激励层
- 设计新的矿池收益结算模式,避免跳池攻击
- 扣快攻击的解决策略
- 合约层
- 智能合约漏洞检测
- 机器学习
- 智能合约代码修复,修复字节码
- 智能合约漏洞检测
- 应用层
- 分析查找非法交易相关地址
当前智能合约安全的研究重点主要为智能合约漏洞检测与修复. 现有的漏洞检测方案可以针对智能合约中的简单漏洞进行检测并提供审计报告, 部分降低了智能合约开发者出错的可能和人工审计成本. 但由于智能合约版本更新换代较快, 各个平台采用的智能合约底层框架不尽相同, 现有方案很难为所有平台所有版本的智能合约提供漏洞检测服务, 因此设计一种通用性强的智能合约漏洞检测工具是未来研究方向之一.
除了漏洞检测, 未来还可以通过研究标准化的智能合约编写工具以及智能合约漏洞自动修复工具来减少智能合约的安全风险. 另外, 站在智能合约设计者的角度, 为预防在复杂合约的编程过程中可能出现的安全漏洞以及因此而带来的风险, 设计一种“图灵完备”的安全脚本智能合约语言也是可以考虑的方案之一.
跨链场景下的攻击模型和防御方案
区块链安全标准体系研究-伍前红
智能合约就其本质而言,也是一种共识的概念。值得注意的是上述的共识机制、共识算法,都是针对已经发生的交易,进行记录并同步到所有节点。而智能合约究其目的,是确保未发生的交易,在条件满足后能自动触发并生成新的交易,并且这些未来的新交易能保证在各节点上记录的一致性。从这个意义上讲,智能合约是对未来交易的共识。具体而言,智能合约的技术包括合约的签署和分发,合约条件的触发以及最终的记录入链等。
主要讲解区块链的政策,在金融、医疗、物流等方面的实际应用
智能合约的安全漏洞
- 整数溢出类
- 拒绝服务类:合约无法响应
- 竞争条件:重入、交易顺序依赖
- 底层函数误用
- 权限验证错误类:tx.origin
- 算法缺陷:伪随机数利用不够随机
- 用户错误使用:授权错误
- 可见性声明:未正确声明合约的接口,public和private等
- 段地址攻击、无限制增发和销毁
区块链安全能力测评与分析报告2021-中国信通院
智能合约漏洞及检测技术研究综述-网络安全技术与应用
- 短地址漏洞:短地址漏洞通常指的是用户在交易所提取代币时,输入一个短地址,但交易所对用户所输入的地址长度没有检查其是否合法而引起的交易异常事件。以太坊虚拟机没有严格检查地址位数的机制,且具有自动补齐缺失位数的机制,这使短地址攻击漏洞更容易发生。为防范此漏洞,交易所需要做好校验用户输入地址长度工作,有效阻止恶意的短地址,减少经济损失
- 以太币冻结漏洞:合约需要设置接受和转出以太币的功能
- 时间戳依赖漏洞:更改可靠的时间戳来源
delegatecall()
函数可以任意执行其他智能合约的中的代码- 可利用外部的随机数据源取代使用区块变量开发而成的PRG
- 存储变量重复命名
- 严格balance比较漏洞
- 模糊测试是将自动或半自动生成的具有随机性的数据作为输入,运行将其作为输入数据的程序并持续监控,以检测程序异常情况。
- 符号执行是将输入数据变为符号值,程序的输出值是输入符号值的一个函数。
- 形式化验证通过形式化语言把合约中的概念、判断、推理转化成智能合约模型,可以消除自然语言的歧义性、不通用性,进而采用形式化工具对智能合约建模、分析和验证,进行一致性测试,最后自动生成验证过的合约代码,形成智能合约生产的可信全生命周期。
- 智能合约漏洞分析中,使用污点分析技术能够将来自程序外部的输入数据标记为污点数据,通过跟踪与污点数据相关的信息流向,可以判断污点数据及其相关数据是否会影响关键程序实现的功能完整性,进一步检测出合约程序漏洞。
- 程序分析技术
- 静态分析
- 动态分析:运行时方法实现
漏洞检测的主流技术仍为模糊测试、符号执行以及形式化验证。但同时也存在一些问题,现有的检测技术难以形成全面、体系的智能合约检测框架;检测技术优势较为单一,无法兼顾多种检测技术优势;对运行中的智能合约,未实现灵活、有效的合约维护、升级机制。对漏洞检测技术的研究,有利于推动智能合约安全性研究,保障区块链上智能合约的安全,进而降低了合约参与者的经济风险。
区块链的网络安全: 威胁与对策-信息安全学报
本文针对区块链数据的完整性、匿名性与隐私保护的安全需求, 系统分析了区块链的安全攻击, 综述了安全保护技术研究进展, 尤其对区块链密码学安全防护技术进行了对比分析。
智能合约漏洞检测技术综述-软件学报
收集了2014-2021年智能合约漏洞检测相关的论文,总结了对应的开源工具
- 收集方法:在各个数据库中先以smart contract作为关键词,根据security、vulnerability、vulnerable等关于安全性、可靠性的关键词进行检索,手工剔除了无关的论文,84/1031
- 结论:
- 2016年出现the DAO攻击后研究增加
- 论文主要发表在软件工程和网络信息安全相关会议和期刊上
- 2016年出现the DAO攻击后研究增加
符号执行
CCS16 Oyente
SANER17 Gasper,基于Oyente,针对于高gas消耗问题
- Chen T, Li XQ, Luo XP, Zhang XS. Under-optimized smart contracts devour your money. In: Proc. of the 24th IEEE Int’l Conf. on
Software Analysis, Evolution and Reengineering. Klagenfurt: IEEE, 2017. 442–446. [doi: 10.1109/SANER.2017.7884650]
- Chen T, Li XQ, Luo XP, Zhang XS. Under-optimized smart contracts devour your money. In: Proc. of the 24th IEEE Int’l Conf. on
- CCS18 Securify:基于字节码,分析CFG和DFG,和预定义的安全属性进行对比
- USENIX SECURITY18 teEther:从字节码的CFG中提取4种敏感指令的关键路径
- ACSAC18 MAIAN
- ASE19 Manticore
- USENIX Security19 HoneyBadger: Confuzzius的作者defense工作
- 20 EOSAFE :基于wasm字节码
模糊测试
ASE18 Contractfuzzer:姜博,提取出abi和参数数据类型,根据oracle生成测试输入
- EOSFuzzer:Eosio合约,姜博
- GasFuzzer IEEE Access
ICSE18 ReGuard:针对重入漏洞,利用ast和CFG将合约翻译成c++合约,再依赖成熟的模糊测试引擎生成随机的交易,对翻译后的合约进行测试,根据有限状态机的机制分析测试过程中的轨迹来检测重入漏洞
- ISSTA19 EthRacer:针对合约的event-ordering bug,先用符号执行技术分析合约中的事件路径,推理出每个事件的符号路径约束和先行发生关系,通过消除符号路径约束中的不可达路径;将分析出的时间随机模糊出更多的事件组合