交流中,CertiK大中华区负责人陈波锦表示,相比多维测试和实时监控,形式化验证可以从数学逻辑上保证合约中没有漏洞。但安全问题没有100%的系数,其中还涉及公链的安全性等。我们看到很多安全事故都是人为因素导致的,所以真正的安全是多维度的。
第11期Neutrino追问®AMA,我们邀请到CertiK大中华区负责人 陈波锦,围绕《智能合约攻击频发,如何维护区块链生态安全?》为主题进行了讨论,交流中,陈波锦表示,相比多维测试和实时监控,形式化验证可以从数学逻辑上保证合约中没有漏洞。它在两个层次上对合约进行保证,第一层安全无漏洞,即用数学推理的方法,捕捉合约中所有行为,覆盖所有的可能性,从而保证合约没有漏洞。第二层可信,即公开透明,合约的创建者不仅要说明执行哪些操作,还要向大家证明代码确实是这样执行的。经过这两个层次所验证过并证明安全的智能合约,只要源代码不发生任何变化,在上链前就基本达到100%安全无漏洞。但安全问题没有100%的系数,其中还涉及公链的安全性等。我们看到很多安全事故都是人为因素导致的,所以真正的安全是多维度的。
以下为1月17日第11期追问®AMA交流整理
话题主持@Neutrino 问题 1:区块链行业在过去一年得到了进一步发展,但安全问题却令人担忧。据有关统计,2018年,全球区块链领域发生近百起安全事件,损失超20亿美元,相较于2017年增长了538%。想问下陈总,目前智能合约都有哪些常见的漏洞或攻击类型,以及相应的会导致什么后果?
陈波锦:智能合约的漏洞如今大概被分为了三大类:
第一,以整数溢出为代表的代码安全漏洞。这些通常是被写代码的人不小心引入的,可能会引起合约某些功能部件失效。最严重可能导致黑客攻击,用户丢币,甚至黑客凭空造币。
第二,智能合约权限控制。一般智能合约里面会设置一个拥有超级权限的管理员,这类合约的安全隐患比较大,因为一旦管理员的私钥被盗用,很容易造成巨大的损失。
第三,规范性问题。现在很多智能合约的实现并没有统一的规范,智能合约是以交互的方式进行多人合作。没有一个规范的合约容易导致不同人对合约的行为产生误解从而出现大量安全隐患。
关于智能合约的代码安全漏洞以及可能导致的后果主要包括以下几个常见的种类:
整数溢出:合约失效,无限发币等风险
越权访问:越权发币等风险
拒绝服务:无心循环,递归栈耗尽等风险
基于重如漏洞的恶意转账等风险
信息泄露:重要信息的泄露
函数误用:可预测随机数,接口函数返回异常风风险
话题主持@Neutrino 问题 2:我们看到,去年某公链自主网上线以来, 发生了多起DApp安全事件,似乎成了黑客的提款机一样,攻击手段层出不穷:随机数攻击、种子漏洞、假币攻击等。这种情况,是否与开源有关?您对智能合约开发者有什么建议的?还有在什么阶段让安全审计介入比较好?
陈波锦:首先要知道什么是智能合约。智能合约以数字形式定义承诺,合约参与方可以在上面执行这些承诺的协议。然后任何参与方都能在应用层创建合约,也就是所谓的DApp,(去中心化应用),这是目前最容易出现安全问题的地方。为什么会被攻击,是因为智能合约现在附带了对应的价值。所以才会被黑客看中,并进行攻击。
智能合约具有自治,自足和去中心化等特征。对于区块链技术来说有重要的意义。和传统互联网应用比较,智能合约在安全方面存在问题具有不可逆性、代码开源、高成本、思维受限几个主要方面,智能合约的安全隐患既有传统的互联网世界中所存在的漏洞(如拒绝服务、SQL注入等)也有自身独有的风险点。
对开发者的建议,首先是,开发意图、逻辑不存在漏洞。在开发过程中,要有总体的关于整个项目的安全体系的规划,比如说在开发安全架构的时候,可以选择一些比较成熟的安全模块,可以直接调用,可以直接借鉴参考已经公布的安全实践,目前有大量的资料可以参考。
在上主网之前,在测试网上,就应该做一些黑盒测试啊,白盒测试啊,其实很多时候项目方的开发人员可以自己做一些畸形测试啊,在计划内和计划外的畸形测试啊,这些都可以提前做的。
各阶段的后期可以由第三方的安全审计机构介入。对项目的整体安全作出评价。在主网上线之后,就应有些风控上面的策略,比如说,合约里的资金,如果出现大额的变动,应该有个风控措施,如预警等。
话题主持@Neutrino 问题 3:目前市面上除了CertiK,还有诸如Zeppelin、Axoni、Quantstamp等智能合约验证审计方。据您了解,现在针对智能合约的安全问题的检验途径有哪些?它们各自的优略点是什么?
陈波锦:目前市场上主要的智能合约验证方式有有三种:
测试程序
人工审计
形式化验证
目前比较主流的解决方案是使用众包平台对智能合约进行筛选,比如Solidified.io。这种基于人力的验证和审计往往成本巨大。每份审计的花销在几千到几万美金不等。尽管对于每份智能合约而言,这种定制型解决方案也许很奏效,但显然,区块链巨大的市场需求无法就此满足。市场急需一个成本更低、效率更高的解决方案。这正是CertiK的形式化验证项目的核心竞争力之一。
另外,从可靠性方面来看,人工审计,不能称为一种技术,用专家人眼看这个合约有没有问题,没有办法变成工业化的方法,很难做到高可靠性。包括所谓的专家并不专业,但是却是目前智能合约领域运用最广泛的技术。行业目前处于早期发展阶段,从业人员不多,水平不高,也是导致风险出现的因素之一。
CertiK的形式化验证技术,是一种深度规范技术,是目前世界上最先进的智能合约安全性检测技术,是我们独有,最先进的形式化验证方法。
话题主持@Neutrino 问题 4:据悉,Certik 获得了比特大陆、币安、丹华、FBG 等众多业界知名机构的投资与加持。想必除了豪华的创始团队,还有很多独有的核心技术或优势,陈总能否给我们介绍下Certik 都有哪些技术优势?
陈波锦:上题已经做了一些回答,现在我具体介绍一下我们的优势。CertiK是一家2017年成立于美国和硅谷的形式化验证公司,核心产品源自CertiKOS防黑客操作系统。这是世界上第一款经过完全形式化验证的并发式操作系统。创始团队于2015年中提出了分层结构理论,即将复杂的合约模块化,先逐个验证,再复合证明。
在智能合约安全验证这一块,CertiK沿用了早在CertiKOS的设计过程中就已实现的基于层的分解的模块化验证技术,将复杂的智能合约模块拆分为较小的可验证的模块,再转化为数学模型进行复合证明,大大提高了安全验证的弹性和效率。依据数学原理的自动化推演,避免了人为检测的思维局限,而自动化验证也让智能合约验证的费用降到了最低。经过CertiK验证的智能合同、DApp以及区块链将会被附上证书形式的标志,来展示其正确性和安全性。
在CertiK团队看来,基于人工检测或传统的测试用例检测方法都只能做到检测并指出漏洞的存在性,却不能证明漏洞的不存在性。而CertiK提供的平台却能从数学上证明任何系统是否是安全、抗攻击的。不过虽然CertiK的自动化引擎减少了很多人力成本,但是目前的很多“规范”仍旧是人工书写的,所以CertiK致力于自动化的辅助添加标签,将标签转化为规范的技术,这样可以进一步大大减少成本。
话题主持@Neutrino 问题 5:CertiK 采用的形式化验证是:用逻辑语言来描述规范,通过严谨的数学推演来检查给定的系统。目前有哪些实际应用案例?可否举例分享下。
陈波锦:目前的应用案例很多,我们服务的客户目前在全球已经超过150家。CertIK的形式化验证技术已经完全投入商用。作为币安孵化的最早的四个项目之一,可以说CertiK目前已经落地。其他我就不一一列举了。
话题主持@Neutrino 问题 6:区块链智能合约用 CertiK 进行形式化安全审计,一般成本在多少?审计耗时多长?如果经审计但上链后出现了被攻击,你们会有什么相应的解决方案吗?
陈波锦:目前,我们会根据不同客户的需求进行定制化的服务,安全审计的成本视代码的长度、复杂程度、以及编写语言而定。我们的专家团队会在最短的时间内以最大程度保证效率和质量。最短48小时内就可以提交报告。
并没有完全百分之百安全的智能合约,首先公链本身就没有完备的被形式化验证过, 其次,所谓的“百分之百”也只是一个相对的数值,随着未来的发展和程序的不断升级,总会有的新的漏洞出现。
经过CertiK验证过的代码,只要其本身不进行改动,我们可以保证其安全性。但是如果客户有意向在智能合约上添加新的功能或者改动,我们也会基于客户需求而提供进一步的验证从而保证新的合约的安全性。
话题主持@Neutrino 问题 7:据了解,CertiK 采用PoP(proof-of-proof)共识机制,CTK代币是CertiK系统参与者之间的激励手段和公共事业燃料。能否具体介绍下 PoP 方案的特点以及CTK 是如何在社区中激励流通的,涉及哪些角色?
陈波锦:图中做了一个简单说明。
在CertiK的生态圈中,大概有这样几个角色:
客户:终端消费者。包括DApp开发者,平台拥有者等有形式化验证需求的群体。客户将会将验证需求和CTK代币(激励)发送到CertiK平台。当平台收到这个需求之后,会运用智能标签和分层技术将智能合约分解成小模块并公布到社群中。
赏金猎人:是CertiK平台的节点。为平台贡献算力并会得到相应的CTK作为激励,运行CertiKP平台所公布的证明任务并将结果返回到社群中,等待检查者的证实。只有通过检查者的证实,赏金猎人才能得到奖励。
检查者:两个主要任务:第一,记录和保持CertiK的验证交易总账目(包括付款/奖励等);第二,作为赏金猎人的检查者。”validation“所需的算力比”verification“本身要小很多。
智者:给力的工程师和码农们。为CertiK平台贡献验证引擎,算法、流程优化等。当他们的优化方案可以被赏金猎人使用并且用于验证的时候,智者会被奖励CTK代币,依方案的质量而定。
用户:自由职业的软件工程师们,可以使用CertiKP平台的技术来对他们自身的项目开发得到及时反馈。
所有的角色都是为证明而服务,挖矿者通过大量算力来测试代码的可靠性(找出走出迷宫的路线),从而形成证明。而有些角色则会去验证这个产出的证明的可靠性(确认一条路线是否可以走出迷宫),一旦确认证明可靠,则此证明可记录上链,参与其中的各方从而得到不同程度的奖励。
话题主持@Neutrino 问题 8:目前 CertiK 项目进展情况如何?现在有哪些客户在用你们服务了?前不久您这边团队正式入驻了 Neutrino 北京,未来在大中华区会有哪些计划?
陈波锦:前两个问题,之前已经做了说明。我来说一下,之后我们的一些计划和想法。
CertiK的目标是构建完全可信的区块链生态,除了帮助项目方进行智能合约安全验证以外,团队也正在致力于开发一套新的智能合约语言,DeepSea。这一套语言可以帮助开发者编写出更加安全高效的智能合约,并且通过函数式语言DeepSea设计的被完全验证过的编译器被编译成bytecode的过程也是正确的。CertiK在不久的将来将会运用形式化验证技术和DeepSea为更多的区块链安全发展保驾护航。
现在用到我们的服务的客户涉及金融、互联网、乃至娱乐等多个产业,合作伙伴包括世界顶级的数字货币交易平台如币安,火币,OKEX,以及公链如QTum,NEO,Icon等。
在大中华区,我们的目标也很明确,就是让更多人知道我们,了解我们,与更多的项目方进行合作。
–现场答疑–
Neutrino 社群成员 原帅:陈老师,您好。经过certik形式化安全审计的智能合约就一定没有安全漏洞,能避免黑客攻击么?它的安全系数到底有多高呢?
陈波锦: 您好,非常感谢您的问题,相比多维测试和实时监控,形式化验证可以从数学逻辑上保证合约中没有漏洞。它在两个层次上对合约进行保证,第一层次是安全无漏洞,即用数学推理的方法,捕捉合约中所有行为,覆盖所有的可能性,从而保证合约没有漏洞。第二层次是可信,即公开透明,合约的创建者不仅要说明执行哪些操作,还要向大家证明代码确实是这样执行的。
经过这两个层次所验证过并证明安全的智能合约,只要源代码不发生任何变化,在上链前就基本达到100%安全无漏洞,但之前我也说了,安全问题没有100%的系数,其中还涉及公链的安全性,人为因素等,我们可以看到,很多安全事故,都是人为因素导致的,所以,真正的安全,是多维度的,谢谢。
Neutrino 社群成员 欢: 学习了,请问下陈总,对以太坊此次的升级延后,您是怎么看的呢?
陈波锦: 以太坊升级延后,这次以太坊升级延后是因为出现了“重入攻击”。这个问题,其实很早期就有了,以太坊智能合约为了方便一些逻辑操作,留下了“ transfer() 和 send() ”这样一种调用方式,但也给开发者留下了安全隐患。但是,这次升级是以太坊整体计划必须执行的阶段,所以只会延后,但终会到来。
Neutrino 社群成员 吴迪: 关于token的获取方式,还有交易计划,有没有初步消息呢 ?
陈波锦: 目前CertiK还没有上币计划,所以token的获取还要等一段时间了,非常感谢您的支持和关注。关于Certik网络的问题,这次我就不多做说明了,毕竟我们这个系统还没正式上线,具体的经济逻辑还在完善中,我们也听取了很多专业人士的意见,构建完备后,会同步更新在我们最新版的白皮书中,如果大家感兴趣可以去看看,谢谢~
Neutrino 社群成员 lzh: Certik是类似编译器的静态检查技术吗?
陈波锦:可能这个图会清楚一些。
End
——————————————
关于[追问®AMA]
这是一档以Ask Me Anything(简称AMA)形式进行的在线互动问答交流活动,每期Neutrino会结合当下技术趋势、政策风向、项目应用等行业热点话题,邀请相关领域嘉宾大咖就该话题进行深度探讨拆解,旨在帮助社区伙伴答疑解惑,扫除知识盲点,扩大认知边界。
关于Neutrino
一个原生于区块链的分布式创新协作社区。目前,我们已在东京、新加坡、北京、上海等地建立实体协作空间,并计划拓展至首尔、泰国、纽约、伦敦等重要区块链创新城市。借由全球社区资源与合作伙伴关系,Neutrino会在世界各地组织形式丰富的线上或线下活动、研讨会等,帮助不同区域的开发者们更好的沟通与分享彼此的经验和知识。