区块链网站|NFTS Zcash(ZEC) 入门笔记:区块链安全词汇科普

入门笔记:区块链安全词汇科普

广告位

入门笔记:区块链安全词汇科普

虽然越来越多的人涉足区块链行业,但由于很多人之前没有接触过区块链,没有相关的安全知识,安全意识薄弱,攻击者很容易有时间去钻。面对区块链的诸多安全问题,我们从区块链安全关键术语讲解和攻击方法两个方面进行介绍,让新手更快适应区块链危机的安全攻防世界。作者:慢雾科技

来自:国家信息安全服务资质

一、关键术语解释

(一)钱包钱包是管理私钥的工具。数字货币钱包有多种形式,但它通常包含一个软件客户端,允许用户通过钱包检查、存储和交易他们的数字货币。它是区块链世界的基础设施和重要入口。

(2)冷钱包冷钱包(Cold Wallet)是一种离线钱包,与网络断开连接,离线存储数字货币。用户在离线钱包上生成数字货币地址和私钥,然后保存它。冷钱包存储的是数字货币,没有任何网络,黑客很难访问钱包获取私钥,但也不是绝对安全的。不安全的随机数也会让冰冷的钱包变得不安全。此外,硬件损坏和丢失也可能造成数字货币的丢失,因此有必要对密钥进行备份。

(3)热钱包热钱包是一种需要网络连接,使用更方便的在线钱包。但是,由于热门钱包一般需要在线使用,个人电子设备可能被黑客窃取,或者钱包密码或加密私钥可能因钓鱼网站延迟而被破解,一些集中管理的钱包也不是绝对安全的。

所以在使用集中交易所或者钱包的时候,最好在不同的平台设置不同的密码,并开通二次认证,保证自己的资产安全。

(4)公钥(Public Key)公钥与私钥成对出现,与私钥形成密钥对,存放在钱包中。公钥是由私钥生成的,但私钥是无法通过公钥反向获得的。公钥可以通过一系列算法得到钱包的地址,因此可以作为凭证拥有钱包地址。

(5)私钥私钥是随机算法产生的一串数据,可以通过非对称加密算法计算出公钥,通过私钥对区块链的资产拥有绝对控制权。因此,区块链资产安全的核心问题在于私钥的存储密钥,公钥可以重新计算货币的地址。私钥非常重要。作为密码,除了地址的所有者之外,它是隐藏的。区块链资产实际上在区块链上,所有者实际上只拥有私钥,所以所有者需要保证它的安全。与传统形式的用户名和密码相比,使用公钥和私钥进行交易的最大优势在于提高了数据传输的安全性和完整性。由于它们之间的对应关系,用户基本上不用担心数据在传输过程中被黑客截取或修改的可能性。同时,由于私钥加密必须由其生成的公钥解密,发送方也不必担心数据被他人伪造。

(6)记忆法。因为私钥是一长串无意义的字符,很难记住,所以出现了助记符。Memorials是使用固定的算法将私钥转换成十多个常见的英文单词。内存和私钥是可互操作的,并且可以相互转换。它只是区块链数字钱包私钥的友好格式。所以在这里强调一下:助记符是私钥!因为是明文,所以不建议电子保存,而是复制保存在物理介质上。它和密钥库作为双重备份相互补充。

(七)KeystoreKeystore主要常见于以太坊钱包App(比特币类似于以太坊Keystore机制:BIP38)。它是通过钱包密码对私钥重新加密得到的。与助记符不同,它一般可以保存为文本或JSON格式。换句话说,在密钥库等同于私钥之前,需要用wallet密码对其进行解密。因此,密钥库需要与wallet口令一起使用才能导入wallet。当黑客窃取密钥库时,可以在没有密码的情况下,通过暴力破解密钥库密码来解锁密钥库。所以建议用户在设置密码时稍微复杂一点,比如取至少8位的特殊字符,安全存储。

得益于区块链科技的加持,区块链数字钱包的安全系数高于其他数字钱包,其中两个关键点是:防盗和防丢。相对于硬币被盗原因的多样性,硬币丢失的原因主要有五种:没有备份、备份丢失、忘记密码、备份错误、设备丢失或损坏。因此,在备份区块链数字钱包时,我们必须对私钥、助记符和密钥库进行多次备份,以便将丢失硬币的风险扼杀在萌芽状态。

图片来自imToken粉丝活动分享

为您提供imToken总结的钱包安全“十不原则”:

1.不要使用没有备份的钱包;

2.不要使用邮件传输或存储私钥;

3.存储私钥,不使用微信收藏或云备份;

4.不要截图或拍照保存私钥;

5.不使用微信、QQ传输私钥;

6.不要把私钥告诉身边的人;

7.不要将私钥发送给该组;

8.不要使用第三方提供的来源不明的钱包应用;

9.不要用苹果ID;由他人提供;

10.不要将私钥导入未知的第三方网站。

(八)公共区块链公共区块链(简称公链)是指世界上任何人都可以随时访问阅读,任何人都可以发送交易并得到有效确认的共识区块链。公链一般被认为是完全去中心化的,链中的数据是公开、透明、不可更改的。任何人都可以通过交易或挖掘来读写数据。一般通过令牌机制鼓励参与者竞争记账,以保证数据的安全性。

