Solend 协议:黑客试图通过操纵核心参数窃取约 200 万美元

  • prastut
  • 发布于 2023-04-18 16:31
  • 阅读 15

2021年8月19日,Solend 受到黑客攻击,黑客试图通过操纵Solend协议的核心参数来窃取资金。Solend 团队迅速发现并阻止了这次操纵,没有用户资金因此损失。黑客通过创建一个新的Lending Market,并绕过管理员权限检查,恶意修改了USDC、SOL、ETH、BTC等资产的清算阈值、清算奖励和最低借款利率等参数,试图恶意清算用户账户以获取巨额利润。

2021年8月19日 UTC时间约12:40,一名黑客试图攻击去中心化借贷协议 Solend

虽然黑客成功地操纵了核心协议参数,试图窃取资金,但这种操纵很快就被 Solend 团队发现并阻止。

幸运的是,没有用户资金损失。

了解黑客如何执行这次失败的抢劫仍然很有价值!

为什么要使用 Solend 协议?

Solend 协议是一个去中心化的、非托管的协议,它使用一系列智能合约来提供借贷功能。

用户可以:

  • 借出资产以赚取利息。
  • 以他们提供的抵押品借入资产。

解释黑客攻击的前置背景

在解释这次黑客攻击之前,我们需要向你介绍关于在Solend上借入资产的内部机制,因为黑客操纵了借款方面的参数,试图窃取资产。

让我们用问答的形式来解释:

  1. 如何在 Solend 上借入资产?
    • 当用户想要从 Solend 借款时,他们首先需要提供抵押品。
    • 这种抵押品就像一个安全网,以确保贷款得到偿还。
    • 当用户借款时,他们必须支付贷款利息。
      • 这种利息以借款 APY 表示。
    • 如果抵押品的价值低于某个阈值,Solend 认为贷款存在无法偿还的风险。
      • 为了保护贷款人,Solend 启动一个称为清算的过程。
  2. 什么是借款 APY?
    • 借款 APY(年化收益率)表示借款人需要支付的年化利率。
    • 借款 APY 取决于市场条件和贷款中涉及的特定加密资产。
    • 它通常表示为贷款金额的百分比。
    • 例如:
      • 假设 SOL 的借款 APY 当前设置为 8%。
      • 这意味着每借入 100 个 SOL,你需要支付 8 个 SOL 的年利息。
  3. 什么是清算?
    • 清算涉及出售借款人的抵押品以偿还未偿还的贷款。
    • 当借款人的抵押品价值低于某个阈值(称为清算人阈值)时,会触发清算,表明贷款存在无法偿还的风险。
  4. 什么是清算阈值?

    • 清算阈值是一个关键比率,它决定了贷款何时存在无法偿还的风险。
    • 公式 =(贷款价值/抵押品价值)* 100
    • Solend 为其支持的每项资产设置清算阈值。例如:对于 $SOL

    • 只要你的借款头寸的贷款与抵押品比率(称为 LTV)小于清算阈值,你的贷款就不会被清算。
    • 但是,如果你的头寸的贷款与抵押品比率大于清算阈值,Solend 将启动清算流程。
  5. 谁负责执行清算流程?
    • Solend 借助第三方清算人。
    • 他们有动力参与清算流程,因为他们可以通过它获利。
    • 这些人运行清算机器人来评估贷款头寸的健康状况。
    • 一旦贷款的贷款与抵押品比率高于清算阈值,第三方清算人可以偿还你 20% 的贷款。
    • 清算人还将收取他们清算金额的额外 5% 作为赏金。
      • 这被称为清算奖励。
  6. 你能举个例子来理解所有概念吗?
    • 假设你有 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 资产的三个核心参数:

  1. liquidationThreshold
    • 此参数的作用:
      • Solend 对该特定资产的清算阈值。
    • 操纵:
      • Solend 设置的旧值:80
      • 黑客设置的值:1
    • 它的影响:
      • 清算阈值为 1 意味着所有有贷款的用户的账户都有资格被清算。
      • 即使用户的头寸有足够的抵押品可以借款。
  2. liquidationBonus
    • 此参数的作用:
      • Solend 为该特定资产支付给清算人的清算奖励。
    • 操纵:
      • Solend 设置的旧值:5
      • 黑客设置的值:90
    • 它的影响:
      • 这一变化导致清算人获得贷款金额的 90% 作为巨额奖励!
  3. minBorrowRate
    • 此参数的作用:
      • 设置特定资产的最低借款 APY。
    • 操纵:
      • Solend 设置的旧值:0
      • 黑客设置的值:250
    • 它的影响:
      • 极高的借款 APY 意味着借款人未偿还的贷款余额将迅速增加。
      • 使他们更难以维持所需的抵押品与贷款比率。
      • 因此会加速清算。

从以上信息可以清楚地看出,黑客打算通过错误地清算账户并获得超额奖励来窃取资金。

Solend 团队估计有 200 万美元面临风险。

技术解释:

钱包信息:

黑客做了什么:

  • 首先创建了一个新的 Lending Market(tx
  • 然后通过调用 USDC、SOL、ETH、BTC 的 UpdateReserveConfig 指令,如上所述操纵核心参数。

    • 此指令只能由程序的管理员 (Solend) 调用,因此黑客必须找到一种方法来绕过与你是否是程序管理员相关的检查。

    • 例如:对于 SOL(tx

    • 正如你所看到的:
    • 清算阈值已降低至 1
    • 清算奖励已提高至 90
    • 最低借款利率已提高至 250

当执行UpdateReserveConfig指令时,黑客如何能够绕过运行的管理检查?让我们深入研究代码:

  • 当调用 UpdateReserveConfig 指令时,运行函数 process_update_reserve_config
  • 高亮显示的检查不足,因为黑客能够传入由他们创建和拥有的任意 Lending Market 的帐户。
  • 这导致黑客能够绕过此函数上的管理检查并成功更新储备配置。

根据 Solend 的说法,除了 Solend 自己的清算机器人之外,没有发生任何清算。

  • 攻击者试图清算似乎没有奏效。
  • 请注意,默认情况下,在 Solana 上,如果模拟运行失败,txs 会在本地模拟,并且永远不会发送到验证器。因此,我们无法知道是否存在失败的清算尝试。

补丁详情:

Solend 团队迅速添加了一个补丁process_update_reserve_config

  • 如果用户提供了任意 Lending Market,该函数现在将抛出错误。

官方回应:

Solend 团队的声明 在此

  • 原文链接: hackmd.io/%40prastut/r1w...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
prastut
prastut
江湖只有他的大名,没有他的介绍。