原文作者:?BrunoLulinskiandDavidKerr
创作者:Xinyang
审核者:DAOctor
原文:?SovereignSocialRecoveryMechanism
当前的钱包恢复机制总是伴随着巨大的权衡取舍。要么你100%依靠自己,要么通过将你的私钥托付给某个中心化实体,这样又牺牲主权。
上一篇文章中,我们讲到了什么是社会恢复钱包以及替代用例DAOrayaki|以太坊社区需要什么样的社会恢复系统。在本文档中,DAOrayaki社区将继续介绍主权社会恢复,这是一种非托管恢复机制,旨在实现两全其美。
快速哲学笔记:
加密货币的核心价值之一是赋予个人权力。赋权可能意味着很多事情,但我们都同意的一点是资产的真正所有权。这就是为什么赢得非托管钱包的斗争是最重要的挑战之一。如果加密货币是在大多数用户使用托管钱包的情况下蓬勃发展,我们唯一成就就是将“摩根大通”的名称更改为“Binance”。
一、简介
恢复机制是指在主设备丢失的情况下,获得的资金访问权限的行为。
安全团队:LPC项目遭受闪电贷攻击简析,攻击者共获利约45,715美元:7月25日,据成都链安“链必应-区块链安全态势感知平台”安全舆情监控数据显示,LPC项目遭受闪电贷攻击。成都链安安全团队简析如下:攻击者先利用闪电贷从Pancake借入1,353,900个LPC,随后攻击者调用LPC合约中的transfer函数向自己转账,由于 _transfer函数中未更新账本余额,而是直接在原接收者余额recipientBalance值上进行修改,导致攻击者余额增加。随后攻击者归还闪电贷并将获得的LPC兑换为BUSD,最后兑换为BNB获利离场。本次攻击项目方损失845,631,823个 LPC,攻击者共获利178 BNB,价值约45,715美元,目前获利资金仍然存放于攻击者地址上(0xd9936EA91a461aA4B727a7e3661bcD6cD257481c),成都链安“链必追”平台将对此地址进行监控和追踪。[2022/7/25 2:36:51]
我们可以将当前的恢复机制分为两个主要的概念类别:
托管
托管恢复机制意味着将管理私钥的责任委托给其他人。
安全公司:Starstream Finance被黑简析:4月8日消息,据Agora DeFi消息,受 Starstream 的 distributor treasury 合约漏洞影响,Agora DeFi 中的价值约 820 万美金的资产被借出。慢雾安全团队进行分析后以简讯的形式分享给大家。
1. 在 Starstream 的 StarstreamTreasury 合约中存在 withdrawTokens 函数,此函数只能由 owner 调用以取出合约中储备的资金。而在 April-07-2022 11:58:24 PM +8UTC 时,StarstreamTreasury 合约的 owner 被转移至新的 DistributorTreasury 合约(0x6f...25)。
2. 新的 DistributorTreasury 合约中存在 execute 函数,而任意用户都可以通过此函数进行外部调用,因此攻击者直接通过此函数调用 StarstreamTreasury 合约中的 withdrawTokens 函数取出合约中储备的 532,571,155.859 个 STARS。
3. 攻击者将 STARS 抵押至 Agora DeFi 中,并借出大量资金。一部分借出的资金被用于拉高市场上 STARS 的价格以便借出更多资金。[2022/4/8 14:12:38]
优点:
Grim Finance 被黑简析:攻击者通过闪电贷借出 WFTM 与 BTC 代币:据慢雾区情报,2021 年 12 月 19 日,Fantom 链上 Grim Finance 项目遭受攻击。慢雾安全团队进行分析后以简讯的形式分享给大家。
1. 攻击者通过闪电贷借出 WFTM 与 BTC 代币,并在 SpiritSwap 中添加流动性获得 SPIRIT-LP 流动性凭证。
2. 随后攻击者通过 Grim Finance 的 GrimBoostVault 合约中的 depositFor 函数进行流动性抵押操作,而 depositFor 允许用户指定转入的 token 并通过 safeTransferFrom 将用户指定的代币转入 GrimBoostVault 中,depositFor 会根据用户转账前后本合约与策略池预期接收代币(预期接收 want 代币,本次攻击中应为 SPIRIT-LP)的差值为用户铸造抵押凭证。
3. 但由于 depositFor 函数并未检查用户指定转入的 token 的合法性,攻击者在调用 depositFor 函数时传入了由攻击者恶意创建的代币合约地址。当 GrimBoostVault 通过 safeTransferFrom 函数调用恶意合约的 transferFrom 函数时,恶意合约再次重入调用了 depositFor 函数。攻击者进行了多次重入并在最后一次转入真正的 SPIRIT-LP 流动性凭证进行抵押,此操作确保了在重入前后 GrimBoostVault 预期接收代币的差值存在。随后 depositFor 函数根据此差值计算并为攻击者铸造对应的抵押凭证。
4. 由于攻击者对 GrimBoostVault 合约重入了多次,因此 GrimBoostVault 合约为攻击者铸造了远多于预期的抵押凭证。攻击者使用此凭证在 GrimBoostVault 合约中取出了远多于之前抵押的 SPIRIT-LP 流动性凭证。随后攻击者使用此 SPIRIT-LP 流动性凭证移除流动性获得 WFTM 与 BTC 代币并归还闪电贷完成获利。
此次攻击是由于 GrimBoostVault 合约的 depositFor 函数未对用户传入的 token 的合法性进行检查且无防重入锁,导致恶意用户可以传入恶意代币地址对 depositFor 进行重入获得远多于预期的抵押凭证。慢雾安全团队建议:对于用户传入的参数应检查其是否符合预期,对于函数中的外部调用应控制好外部调用带来的重入攻击等风险。[2021/12/19 7:49:04]
易于使用:如果用户丢失了他/她的设备,一个简单的双重身份验证即可恢复帐户。
慢雾:BSC项目Value DeFi vSwap 模块被黑简析:据慢雾区情报,币安智能链项目 Value DeFi 的 vSwap 模块被黑,慢雾安全团队第一时间介入分析,并将结果以简讯的形式分享,供大家参考:
1. 攻击者首先使用 0.05 枚 WBNB 通过 vSwap 合约兑换出 vBSWAP 代币;
2. 攻击者在兑换的同时也进行闪电贷操作,因此 vSwap 合约会将兑换的 vBSWAP 代币与闪电贷借出的 WBNB 转给攻击者;
3. 而在完成整个兑换流程并更新池子中代币数量前,会根据池子的 tokenWeight0 参数是否为 50 来选择不同的算法来检查池子中的代币数量是否符合预期;
4. 由于 vSwap 合约的 tokenWeight0 参数设置为 70,因此将会采用第二种算法对池子中的代币数量进行检查;
5. 而漏洞的关键点就在于采用第二种算法进行检查时,可以通过特殊构造的数据来使检查通过;
6. 第二种算法是通过调用 formula 合约的 ensureConstantValue 函数并传入池子中缓存的代币数量与实时的代币数量进行检查的;
7. 在通过对此算法进行具体分析调试后我们可以发现,在使用 WBNB 兑换最小单位(即 0.000000000000000001) vBSWAP 时,池子中缓存的 WBNB 值与实时的值之间允许有一个巨大的波动范围,在此范围内此算法检查都将通过;
8. 因此攻击者可以转入 WBNB 进行最小单位的 vBSWAP 代币兑换的同时,将池子中的大量 WBNB 代币通过闪电贷的方式借出,由于算法问题,在不归还闪电贷的情况下仍可以通过 vSwap 的检查;
9. 攻击者只需要在所有的 vSwap 池子中,不断的重复此过程,即可将池子中的流动性盗走完成获利。详情见原文链接。[2021/5/8 21:37:37]
责任委派:许多用户不希望自己保管种子短语。
慢雾:Polkatrain 薅羊毛事故简析:据慢雾区消息,波卡生态IDO平台Polkatrain于今早发生事故,慢雾安全团队第一时间介入分析,并定位到了具体问题。本次出现问题的合约为Polkatrain项目的POLT_LBP合约,该合约有一个swap函数,并存在一个返佣机制,当用户通过swap函数购买PLOT代币的时候获得一定量的返佣,该笔返佣会通过合约里的_update函数调用transferFrom的形式转发送给用户。由于_update函数没有设置一个池子的最多的返佣数量,也未在返佣的时候判断总返佣金是否用完了,导致恶意的套利者可通过不断调用swap函数进行代币兑换来薅取合约的返佣奖励。慢雾安全团队提醒DApp项目方在设计AMM兑换机制的时候需充分考虑项目的业务场景及其经济模型,防止意外情况发生。[2021/4/5 19:46:39]
缺点:
审查:最明显的一点是你的资金是完全可审查的。这扼杀了加密货币其中一个核心原则。
中心化权力:拥有托管钱包的另一个超级被低估的问题是,它背后的公司可以完全控制这些资金。虽然今天看来不是问题,但在未来,这些公司能像今天的银行一样运作。他们可以开始放贷以赚取更多利息,并重新创建我们今天拥有的相同系统。虽然现在听起来不可能,但这事未来发生的概率还是很大的。这是权力的腐败本质。
默认情况下,任何可以访问你的私钥的钱包服务都是托管的。
非托管
在非托管机制中,你可以与其他方共同承担追回责任,但这里的关键是,未经你的同意,任何人都不能拿走你的资金。
一些基本示例如下:
种子短语备份:这可能是最常见的一种。在这种情况下,你会写下一些单词并确保它们安全。如果你丢失了主设备,你可以通过输入这些单词轻松恢复你的钱包。几乎所有钱包都支持这种方式,因此你可以轻松地从一个钱包迁移到另一个钱包。
优点:
主权:只有你有权访问你的资金。
自由:只需输入种子短语,你就可以轻松地将钱包迁移到另一个钱包。
缺点:
UX:在一张纸上写下一些单词,感觉不是现代人做的事。
安全性:它增加了额外的安全问题。如果有人窃取了助记词,他们会立即获得你的资金。如果你将助记词与你的设备一起丢失,你再也无法找回你的资金。
责任:你有100%的责任。如果出现问题,没有人可以打电话。责任通常是好的,但是对于具有如此多经济价值的系统,责任应该在应用程序和系统上,而不是在用户身上。
多重签名:像Gnosis这样的多重签名钱包非常安全,并为生态系统提供了巨大的价值。我相信这些类型的钱包非常适合管理DAO的储备以及拥有大量加密货币并希望将资金存放在那里的人。对于日常用户来说,它们不是很实用。
还有另一种较新的选择,称为社会恢复。你会发现,此选项可以是托管的、非托管的或半托管的。
社会恢复
社会恢复是一种通过监护人获得资金权限的机制。我相信这个机制是一个很好的前进方向,但仍然有很多缺陷。请允许我解释一下。
额外的安全考虑:通过拥有监护人,你增加了额外的安全复杂度。如果你的大多数监护人密谋反对你,他们将能够窃取资金。而且我不是从夸张的角度说的,我是从务实的角度来说。他们可能有偷窃的不良意图,而且还可能被社会工程,甚至丢失自己的钱包。额外的复杂度:不是所有用户都能找到可以托付他们的毕生积蓄的几个人。即使他们能找到道德上信任的人,真要把自己的钱包安全交到他们手上,也不免犯嘀咕。
我也列出我收到的对社会恢复的一些反驳声音:
使用中心化监护人:使用中心化监护人只是一个普通的中心化钱包。我们对此需要思考,如果政府强迫监护人拿走用户的资金,他们能这么做吗?如果答案是肯定的,那么它真的是非托管的吗?
把自己当作监护人:我经常听到的另一点是,有另一个钱包作为备份。我认为这种设置根本没有意义。如果你有一个钱包作为备份,那么该钱包是你最薄弱的环节。那么为什么要使用这个钱包而不是你唯一的有监护人的钱包呢?你只是引入了更多的风险。
考虑到所有这些要点,让我介绍一下主权社会恢复。
二、主权社会恢复
主权社会恢复的实施与社会恢复非常相似,但有一个很大的区别:它预先确定了下一个所有者。
如前所述,社会恢复的大问题是监护人可以将所有者更改为新地址。这个新地址是函数中的一个输入参数,允许监护人选择他们喜欢的任何地址。
通过主权社会恢复,监护人只能将钱包恢复到真实所有者持有的预定地址。
让我们来看一个例子:
Alice在她的移动设备中创建了一个智能合约钱包。签名密钥在移动设备的硬件中加密。
Alice选择一组监护人,或者钱包默认为中心化的。
恢复所有者密钥对被创建,地址存储在钱包合约中的“recoveryOwner”变量中。种子短语可以显示给Alice或保存在不同的云提供商中。这个种子短语不是那么重要,Alice随便放也没事。如果有人偷了它,那是完全没有价值的。
这是一个半伪代码示例,以便更好地理解:
我们也可以以更安全的方式恢复。以防攻击者拥有恢复密钥,并且等待所有者放松警惕:
*你可以添加一个额外的功能,这样监护人就不能很容易地永远锁定钱包.
让我们回顾一下主要的安全考虑事项:
监护人获得钱包资金的唯一方法是恶意背叛用户并窃取恢复种子短语。前者的概率并没有那么低,但如果再加上后者,就变得极不可能了。
如果用户失去对恢复种子短语的访问权限,则不会发生任何事情。用户可以生成一个新的,并更改恢复所有者。
如果攻击者窃取了恢复种子短语,他将无法对其进行任何操作。
用户可以有中心化托管人作为监护人、家庭成员等……资金是完全安全的。拥有几个中心化监护人将提供与使用托管钱包相同的用户体验,不同之处在于该钱包是100%非托管的。
为了避免社会工程攻击,主种子短语从不能向用户展示。
资金流失的另一种方式是,如果攻击者可以访问移动应用程序。这适用于几乎所有钱包。因为这是一个智能合约钱包,所以我们可以添加额外的安全过滤器,如多重签名、支出限制等……始终需要所有者密钥才能签名。如果攻击者访问钱包设备,他将只能窃取有限数量的钱,或者根本不能。但即使在需要mofn的多重签名中,也始终需要所有者签名。
最后一个考虑是将恢复地址种子短语抽象之后给到用户。这可以通过在云提供商中对其进行加密来完成。从用户体验上来说,感觉会比使用gmail好。
这个组合将把所有责任从用户身上剥离,同时提供一个安全和非托管的钱包机制。
一些负面情形:
如果用户同时丢失了设备和恢复种子短语怎么办!!!
尽管这两种情况不太可能同时发生,但我们可以实施一些更复杂的过滤手段。例如,只有当钱包处于非活动状态超过x(180?)天时,监护人才能将钱包解锁到新地址。这需要权衡取舍。
我们将依旧显示种子短语!!!
恢复种子短语可以完全从用户那里剥离,并存储在不同的云提供商中。
坚信监护人不会作恶!!!
也许你的监护人不会恶意窃取你的信息。但是,与使用中心化钱包相比,拥有监护人会带来更多的安全风险。如果他们被社工怎么办?如果他们中的大多数人丢了钱包怎么办?如果…。我真的不相信人们会对这些换来的风险感到满意。而且,只有一个中心化监护人的传统社会恢复钱包与托管钱包完全相同。那个监护人随时可以卷款走人。
结论
这种机制提案试图让用户享有100%非托管钱包的主权,但又有中心化钱包的用户体验。我相信我们需要停止将责任推给用户,创建更无感的系统,同时保持我们关心的核心价值观。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。