Coucou

Posted on Aug 03, 2022Read on Mirror.xyz

从 Premint 事件探讨 Web3 安全的风险与机遇

嘉宾

Will | BAI Capital合伙人 | @jpejpejpe18

Max | Cobo安全团队负责人 | @MathJoyer

子玉 | Beosin安全团队 | @Beosin_com

SlowMist | 慢雾安全团队 | @SlowMist_Team

零时科技 | 零时科技安全团队 | @noneageofficial/@lunaray_sec

*本文章仅为嘉宾个人观点,不构成任何投资意见


Premint 大规模被盗事件再次为我们敲响了保护资产安全的警钟,本期非常荣幸地邀请到了安全赛道的几家头部机构,分别从从业者和投资者的角度,谈谈 Web3 黑暗森林的风险和机遇,希望能够碰撞出不一样的火花。

全文 5760 字,预计阅读时间 14 分钟

TL;DR

◾常见的安全事件有三类:要求授权资产、要求转移资产以及直接盗取资料或助记词,Premint 事件属于第一类;

◾个人用户规避高危操作,减少资产损失的方法:

  1. 提高安全意识,不要相信天上掉馅饼;
  2. 当网站对钱包发起交互时,看清楚操作内容;
  3. 一旦误操作,立即取消所有地方的授权;
  4. 创建零钱钱包,做好资产安全隔离;
  5. 安装安全插件,帮助规避风险;通过钱包授权中转的方式,减小资产风险

◾ Web3 里的 B 端项目方应该像在传统 Web2 企业里一样,做好自身的安全监控与防范,包括合约安全、前端安全、人员安全和后端服务安全;

◾目前 Web3 安全还是一片蓝海,存在很大的机遇,有很多市场空缺等待填补;


Premint 事件的始末

@Jason:

** **Premint 是一个白名单抽奖 mint 的工具,本次的事件主要源于 Premint 遭到了恶意注入,诱导用户进行资产授权。这其实是最粗暴、小儿科的攻击,常见的安全事件分三类:

  1. 要求用户授权资产
  2. 要求用户转移资产
  3. 窃取资料/助记词

其中授权资产和转移资产是普通C端消费者最容易受到的攻击。不论是 Premint 的网站被恶意注入,还是某个 Discord 被黑,又或是伪造的 x2y2 或者别的交易网站,最终都是要求用户授权资产。很多用户看到“Free Mint”的按钮时,会觉得天上掉馅饼了没看清楚就点了,对方就有权限转移资产。Premint 本身是一个正规的网站,只是遭到了恶意 JS 脚本的注入。因此仅按照常规的检测风险的方式,去识别网站的域名是不是虚假的,其实是行不通的。

Buidler DAO 和 Beosin 推出一款公益产品是MetaShield 通过判断高危资产交易行为,加上黑白名单机制来防止恶意攻击。我们的黑名单现在已经接入了慢雾的数据源,并会通过信息透传等方式进行辅助分析。我们访谈了几个 MetaShield 的用户,他们这次全都成功规避掉了被恶意盗窃的风险。

MetasShield 防钓鱼安全插件下载链接:https://www.metashield.cc/

C端曾出现过严重的安全问题:钓鱼诱导、助记词泄露、账号被盗

@ 零时科技 & 子玉:

  • 伪造钱包App:假的钱包 App 一般只有两个功能,创建新钱包和导入助记词。这里的创建新钱包是点不进去的,而导入助记词后也不会有其他功能,导入的私钥会直接被传送至攻击者的后端服务器。
  • 助记词泄露:针对助记词泄露问题,很多用户会将助记词存储在线上,这样是不安全的。只存一份也是不行的,一旦丢了就找不回私钥,也就意味着资金丢失。助记词泄露之后在链上是没有任何感知的,等真正感知到的时候,黑客已经用你的助记词把资金全部转走了
  • 社交媒体账号被盗:典型案例是 BAYC 无聊猿的网络钓鱼攻击事件。当时某个艺术家的 Twitter 账户被盗,发了一些恶意信息,导致很多粉丝点了,引发了比较严重的事件。

B 端曾出现过的严重的安全问题:合约、前端、人员、社媒、后端服务安全问题