(九)交易所交易所类似于买卖股票的证券交易所。区块链交易所是数字货币的交易平台。数字货币交易所分为集中式交易所和分散式交易所。去中心化交换:交易行为直接发生在区块链,数字货币会直接发回用户的钱包或者存储在区块链的智能合约。直接在链上交易的好处是交易所不会持有用户的大量数字货币,所有的数字货币都会存放在用户的钱包或者平台上的智能合约中。去中心化交易通过技术手段在信任层面去中心化。也可以说不需要信任。每一笔交易都通过区块链公开透明,不负责保管用户资产、私钥等信息。用户的资金所有权完全掌握在自己手中,具有非常好的个人数据安全性和隐私性。目前市面上的去中心化交易都是WhaleEx,Bancor,dYdX等。

集中式交换:目前流行的交换大多采用集中式技术。用户通常在平台上注册,经过一系列认证程序(KYC),就可以开始在平台上交易数字货币。当用户使用集中兑换时,他们的货币兑换不一定在区块链进行。相反,他们只能修改exchange数据库中的资产编号。用户看到的只是账本上数字的变化。交易所只需要在用户取款时准备足够的数字货币进行汇款即可。目前主流的交易大部分是在集中交易所完成的。目前市场上集中交易的都是币安,火币,OKEx等。

(十)节点节点在传统的互联网领域,企业所有的数据操作都集中在一个集中式的服务器上,所以这个服务器就是一个节点。由于区块链是一个分散的分布式数据库,它由位于千千的数千个“小型服务器”组成。区块链网络中的每个节点相当于存储所有块数据的每台计算机或服务器。所有新块的产生,以及事务的验证和记账,广播到全网同步,都是由节点完成的。节点分为“全节点”和“轻节点”。全节点是拥有全网所有事务数据的节点,轻节点是只拥有与自己相关的事务数据的节点。因为每一个完整的节点都保存着整个网络的数据,这就意味着其中一个节点出现了问题,整个区块链网络世界依然可以安全运行,这也是去中心化的魅力所在。

(11) RPC远程过程调用(RPC)是一种计算机通信协议。以太坊RPC接口是以太坊节点与其他系统交互的窗口。以太坊提供了各种RPC调用:HTTP、IPC、WebSocket等等。在以太坊源代码中,server.go是核心逻辑,负责API服务的注入,以及请求处理和返回。Http.go调用Http,websocket.go调用websocket,ipc.go调用ipc。以太坊节点默认在8545端口提供JSON RPC接口,数据传输采用JSON格式,可以执行Web3库的各种命令,向前端(如imToken、Mist等钱包客户端)提供区块链的信息。

(十二)以太坊黑色情人节漏洞ETH黑色情人节2018年3月20日,慢雾安全团队观察到一次自动盗币的攻击。攻击者利用以太坊节点Geth/Parity RPCAPI的认证缺陷,恶意调用eth_sendTransaction窃取令牌,持续两年。被盗的以太坊,未被转出的价值高达现价2000万美元(按当时ETH市值计算),共有164种代币,总价值难以估计(很多代币尚未在交易所正式发行)。

(十三)共识共识算法主要用于解决分布式系统中多个节点对某一状态达成一致结果的问题。分布式系统由多个服务节点组成,完成事务处理,分布式系统中多个副本呈现的数据状态需要保持一致。由于节点的不可靠性和节点间通信的不稳定性,甚至节点作恶,篡改信息,导致节点间数据状态不一致的问题。通过一致性算法,将多个不可靠的个体节点组成一个可靠的分布式系统,实现数据状态的一致性,提高系统的可靠性。

区块链系统本身是一个超大规模的分布式系统,但它与传统的分布式系统有着明显的区别。因为它不依赖于任何中央权威机构,而且系统是基于去中心化的对等网络,所以分散的节点需要就交易是否有效达成一致。这就是共识算法发挥作用的地方,即确保所有节点都遵守协议规则,并且所有事务都以可靠的方式进行。一致性算法是区块链系统中一致性算法最重要的作用,它可以在分散的节点之间达成事务处理顺序的一致。区块链系统中的共识算法也承担了区块链系统中激励模型和治理模型的部分功能。为了解决P2P网络中独立节点如何达成解析的问题。简而言之,一致性算法就是解决分布式系统中如何保持一致性的问题。

(十四)工作量证明POW(工作证明)POW(工作证明)是历史上第一个成功的分散区块链共识算法。工作负载证明大多数人都很熟悉,被比特币、以太坊、莱特币等主流公链广泛使用。

工作负载证明需要节点参与者执行计算密集型任务,但对于其他网络参与者来说,这很容易验证。就比特币而言,矿商竞相将收集到的交易(即区块)添加到由整个网络维护的区块链账本中。为了做到这一点,矿工必须首先准确计算“nonce”,nonce是一个加在字符串末尾的数字,用来创建满足开头特定数字为零的要求的哈希值。但是挖掘也有一些缺点,比如功耗大,事务吞吐量低。

