BTCV繁华资讯 > 货币新闻 > DeFi合同审核中的那些“例行程序”_btcv-繁华资讯

DeFi合同审核中的那些“例行程序”_btcv-繁华资讯

作者:_btcv-繁华资讯来源:_btcv-繁华资讯 货币新闻 2020年09月25日

在正式部署DeFi项目之前,通过合同的安全审核,不仅可以对项目的代码规范、漏洞和业务逻辑进行全局检查。同时,项目审计对项目方在投资市场的形象塑造也起到了一定的作用。市场投资者在选择项目时,如果项目方有福星合同审计的经验,会向审计师和审计师报告

在正式部署DeFi项目之前,通过合同的安全审核,不仅可以对项目的代码规范、漏洞和业务逻辑进行全局检查。同时,项目审计对项目方在投资市场的形象塑造也起到了一定的作用。

市场投资者在选择项目时,如果项目方有支持合同审计的经验,并公开披露审计师、审计报告等信息,投资可信度无疑会大大提高。此外,项目方对建筑安全立场的完美认识也将在无形中赋予项目额外的价值。

同时,DeFi项目方在运营过程中与安全审计公司保持着长期的业务合作,这将对安全管理和业务拓展都有很大的好处。毕竟,在项目的长期发展中,阶段性安全审计机制可以发现并有效帮助解决整体和局部风险问题。

那么,DeFi合同审核的主要流程、内容和特点是什么?

套路一:前期“把脉”

与DeFi项目方达成合同审计合作关系后,在了解项目整体情况的基础上,包括框架和业务设计,指派具有相关项目审计经验的安全测试团队提供专项服务,同时明确项目测试范围和相应的需求重点。做好前期的“把脉”,主要包括:

1、DeFi项目方提供真实、有效且为审计所需的各项技术、代码、文档等资料。

2、正式进入检测环节前,安全团队将对提供的材料进行全面评估,以确定周期。

3、确定测试服务范围,包括定向模块、局部代码、全面安全审计等。

4、完成相关需求对接,即对源代码、应用程序、文件信息、测试环境的最终确认。

为了对DeFi项目合同的代码标准化、安全性和业务逻辑进行严格的安全审计,在测试明确后,合同审计的常规处理方式如下:

形式证明

静态分析

动态分析

典型案件

人工审查

套路二:形式化验证

形式化方法是实现安全可信软件最可靠的手段。它使用基于数学的符号系统给出软件正确性和安全性的严格定义和形式化证明。其中,严格定义称为形式规范,是用清晰简洁的手段描述软件功能或特性的逻辑表达。

在合同审核中,形式化方法采用定性需求属性,从而证明程序中不存在一定的安全漏洞。另一方面,传统的测试方法通过检查代码是否在一组选定的输入上按预期运行来显示程序是否存在安全漏洞,但不能证明不存在相同类型的安全漏洞。

此外,传统的测试方法很容易遗漏罕见或恶意构建场景中触发的错误,以及大量“不可能事件”连续发生导致的错误。而形式化方法通过明确代码意图,提供输入空间的完整覆盖,可以发现这些细微的错误,从而增强程序的安全性和可靠性。

DeFi合约审计中的那些“套路”

成都连安创始人、多年正式验证研究专家杨霞教授说:

“传统的验证方法无法穷尽可能出现的情况,而形式化验证可以穷尽。该方法是最可信和有效的智能合同漏洞检测方法。

成都联安智能合同一键自动形式化验证工具作为以太网智能合同安全检测的定制工具,能够准确定位有风险的代码位置,指出风险原因,有效检测智能合同常规安全漏洞,准确率达到97%以上,为智能合同代码提供“军用级”安全验证。"

套路三:代码规范审计

在代码规范审核中,主要测试项目有:

DeFi合约审计中的那些“套路”

编译器版本问题可能会导致各种已知的安全问题。开发人员应该在代码中为合同代码指定最新的编译器版本,并消除编译器警告。

同时,Solidity智能契约开发语言处于快速迭代中,部分关键词被新编译器丢弃,如throw、years等。为了消除可能存在的隐患,应该禁用当前编译器版本丢弃的关键字。