@ 零时科技& 子玉& Lisa:

  • 私钥:需要保存好,最好使用冷钱包,推荐离线签名的方式;
  • 社交媒体被盗:凭据需要保存好,最好每天及时更新;攻击者会在 Discord 里利用浏览器的恶意书签盗取 Discord 的 Token,或者是骗取项目方人员直接在网页版  Discord 上输入恶意代码,并登录其账号发布一些虚假信息,引导用户进行交互,最终盗取 NFT;
  • 合约方面:主要在于访问控制的缺陷。比如某一个 NFT 可以质押存续,由于访问控制不足,导致用户可以输入多个 ID 进行不断取钱的操作。
  • 人员漏洞:一定要对运维等内部人员做好安全培训,因为人其实是安全环节里最充满可变性和不稳定性的一个环节;前阵子有一个跨链桥遭受了攻击,当时大家都以为是私钥被盗/泄露了,结果后来发现是社工钓鱼。团队中的一个工程师想找工作,随后收到了一个高薪 offer,当他打开 offer 文档时,电脑就被入侵了,导致了数据泄露。最终黑客拿到了网络上 9 个验证器中的 4 个,完成了攻击。这虽然看起来是一个智能合约攻击事件,但是本质还是人员安全问题,防钓鱼培训没有做到位。
  • Web 服务器安全:目前很多前端网站托管在中心化服务器上,需要注意相关安全问题。比如云服务、CDN 相关的Token凭据泄露,导致攻击者可以篡改/引入JS 文件。
  • 前端安全:这次的 Premint 事件属于前端安全问题,网站的前端代码有被攻击的可能,服务器也有被攻击的可能,供应链的JS空间也有被攻击的可能。因此前端也是一个值得注意的方向。

该如何提高警惕减少资产损失?

@Jason:提高安全意识、学会及时止损、安装安全插件

  • 需要具备基本的风险安全意识,不要相信天上掉馅饼的事。比如在私信中收到一些链接,尤其是链接里面的内容是 BAYC 等高价资产的情况下,不要相信。
  • 在试图点击任何按钮对钱包发起交互的时候,一定要睁大眼睛看清楚将要被执行的究竟是什么操作。
  • 一旦发现真的误操作了,迅速把所有的授权全部关掉。如果钱包已经被污染了,就去注册一个新的钱包,把资产全部转移。
  • 做资产隔离:如果你喜欢刀口舔血,想要通过各种高危风险操作薅羊毛,可以注册一个零钱小钱包,里面存0.5ETH就够了。即使中招了,也可以有限度地做好资产的安全隔离。另外,也可以通过安装 MetaShield 或者 Beosin alert 以及其他的安全插件来规避资产风险。

@子玉:项目方要处理好安全问题、与 Web3 生态安全团队合作

  • 项目方可能要转变一下项目的开发模式。在 Web2,是项目先上线,有一定初始用户并拿到投资后,才会去做安全上的投入,很多初创团队的安全管理是滞后的。而 web3 从项目上线、用户参与进来时起,就需要做好安全。不管是 Web 的安全、智能合约的安全、还是项目方特权私钥的管理,都需要在项目上线前完全处理好,否则就是对自己、对用户的不负责。在项目运行的过程中,也一定要做好项目整个态势的感知工作。比如监控网站的 JS 是否有被篡改、完整把控智能合约。
  • Beosin 是 Web3 全生态的安全解决方案提供团队,我们在项目方上线之前能够提供审计服务;在上线过程中能给项目方提供态势感知服务,帮助尽早发现项目的异常行为;即使最后被盗了,我们也能提供完整的资金服务。

在B端出现安全事件时个人如何保护自己的资产?

@Max:零信任、使用硬件钱包

  • 针对分布式办公,比较好的一个解决方案是零信任。完全按照 Google 那套零信任执行,真的可以将风险面降到很低。使用公司配置的电脑、手机、硬件的 key,并统一使用类似于 Google 的账号,同时内部所有系统都接入 Google 这类的IP,当然花销也是很大的,安全这个东西永远都是一分耕耘一分收获。
  • 安全意识培训的 ROI 超级高。很多人没有意识到某些行为是有风险的,而做安全意识培训的目的就是告诉大家哪些事是有风险的,遇到特定的场景时应该怎么做。这样做很容易激发大家的安全意识,同时也能提高主人翁意识。
  • 机构和公司面临的另一个风险是内部操作风险。Cobo为了防止单点风险,建了一套 Cobo safe 进行授权操作,把风控具体到了参数级。比如一个项目方使用 Cobo safe时,可以指定一个 owner,owner 可以添加一些 members,并且可以给 member A 添加允许操作 Uniswap 或者 Sushi 的函数,即使 function 中的某些参数需要指定黑白名单,也都可以设定规则。
  • 对于 C 端用户,如果是持币大户,一定要使用硬件钱包。所有软件类钱包都是有很大风险的,硬件钱包虽然也有风险,但是整体而言,一个从正常渠道获取的硬件钱包,其安全性要远远高于软件钱包。