(十五)股权证明POS(股权证明)POS(股权证明)3354股权证明机制,一种主流的区块链共识算法,旨在使区块链中的分布式节点达成共识。它经常与工作量证明机制一起出现,两者都被认为是区块链共识算法中的主流算法之一。作为算法,它通过持币人的同意达成共识,目的是确定一个新的区块。与PoW相比,这个过程不需要硬件和电源,效率更高。

PoS共识中引入了利害关系的概念,硬币的持有者对代币进行利害关系,所有参与者都要抵押一部分自己的代币来验证交易,然后获得封杀的机会。在PoS共识中,打包区块的矿工将通过一种选举算法,根据持有货币的比例和令牌抵押的持续时间,或其他一些方式来选择。矿工在指定高度完成包事务,生成新的块,并广播这些块。广播的块通过PoS共识中的另一个“阈值”,验证者验证交易。通过验证后,块被确认。这样就完成了一轮PoS的共识过程。权利证明通过长期绑定验证者的利益和整个网络的利益来防止不良行为。令牌锁定后,如果验证者有欺诈交易,那么他们抵押的令牌也会被切割。

(16)委托权益证明(委托权益证明)

委托权益证明,其雏形诞生于2013年12月8日。丹尼尔拉里默(Daniel Larimer)第一次在bitsharetalk谈论为贷款人投票,而不是在PoS中操纵选举随机数的可能性。在DPoS中,每一个硬币持有者都可以投票,从而产生一定数量的代表,或者一定数量的节点或矿池,他们的权利彼此完全平等。货币持有者可以随时通过投票改变这些代表,以保持链系统的“长期纯洁性”。在某种程度上,这很像国家治理中的代议制,或者说NPC代议制。这个系统最大的好处就是解决了审核人员过多导致的效率低下的问题。当然,这个系统也有明显的缺点。因为“代表”制,一直被中央集权所诟病。

(十七)多重签名。多签名是指需要多个签名的操作(这些签名由不同的私钥生成)。这可以用来提供更高的安全性。即使丢失了一个私钥,攻击者也无法访问该帐户。许多受信任方必须同时批准更新,否则更新无效。众所周知,一般来说,一个比特币地址对应一个私钥,这个地址的资金使用需要私钥持有人的签名。多重签名技术,简单来说就是一笔钱在使用的时候,需要多个私钥签名才能生效。签约的一个好处就是多方可以一起对一笔支付达成共识,这样支付才能成功。

(十八)软分叉软分叉更多的是一种协议升级。当发布新的共识规则时,没有升级的旧节点不会意识到代码发生了变化,但如果继续产生非法块,就会出现临时分叉,但新节点可以兼容旧节点,即新旧节点始终工作在同一条链上。

(十九)硬叉硬叉指的是区块链的永久分歧。新的共识规则下发后,升级节点无法验证升级节点生成的块,升级节点也无法验证升级节点生成的块,即新旧节点互不兼容,通常会出现硬分叉。原来的正常链分为两个链(升级的和非升级的)。

(XX)智能合同并不是一个新概念。早在1995年,由跨学科的法律学者Nick Szabo提出:智能合同是以数字形式定义的一组承诺,包括合同参与者可以执行这些承诺的协议。在区块链领域,智能合同的本质可以说是运行在区块链网络中的一段代码。它以计算机指令的方式实现传统合同的自动化处理,完成用户给定的业务逻辑。

二。攻击方法介绍

密码劫持。密码劫持(Cryptojacking)是一种恶意行为,是指劫持用户设备,在未经授权的情况下挖掘加密货币。通常,攻击者劫持受害者设备(个人PC或服务器)的处理能力和带宽。由于加密货币挖掘需要大量的计算能力,攻击者会试图同时感染多台设备,以便收集足够的计算能力来进行这种低风险低成本的挖掘活动。一般来说,恶意挖矿软件会诱导用户在自己的电脑上加载挖矿代码,或者采用类似钓鱼的方式,比如恶意链接、电子邮件或者在网站中嵌入挖矿脚本等。系统会在不经意间被隐藏的加密挖掘程序感染,从而完成攻击。近年来,随着加密货币价格的不断上涨,更复杂的恶意软件被开发出来,使得恶意挖矿攻击层出不穷。

在这里,我们为您提供一些建议,以防止恶意挖掘攻击:1。关注设备性能和CPU利用率;2.在Web浏览器上安装挖掘脚本隔离插件,如MinerBlock、NoCoin、Adblocker;3.小心邮件附件和链接;4.安装值得信赖的防病毒软件,使软件应用程序和操作系统保持最新。

(2)无利害关系攻击无利害关系攻击是PoS共识机制下要解决的问题。问题的本质可以简单概括为“作恶没有成本,收益无穷”。当PoS共识系统出现分叉时,封锁节点可以在“不遭受任何损失”的前提下,同时在两个分叉上进行封锁;无论哪个分叉被认定为主链,节点都可以获得“全部收益”,而没有任何成本损失。容易给一些节点产生新分叉的动力,支持或发起非法交易,其他逐利节点会在多个链(窗口)上排队同时支持新分叉。随着时间的推移,分支机构越来越多,非法交易和邪恶猖獗。

