diff --git a/README.md b/README.md index 6bf44b1..060d883 100644 --- a/README.md +++ b/README.md @@ -373,7 +373,7 @@ DeFi 安全至少包括如下几部分: 还有一种削弱项目方权限过大风险的做法是:将 admin 多签了,比如用 Gnosis Safe 进行多签管理,这样至少不会出现一言堂。这里需要注意的是,多签可以是“皇帝的新衣”,比如一个人掌握了多把钥匙。所以目标项目的多签策略需要公示说明清楚,钥匙都由谁保管,保管钥匙的角色也一定是有口碑的。 -这里需要特别注意,任何安全策略,都可能出现“皇帝的新衣”问题,表面做得好,实际上却不是,呈现出了一种虚假安全感。再举个例子,Timelock 这玩意,看去似乎挺好,实际上出现过有的项目方部署的 Timelock 是有后门的。用户一般也不会直接去看 Timelock 源码,而且也不一定看得懂,于是放了个后门在那,一时半会还真不一定有人留意到。 +这里需要特别注意,任何安全策略,都可能出现“皇帝的新衣”问题,表面做得好,实际上却不是,呈现出了一种虚假安全感。再举个例子,Timelock 这玩意,看去似乎挺好,实际上出现过有的项目方部署的 Timelock 是有后门的情况。用户一般也不会直接去看 Timelock 源码,而且也不一定看得懂,于是放了个后门在那,一时半会还真不一定有人留意到。 除了权限过大风险,智能合约安全的其他内容也都很关键,但理解门槛还是挺高的,这里就不展开了,我的建议是这样:至少可以逐步学会阅读安全审计报告,熟能生巧。 @@ -508,7 +508,7 @@ OpenSea 在 2022 年前后出现过数起用户持有的知名 NFT 被盗事件 我这里拿其中一个 NFT 市场进行具体说明(不一定是 OpenSea)。当目标用户在 NFT 市场里授权了相关 NFT 挂单后,攻击者构造了正确的待签名内容,通过 Keccak256 哈希后,在钓鱼页面上弹出了待签名的内容给用户,此时用户看到的东西如下: -![](res/metamask_sign.png) +![](res/metamask_sign.jpg) 仔细看,MetaMask 弹出的这个窗口,能看出什么?账户及余额、签名请求的来源网站、正在签名的消息,没了...就这点内容,用户怎么会想到自己一旦点击了“签名”后,灾难就来了,自己的相关 NFT 就可以被盗走了。 @@ -516,7 +516,7 @@ OpenSea 在 2022 年前后出现过数起用户持有的知名 NFT 被盗事件 为什么会出现这种情况,最最本质的原因还是在于签名并不存在浏览器同源策略的约束,你可以简单理解为:同源策略可以确保一个行为只在明确的域名下发生,不会跨域发生,除非项目方故意要跨域的发生。如果签名有同源策略,那么非目标域名产生的请求签名,即使用户签名完成了,黑客也没法将这个签名用于目标域名下的攻击。这里就不继续展开说了,协议级别的安全改进,我有注意到新草案,我希望这种情况能尽快得到改善。 -目前提到的签名安全涵盖了主要方式,但变种其实挺多,无论如何,万变不离其宗。最好的吃透方式是自己从头到尾完成将攻击复现一遍,甚至首创一些独特的攻击方式。比如这里提到的签名,其实里面有大量细节,比如如何构造待签名内容、签名后的内容具体都是什么?除了 approve 这种授权方式,还有其他的吗(有,比如 increaseAllowance)。好吧,这里展开的话就太过技术了。很好的是,你清楚签名的重要性了。 +目前提到的签名安全涵盖了主要方式,但变种其实挺多,无论如何,万变不离其宗。最好的吃透方式是自己从头到尾完整将攻击复现一遍,甚至首创一些独特的攻击方式。比如这里提到的签名,其实里面有大量细节,比如如何构造待签名内容、签名后的内容具体都是什么?除了 approve 这种授权方式,还有其他的吗(有,比如 increaseAllowance)。好吧,这里展开的话就太过技术了。很好的是,你清楚签名的重要性了。 对于用户来说,取消授权(approve)是可能在源头上对抗这类攻击的,你可以用如下这些知名的工具来操作: @@ -551,9 +551,9 @@ OpenSea 在 2022 年前后出现过数起用户持有的知名 NFT 被盗事件 好,让我们来看看这个反常识真实案例。 -![](res/solana_nft_phishing.png) +![](res/solana_nft_phishing.jpg) -2022.3.5,一个安全预警:Solana 上的授权钓鱼残忍多了,攻击者批量给用户空投 NFT(图1) ,用户通过空投 NFT 描述内容里的链接(www_officialsolanarares_net)进入目标网站,连接钱包(图2),点击页面上的“Mint”,出现批准提示框(图3)。注意,此时的批准提示框并没有什么特别提示,当批准后,该钱包里的所有 SOL 都会被转走。 +2022.3.5,一个安全预警:Solana 上的授权钓鱼残忍多了,攻击者批量给用户空投 NFT(图 1) ,用户通过空投 NFT 描述内容里的链接(www_officialsolanarares_net)进入目标网站,连接钱包(图 2),点击页面上的“Mint”,出现批准提示框(图 3)。注意,此时的批准提示框并没有什么特别提示,当批准后,该钱包里的所有 SOL 都会被转走。 当点击“批准”时,用户会和攻击者部署的恶意合约交互: *3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v* @@ -717,7 +717,7 @@ Bitwarden 做得更彻底些,是全开源的,包括服务端,任何人都 ### 双因素认证 -你在互联网上的身份安全,第一层靠的是密码,第二层得靠双因素,第三层靠的是目标项目本身的风控能力。我不能说双因素都是标配,比如你在用的去中心化钱包,有一层密码就够烦了(现在基本都配套人脸、指纹这类生物识别来提高体验),双因素就算了吧。但在中心化平台里,没有双因素可不行。因为中心化平台任何人都可以访问或有能力访问,你的密码被盗了,意味着你的账号权限失守,资金也就没了。而你去中心化钱包,密码仅仅只是发生在本地的认证,黑客即使拿到这个密码,还需要有能力接触到你这个钱包所在的设备。 +你在互联网上的身份安全,第一层靠的是密码,第二层得靠双因素,第三层靠的是目标项目本身的风控能力。我不能说双因素都是标配,比如你在用的去中心化钱包,有一层密码就够烦了(现在基本都配套人脸、指纹这类生物识别来提高体验),双因素就算了吧。但在中心化平台里,没有双因素可不行。因为中心化平台任何人都可以访问或有能力访问,你的密码被盗了,意味着你的账号权限失守,资金也就没了。而你的去中心化钱包,密码仅仅只是发生在本地的认证,黑客即使拿到这个密码,还需要有能力接触到你这个钱包所在的设备。 明白其中区别了吧?好,知名的双因素认证(2FA)工具有:Google Authenticator、Microsoft Authenticator 等,当然如果你用密码管理器(如 1Password)也是自带了 2FA 功能的,非常方便。无论如何都记得做好备份,因为丢失 2FA 是一件很麻烦的事。 @@ -902,8 +902,8 @@ Punycode 这种钓鱼方式,几年前就有真实利用了,比如 2018 年 我们遇到许多人被盗币后,来咨询我们怎么办,很纠结的是,许多人难以表达清晰,更别说出具清晰的事故报告了。但我觉得表达是可以练习或依葫芦画瓢出来的。比如至少把以下几点说明下: -* 概要1:什么人、什么时间、发生了什么事、总损失多少? -* 概要2:损失有关的钱包地址、黑客钱包地址、币种类型、数量,一个表格就比较清晰了。 +* 概要 1:什么人、什么时间、发生了什么事、总损失多少? +* 概要 2:损失有关的钱包地址、黑客钱包地址、币种类型、数量,一个表格就比较清晰了。 * 过程描述:这点才是最难的,这里需要把这个事故过程的方方面面细节点描述出来,这甚至会分析出黑客有关的各种痕迹,最终输出黑客画像(其中包括了作恶动机) 我们具体在对接时,模板会复杂的多,循序渐进的。有时候人的记忆也是有问题,甚至出现刻意隐瞒关键信息导致浪费时间或耽误了绝佳时机。所以在实际对接中,消耗是真大,我们需要用我们的经验去做好引导工作。最终和丢币的人或项目方一起出具事故报告,并不断更新这份事故报告。 diff --git a/res/metamask_sign.jpg b/res/metamask_sign.jpg new file mode 100644 index 0000000..81c7b1c Binary files /dev/null and b/res/metamask_sign.jpg differ diff --git a/res/metamask_sign.png b/res/metamask_sign.png deleted file mode 100644 index 535e019..0000000 Binary files a/res/metamask_sign.png and /dev/null differ diff --git a/res/solana_nft_phishing.jpg b/res/solana_nft_phishing.jpg new file mode 100644 index 0000000..482950c Binary files /dev/null and b/res/solana_nft_phishing.jpg differ diff --git a/res/solana_nft_phishing.png b/res/solana_nft_phishing.png deleted file mode 100644 index 55f9d51..0000000 Binary files a/res/solana_nft_phishing.png and /dev/null differ diff --git a/res/sushiswap_3rd.png b/res/sushiswap_3rd.png index 0113be6..5bfe18e 100644 Binary files a/res/sushiswap_3rd.png and b/res/sushiswap_3rd.png differ