工具推荐及操作建议

@Lisa& Jason& Max:MetaShield 防钓鱼安全插件

  • 对个人用户而言,很难通过 arcb465 这串十六进制(代表 setApproval 授权)判断合约究竟要做什么。在传统互联网中,点击可能带有木马的文件时,防火墙会提醒用户这个文件里有木马;在 Web3 中,也需要类似的东西辅助。MetaShield 就是一个很好的方案。现已接入慢雾的黑名单数据,插件可以给出高危弹窗提示,则能够起到 double check 的效果,二次提醒用户注意。
  • 下载链接:https://www.metashield.cc/

@子玉:分钱包存储、Beosin Alert

  • 首先,资产不要归集到一个地址上。可以将NFT存在不同的钱包地址中,并授权给自己的主账号,使用 transfer from 函数进行交易。这样做的话,主账号本身不持有资产,只持有其他地址的授权,代理转账可以解决60-70%NFT和代币业务的使用场景,同时又不会因为被钓鱼导致资产损失。
  • 此外,Beosin Alert 工具可以用于识别钓鱼网站,但是Premint这类事件(JS注入)很难防御,需要用户提高警惕,注意资产分离保管。

@零时科技:分金额保管、提高个人安全意识

  • 将资产分类型、分金额进行保管
  • 要看清楚钱包操作的内容,提高个人安全意识
  • 安全意识不仅仅是个人的安全意识,也包括项目的安全意识。Web3 是一个全新的领域,有很多可以去尝试的地方。有的项目创新的速度较快,暴雷也比较快,其中间可能缺失了一些安全环节。我们见到了很多内部人员把资金转走了的跑路行为。除此之外,还可能会有一些宏观政策、监管方面问题,目前仍存在一些不确定性。

@Will:这个行业强调 code is law,立法和执法都是没有的。

  • 用户需要一款产品用于诊断,包括钱包的分散程度、授权的安全性、风险提示等,像传统互联网中的360一样。同时,当 token 被盗了之后,产品需要很迅速地举报这个地址/行为,给其他人以警示。这听上去其实都是在 360 时代非常基础的东西,但在 Web3 几乎没有。我觉得很大的一个原因是,之前的 Web3 用户以程序员为主,大家需要对自己完全负责。而现在用户圈层逐渐扩大到了小白,这类用户是带着传统移动端时代对于应用的盲性/体验上的惯性来到 Web3 的。所以我觉得安全问题更应该是面向C端解决的,在开发者端、网站端和项目端也需要有安全对策。

安全问题对 Web3 的发展有何影响?

@Will:用户流失

  • Web3安全问题虽然是一个概率事件,其发生必会累积用户流失,除非这个行业的 Ponzi 和赌性依旧极高,否则一般用户不会来了,资产也就不会增加,消费额提升不上去,肯定会让这个行业没有办法往前走。

@Max:安全问题会成为 Web3 的磨刀石

  • 安全问题成为不了拦路虎,最多是一个磨刀石。Web3 早晚会深入到生活的方方面面,最后大浪淘沙留下来的项目方,肯定是很有韧性的。DeFi 这两年发展太快了,各个项目基本都在拼速度,不会去拼安全度,但是早晚会回归到安全上。
  • 一些 DAO 或者机构如果对于资金的用途有明确的方向,可以去集成。比如需要定期使用 Uniswap,可以指定一个成员给与只能操作 Uniswap 的某个 function 的权限,以此限制钱的去向。我们之后也会将安全上的能力赋能给使用 Cobo safe 的客户。

安全问题会给 Web3带来哪些机会?