区块链将不再是唯一的链,没有办法让所有的区块外节点达成共识。为了防止这种情况发生,许多PoS共识机制通过引入惩罚机制来惩罚经济上作恶的节点,从而构建更稳定的网络。事实上,DPoS也是无利可图的攻击的解决方案之一。从上面我们可以知道,DPoS是一种机制,在这种机制中,持币者选择块节点来运营网络,块节点会向投票者分配一些奖励。

(3)双花攻击双花攻击是指一笔钱花了两次,支付了两次,利用钱的数字特征,用“同一笔钱”两次或两次以上完成支付。双倍消费不会产生新的代币,但是可以把你花的钱拿回来。简单来说,攻击者将一个令牌转移到另一个地址,通常是转移到交易所换取现金,然后通过一些攻击战术回滚转移交易。目前,有几种常见的战术可以引发双花攻击:

1.种族攻击这种攻击主要通过控制矿工费来实现双花。同时,攻击者向网络发送了两笔交易,一笔给自己(为了提高攻击成功的概率,他在这笔交易中加入了足够的矿工费),一笔给商家。因为发给你的交易包含了很高的手续费,所以更有可能是先被矿工打包成块。此时,该事务将先于发送给商家的事务,然后发送给商家的事务将被回滚。对于攻击者来说,通过控制矿工费用,实现同令牌的“双花”。

2.芬尼攻击攻击者主要控制区块的播放时间实现双花,攻击的目标是接受0确认的商家。假设攻击者挖掘一个区块,区块中包含一个交易,即A向B转移一定数量的令牌,其中A和B是攻击者的地址。但是,攻击者没有广播这个区块,而是立即找到一个愿意接受0确认交易的商家向他购买一个物品,向商家发送交易,用a支付商家的地址C,发送给商家的交易广播后,攻击者广播他之前挖的区块。由于发送给自己的交易先于发送给商家的交易,攻击者通过控制块的播放时间实现了同一令牌的“双花”。

3.Vector76attackVector76攻击又称为“一次确认攻击”,即交易被确认一次后仍然可以回滚。这是芬尼攻击和种族攻击的结合。攻击者创建两个节点,节点A连接到商家节点,节点B连接到区块链网络中的其他节点。然后,攻击者用同一个令牌发起两次交易,一次交易发送到商家的地址,称为交易1;一个交易被发送到你的钱包地址,我们称之为交易2。和上面提到的种族攻击一样,攻击者在交易2中加入了更高的矿工费,从而增加了矿工的打包概率。此时,攻击者没有向网络广播这两个事务。然后,攻击者开始挖掘事务1所在的分支,我们将其命名为分支1。攻击者挖完块后并没有广播,而是同时做了两件事:在节点A上发送事务1,在节点B上发送事务2,由于节点A只连接到商家节点,所以当商家节点要向其他对等节点发送事务1时,连接更多节点的节点B已经向网络中的大部分节点广播了事务2。所以从概率上来说,交易2更容易被网络识别为有效,交易1被识别为无效。2交易被认为有效后,攻击者立即向网络广播他在Branch 1中挖掘的块。此时接受一次性付款的商家会确认交易成功,然后攻击者就可以立即变现,转移资产。同时,由于分支2连接的节点更多,矿工们在这个分支上又挖出了一个区块,即分支2的链长比分支1的链长。这样一来,branch 1上的交易将被回滚,之前商家支付给攻击者的交易信息将被清除,但攻击者已经取钱了,从而实现了双花。

4.51%的攻击攻击者占据了整个网络50%以上的计算能力。在攻击者控制计算能力的时间内,他可以创建一个新的链,其高度高于原来的链。然后旧链中的事务将被回滚,攻击者可以使用相同的令牌向新链发送新的事务。

(四)异己攻击异己攻击其实是所有公链都可能面临的问题,也叫地址池污染。是指诱导同一链条的节点相互入侵、污染的攻击技术。该漏洞的主要原因是同一链系统在通信协议中不识别不同链的节点。这种攻击已经在一些参考以太坊通信协议实现的公共链上重复出现:以太坊中的相似链由于兼容的握手协议,无法区分节点是否属于同一链。攻击者利用这一点,先收集以太坊节点的地址,进行恶意握手,从而达到通过与节点握手来污染地址池的目的,使得不同链中的节点相互握手,将各自地址池中的已知节点推给对方,导致更多的节点相互污染,最终扩散到整个网络。受到异常攻击的节点通信性能通常会下降,最终导致节点阻塞和主网异常现象。相关公链要注意持续监控主网的健康状态,避免影响主网稳定性的攻击。

网络钓鱼。所谓“网络钓鱼”,是指攻击者伪装成值得信任的人或组织,通过电子邮件、通信软件和社交媒体获取收件人的用户名、密码、私钥等隐私信息。随着技术的发展,钓鱼攻击不仅可以托管各种恶意软件和勒索软件攻击,更糟糕的是,这些攻击呈上升趋势。建议用户提高警惕。每一条通过即时通讯App、短信或电子邮件获取的信息都要谨慎对待。不要在通过点击链接到达的网站上输入凭据或私钥,在交易过程中尽可能使用硬件钱包和双因素认证(2FA)。生态项目方不应向攻击者转移资金,直到攻击者确切地说出了漏洞的细节。如果项目方无法准确判断并独自处理,可以联系安保公司进行协助。

