支付 可以很 ____■闪贷:为什么闪贷攻击会是新常态?( 三 )


闪贷对攻击者尤其有吸引力的主要原因有两个:

  • 很多攻击需要大量前期资金(例如预言机操纵攻击) 。 如果你在赚取价值1000万美元ETH的正向投资回报 , 则可能不是套利——你可能会说这是在扯淡 。
  • 闪贷可以最小化攻击者的污点 。 如果我有个用1000万美元ETH操纵预言机的想法 , 即便是我拥有这么多ETH , 我也可能不会用自己的资本进行冒险 。 我的ETH将会有污点 , 交易所可能会拒绝我的存入 , 且它很难洗白 。 这有风险 。 不过 , 如果我借来1000万美元的ETH , 那么 , 谁会在乎呢?全都是好处 。 dYdX抵押池不太可能会被认为有污点 , 因为这是我贷款的来源——dYdX的污点只会消失 。
你可能不太喜欢交易所黑名单是如今区块链安全模型的一部分 。 这是非常黏糊且中心化的 。 但这是一个重要的现实 , 它为这些攻击提供演算信息 。
在比特币的白皮书中 , 中本聪宣称比特币有免遭攻击的安全 , 因为:“攻击者应该会发现 , 遵守规则...比破坏系统和其财富的有效性更有利可图 。 ”
有了闪贷 , 攻击者不再需要有利益参与其中 。 (蓝狐笔记:也就是说 , 破坏系统不会影响攻击者的自身利益 , 因为攻击者没有利益相关) 。 闪贷实质上改变了攻击者的风险 。 请记住 , 闪贷可以累积!受制于gas limit , 实际上 , 你可以在单个交易中(最高可达5000万美元 )汇聚各个闪贷池 , 并将所有资金集中涌入一个脆弱的合约中 。 这是一个5000万美元的攻城锤 , 现在任何人都可以猛击任何链上的彩陶罐 。 这实在恐怖 。
当然 , 仅凭你很有钱还无法攻击协议 。 如果DeFi堆栈如它宣称的那样安全 , 所有这些都不是问题——什么类型的协议对巨鲸来说是不安全的?你可能会说 , 没有考虑这一点就是过失 。
但是 , 我们承认以太坊自身也可能会遭受51%的攻击 , 当前的攻击成本是每小时不到20万美元 。 这不算非常多的资金 。 如果以太坊自身的安全模型都基本上是构建在资本限制上 , 那么 , 为什么我们要如此快地去嘲笑可以被1000万美元成功攻击的DeFi应用?(明确地说 , 我不认为这些数字——这一数字方便地忽略了滑点和供应不足——加上共识层安全和应用层安全是两码事 。 但你明白这个意思 。 )
那么 , 如何减轻闪贷攻击?
假设我是DeFi协议 , 我想避免被闪贷攻击 。 自然的可能问题是 , 我能否检测到与我交互的用户是否在使用闪贷?
简单答案是:不 。
EVM并不允许你从任何其他合约中读取存储 。 因此 , 如果你想知道其他合约正在发生什么 , 则可以通过该合约告诉你 。 因此 , 如果你想知道是否闪贷合约在被使用 , 你必须直接询问合约 。 如今 , 很多借贷协议并没有对这种查询做出响应(而且一般来说 , 也没有办法强迫闪贷借贷者的行为) 。 另外 , 即便你试图检查 , 通过使用代理合约或通过串联闪贷池也容易误导此类查询 。 简单来说 , 通常很难辨别一个存储用户是否在使用闪贷 。
简言之 , 如果有人拿着1000万美元敲你合约的前门 , 你无法判断这是否是他们自己的钱 。 那么 , 我们有什么真正的选择可以防止闪贷攻击?我们可以考虑如下几种方法 。
  • 说服闪贷借贷池停止提供服务 。
哈 , 开玩笑 。 这是加密世界 , 你们懂的!
认真地说 , 试图让借贷池停止提供闪贷就像是试图停止噪音污染——这是典型的公地悲剧 。 提供闪贷符合每个协议的自身利益 , 且出于合理原因 , 它们的用户也希望使用这一功能 。 因此 , 我们尽可忽视这一条 。 闪贷并不会消失 。
  • 强制关键交易跨两个区块进行
请注意 , 闪贷允许你在单个交易时间段内借入资金 。 如果你需要一个资本密集型交易跨越两个区块 , 那么 , 用户必须取出至少两个区块的贷款 , 由此击败任何闪贷攻击 。 (注意:为此 , 用户必须将其资产锁定在两个区块之间 , 以防止他们偿还贷款 。 如果你没有正确地考虑设计 , 则用户可能只是在这两个区块中实施闪贷攻击)


推荐阅读