@Will:解决安全问题、入口级产品

  • 最近在看一些 DeFi项目,有些人主张不用 liquidity pool 的方式做下一代 DeFi,而是在一个用户量已经比较多的 Web3 的 Landscape 寻找机会。
  • 后续在PC、移动端都适配的情况下,会有很多应用出现,这些应用需要安全保障。因此可能会诞生一些保险、赔偿或者保证金机制。
  • 从投资的角度,安全问题是行业中的最高优先级问题。另一个问题是,做安全赛道的人该如何将业务的 value capture 到商业模式之内。我们认为做安全的团队最后可能会以 subscription、交易所等方式变现,类似 MetaMask 等钱包的变现方式。需要一个很好的入口级产品。

@Max:审计工作、安全赛道

  • 熊市的到来可能是一件好事,目前保险大部分保的是冷钱包,而冷钱包本身的安全性就是最高的,所以有点鸡肋。希望可以有一个社群、公司,对于项目进行公正公平公开的审计/持续监控,这对于普通用户来讲是一个福音。
  • 安全赛道在之后也是一片蓝海。比如慢雾基本已经做到国内的第一列队了,后面依然有很大的发展空间。国外也有很多友商,单纯从合约审计的角度来讲,目前国外的友商不如国内的安全公司踏实。如果是做 ToC 安全,则会更蓝海一些。攻防的过程是持续的,从 MakerDao 到现在,再到未来,永远都不会断。在这个过程中肯定会留下很多真正有实力的做安全的公司。

@子玉:安全审计公司

  • Web3 安全公司有很多机会。由于 Web3 讲究分布式,很多小团队专注于产品研发,没有精力去养专门从事安全的雇员。这类团队可以把安全专门托付给安全公司来做,而他们自己则专注于产品功能的开发。前段时间我们对 DeFi 赛道做了统计,比较火的、真正存活下来的项目大概有 1000 多个,而其中经过审计的就只有几百个。这对安全公司而言是很大的机遇,还有很多市场空缺等着我们去填补。
  • Beosin 有在给投资人做项目的安全性评估,对创业者来说,如果在创业初期就把这些投入做好,完成审计、在运营过程中注重安全,其实存活下来的几率是很大的。在初期野蛮生长的阶段,一个安全稳健的项目肯定能走得更远。

提问环节

Q: 如何看待 DeFi 保险赛道?

@Jason:很性感但是很难做

我有个朋友目前在做主要面向B端的保险,他们的业务逻辑很有意思。

  • 场景一:比如说我是一个项目方,用户使用我的产品,如果项目出了安全问题,用户会血本无归。这时,项目方为了获得用户的信任,会去购买保险,如果安全问题导致用户的资产清零了,保险会按照一定的比例对用户进行理赔。在这种场景下,项目方会主动购买保险以换取信任。
  • 场景二:社区驱动购买。用户会在社区中要求项目方购买保险,以规避风险。

保险是B端和C端双向的选择,我觉得还是挺性感的。不过个人资产安全保险很难做,因为在 Web3,包括钱包在内的很多东西都不是实名的。用户很难证明资产确实丢了,而不是自己转移到另一个钱包里。

Q: Disconnect site function 就可以取消授权吗?还是要去 revoke.cache 取消合约的授权才有意义?

@子玉:revoke.cache 取消合约的授权才有意义

网站的 connect 只是把你的地址注入到文件里去,让网站知道你是使用哪个钱包地址访问网站的;你断连接的时候也只是这个网站不能继续获取到你的地址而已。假如你已经给这个网站上的某一个地址授权了,在disconnect 之后授权其实还在,必须手动到 revoke.cache 里面把授权取消掉,仅仅在网站上点disconnect是不行的。

Q: 即使将钱包连接到这些网站,只要没有去授权转移资产,其他人就没办法做任何操作吗?

@子玉:盲签会给攻击者可乘之机

大部分情况下是这样的,但是有些特殊的情况。比如说盲签,攻击者将交易构造成十六进制的数据,让你去签名。这时虽然你签名的数据没有广播出去,但他已经拿到了你的签名,只需要自己帮你广播出去,也是能达到相同的效果的,相当于是你签发的这笔交易。


文章:@Buidler DAO

校对:@Cyan @Chasey

排版:@suqibai @Coucou


https://linktr.ee/buidlerdao

https://tally.so/r/wA7LlN

Web3