从 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


Subscribe to Buidler DAO
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.