介绍在迅速发展的DeFi领域,确保协议的稳定性和安全性至关重要。在最近对一个CDP项目的安全审查中,我观察到在某些配置下可能会出现特定的漏洞。虽然该项目当前的参数设置已经足够强大,但了解这些潜在风险对于维护协议的完整性非常重要。本文旨在探讨一次性借贷费用和赎回费用在此背景下的关键作用。通过分析如果没有这些费用可能出现的具体攻击场景,我将展示如何通过合理的费用结构防止破坏性攻击,从而确保协议的长期安全性和可行性。
协议的CDP机制概述从原始协议之一Liquity及其衍生品中汲取灵感,许多CDP(抵押债务头寸)模型通过超额抵押化生成去中心化稳定币。这些模型通常包含一套复杂但精密的机制,旨在保持与美元的挂钩,同时确保协议在各种条件下的安全,有效地最小化坏账风险。这些协议通过关键的定制化设计脱颖而出,包括量身定制的经济激励,旨在更紧密地与协议的特定目标对接。
协议的关键概念
借贷
用户可以利用他们的抵押资产借取协议的稳定币。抵押物被存入Trove——一个存放抵押物并跟踪相关债务的金库。4o mini
抵押率(CR)
抵押率是Trove中抵押物与稳定币债务的比例。协议强制执行最低抵押率(MCR)为110%,这意味着每借取1000美元的稳定币,至少需要持有1100美元的抵押物。
赎回
为了保持稳定币与美元的挂钩,用户可以按照1稳定币兑换1美元的抵押物的比例,赎回稳定币。在赎回过程中,系统会选择抵押率(CR)最低的Trove来完成赎回,这意味着风险最大的用户将最先被赎回。
清算
如果Trove的CR低于MCR,该Trove将面临清算。在清算过程中,稳定池中的稳定币将用于偿还债务,相应的抵押物将重新分配到稳定池中,惠及质押者。
恢复模式
当整个系统的总抵押率(TCR)低于150%时,将启用恢复模式。在此模式下,仅允许创建CR高于TCR的Trove,并优先进行清算以恢复系统的整体健康。在恢复模式下,即使Trove的CR高于最低抵押率(MCR),也可以清算CR低于TCR的Trove,以恢复系统的整体健康。任何可能导致系统进入恢复模式的借贷和偿还操作将被禁止。
理解一次性赎回费用和借贷费用赎回费用赎回费用是在用户将协议的稳定币兑换为其基础抵押物时收取的费用。该费用旨在通过在赎回频繁时增加赎回成本,从而稳定稳定币的价值,防止过度赎回导致协议不稳定。
赎回费用是基于协议的baseRate计算的,baseRate是一个动态调整的参数,反映了系统内的近期活动。具体来说,baseRate在每次赎回后增加,从而使后续赎回变得更加昂贵。
这一增加与赎回的稳定币总供应量的比例成正比。如果在一段时间内没有发生赎回,baseRate会逐渐衰减回零,衰减的半衰期大约为12小时。
赎回费用是通过以下公式计算的:
例如,如果baseRate为1%,且用户在抵押物价格为50,000美元时赎回100个稳定币,那么赎回费用将为:
因此,在考虑赎回费用后,用户收到的抵押品将略少。这种机制确保赎回在经济上保持合理,同时保护协议免受不稳定的套利活动的影响。
借贷费用借贷费用是另一项一次性费用,当用户以抵押物借取稳定币时收取此费用。与赎回费用类似,借贷费用也基于baseRate,但它是在稳定币从用户的Trove(一个持有用户抵押物和债务的金库合约)中提取时收取的。
借贷费用的计算公式如下:
例如,如果用户想要借 4,000 个稳定币,并且 基本费率 设定为 0.5%,则费用为:
此费用会被加到用户的债务中,这意味着他们的总债务将是借款金额加上费用(例如,4000个稳定币 + 20个稳定币 = 4020个稳定币)。
这些费用还充当了软挂钩,通过在特定条件下使借贷或赎回变得不那么有吸引力,间接影响稳定币的市场价格,从而帮助稳定币保持与1美元的紧密挂钩。
现在,让我们探讨一下如果这些关键费用被移除或设置为零,会发生什么。
没有一次性赎回费用的攻击场景零滑点掉期DEX如果没有一次性赎回费用,协议可能不经意间转变为一个零滑点的交换DEX。在这种情况下,大额稳定币持有者可能会利用赎回机制,将稳定币兑换为抵押物,而不需要承担显著的成本,从而有效地进行大规模套利交易。这可能导致几种负面后果,因为在这种零滑点环境下,大规模赎回不仅会耗尽协议的流动性,还会迫使借款人以当前市场价格出售他们的抵押物。虽然他们的债务会相应减少,但这种强制清算可能会增加用户的运营成本,特别是当稳定币的交易价格低于1美元时。此外,还存在预言机抢先攻击的风险:如果用户发现某个交易即将更新抵押物价格预言机以反映更高的价格,他们可能会迅速赎回大量稳定币,趁价格更新前完成赎回。一旦抵押物价格更新并上涨,用户就可以以盈利的价格出售赎回的抵押物,完成套利循环。这种做法不仅会利用协议漏洞,还会使借款人处于不利位置,因为他们可能被迫以不利的价格出售抵押物。
无需一次性借贷费用的利用场景赎回费用操控其中一个最直接的攻击场景涉及操控赎回费用以降低成本。在没有一次性借贷费用的协议中,用户可以借入大量稳定币,人为地增加协议的总债务。一旦债务被膨胀,他们就可以以较低的费用赎回稳定币,因为赎回费用是基于赎回金额与总债务的比例来计算的。
这种操控破坏了协议的费用结构,导致协议的收入减少,并可能破坏系统的稳定性。例如,攻击者可以使用闪电贷借入大量抵押物,然后用这些抵押物铸造大量稳定币,从而增加系统的总债务。接着,他们进行赎回操作,利用膨胀的债务获得较低的赎回费用,最后偿还闪电贷,使协议的收入低于预期,并可能导致那些未能预见到被赎回的用户面临进一步的不稳定。
通过预言机更新交易夹层强制进入系统恢复模式另一个关键漏洞来自于能够在单个区块内强制协议进入恢复模式,从而允许清算先前抵押率健康的头寸。这个攻击利用了闪电贷并在预言机价格更新时精确地安排攻击时机。 攻击过程如下:
闪电贷与借贷: 攻击者首先使用闪电贷借入大量抵押物,然后将其作为抵押物存入协议。利用这些抵押物,攻击者在最低抵押率(MCR)下借入稳定币。攻击者可以通过此操作将总抵押率(TCR)压低至150%,这是触发恢复模式的阈值。
预言机价格更新: 攻击者等待预言机更新,反映抵押物价格的下降。随着新价格更新到系统中,抵押物的价值下降,导致TCR跌破150%。
触发恢复模式与清算: 当TCR低于150%时,协议会自动进入恢复模式。在此模式下,协议允许清算那些抵押率(CR)低于新TCR的Trove。攻击者可以继续清算其他用户的Trove,这些Trove的CR已低于TCR,从而导致这些用户损失,并从清算奖励中获利。
通过精心设计的赎回强制进入系统恢复模式在前述攻击场景的基础上,这个高级漏洞允许攻击者通过精心设计的赎回过程将协议强制进入恢复模式。与早期的攻击不同,后者可能在清算后暂时将系统恢复到正常模式,而这种方法确保系统保持在恢复模式,使攻击者能够反复利用这个漏洞。
核心问题出现在系统支持多种类型的抵押物,每种类型由不同的Trove管理器管理。当发生赎回时,尽管各个Trove管理器的健康状况得到改善,系统的总抵押率(TCR)却可能下降。这一反直觉的结果是由于全球抵押率和局部抵押率之间复杂的相互作用所导致的。
例如,假设系统的TCR为150%。
如果用户针对一个抵押率为160%的Trove进行赎回,导致该Trove关闭,那么由此产生的计算会将系统的TCR压低至150%以下,从而触发恢复模式。
攻击过程如下:
初始位置设置: 攻击者在精心选择的Trove中开设一个抵押率略高于150%的最小头寸。这个设置对于确保下一步的赎回有效地将TCR压低至临界阈值至关重要。
TCR操控: 攻击者使用闪电贷在任何Trove管理器中开设另一个抵押率为最低抵押率(MCR)110%的头寸,将系统的总抵押率(TCR)压低至恰好150%。这一步为系统进入恢复模式做好准备。
. 精心设计的赎回: 攻击者接着赎回第一步中开设的头寸。由于该头寸的抵押率略高于150%,赎回后会导致TCR跌破150%,从而触发恢复模式。赎回不仅影响被赎回的特定Trove,还会产生系统性效应,将TCR推入恢复模式。
清算脆弱头寸: 系统进入恢复模式后,攻击者可以清算任何抵押率低于150%的头寸。这些清算可能会将TCR恢复到150%以上。
重复过程: 攻击者可以根据需要重复这些步骤,保持系统处于恢复模式状态,持续利用抵押率低于150%的Trove进行攻击。
一次性赎回费用和借贷费用在缓解这些攻击中的作用费用对攻击向量的经济影响一次性赎回费用和借贷费用在缓解上述攻击向量相关风险中发挥着至关重要的作用。通过对借贷和赎回引入成本,这些费用使得攻击者在大多数情况下无法经济上执行大规模的有利可图的操控。
例如,在赎回费用操控的场景中,一次性借贷费用会增加系统债务膨胀的成本,使得攻击者无法从操控赎回费用中获利。同样,在攻击者试图触发恢复模式的场景中,借贷费用通过提高承担大量债务的成本,从而起到威慑作用,防止操控TCR。
确保DeFi协议安全的最终想法随着DeFi的发展,协议将面临越来越复杂的攻击。为了保持领先,理解不同功能如何相互作用并可能产生漏洞至关重要。有效的安全性需要深入了解系统各组件之间的相互作用,并且要特别注意管理这些互动的设置和参数。通过主动预测功能如何组合以产生漏洞,设计人员可以构建出不仅安全,而且具有弹性并能适应未来挑战的协议。
免责声明:
本文转载自【太阳证券】,所有版权归原作者所有【Bill】。若对本次转载有异议,请联系 Gate Learn 团队,他们会及时处理。免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。Gate Learn 团队将文章翻译成其他语言。除非另有说明,否则禁止复制、分发或抄袭翻译文章。