在智能合同中,冗余代码会降低代码的可读性,并且可能会消耗更多的气体用于合同部署。因此,必须找到并消除冗余代码。此外,还需要严格检查SafeMath库中的函数是否正确用于合同中的数学运算。

稳固性使用状态恢复异常来处理错误。该机制将撤消当前调用及其所有子调用中对状态所做的所有更改,并将错误标记给调用方。

函数assert和require可用于检查条件,并在条件不满足时引发异常。assert函数只能用于测试内部错误和检查不变量。require函数用于确认条件的有效性,如输入变量或合同状态变量是否满足条件或验证外部合同调用的返回值。

Ethereum虚拟机在执行契约代码时需要消耗气体。当gas不足时,代码执行会抛出gas异常,撤销所有状态变化。合同开发人员需要控制代码的气体消耗,以避免由于气体不足而导致功能执行失败。

此外,应严格检查合同功能的可见性是否满足设计要求,以及回退功能在当前合同中是否正确使用。

套路四:DeFi安全漏洞审计

目前,业务逻辑漏洞在DeFi项目中最为常见。由于项目的业务逻辑设计不严谨,在一定情况下很有可能会出现项目内部的不平衡。

需要注意的是,DeFi项目基于区块链智能合同开发,在传统金融体系之外具有许多特点,例如:

可以为单个事务启动多个内部事务,并且可以回滚失败

具有通货紧缩性质的标志

合同代码不能修改

同时,审计中存在一个常见的契约权限错误,即契约中函数的可见性修改错误。通常这是因为调用者和参数没有得到有效验证,导致函数被恶意用户调用,造成巨大损失。

与传统的安全问题类似,错误的权限配置和无效的安全检查会给系统带来巨大的风险。然而,不同的是,智能合同的不变性使得即使发现了这些问题,也不可能有效地解决它们。

此外,重新进入漏洞也是审计的重点。具体来说,当契约调用出来时,攻击者可以利用契约调用的特点,反复调用函数,导致契约的预期执行顺序出现错误,从而窃取目标账户的资产。

在审计中,代码错误经常发生。这主要是由于开发人员的错误导致的一些编码错误。常见的有单位误差、忘乘精度、使用误差等。在YAM漏洞事件中,当代码对rebase进行弹性调整时,其代码只是忘记了乘以精度,如图所示:

DeFi合约审计中的那些“套路”

在保证对代码和漏洞进行深度检测的同时,项目的业务方面还提供了业务逻辑和实现的相关审计,包括检查DeFi项目涉及的令牌基本信息,确认与令牌标准相关的功能,特别是对造币、令牌销毁、所有者变更等特殊权限的审核和风险分析。

很多项目都有代理转让的逻辑。在处理这种逻辑时,很多项目方会直接要求用户对项目方的合同授权最大令牌,如下图所示:

DeFi合约审计中的那些“套路”

这样,合同就有权利转移所有的用户资金。另外还有双重授权的问题。授权时,项目方网站发起两个授权,一个为合同地址,一个为外部地址。如果用户对此不警惕,他们将面临巨大的财务风险。

套路五:审计报告

合同审计最终服务于DeFi项目的资金安全,这方面的很多问题都与函数和算法不当有关。因此,合同审计是指出可能导致资本风险的内容,即代码、漏洞、漏洞等隐患和问题

在审计报告中,除了审计时间、期限、审计人员等基本信息外,还会反映项目的投资预警提示。审计报告的核心内容是在设计和代码实现中反映被测智能合同的多维度审计结果。同时,报告将指出发现的各种风险问题,并通知项目方进行修复。

通过审计报告,将详细提示合同的风险组成部分,包括不同级别和层次的潜在攻击和漏洞。但安全审计报告中醒目的“通过”一词,不应作为投资者唯一的投资判断依据。

结语

合同审核不是项目本身的好消息,而是上线前必须的安全工作,对项目方和投资方都有重要意义。

投机市场要么是暴力的,要么是萧条的。走路不按套路出牌,最终还是要服从套路。一瞥之下,只有能防患于未然的安全巅峰才显得突出。

标签: btcv