在DeFi项目正式部署之前,合同的安全审计不仅可以在全局范围内检查项目的代码规范、漏洞和业务逻辑。同时,项目审计对塑造项目方在投资市场的形象具有一定的作用。
市场投资者在选择项目时,如果有合同审计经验,公开披露审计人员信息和审计报告,无疑会大大提高投资的公信力。此外,项目方完善的安全位置施工意识将赋予项目附加值。
同时,在运营过程中,DeFi项目方将与安全审计公司保持长期的业务合作,这对安全管理和业务拓展都将大有裨益。毕竟,在项目的长期发展中,阶段性安全审计机制能够及时发现并有效帮助解决整体和局部的风险问题。
那么,DFI合同审计的主要流程、内容和特点是什么?什么是“常规”?
例行程序01早期“脉冲”
在与DEFI项目方达成合同审计合作关系后,在了解项目总体情况的基础上,包括架构、业务设计等,指派具有相关项目审计经验的安全测试团队进行专项服务,同时,应明确项目检测的范围和相应的需求重点。主要内容包括:1
1项目方提供审核所需的真实有效的各类技术、规范、文件等资料。
2在正式进入测试阶段之前,安全小组将对提供的材料进行全面评估,以确定周期。
3确定测试服务的范围,包括定向模块、本地代码、综合安全审计等。
4最终确认的是测试环境,即源代码和测试环境的对接要求。
为了对DeFi项目合同的代码规范、安全性和业务逻辑进行严格的安全审计,在测试清楚后,合同审计的常规处理方式如下:
·形式验证
·静态分析
·动态分析
·典案例
·人工审核
常规02的正式验证
形式化方法是实现软件安全可靠的最可靠手段。它采用数学符号系统对软件的正确性和安全性给出严格的定义和形式化证明。其中,严格的定义被称为形式化规范,它是用简洁明了的方式描述软件功能或特性的逻辑表达式。
在合同审计中,形式化方法使用定性需求属性来证明程序中不存在安全漏洞。另一方面,传统的测试方法是检查代码是否按预期运行在一组选定的输入上,以显示程序中是否存在安全漏洞,但这不能证明同一类的安全漏洞不存在。
此外,传统的测试方法很容易漏掉在罕见或恶意的构建场景中触发的错误,以及由大量“不可能事件”引起的错误。然而,形式化方法可以通过明确代码意图和提供输入空间的完全覆盖来发现上述细微错误,从而提高程序的安全性和可靠性。
传统检测与形式验证
成都联安创始人、多年正规验证研究专家杨霞教授说:
“传统的验证方法不能尽可能的穷尽情况,而形式化的验证可以做详尽的验证。对于智能合约的漏洞检测,该方法是最可靠和有效的。
作为以太坊智能合约安全检测的定制工具,成都联安的beosin VAAs一键式智能合约自动正式验证工具,可以准确定位包含风险的代码,并指出风险原因。有效检测智能合约中常规安全漏洞的准确率高达97%,为智能合约代码提供了“军事级”的安全验证。”
例行03代码规范审核
在代码规范审核中,主要测试项目如下:
编译器版本问题可能导致各种已知的安全问题。开发人员应在代码中为合同代码指定**的编译器版本,并消除编译器警报。
同时,SOLidity智能合约开发语言正处于快速迭代阶段,新版编译器已经丢弃了一些关键字,如throw、years等,为了消除潜在的风险,应禁用当前编译器版本中放弃的关键字。
在智能合约中,冗余代码会降低代码的可读性,并且可能需要为契约部署消耗更多的气体。因此,有必要找出并消除冗余代码。此外,safemath库中的函数是否在合同中正确使用,还需要严格检查。
Solidity使用状态恢复异常来处理错误,这将撤消对当前调用和所有子类中状态所做的所有更改,并用错误标记调用方。
如果不满足条件,则可以使用assert和check。assert函数只能用于测试内部错误和检查非变量。require函数用于验证条件(如输入变量或协定状态变量)的有效性,以满足条件,或验证外部协定调用的返回值。
以太网虚拟机需要消耗气体来执行合同代码。当gas不足时,代码执行将抛出gas异常并取消所有状态更改。合约开发者需要控制代码的耗油量,以避免因气量不足而导致功能执行失败。
另外,合同功能的可见性是否符合设计要求,以及在当前合同中是否正确使用了回退功能,还需要严格把关。
例行04 DeFi安全漏洞审计
目前,业务逻辑漏洞是DeFi项目中最常见的。由于项目业务逻辑设计不严谨,在具体情况下极有可能导致内部不平衡。
需要注意的是,DeFi项目基于区块链智能合约的开发,具有传统金融体系之外的许多特点,如:
·单个事务可以启动多个内部事务,失败可以回滚
·通货紧缩的象征
·合同代码不能修改
同时,审计中也存在合同权限错误,即合同中功能的可见性修改错误。通常,这是因为调用方和参数没有得到有效验证,导致函数被恶意用户调用,造成巨大损失。
与传统的安全问题类似,权限配置错误、安全检查无效都会给系统带来巨大的风险。但不同的是,智能合约的不变性使得此类问题即使被发现,也未必能得到有效修复。
此外,再入漏洞也是审计的重点。具体来说,当合约发起对外调用时,攻击者可以利用合约调用的特点反复调用函数,导致合约预期执行顺序出现错误,从而窃取目标账户的资产。
代码错误在审计中也很常见。这主要是由于开发者的失误。常见错误包括单位误差、忘记乘以精度和使用错误。在yam漏洞事件中,当代码灵活调整rebase时,其代码只是忘记了乘以精度,如图所示:
在确保对代码和漏洞进行深入检测的同时,本项目的业务方面还对业务逻辑和执行情况进行了相关审计,包括对DeFi项目中token基本信息的检查,以及对token标准相关功能的确认,特别是硬币造币、代币销毁、所有者变更等特殊权限的审查和风险分析。
许多项目都有**转移的逻辑。在处理这种逻辑时,很多项目方会直接要求用户将代币价值**的合同授权给项目方,如下图所示:
这样,合同就有权转移用户的全部资金。此外,还存在双重授权的问题。项目方网站进行授权时,发起两次授权,一次是对合同地址的授权,另一次是对外部地址的授权。如果用户不注意这一点,将面临巨大的财务风险。
例行05审计报告
合同审计最终服务于DeFi项目的资金安全,这方面的许多问题都与功能和算法不当有关。因此,合同审计就是指出可能导致资金风险的内容,即隐患和代码、漏洞和逻辑问题需要纠正。
在审计报告中,除了审计时间、审计期限、审计人员等基本信息外,还反映了项目投资的预警。审计报告的核心内容是从多个方面反映审计结果,如被检查智能合约的设计和代码执行情况。同时,报告将指出发现的各种风险问题,并通知项目方进行修复。
根据审计报告,将详细披露合同的风险组成部分,包括潜在攻击,以及不同级别和不同级别的漏洞。但安全审计报告中的“通过”一词不应作为投资者投资判断的唯一依据。
后记
合同审计不是项目本身的利好消息,而是项目上线前的一项必要的安全工作,对项目方和投资方都具有重要意义。
投机市场要么猖獗,要么萧条。如果你不按套路打球,你就要服从“套路”一眼望去,安全的高峰只在萌芽中。
文章标题:你知道DFI的合同审核有哪些“常规”吗?
文章链接:https://www.btchangqing.cn/108959.html
更新时间:2020年09月24日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。