2021年8月19日,Solend 受到黑客攻击,黑客试图通过操纵Solend协议的核心参数来窃取资金。Solend 团队迅速发现并阻止了这次操纵,没有用户资金因此损失。黑客通过创建一个新的Lending Market,并绕过管理员权限检查,恶意修改了USDC、SOL、ETH、BTC等资产的清算阈值、清算奖励和最低借款利率等参数,试图恶意清算用户账户以获取巨额利润。
2021年8月19日 UTC时间约12:40,一名黑客试图攻击去中心化借贷协议 Solend。
虽然黑客成功地操纵了核心协议参数,试图窃取资金,但这种操纵很快就被 Solend 团队发现并阻止。
幸运的是,没有用户资金损失。
了解黑客如何执行这次失败的抢劫仍然很有价值!

为什么要使用 Solend 协议?
Solend 协议是一个去中心化的、非托管的协议,它使用一系列智能合约来提供借贷功能。
用户可以:
- 借出资产以赚取利息。
- 以他们提供的抵押品借入资产。
解释黑客攻击的前置背景:
在解释这次黑客攻击之前,我们需要向你介绍关于在Solend上借入资产的内部机制,因为黑客操纵了借款方面的参数,试图窃取资产。
让我们用问答的形式来解释:
- 如何在 Solend 上借入资产?
- 当用户想要从 Solend 借款时,他们首先需要提供抵押品。
- 这种抵押品就像一个安全网,以确保贷款得到偿还。
- 当用户借款时,他们必须支付贷款利息。
- 如果抵押品的价值低于某个阈值,Solend 认为贷款存在无法偿还的风险。
- 为了保护贷款人,Solend 启动一个称为清算的过程。
- 什么是借款 APY?
- 借款 APY(年化收益率)表示借款人需要支付的年化利率。
- 借款 APY 取决于市场条件和贷款中涉及的特定加密资产。
- 它通常表示为贷款金额的百分比。
- 例如:
- 假设 SOL 的借款 APY 当前设置为 8%。
- 这意味着每借入 100 个 SOL,你需要支付 8 个 SOL 的年利息。
- 什么是清算?
- 清算涉及出售借款人的抵押品以偿还未偿还的贷款。
- 当借款人的抵押品价值低于某个阈值(称为清算人阈值)时,会触发清算,表明贷款存在无法偿还的风险。
-
什么是清算阈值?
- 谁负责执行清算流程?
- Solend 借助第三方清算人。
- 他们有动力参与清算流程,因为他们可以通过它获利。
- 这些人运行清算机器人来评估贷款头寸的健康状况。
- 一旦贷款的贷款与抵押品比率高于清算阈值,第三方清算人可以偿还你 20% 的贷款。
- 清算人还将收取他们清算金额的额外 5% 作为赏金。
- 你能举个例子来理解所有概念吗?
- 假设你有 5 个 SOL,并且你想借入 80 个 USDC。
- 我们要做的假设:
- 目前 1 SOL 的价格 = $20
- SOL 的清算阈值:85%。
- USDC 的借款 APY:8%
- SOL 的清算奖励:5%
- 所以你的贷款头寸变为:
- 抵押品:5 SOL*$20 = $100 的价值。
- 贷款:$80 USDC
- 当前贷款与抵押品比率 (LTV)
- =>(贷款价值)/(抵押品价值)*100
- =>($80 USDC)/(价值 $100 的 SOL)*100
- = 80%
- 由于该贷款头寸的 LTV 为 80%,低于 Solend 的阈值 85%,因此该贷款被认为是安全的。
- 现在假设熊市来临,SOL 的价格从 $20 跌至 $10
- 更新的抵押品价值
- => 5 SOL*10 = $50
- 更新的贷款与抵押品比率 (LTV):
- =>($80 USDC/(价值 $50 的 SOL)/*100
- = 160%
- 现在你的贷款头寸 LTV 为 160%,高于 Solend 的阈值 80%,你的贷款现在将面临清算。
- 第三方清算人介入:
- 他们存入 20% 的 USDC 贷款
- => $80*0.2 = $16 USDC
- 从用户的抵押品中收取价值 $16 的 SOL
- => SOL 目前价格为 $10
- = $16/$10 = 1.6 SOL
- 从用户的抵押品中收取贷款金额的 5% 作为清算奖励
- => 80 USDC 的 5% = 将收取价值 $4 的 SOL
- => SOL 目前价格为 $10
- => 收取 $4/$10 = 0.4 SOL
- 清算人的利润:
- 他们提供:$16 USDC
- 他们得到:
- 通过偿还用户 20% 的贷款获得 1.6 SOL
- 0.4 SOL 作为清算奖励
- 总计 = 2 SOL
- SOL 当前价格 = $10
- 总计变为 => 2*10 = $20
- 利润 = $20 - $16 = $4
- 你的贷款头寸变为:
- 更新的抵押品金额
- => 5 SOL - 2 SOL(支付给清算人)= 3 SOL
- 更新的贷款金额
- => 80 USDC - 16 USDC(由清算人提供)= 64 USDC
- 更新的贷款与抵押品比率:
- =>(价值 $30 的 3 SOL)/($64 USDC)*100
- = 46%
- 现在你的贷款头寸被认为是安全的。
现在你了解了在 Solend 上的借款运作方式,让我们深入了解黑客的操纵。
黑客是如何试图窃取资金的?
黑客能够颠覆协议的管理检查,以更改 USDC、SOL、ETH、BTC 资产的三个核心参数:
liquidationThreshold
:
- 此参数的作用:
- 操纵:
- 它的影响:
- 清算阈值为 1 意味着所有有贷款的用户的账户都有资格被清算。
- 即使用户的头寸有足够的抵押品可以借款。
liquidationBonus
:
- 此参数的作用:
- Solend 为该特定资产支付给清算人的清算奖励。
- 操纵:
- 它的影响:
- 这一变化导致清算人获得贷款金额的 90% 作为巨额奖励!
minBorrowRate
- 此参数的作用:
- 操纵:
- Solend 设置的旧值:0
- 黑客设置的值:250
- 它的影响:
- 极高的借款 APY 意味着借款人未偿还的贷款余额将迅速增加。
- 使他们更难以维持所需的抵押品与贷款比率。
- 因此会加速清算。
从以上信息可以清楚地看出,黑客打算通过错误地清算账户并获得超额奖励来窃取资金。
Solend 团队估计有 200 万美元面临风险。
技术解释:
钱包信息:
黑客做了什么:
当执行UpdateReserveConfig
指令时,黑客如何能够绕过运行的管理检查?让我们深入研究代码:
根据 Solend 的说法,除了 Solend 自己的清算机器人之外,没有发生任何清算。
- 攻击者试图清算似乎没有奏效。
- 请注意,默认情况下,在 Solana 上,如果模拟运行失败,txs 会在本地模拟,并且永远不会发送到验证器。因此,我们无法知道是否存在失败的清算尝试。
补丁详情:
Solend 团队迅速添加了一个补丁到process_update_reserve_config
。
- 如果用户提供了任意 Lending Market,该函数现在将抛出错误。

官方回应:
Solend 团队的声明 在此。