(六)木马攻击木马攻击是指攻击者通过隐藏在正常程序中的具有特殊功能的恶意代码,如具有破坏删除文件、发送密码、记录键盘、DDoS攻击等特殊功能的后门程序,将控制程序寄生在被控制的计算机系统中,对感染了木马病毒的计算机进行内外操作。它可以用来窃取用户的个人信息,甚至远程控制对方的电脑,然后通过各种手段传播或欺骗目标用户执行程序,从而达到窃取密码等数据的目的。在区块链领域,勒索木马和恶意挖矿木马等一直是业界头疼的问题。根据Coinworld的报告,随着比特币的暴涨,整个数字加密货币的价格水涨船高,与货币市场密切相关的挖矿木马开始了新一轮的活动。仅2019年上半年,每天新增挖矿木马样本6万个。通过分析发现,一些新型挖矿木马出现了版本快速持续更新,功能设计越来越复杂和隐蔽。

供应链攻击。供应链攻击是一种非常可怕的攻击方式,在防御中很难完美避免。由于目前的软件工程,各种包/模块的依赖非常频繁和普遍,开发者很难一一检查。默认都是过于信任市面上流通的包经理,导致供应链攻击几乎成了必须的攻击之一。这种攻击称为供应链攻击,是为了说明这种攻击是一种依赖,是一个链条,任何一个环节被感染都会导致链条之后的所有环节出现问题。供应链中的攻击是无法不惜一切代价阻止的。建议所有数字加密货币相关的项目(如交易所、钱包、DApp等。)应该强制至少一项核心技术对所有第三方模块进行全面审查,看是否有可疑代码,或者通过抓取数据包的方式检查是否有可疑请求。

(八)事务回滚攻击事务回滚攻击,顾名思义,是指回滚事务状态的能力。回滚到底是什么意思?回滚是指将已经发生的状态恢复到没有发生的状态。那么,事务回滚的意义就是将已经发生的事务改变为未发生的状态。即攻击者本来已经进行了支付,但是通过某种手段,转账过程出了问题,从而回滚整个交易过程,达到回滚交易的目的。这种攻击技术大多出现在区块链上的智能合同游戏中。当用户的投注动作和合约抽奖动作在同一笔交易中时,称为内联交易。攻击者可以检测到交易发生时智能合约的一些状态,获取彩票信息,并根据彩票信息选择是否回滚投注交易。建议开发者不要将用户的投注和彩票放在同一个交易中,防止攻击者通过检测智能合约中的彩票状态来实现交易回滚攻击。

(九)交易拥挤攻击(Transaction crowding attack)交易拥挤攻击(Transaction crowding attack)是针对EOS上使用defer抽奖的游戏契约的攻击技术。攻击者可以使用一些手段,在游戏契约的延期抽奖交易之前发送大量的延期交易,恶意侵占块中的CPU资源,使得智能契约中指定块中应该执行的延期抽奖交易由于资源不足而无法执行,只能在下一个块中执行。因为EOS上的很多游戏智能合约都是用区块信息作为智能合约本身的随机数,所以同一延期抽奖交易在不同区块的执行结果是不一样的。这样,当攻击者知道自己无法中奖时,就会通过发送大量的defer交易,迫使智能合约再次中奖,从而达到攻击目的。建议智能合约开发者不要对不同区块中结果不同的关键操作使用defer transaction,以降低合约攻击的风险。

(10)随机数攻击(Random Number Attack)是攻击智能合约的随机数生成算法,预测智能合约的随机数。目前区块链上的很多游戏都使用了链上的信息(比如区块时间,未来区块hash等。)作为游戏契约的随机数来源,也叫随机数种子。用这个随机数种子生成的随机数称为伪随机数。伪随机数不是真随机数,所以可能是预测出来的。当使用可预测的随机数种子生成随机数时,一旦随机数生成算法被攻击者猜中或者通过逆向等其他手段获得,攻击者就可以根据随机数生成算法预测游戏中即将出现的随机数,从而实现随机数预测,达到攻击目的。建议智能合约开发者不要使用不安全的随机数种子生成随机数,以降低合约攻击的风险。

(11) hard_fail状态攻击什么是hard_fail攻击hard_fail?简单来说就是有错误,但是没有用错误处理程序来处理。例如,使用onerror捕获。如果没有错误捕获,它将是hard_fail。EOS上的交易状态记录分为五种状态:已执行、软失败、硬失败、延迟和过期。通常情况下,链中人观察到的大部分事务都是执行或延迟的,而没有失败的事务,导致大部分开发人员误以为EOS链中没有失败的事务记录,从而忽略了对事务状态的检查。攻击者利用这一细节对网游或交易所进行攻击,构造执行状态为hard_fail的交易,欺骗网游或交易所进行虚假充值攻击,从而获利。这就提醒交易所和EOS DApp游戏开发商在办理转让交易时,要严格检查交易状态,确保交易执行状态为已执行。

