安全性考虑因素会覆盖软件中一般的所有其他考虑因素,特别是区块链中的所有其他考虑因素。如果安全性失败,则没有其他问题。区块链证明了去中心化,无需信任的交易有效,但仍然存在许多区块链安全漏洞.

安全漏洞存在于设计和体系结构级别,编码阶段以及操作阶段。如果您想知道,是的,区块链可以被黑客入侵.

区块链安全漏洞–从这里到永恒

钻石是永远存在的,并且智能合约的生存时间只要部署在其上的区块链得以继续使用。因此,只要合同确实存在,所有漏洞和区块链安全漏洞也将继续存在。.

通常,每个区块链都提供自己的编程语言来实现智能合约。让我们仔细看看.

智能合约语言

区块链环境包括用于开发智能合约的自己的语言.

例如,以太坊平台包括用于编写智能合约的Solidity语言。创作者将Solidity设计为图灵完整的语言.

Turing完整的语言实质上允许程序员实现底层系统能够执行的任何操作。因此,这使程序员能够像在代码中实现循环这样的功能,这可能会导致区块链安全漏洞。.

图灵完整性

图灵完整的语言本质上包含复杂性,并且复杂性会引发错误和漏洞.

比特币网络还具有一种称为脚本的编程语言。脚本故意不完整,以增强安全性.

给程序员的选项越少,区块链安全漏洞进入系统的可能性就越小.

为了最大程度地减少将错误代码发布到野外的风险,程序员必须了解智能合约编程固有的常见陷阱和反模式。 (反模式表示不良的编程习惯).

DAO Hack:可重入问题

区块链安全漏洞图片

DAO Hack

在编码为智能合约的区块链安全漏洞程序员中,可重入性问题可能排名最高。重新入账通过同一笔交易的多个支出来耗尽帐户。处理退款的用例很适合这种利用,但如果在设计和编码阶段未解决,则此缺陷会影响任何类型的交易。.

在迄今为止最臭名昭著的加密货币攻击之一中,DAO的黑客利用了可重入性。没有组织负责人指示如何运行DAO(或分散式自治组织),DAO提议使用户能够对投资项目进行投票.

它在第一个月就筹集了超过1.5亿美元的资金。 2016年6月17日,黑客通过可重入漏洞从组织中耗费了5000万美元。从以太坊经典(ETC)到以太坊(ETH)的艰苦努力导致人们努力解决了这种黑客造成的问题.

反模式易受折返

易受攻击的代码重入逻辑如下所示:

处理付款的功能(){

(1)检查交易,收款人和账户余额的有效性;

(2)处理交易;

(3)更新系统状态以显示交易已被处理;

}

乍一看,逻辑看起来是正确和完整的,但缺陷在于按照步骤2在步骤3之前的顺序进行操作.

在第一次调用该函数继续处理步骤2的同时,对同一事务的另一个调用可以进入该函数。由于状态信息保持其初始状态并且尚未在步骤3中进行处理,因此第二个调用作为要处理的有效交易签出.

因此,系统第二次为相同的义务花费货币。黑客会在状态正确设置之前将多个事务赶往该功能.

再入的治疗

对算法的此更改纠正了上述问题:

处理付款的功能(){

(1)检查交易,收款人和账户余额的有效性;

(2)更新系统状态以显示交易已被处理;

(三)办理交易;

}

该代码必须考虑所有必要的异常处理,并且还必须考虑所有逻辑依赖性.

溢出

溢出是程序员需要意识到的另一个常见安全缺陷.

一些编程语言提供强类型,而其他提供弱类型。例如,强类型语言拒绝允许程序员将字符串数据分配给数字变量,而弱类型语言则允许此类操作.

强类型语言强制执行范围限制。如果数组是十个元素,则程序员无法尝试访问第十一个元素。弱类型的语言允许这种行为,但会导致崩溃。如果变量保存的最大允许值为99,并且为其分配了100的值,则在运行它时请注意其崩溃!

因此,溢出是黑客使用的一种利用。如果黑客向智能合约输入参数超出了代码可以处理的范围,则会导致崩溃。这样的崩溃助长了多种攻击。崩溃可能引发拒绝服务攻击(DDoS攻击),并且有关系统内部的重要信息有时会在错误消息中显示出来.

在Web应用程序中,黑客经常用自己的恶意代码填充内存,因此当程序崩溃并进入内存中的随机位置时,恶意代码就会执行.

弱类型的语言提供了强大的功能和动态灵活性,但它们也需要更严格的设计和测试才能抵抗攻击.

多头九头蛇

区块链安全漏洞图片

众多安全问题困扰着软件界。随着新技术的出现,出现了新的威胁。除了上述漏洞外,这些明显的缺陷仅代表许多其他区块链安全漏洞中的少数漏洞。.

错误的密码学会带来很多麻烦。密码学可确保隐私,当隐私中断时,一切都会中断。 IOTA团队犯了一个错误,那就是在其产品的初始版本中从头开始编写自己的密码库。滚动自己的密码系统固有的问题是所有复杂的软件都包含错误,因此可以确保您拥有错误的密码系统.

已建立的密码库在学术界的审查下仍可幸存​​,并随着时间的推移在野外生活中证明了其可靠性.

在钱包的世界中,随机数的生成必须真正是随机的。特别是在加密货币的早期,一些钱包未能达到此要求.

加密货币地址要求地址必须唯一。唯一性来自随机数生成器,并且随机数生成器需要种子才能开始该过程。如果种子不能真正随机,则系统将失败.

不良随机性的结果之一是同一地址被多次创建。设想这样一种情况:钱包将地址X分配给人A,然后在以后的某个时候将地址X分配给人B。当付款转到地址X时,它只会分配给一个人。谁拿钱?

当黑客弄清楚用于创建种子的算法时,还会出现随机性差的另一个问题。黑客为自己再生了种子并拥有系统.

道路永存,党永无止境

安全是一场永无止境的战斗,即使程序员,架构师和测试人员从代码中删除了所有漏洞,操作漏洞仍然存在.

在工作量证明环境中,如果不良行为者控制了51%的网络,则完整性将受到破坏。博弈论为这种攻击提供了缓解措施。具有小型网络的新加密货币使这种攻击面临最大风险。但是51%的攻击会破坏货币的价值,因此攻击者只会伤害自己.

区块链生活在互联网上,并且与互联网一样,都遭受黑客的攻击。例如,假设您从网站上的交易所购买硬币。注入攻击,跨站点脚本编写,网络钓鱼攻击和所有其他传统网站黑客攻击盛行.

最后的想法

正如程序员防范错误一样,程序员必须在开发中考虑安全性。存在一些可帮助程序员完成任务的工具,但程序员必须首先了解其自身的漏洞以防范它们.

分散式应用程序安全项目(DASP) 希望成为区块链安全信息和资源的存储库。他们以 开放式Web应用程序安全项目(OWASP). 年度OWASP十大绝对列出了当前存在的主要Web应用程序漏洞。 DASP Top 10希望为区块链提供同等资源.

并非所有攻击都是事先已知的。零日漏洞利用定义了黑客在其他任何人之前都知道的漏洞利用。因此,程序员在设计和实现软件时必须像攻击者一样思考。如果您在代码中找不到漏洞,请期待黑客为他们谋取利益.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me