Shima Capital CTO的Curve反思:为什么我们需要Runtime Proctection和Aspect

在最近的 Curve 可重入漏洞利用之后,我回顾了我在 JPL NASA 的经历,在那里我学到了开发具备 reliable(可靠)和 resilient(弹性/韧性)软件的关键原则。对于加密行业,这些见解现在比以往任何时候都更加重要,理由如下:

归根结底,人们只真正关注两种类型的软件:可以杀死你的软件和可以让你赔钱的软件。

任何航天机器的关键软件里,大部分预算 (80%+) 并未分配给开发本身,而是分配给集成和测试。如果软件出现故障,飞行器就会从天而降——战斗机、无人机、航天器等。

航天软件中的大多数代码(如果被归类为关键模块)都遵守极其严格的测试/开发标准,例如 DO-178B A 级。不仅需要测试每一行代码,而且如果有嵌套逻辑,则每个逻辑条件都是也经过专门测试。

在 JPL NASA,编写先进的航天软件的理念不是写出最漂亮、干净的代码,而是编写出容易执行单元测试的代码。为什么?很简单:当你将一艘航天器送入太空时,你只有一次机会,没有人愿意在失败的概率较大的情况下冒险。这与区块链的逻辑相同,因为不可变的代码是它们的重要特性,我们也只有一次机会在每笔交易中正确使用我们的资金,所以我们为什么不更认真地对待开发 dApp 这个过程呢?

尽管有严格的开发、测试和代码审计流程,但这些手段的显然不足以缓解所有错误和攻击,因为事实上通过测试和审计消除所有运行时错误几乎是不可能的。那么我们如何保护我们的软件免遭失败呢?

运行时保护(Runtime Protection)

运行时保护是一种安全技术,可保护软件应用程序在运行时免受恶意攻击。它的原理是在代码实际运行时进行实时检测,分析程序的实际行为以保护程序免受恶意数据和攻击的影响。

高可靠性软件的运行时保护需要花费大量的投入和设计,因为它们是确保软件不会进入未知状态或故障的最后一道防线。这不仅仅是个论点,而是几十年来经过验证的实践。

今天在 Web3 中,我认为 DeFi 应用程序需要同样的高可靠性,并且应该考虑同样的方法。然而,由于其潜在的限制,EVM 并不是为处理运行时保护等复杂任务而设计的。那么,我们如何提供运行时保护呢?

一种方式是通过 Aspect 编程,Aspects 由 Artela 区块链网络设计的,它能够在任何智能合约交易的生命周期内切换执行上下文,以对程序的实时状态进行高级检查。Artela 通过 Aspect 和兼容 EVM 的方式,提供运行时保护的独特设计,它有机会成为加密智能合约安全的未来基础。