(十二)重放攻击重放攻击(Replay Attack)是在区块链上重放交易信息。一般来说,为了保证不可篡改,防止双花攻击,区块链会通过各种方式对交易进行验证,包括交易时间戳、nonce、交易id等。但随着各种去中心化交易所的兴起,智能合约中验证用户交易的场景越来越多。这种场景通常要求用户签署一条消息,将其上传到智能合约,然后在合约内部进行检查和签署。但是,由于用户的签名信息是链接的,也就是说,每个人都可以获得用户的签名信息。在契约中验证用户的签名时,如果签署的消息没有随交易次数变化的变量,如时间戳、nonce等。攻击者可以拿走用户的签名,伪造用户发起交易,从而获利。

这是一种攻击形式,最早出现在DApp生态的初级阶段。由于开发者设计的随机抽奖算法存在严重缺陷,攻击者可以利用合同漏洞重复抽奖,这是开发者很容易忽略的错误。因此,开发人员在检查链上的签名时,需要在签名的消息中加入各种可变因素,以防止攻击者在链上重放签名,造成资产损失。

(十三)重入攻击重入攻击(Reentrancy Attack)最早出现在以太坊,对应的真正攻击是道攻击。这种攻击也使得最初的以太坊分支为以太坊经典(ETC)和现在的以太坊(ETH)。由于项目方采用的转账模型是先给用户发送转账,再修改用户的余额状态,恶意用户在接受转账的同时,可以构造恶意契约,再次调用项目方的转账函数。利用这种方式,用户的余额状态并没有改变,但项目方的资金总能被提取,最终导致项目方的资金被消耗。提醒智能合约的开发者,在开发智能合约和处理转账等关键操作时,如果智能合约中存储了用户的资金状态,应先修改资金状态,再进行实际的资金转账,以避免重入攻击。

(十四)虚假充值虚假充值攻击,分为智能合约虚假充值攻击和交易所虚假充值攻击。在假充值攻击中,智能合约和交易所本身都没有收到真实的Token,但是用户确实得到了真实的充值记录。在这种情况下,用户可以从智能合约中窃取真实资产,或者在没有真实充值的情况下用虚假资产或不存在的资产进行交换。

1.智能合约的虚假充值攻击。智能合约虚假充值主要是假币的虚假充值。这种攻击技术多发生在EOS和波场。由于EOS上的令牌是通过合同发布的,因此EOS链的系统令牌也是以这种方式发布的。同时,任何人都可以发行名为EOS的代币。只是发出的合同账号不一样而已。系统代币的发行合约是‘eosio . token’,其他人发行的代币来自其他合约账户。当合同中没有验证EOS token的来源合同时,攻击者可以通过充值自己发放的EOS token对合同进行虚假充值攻击。波场的伪充值攻击主要是TC10代币的伪充值攻击。因为每个TC10都有一个特定的tokenid进行标识,所以在合约中没有勾选tokenid的情况下,任何人都可以发行一个1024 TRX的TC10令牌进行合约的虚假充值。

2.虚假充值攻击交易所。对交易所的虚假充值攻击分为假币攻击和交易状态失败的虚假充值攻击。以EOS和以太坊为例。对于EOS,我们可以使用名为EOS的假币对交易所进行虚假充值攻击。如果交易所没有严格验证EOS的源契约是‘EOS io . token’,就会发生攻击。同时,与EOS不同的是,交易失败的记录会保存在以太坊上。对于ERC20令牌,如果交易所不检查交易状态,它可以通过失败的交易对ERC 20进行虚假充值。另外,hard_fail状态攻击也是一种虚假充值攻击。建议交易所和智能合约开发商在处理转账时充分检查交易状态。如果是EOS或wave field交易,他们还应在处理充值时检查源合同是否为“eosio.token”或tokenid是否为指定的tokenid。

(十五)短url攻击短地址攻击短url攻击是以太坊针对ERC20智能合约的一种攻击形式,利用EVM中输入字节码的自动补全机制进行攻击。一般来说,对于ERC20契约中传递函数的调用,输入字节码数为136字节。当调用ERC20中的传递函数传递ERC20令牌时,如果攻击者提供的地址后有一个或多个零,那么攻击者可以省略地址后的零,提供一个缺失的地址。

转账到这个地址的时候,比如转100个代币,然后输入的地址就是攻击者提供的缺失地址。此时,编码的输入数据是134字节,比正常数据少2字节。在这种情况下,EVM将通过在编码数据的末尾填充丢失的字节位来补足136个字节。这样,原始地址段的缺零被数据段的零填充,而数据段的缺零由于地址段的补零而被EVM自动填充。这就好比数据段移动到地址段填充地址段缺失的字节位,然后数据段缺失的字节位被EVM用零填充。在这种情况下,传输量将从100变为100 * 16的n次方,其中n是地址缺失的零的数量。这样,攻击者就可以攻击交易所或钱包,窃取交易所和钱包的资产。建议交易所和钱包在办理转账时严格核对转账地址,防止短网址攻击的发生。

(十六)伪造代币攻击伪造代币攻击针对的是在创建官方代币时使用通用创建模板创建的代币,每个代币只根据一个特定的标记进行识别。比如EOS官方token的识别标志是\’ eosio.token \’契约,波场TRC10的识别标志是tokenid,以太坊的ERC20以契约地址作为识别标志。那就有问题了。如果收款人在收集这些令牌时没有严格检查唯一令牌,就会发生攻击。以EOS为例。因为EOS官方代币是用合约的方式发行一个名为EOS的代币,代币EOS本身的logo就是发行账号‘EOS io . Token’。如果在接受转账时没有勾选这个标志,攻击者可以用其他账户发放一个名为EOS的代币,用假币充值兑换或者钱包,换取真的代币。建议交易所和钱包在办理转账时,严格检查各类代币,防止假币攻击。

