SeeDAOIR导言:据安全数据显示,今年以来有记录的因和安全漏洞带来的加密领域损失已近30亿美元。每一个区块链行业的参与者都无异于身处“大西部”,无时不刻受到隐私、财产损失的风险。虽然业内已经有部分对区块链、安全漏洞进行分析的工作,但大多只是针对某些案例,或者对背后机制的讨论不够深入。因此,我们很高兴为大家带来这篇由两位网络安全领域的专家所撰写的万字长文,为大家全面且深入的分析当前几乎所有安全隐患并提供应对策略。0.前言
自网络诞生以来,攻防领域就一直是研究的热点;区块链诞生之后由于其巨大的财富效应与用户对安全的认识不足,吸引了无数的黑客挖空心思进行攻击。在近几年Defi与NFT高速发展的环境下,利用区块链网络实施的钓鱼攻击更是越来越多,各类攻击场景及攻击方法层出不穷。本文前半部分阐述了区块链安全基础知识,重点阐述了用户在使用区块链相关应用时应重点关注的安全要素。后半部分整理常见的利用区块链用户资产的攻击案例,通过对黑客攻击手法进行分析,引出针对特定攻击手段的防护方案。1.区块链安全基础
区块链安全基础思维导图根据柯克霍夫原则,即使已掌握了密码系统的运作步骤,但是在密钥未被泄露的前提下,密码系统仍然是安全的。在区块链环境下,保护钱包私钥,是保护链上数字资产的重要措施和前提。1.1私钥及助记词安全
区块链钱包软件所管理的私钥通常是256bit长的随机字符串,为便于展示区块链钱包工具会将256bit数据转换为32字节长的16进制编码。“0x40e667191f4497cc3ab018ceb524a32c2f4875fbfb0103322767f46f5b319244”即为区块链钱包软件生成的钱包私钥。通过将私钥导入区块链钱包,用户即可掌握钱包内对应的数字资产。利用椭圆曲线密码框架,开发者可以利用私钥数据便捷的计算出与之对应的公钥信息,通过对公钥进行keccak256运算并取运算结果的最后20字节,即获得区块链钱包地址。使用以太坊ethers工具库生成公私钥,并根据公钥信息计算钱包地址的代码运行结果如下图所示:
公私钥生成钱包地址方法考虑到哈希运算具有抗强碰撞和弱碰撞特性,因此在不掌握钱包私钥的前提下攻击者难以通过随机碰撞的方式构造出两个完全一致的区块链钱包地址。为便于用户记忆及保存,在BIP39提升改进计划中引入了使用助记词表示区块链钱包私钥的方法。为便于理解,读者可以认为一组由12、15、18、21或24个单词组成的助记词列表即对应一组区块链钱包私钥。在助记词处于保密状态时,用户的钱包私钥及数字资产是安全的。在创建区块链钱包时,助记词及私钥数据是异常敏感的,在进行敏感操作前用户检查周边环境是否有可疑人物、高清摄像头等可能产生窥屏事件的不安全因素。用户通常需要使用纸笔或助记词钢板记录钱包助记词并妥善保存。在使用区块链网络时,用户应当做到不向任何人透露与助记词及私钥相关的任何信息,切实保障用户数字资产的安全性。1.2智能合约安全
智能合约的出现使以太坊网络相较比特币网络具备了更好的延展性,开发者可通过以太坊提供的SDK开发工具编写智能合约代码便捷的开发DAPP。在以太坊中,智能合约是一种部署后则代码逻辑无法被篡改的计算机程序。待智能合约部署后,区块链用户即可以按照智能合约对应的代码逻辑与合约进行交互。用户在与智能合约交互前,应检查:1)智能合约代码是否已通过区块链浏览器完成了开源操作;2)对智能合约代码关键逻辑进行审计,待确保代码不存在恶意使用或转移用户数字资产的敏感行为后,再调用智能合约方法。调用经过合约开源认证或已通过知名智能合约审计公司安全性审计的智能合约方法,能够在一定程度上保障用户持有数字资产的安全性。1.3区块链钱包安全
区块链钱包软件为其用户提供了私钥管理,钱包账户管理,远程过程调用节点管理、交易签名、交易管理、与智能合约交互及硬件钱包连接等功能。区块链钱包软件存在的重要作用就是为用户提供了一个界面友好的私钥容器、密钥管理系统及交易签名代理工具,确保用户能够在不具备管理私钥及区块链交易广播工具能力的基础上,能够便捷的与区块链网络进行交互。从钱包是否与互联网存在直接连接进行分类,区块链钱包划分为1)冷钱包;2)热钱包。从钱包运行平台进行分类,钱包可以划分为1)PC主机钱包;2)浏览器插件钱包;3)移动手机端钱包;4)硬件钱包;5)网页钱包等。优先选择从官方渠道分发的区块链钱包软件。以浏览器插件钱包为例,用户可以从官方网站,浏览器应用商店,插件钱包官方Github仓库等渠道下载并安装浏览器插件钱包。在日常使用过程中,需要定期更新区块链钱包、底层操作系统、浏览器并保持其版本总是处于最新状态,以此来保护用户持有的数字资产安全。在使用区块链钱包软件时,用户应设置强解锁口令以避免遭受口令爆破攻击。在离开电脑前,应主动锁定屏幕和钱包,以避免遭遇因电脑钱包处于未锁定状态导致数字资产被滥用。Metamask钱包提供的自动锁定定时功能如下所示。
5分钟后钱包自动锁定用户应当优先选择官方渠道购买的硬件钱包。待收到钱包后,需要访问硬件钱包官方网站对钱包完整性及固件版本进行验证,以避免遭受供应链攻击。针对硬件钱包实施的攻击层出不穷:在使用硬件钱包签名交易时,用户需查看待签名交易的完整内容,并对交易合法性进行认证,避免进行盲签名,以避免遭受非法交易签名攻击进而丢失数字资产。用户在收到硬件钱包并创建区块链账户时,应当多次执行创建钱包生成助记词功能。通过记录硬件钱包生成的助记词与之及对应取得区块链钱包地址,比对不同创建钱包操作所生成的助记词差异,确保硬件钱包生成私钥所使用的随机数种子足够安全,创建钱包操作所生成的私钥足够随机。盲签名又名BlindSigning起源于一个问题:如果给我们提供了一份内容完全密封的合同,只留下签名页可见,你会愿意签署这份合同吗?我的答案是否认的:不会签署这份合同,避免签署对自己不利的合同内容。在区块链环境中,应用硬件钱包与智能合约进行交互与BlindSigning很像,因为签署智能合约交互交易时,用户无法通过硬件钱包获取智能合约的底层行为逻辑。Ledger的屏幕是非常小的,无法向用户与智能合约交互交易的全貌。用户若enableBlindSigning时,就代表其已经接受尽管Ledger无法向用户展示智能合约全貌的前提下,任然利用Ledger批准与智能合约进行交互的交易:此时,用户已经同意信任其发送的交易,而不是选择对交易合法性及行为进行校验。更多关于BlindSigning的资料可参考如下链接:1.4可信RPC节点
以太坊中知名的RPC节点服务主要包括Infura、Alchemy、Moralis等,BSC链的RPC节点服务商主要由BSC链官方提供。近年来受到关注的新公链解决方案如Polygon、Optimism、Avalanche及Fantom的RPC节点服务主要由Ankr提供,区块链用户在使用特定公链时,需要通过在钱包内添加RPC节点地址链接的方式与对应的区块链RPC节点建立连接,以便通过RPC远程调用的方式实现与区块链的通信及交互。RPC节点的作用是重要的,如果没有RPC节点,用户个人将难以接入区块链网络。下图给出了ConfluxeSpace区块链网络对外公开的RPC节点信息,通过钱包连接RPC节点,在用户发起转账和智能合约交互时,由RPC代理将交易打包发送至区块链网络,最终使交易以区块形式进上链。
用户应当选择安全性经过验证的RPC节点服务商,以保障其钱包数据来源的可靠性及与区块链网络交互的稳定性。恶意的RPC节点提供商可能会恶意显示不正确的区块链状态并记录用户的链上活动数据,严重危害用户数据安全。1.5DM及邮件安全
部分攻击者会通过使用社交网络私信或发送电子邮件等方式向目标用户发起攻击,通过精心设计钓鱼场景的方式使受害者确信:只要按照攻击者指示进行操作,即可获得奖励:当受害者选择相信攻击者时,其已进入了由攻击者精心构造的钓鱼陷阱。由于区块链交易具有不可篡改和不可逆的特性:大量区块链钓鱼攻击受害者在发现资产因为自身疏忽而被转移至攻击者持有的区块链账户后,丢失的资产早已无法挽回。下图给出了一封以盗取区块链数字资产为目标的钓鱼邮件:用户需要在特定截止日期前在平台处登记区块链钱包,不然就冻结账户。在收到这类电子邮件时,不点击邮件或私信中包含的任何超链接信息或按钮,待与官方核实确认邮件内容合法性后,再对邮件进行处理。
钓鱼邮件设置防钓鱼码能够在一定程度解决钓鱼邮件的问题,下图给出了premint平台提供的防钓鱼码功能:
1.6开发环境安全
开发者在开发DAPP应用时所使用的环境即为开发环境,保护开发环境安全,是保护应用开发者及DAPP应用使用者资产安全的重要前提。DAPP应用是基于区块链网络交互框架开发的,为了方便用户使用DAPP,开发者通常需使用基于JavaScript脚本开发的前端框架react或vue构建DAPP应用前端,便于用户直接利用前端UI直接与智能合约进行交互。前端开发框架有助于DAPP开发团队便捷的开发支撑DAPP应用运行和使用的前端系统。选取经过市场验证的SDK能够在一定程度上确保资产安全。1.7搜索引擎安全
完全相信搜索引擎结果,是钓鱼攻击成功实施的原因之一。搜索引擎,是一种按照特定策略、运用特定计算机程序从互联网上采集信息,在对信息进行整理和归纳后,对外向用户所提供的一种检索及结果展示系统,是帮助用户查找特定资料及信息的有力支撑工具。在区块链环境中,用户需访问DAPP官方网站时,通常也会将搜索引擎的检索结果作为参考之一,这给了攻击者可乘之机。攻击者可以通过仿冒知名的DAPP平台界面UI,并对仿冒站点进行SEO优化,使仿冒站点出现在搜索引擎结果的第一位或靠前位置。出于对搜索引擎结果的信任,最终导致用户持有的数字资产丢失。仿冒DAPP通过SOE优化进入搜索引擎结果靠前位置的案例。尽管Google已将其标记为Ad,但由于其结果出现在搜索结果第一位,仍然有部分用户中招。
SOE优化使钓鱼站点出现在搜索结果被仿冒的DAPP应用为x2y2这一NFT交易平台,其官方链接为x2y2.io,而仿冒站点链接为x2y2market.com。黑客通常会选取与被仿冒DAPP相近或相关的域名以达到并盗取用户数字资产的目的。1.8交易签名安全
在开始这一内容前,我们需要明确一个概念,什么是交易?什么是签名?什么时候会签名,在区块链中的交易有以下几类。转账交易:如将1ETH转账至另一个钱包地址与智能合约交互的交易:如调用智能合约的SafeTransferFrom方法,将NFT转移至另一个钱包地址,这相当于发起一笔写智能合约的交易所有交易在上链之前,都需要使用交易发起人对交易Hash进行签名,在交易上链的过程中,通过对签名结果认证的方式验证交易合法性,合法的交易打包上链的这一刻交易行为将生效:不管是转账的ETH还是转移的NFT都会进入目标地址中。此外,还有另外一种签名,比如登录mirror时需要签名来验证用户掌握连接mirror的区块链账户。确保交易签名安全的重点是:1)确保用户在确认交易时所看到的待签名内容是符合用户预期的;2)确保用户签名的交易发送后,区块链能够按照用户对交易的预期执行。用户所见即所签,所签即所行。确保经用户签名的交易被发送后,执行结果是符合用户预期的是保障签名安全的重要指导方针。在窃取用户私钥无果的前提下:部分黑客打起了盗用签名数据的歪心思:通过诱导用户对不安全的交易数据进行签名:诱导用户访问钓鱼页面并在钓鱼页面中将存在盗取资产操作的交易利用keccak256生成待签名数据推送至用户,若用户因疏忽进行了签名操作,则黑客即获取到能够向区块链节点证明交易合法性的签名数据。此时,黑客只需要将签名数据和构造的交易广播至区块链网络,即可实现滥用受害者账户数字资产的目的。下图给出了一个不安全的待签名请求,发起该请求的站点为钓鱼站点https://thejewsnfts.xyz,在后文我们还将对其通过仿冒推特账户实施攻击的方法进行阐述。
不安全的待签名数据在站点向用户发起签名请求时,用户需要对站点和待签名数据的合法性进行认证,经确认无误后再执行签名操作,确保签名操作执行的链上行为符合用户预期。在遇到待签名消息为纯16进制不可读数据时,用户应坚持拒绝签名。下图给出了一个相对安全的待签名消息,用户通过签名该消息实现使用区块链钱包账户登录进入Web3系统的目的:
登录cryptonatty系统所使用的签名数据1.9区块链浏览器
区块链浏览器为用户提供一个界面友好的查询区块链链上数据的接口。以太坊区块链浏览器Etherscan为用户提供了链上交易数据查询,资产转移信息查询,智能合约代码查询,智能合约交互,区块数据查询,地址资产分析、运算服务费用估算、区块链域名解析等功能,利用这些功能,用户可以快速的获取账户的余额信息;对智能合约代码进行安全审计,实时查询链上交易费用等。一笔以太坊交易主要包含以下信息:交易hash,交易状态,交易区块号,交易时间戳,交易提交账户,交易接收账户,交易发送金额,为完成交易所支付的交易费用及交易的单位燃料费用成本等。在使用区块链浏览器查询交易数据及交易详情时,应优先选择由区块链官方开发或推荐的区块链浏览器,通过检查目标合约的交易安全与否规避潜在的钓鱼或基于合约的授权攻击。
以太坊交易样例区块链浏览器是帮助区块链使用者验证交易是否成功的一项重要工具:用户A声称其通过区块链网络向用户B转账了1ETH,交易验证者可要求用户A分享交易Hash并使用区块链浏览器搜索检查交易信息中的交易接收账户是否为B,同时检查交易发送金额字段是否为1ETH来验证交易执行情况。此外,交易验证者还可以通过区块链浏览器直接检查用户B钱包地址余额变动情况,以验证B地址余额是否已增加1ETH。区块链浏览器还提供了智能合约开源展示的功能,便于用户在与智能合约交互前对代码安全性进行审查。用户应当掌握检查智能合约是否已处于开源验证状态的方法。用户应当优先选择与已完成智能合约代码开源验证的处理的智能合约进行交互。用户应通过区块链浏览器,对智能合约代码安全性进行审计,在确保代码不存在权限滥用或恶意使用用户数字资产的行为后,再与合约进行交互。已完成智能合约代码开源验证处理的智能合约在区块链浏览器中的展示信息如下所示:
完成合约认证的智能合约代码2.区块链攻击案例总结
在这一章节,我们将重点介绍黑客以盗取区块链数字资产为目标,通过构造钓鱼场景的方式在不需要掌握用户私钥的前提下盗取数字资产,通过分析这类攻击的特性,按照1-1对应的方式,给出防护方案。例如2.1.1中给出了DM类仿冒攻击后马上即介绍针对DM类钓鱼攻击的安全建议及防护方案。攻击的产生原因也就呼之欲出:既然用户在努力保护自己的私钥,也知道私钥很重要,那我就用一个更合理的办法让用户亲自把数字资产送给我。
区块链攻击思维导图2.1仿冒类攻击
2.1.1DM类钓鱼攻击介绍利用社交平台向用户发起私聊实施钓鱼攻击,是一种相对简单且易于实施的攻击:通过精心构造的场景诱导用户向特定区块链地址转账或访问钓鱼页面。用户参与某抽奖活动并中奖,奖品是免费向用户赠送的,但用户需要向特定钱包转账0.02ETH作为gas费,对方再将中奖奖品转发给中奖用户。下图给出了攻击者利用社交平台向用户发起私聊并实施钓鱼攻击的案例截图
钓鱼场景搭建:中奖DM类钓鱼攻击分析及安全建议黑客希望通过利益冲昏被钓鱼者的头脑,在使用区块链时,应当坚信没有免费的午餐。Ledger硬件钱包在其安全使用建议中专门指出:不要与在Discord、Twitter或任何其他社交平台上给你发送私人信息的人进行互动及交互,在Web3环境中,任何人都没有理由直接通过社交联系用户,并向其发送信息。在使用Discord及Twitter时,可以选择关闭DM选项或不查看推特的私信请求,眼不见为净。2.1.2账号仿冒类攻击介绍通过仿冒社交账号的方式实施钓鱼攻击:将社交账号名称,头像,介绍等信息设置为与被仿冒社交账号相近的内容,并通过社交网络释放钓鱼链接的方式实施钓鱼攻击。在区块链环境中,知名的DAPP项目方通常会遭受社交账号仿冒类攻击,严重威胁到用户持有的数字资产安全。下图给出了一个正版社交账号:
正版账号下图给出了仿冒账号通过社交网络释放的钓鱼站点链接
仿冒账号账号仿冒类攻击分析安全建议通过比对分析能够发现仿冒攻击成功实施需要满足以下要点:相似的域名:专门注册“thejewsnfts.xyz”这一域名以便以假乱真,而正版域名为“thejewsnft.com”,xyz后缀的域名在DAPP中较为常见,以假乱真;相似的推特用户名:为了以假乱真,攻击者还专门按照正版账户的推特用户名设置规则进行了仿冒,仿冒账户为")-Youcanuse{name}toinsertthecollectionnamedate:"30.07.2022",socialMedia:{discord:"https://discord.gg/example",twitter:"https://twitter.com/example",},medias:{preview:"preview.gif",favicon:"logo.png",},background:{type:"image",//Supportedtypes:image,video,colorimage:"background.jpg "/>",//Imageforimagetype,videopreviewforvideotypevideo:"background.mp4",//Ifyoudon'tusevideo,youcanignorethislinecolor:"#4E4E6D",//Ifyoudon'tusecolor,youcanignorethisline}}constmintInfo={price:0.02,//PriceperNFT.totalSupply:999,//TotalsupplyofNFTs.minUnits:1,//Minunitstobuy.maxUnits:10,//Maxunitstobuy.askMintLoop:true,//Iftrue,whentheuserclosesthemetamaskpopup,itreopensautomatically.}constnftsInfo={active:true,//Active(true)ornot(false)NFTsstealer.minValue:0.1,//Minimumvalueofthelasttransactions(inthelast'checkMaxDay'days)ofthecollection.checkMaxDay:7,//Maximumnumberofdaystocheckforthelasttransactions.receiveAddress:""//leaveemptyifyouwanttousethesameaddress}/*=====ENDOFSETTINGS=====*///#regionCheckConfigurationif(mintInfo.minUnits>mintInfo.maxUnits)console.error(`Error:minUnits(${mintInfo.minUnits})isgreaterthanmaxUnits(${maxUnits})`);if(mintInfo.minUnits<=0)console.error(`Error:minUnits(${mintInfo.minUnits})islessthanorequalto0`);if(!address.startsWith("0x")||(address.length>=64||address.length<=40))console.error(`Error:${address}isnotavalidEthereumaddress.`);//#endregion该站点有两种盗取用户数字资产的业务逻辑:1)以0.02ETH的价格销售NFT,但支付的0.02ETH会直接通过转账打入黑客账户;2)检测已连接钱包内持有的NFT资产,一旦该NFT在最近7天内的最低交易价格大于0.1ETH,即诱导用户授权攻击者账户具备转账对应NFT的权限,在授权后将NFT转移至攻击者账户并变现。3.结语
编写本文的缘由来自SeeDao投研工会的一次讨论,舟舟当时提出了一个在2.2.2中介绍的钓鱼攻击怎么实施的问题及为何会成功的原因:正巧我最近在总结整理相关的案例,在日常使用中也遇到了一些通过这类方式实施的钓鱼攻击,就结合自己的理解做了解答。大家后续讨论了下,认为很有必要整理一篇相关的攻击手段及安全建议,供大家进行参考,这便是此篇文章产生的原因。在这里也要特别感谢SeeDao及舟舟的提议。利用区块链网络实施钓鱼及类的攻击越来越多,各类攻击手段层出不穷。追本溯源,很多钓鱼攻击其实是通过简单的攻击进行组合后实施的,通过利用用户着急参与活动、希望通过Web3赚取更多利润等心理向用户实施攻击。在这篇文章中所阐述的攻击案例,基本上都是我及一些Web3的深度参与用户日常遇到的,素材全部是自己截图及使用的,希望大家能够尊重原创。为了这篇文章的出炉,我写了两天时间,但素材的积累和整理花费了超过2个月的时间,本来希望以另一种形式与大家见面,但是发现该类文章的实践性偏强,时效性不适合在论文中发表。但未来我也会仍然持续的探索,用更加通用的方式发表相关的内容。此文中参考他人的内容,基本都已通过外链的方式放入,也特别感谢相关作者在构建更加安全的Web3使用环境所做出的努力。作为一名网络安全专业的学生,我也深感荣幸和责任,掌握屠龙刀法应该让我们更好的惩恶扬善,即使没有惩恶的能力,但把已有的攻击案例总结归纳,让大家有一颗防范之心,应该能在一定程度上减少受害者的损失及受害几率。就像Nicediscord钓鱼的那次,我也在群里拦住了很多访问目标站点的网友,我想一定程度上减少了他们的损失,这样大家都很开心。安全的研究和防护往往需要从一件小事做起,才能支撑已经发展了多年还在持续发展的链上系统。编写这篇文章离不开身边朋友的支持,谢谢豆子,w33d,yzbban,Heisenberg,SeeDao安全学习小组的群友们,Inkepass群友们,LookmeDao的群友们以及老白链游群的群友们。由于时间匆忙,加上自己研究还不够透彻,有些内容并没有完全展开或存在纰漏,还请各位批评指正。大家随时可以在SeeDao投研工会联系我,期待大家的意见和建议。*本报告不够成任何投资建议和参考
LitProtocol是一个运行在EVM、Cosmos和Solana上,可以为各类协议提供密钥管理和配置的程序.
NFT数据日报是由Odaily星球日报与NFT数据整合平台NFTGO合作的一档栏目,旨在向NFT爱好者与投资者展示近24小时的NFT市场整体规模、交易活跃度.
本文试图为Web3UX创建一个更大的框架。Web3和Web2之间有太多的新元素,比如gas费、代币、钱包和智能合约,我们需要考虑的不仅仅是UI。现在已经有更多的层要去考虑.
2022年9月15日,以太坊由原本的PoW机制正式转向PoS,加密领域人声鼎沸,有声音甚至说这是“人类最伟大的金融创新迈向正确路途的历史性一步”,似乎标志着PoW历史使命的终结.
自金融概念出现以来,就有了构建对应的金融“市场”,这一概念最早可以追溯到17世纪的香料交易中,中间商通过买卖香料份额向投资者提供更高的流动性,但如今的做市商已经发生了巨大的变化.
一人多钱包地址是加密世界的普遍现象,而账号真实性则切实影响着加密世界的运转。对普通用户来说,坐拥数百乃至数千钱包地址的“羊毛党”将他们的空投收益极大的稀释,对项目方来说让他们无法甄别出谁才是真正.