1、找准1个漏洞,探索解决方案
2、找准一个方法,看看能识别哪些漏洞
3、针对某一应用领域的智能合约的漏洞检测
静态分析工具上进行了大量的研究工作,这些工具可以在部署之前检测漏洞。但是,当前很少有安全工具可以在部署后保护智能合约。
3.2。分析方法
静态分析: 静态软件分析是一种从程序的已编译二进制代码研究程序行为而无需执行该程序的方法,以寻找通常会导致漏洞的已知模式。进行静态分析时,有一些过程,例如:
反汇编:将二进制代码转换为易于理解的指令集的过程。
反编译:从代码反生成高级语言的反汇编代码的过程。
符号执行:使用符号代替对变量使用特定值。这些符号上的运算导致代数项,而条件语句则产生表征分支的命题公式。如果在到达此部分的过程中公式的结合令人满意,则可以实现代码的特定部分,这可以由SMT求解器检查。
控制流图:使用图形表示程序执行可能遵循的路径。
模式识别:此操作搜索已知包含潜在漏洞代码的字节码部分。
基于规则的分析:一种将CFG转换为规则表示的方法。
动态分析: 这种类型的分析在程序的执行阶段起作用,在进行验证的同时检测在静态分析过程中可能未注意到的漏洞(例如,由于存在混淆的代码或有抵抗力的包装)那些被这个发现的。
执行跟踪:与静态分析中的CFG一样,合同执行跟踪是在执行过程中由此生成的。(动态污点跟踪)
符号分析:通过在执行时的不同跟踪中,通过在变量中插入不同的符号值并记录所产生的不同输出来执行合同的符号执行。
假阳性判断:在进行符号分析后,一旦合同被确定为可能的脆弱候选对象,将使用具体数据对符号分析的结果进行验证。
形式验证: 通过这种类型的分析,使用诸如SMT Z3和Coq等定理证明,使用正式的数学方法进行验证以测试代码的特定属性。
控制流分析是一种具有许多应用程序的基本动态分析技术。除了控制流之外,还可以分析执行的其他方面,例如数据流[51]G. Ammons and J. R. Larus, “Improving data-flow analysis with path profiles”, Proc. ACM Special Interest Group Program. Lang. Notices, vol. 33, pp. 72-84, 1998.或动态不变量[52]M. D. Ernst, J. Cockrell, W. G. Griswold and D. Notkin, “Dynamically discovering likely program invariants to support program evolution”, IEEE Trans. Softw. Eng., vol. 27, no. 2, pp. 99-123, Feb. 2001.。
-
针对重入攻击及其防御的论文:
-
N. Fatima Samreen and M. H. Alalfi, “Reentrancy Vulnerability Identification in Ethereum Smart Contracts,” 2020 IEEE International Workshop on Blockchain Oriented Software Engineering (IWBOSE), London, ON, Canada, 2020, pp. 22-29, doi: 10.1109/IWBOSE50093.2020.9050260.
https://ieeexplore.ieee.org/document/9050260 -
Sergei Tikhomirov, Ekaterina Voskresenskaya, Ivan Ivanitskiy, Ramil Takhaviev, Evgeny Marchenko, and Yaroslav Alexandrov. 2018. SmartCheck: static analysis of ethereum smart contracts. In Proceedings of the 1st International Workshop on Emerging Trends in Software Engineering for Blockchain (WETSEB ’18). Association for Computing Machinery, New York, NY, USA, 9–16. DOI:https://doi.org/10.1145/3194113.3194115
-
C. Liu, H. Liu, Z. Cao, Z. Chen, B. Chen and B. Roscoe, “ReGuard: Finding Reentrancy Bugs in Smart Contracts,” 2018 IEEE/ACM 40th International Conference on Software Engineering: Companion (ICSE-Companion), Gothenburg, 2018, pp. 65-68.
https://ieeexplore.ieee.org/document/8449446 -
M. Rodler, W. Li, G. O. Karame, and L. Davi, “Sereum: Protecting existing smart contracts against re-Entrancy attacks,” in NDSS, 2019.
阅读报告
原文地址:https://arxiv.org/pdf/1812.05934.pdf
本文针对重入(Re-entrancy)攻击提出了一种新的智能合约安全技术,称为Sereum(Secure Ethereum),其能够通过运行时监测和验证,以向后兼容的方式保护已被部署的合约不被攻击者利用。Sereum既不需要对合约进行任何修改,也不需要掌握合约的任何语义信息。
可选的主流测试环 境有 3 种:以太坊私有链、Ropsten 测试链、 Ganache 以太坊模拟器[41]。因为 Ganache 提供最 为纯净的部署环境以及较快的交易执行速度,本文选择 Ganache 作为测试环境。
文章在以太坊(Ethereum)区块链上实现并评估了Sereum,其能够覆盖合约的实际执行流,以低至0.06%的误报率和可被忽略的运行时开销精确地检测和防御重入攻击。
-
-
[Arxive’20]Empirical Review of Automated Analysis Tools on 47,587 Ethereum Smart Contracts
We report that the current state- of-the-art is not able to detect vulnerabilities from two categories of DASP10: Bad Randomness and Short Addresses- 漏洞检测工具的精确度、平均时间 ,提供了智能合约数据集合
- We observe that the tools underperform to detect vulnerabilities in the following three categories: Access Control, Denial of service, and Front running.
- Therefore, we suggest the combination of Mythril and Slither, since it detects 42 (37%) of all the vulnerabilities
-
SODA: A Generic Online Detection Framework for Smart Contracts
- 现有方法。现有的保护智能合约的方法大致可以分为离线和在线两种。离线方法分析智能合约以发现漏洞[8]-[17],检查其正确性[18]-[21],对智能合约的字节码进行反向工程[22]-[26],检测恶意智能合约[27],[28]等等。但是,由于缺乏运行时信息和所选技术的固有限制,脱机方法无法保证能够检测并删除所有漏洞。因此,通过这些方法处理后的智能合约仍然可能受到攻击。在线方法尝试检测针对智能合约的攻击,或在部署后保护智能合约免受攻击[29]–[37],可分为两类。第一类将保护代码插入智能合约的源/字节码中[29]、[31]–[33]。然而,它们的能力[29]、[31]–[33]受到EVM字节码[38]和气体机制[39]的大小限制。第二类将保护代码插入智能合约(例如EVM)[30]、[34]–[37]的运行时。然而,这些方法不容易扩展到检测新的攻击[30]、[35],或者缺乏详细的设计、实现和评估[34]、[36],或者是资源消耗并且可能会错过许多攻击[37]。我们在第八章详细介绍了现有的方法。
- 灵感来自于Sereum :Protecting Existing Smart Contracts Against Re-Entrancy Attacks
-
针对智能合约的算术问题:算术溢出
- VERISMART: A Highly Precise Safety Verifier for Ethereum Smart Contracts