(十七)整数溢出攻击整数溢出攻击数据的存储是区块链中的一个重要环节。但是,每种数据类型都有自己的界限。比如以太坊中uint8类型的变量,只能存储0 ~ 255大小的数据,超过这个就不能保存了。那么如果你想放一个超过数据类型大小的数字会怎么样呢?例如,如果uint8的数据类型中存储的是256,那么数据将显示为1而不是其他值,并且不会报错,因为uint8本身可以存储一个最大值为1111111的8位二进制数。如果此时加1,二进制数就会变成1000000001,由于数据边界的原因,只能得到最后8位,即00000001。

有上有下,下溢是指一个值为0的uint8数据。如果此时从中减去1,结果就变成了这个数据类型所能存储的最大值加上1减去被减数,在这个例子中就是255,也就是这个数据类型所能存储的最大值。那么,如果上述两种情况发生在智能合约中,恶意用户操纵其账户通过下溢操作向其他账户发送超过其余额的代币。如果在合同中没有核对余额,恶意用户的余额就会溢出,成为超大值。这时,如果攻击者大量出售这些代币,整个代币价值体系就可以瞬间被摧毁。建议所有智能合约的开发者在智能合约中操作数据时严格检查数据边界,防止塑料溢出攻击的发生。

(18)条件竞争攻击竞态条件攻击竞态条件的方法有很多种,但核心的本质不外乎是通过竞争来修改某种条件的状态。竞争的例子:著名的Edgeware仓库锁契约的拒绝服务漏洞。这个漏洞的本质就是争夺新建仓锁合约余额的这个条件。攻击者可以监控所有链上的锁请求,预先计算锁契约的地址,然后向契约地址转账,导致锁失效。在官方修复之前,要防止这种攻击,你只能用比攻击者更高的手续费,先把你的仓锁交易打包,这样才能和攻击者抗衡,避免被攻击。最后,官方修复方案并没有对仓锁契约的余额进行强制性的相等性检查,而是采用大于等于的形式来避免攻击。建议智能合约的开发者在修改智能合约中的一些状态时,应根据实际情况充分考虑条件竞争的风险,防止受到条件竞争的攻击。

(十九)超授权访问攻击与传统安全的定义相同。超授权访问攻击是指访问或执行超出当前帐户权限的操作。例如,一些操作只能由合同管理员执行,但由于限制不严,关键操作也可以由合同管理员以外的人执行,从而导致不可预测的风险。这种攻击在以太坊和EOS中出现过多次。以EOS上著名的BetDice游戏为例,由于游戏契约(EOS中可自定义的事件转发器)中的路由没有严格检查源账号,普通用户可以通过推送动作的方式访问契约中的关键操作转账功能,直接绕过转账流程进行投注,造成了越权攻击。虽然事后BetDice官方修复了代码并严格限制了源账号,但是这个漏洞已经让攻击者几乎没有成本的拿走了BetDice奖池中的近5万EO。再比如以太坊使用solidity 0.4 . x版本进行合约开发时,很多合约开发者不仅没有添加权限检查,而且在编写关键函数时也没有指定函数可见性。在这种情况下,函数的默认可见性是公共的,恶意用户可以通过这些关键函数无限制地攻击契约。建议智能合约的开发者在开发合约时注意检查关键函数的权限,防止合约被关键函数非法调用攻击。

(20)事务顺序依赖攻击(Transaction sequence dependency Attack)在区块链的世界中,一个事务可能包含多个不同的事务,这些事务的执行顺序会影响最终事务的执行结果。因为在挖掘机制的区块链中,事务在打包之前处于待打包的挂起状态。如果能提前知道交易中还执行了哪些其他交易,恶意用户就可以通过增加矿工费用的方式发起交易,让其中一个交易提前打包,从而扰乱交易秩序,造成意想不到的执行结果,实现攻击。以以太坊为例。如果有代币交易平台,这个平台上的手续费是通过调节合同中的参数来实现的。如果有一天平台项目方通过一次交易要求增加交易费用,那么交易打包后所有代币买卖的交易费用都会增加。正确的逻辑应该是,从这笔交易开始,所有代币买卖的手续费都会提高。但是,由于从发送交易到打包有一定的延迟,请求修改交易费用的交易不会立即生效,因此恶意用户可以先用更高的费用打包自己的交易,以避免支付更高的费用。建议智能合约开发者在开发合约时,注意交易顺序对交易结果的影响,避免合约因交易顺序不同而被攻击。

(二十一)女巫攻击西比尔攻击传闻说,女巫是一个有魔力的人,一个人可以变出多个自我,让受害者以为有很多人,其实只有一个人。在区块链世界中,Sybil攻击是针对服务器节点的攻击。当攻击发生时,通过某种方式,恶意节点可以伪装成多个节点,向被攻击节点发送链接请求,达到该节点的最大链接请求,导致该节点无法接受其他节点的请求,从而产生拒绝服务攻击。建议在构建好所有节点的情况下,服务器在系统层面对网络连接进行监控,一旦发现有IP连接异常,就会调用脚本配置iptables规则对异常IP进行屏蔽。同时,链开发者在开发公共链时,要增加对P2P模块中单个IP节点连接数的控制。

(22)虚假错误通知攻击EOS上有各种各样的通知。只要将require_recipient命令添加到操作中,就可以将该操作通知给指定的帐户。在EOS上的一些智能合约中,出于用户体验或者其他原因,一般会处理onerror通知。这时,如果我们不检查onerror通知的来源合同是否为eosio,就可以像假的转让通知一样对合同进行攻击,触发合同中onerror的处理,从而使被攻击合同的资产遭受损失。建议智能合约的开发者在开发智能合约时需要检查onerror的源合约,确保合约账号为eosio账号,防止虚假错误通知攻击。

(二十三)除尘攻击除尘攻击最早发生在比特币网络中。所谓微尘,是指一笔交易中的交易金额与正常交易相比非常小,可以认为是微不足道的微尘。通常这些灰尘在余额中不会被注意到,很多持币人很容易忽略这些余额。但由于比特币或基于比特币模型的区块链系统的账本模型采用UTXO模型作为账户资金体系,即用户的每笔交易金额都是通过消耗之前未消耗的资金来产生新的资金。别有用心的用户可以通过这种机制将这些微尘金额发送到大量的账户,使交易变得微尘,然后通过追踪这些微尘交易,就可以关联到这个地址的其他相关地址。通过分析这些相关地址的行为,可以分析一个地址背后的公司或个人,破坏比特币本身的匿名性。

此外,由于比特币网络块容量的限制,大量的尘埃交易会造成块拥塞,增加交易费用,进而产生大量交易需要打包,降低系统本身的运行效率。至于如何避免灰尘攻击,在构造交易的过程中,可以根据交易类型计算交易的最小金额,同时判断每个输出。如果低于此金额,则无法继续构建交易。特别是,如果这个输出碰巧发生了变化,而且数额对你来说不算太大,你可以通过丢弃这部分尘埃输出作为交易费用来避免构造一个尘埃交易。其次,为了保护隐私,建议在构造交易时可以丢弃那些金额极小的UTXO,可以使用金额较大的UTXO来形成交易。

(二十四)C2攻击C2的全称是指挥和控制,即命令的执行和控制。在传统的网络攻击中,通过各种漏洞进入目标服务器后,受限于空间,通常会拉动二次漏洞利用通过网络驻留,实现后渗透过程。因此,C2架构也可以理解为恶意软件获取资源和命令的方式,以及向攻击者发回数据的方式。在传统的攻击方式中,攻击者通常通过远程服务器拉取命令并在本地执行,但这种方式也有明显的缺点,即一旦远程服务器被发现,后续的渗透活动就无法正常进行。

然而,区块链网络提供了一个自然的、不能被篡改的大型数据库。攻击者将攻击有效负载写入事务中,并通过发送事务将命令永久保存在区块链数据库中。用这种方法,即使发现了攻击命令,链上的数据也无法被篡改,也不用担心服务器被发现然后下线的风险。随着新技术的发展,旧的攻击手段也随着新技术的变化不断迭代更新。在区块链的世界里,只有做好各方面的防范,才能避免来自各方面的安全攻击。

(25)洗钱洗钱与洗钱相同,但对象不同。洗钱是指将一笔非法获得的金钱,经过一定的操作,变成正当合法的收入。洗钱也是如此,指的是将非法获得的代币,如通过黑客手段、带着用户资产跑路或诈骗等手段获得的代币,通过某种手段,转化为正当合法的来源。比如通过交易所洗钱,智能合约洗钱或者通过一些鼓动者中转洗钱,匿名货币比如门罗币,Zcash等。使非法获得的资金无法追查,最终成功逃脱监管达到洗钱的目的,再通过将代币兑换成法币离场的方式完成洗钱过程。建议各交易所加强KYC策略,提升风险控制水平,及时监控交易所大额资金进出,防止恶意用户通过交易所洗钱。此外,他们可以通过与第三方安全机构合作,及时拦截非法资产,阻断洗钱的可能性。

(26)勒索赎金勒索是传统行业常见的攻击方式。攻击者通过向受害者的主机发送勒索软件来加密主机文件,从而向受害者勒索金钱。随着区块链技术的发展,近年来敲诈勒索开始出现新的方式,比如使用比特币作为敲诈资金的支付方式,或者使用匿名性更高的门罗币作为资金的支付方式。比如著名的GandCrab病毒就是比特币勒索病毒,受害者需要向攻击者支付一定数量的比特币,换取解密私钥。通过这种勒索方式,GandCrab勒索软件每年勒索超过20亿美元。值得一提的是,比特币即使送到攻击者手中,也不一定能换来解密私钥,造成“人财两空”的局面。建议当资产已经因勒索软件而损失时,不要恐慌,也不要向攻击者支付比特币或其他加密货币。同时,交易所在收到这些勒索邮件时要格外警惕,千万不要向攻击者支付比特币或其他加密货币。必要时可以寻求第三方安全公司的协助。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/jzb/zec/10758.html
上一篇
下一篇

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部