智能合约是区块链上的自动执行合约。通过自动执行和遵守合约条款的过程,它们消除了对律师或银行等中间人的需求。智能合约可以在没有任何人工参与的情况下自动运行,安全且不可篡改。由于这种能力,它们对希望实现程序自动化和降低交易成本的个人、公司和政府具有吸引力。

智能合约可以消除对中间商的需求,从而降低交易成本、加快交易速度并提高透明度,这是其主要优势之一。由于数据记录在分散的、不可渗透的账本上,因此智能合约还可以提供比传统合约更高的安全性和隐私性。

本文深入探讨智能合约,详细解释其工作原理及其可能被黑客攻击的原因。读者可以学到以下内容:

  • 智能合约如何运作

  • 智能合约如何遭受黑客攻击

    • 重入攻击

    • 上溢/下溢

    • 对时间戳的依赖

    • 铸造代币和将代币列入黑名单

    • 计算错误

    • 恶意库和依赖项

    • 抢先交易

  • 真实黑客攻击示例

  • 预防和缓解策略

让我们开始吧!

智能合约如何运作

智能合约通过使用编码来执行协议条款。代码发布到区块链后,只要满足预设条件,合约就会自动运行。此后合约将无法更改。

例如,如果双方同意一份出售房屋的智能合约,一旦付款并且区块链验证了,合约就会立即将房屋所有权转移给买方。

许多行业,包括金融、供应链管理、房地产等,都可能使用智能合约。随着技术的发展和越来越广泛的应用,它有能力改变我们开展业务和相互沟通的方式。

智能合约如何遭受黑客攻击

由于智能合约无需中介即可自动执行合同协议,因此被誉为一种颠覆性技术。与任何技术一样,智能合约也存在漏洞,黑客不断寻找新方法来利用它们。以下是一些最典型的智能合约黑客攻击:

1. 重入攻击

重入攻击很难被发现,因为代码似乎运行正常,允许攻击者反复利用漏洞,直到成功。DAO 漏洞就是一个著名的重入攻击案例,攻击者通过反复从 DAO 合约中窃取资金,窃取了价值 5000 万美元的以太币。

开发人员可以采用各种技术来降低重入攻击的风险。例如,他们可以创建互斥锁来禁止并发执行同一合约,或者设置 gas 消耗限制来停止冗长的递归函数。

2. 溢出/下溢

当数学运算的结果超出数据类型的界限时,就会发生整数溢出和下溢。

整数溢出和下溢的后果可能是灾难性的。例如,用户可能会提款,但最终余额为负数。攻击者还可能创建一个非常大的值,以绕过限制或发起拒绝服务攻击。

开发人员可以利用 BigInt 或 uint256 等能够处理大整数的数据类型来防止整数溢出和下溢。为了确保输入值在允许的范围内,他们还可以加入边界条件检查。

3. 对时间戳的依赖

时间戳依赖性是另一个可能导致意外行为的问题。智能合约可以使用时间戳来验证时间敏感的情况,包括用户是否有权获得付款。攻击者可以利用这一弱点,通过更改时间戳或在特定时刻启动交易,使某种情况提前发生。

开发人员可以使用区块编号来确认特定情况的有效性,而无需依赖时间戳。他们还可以设置时间限制,以防止合约执行超过一定时间。开发人员还可以从可靠的外部时间源获取精确的时间戳。

4. 铸造代币和将代币列入黑名单

黑客可以利用智能合约中的铸造和黑名单功能来添加、删除或限制用户对代币的访问。例如,黑客可以使用铸造功能生产无限数量的代币,然后将其出售以赚取利润。

或者,攻击者可以利用黑名单功能拒绝访问特定用户的代币,从而削弱用户信心。为了阻止此类攻击,智能合约开发人员必须正确构建铸造和黑名单机制并进行严格测试。

5. 计算错误

智能合约的正常运行依赖于准确的计算。不准确的估算可能会带来意想不到的结果。例如,如果智能合约包含计算错误,使攻击者能够绕过某些限制或获取他们无权获得的现金,合约所有者可能会蒙受损失。此外,如果计算错误导致代币余额不准确,消费者可能会感到困惑并失去对智能合约的信任。

6.恶意库和依赖项

智能合约经常使用来自其他来源的库和依赖项。如果这些依赖项或库是恶意的或被入侵的,则可能让攻击者能够访问合约或其资金。例如,攻击者可以利用智能合约对带有后门的库的使用来接管合约。此外,如果库存在漏洞,攻击者可以利用智能合约来获得优势。

7. 抢先交易

在已知的未来交易发生之前,将交易执行队列中的交易提前执行以赎回的行为在区块链和加密货币领域被称为抢先交易。为了获取可能的收益并切断现金,这通常是通过检查智能合约中从未使用过的指令和功能来实现的。

当攻击者在交换交易广播后但尚未完成时对其进行监视时,他们就实施了抢先交易攻击。然后,他们会重新排列交易,以谋取自己的利益。这通常是通过矿工或机器人立即将新交易添加到现有交易之前来实现的。恶意交易在现有交易完成之前执行。

现实世界中智能合约黑客攻击的例子

尽管智能合约的设计是安全的,但它们偶尔也会被破坏或用于恶意目的。以下是一些实际智能合约被黑客攻击的例子:

  • KingDice 黑客

KingDice 是基于以太坊区块链的去中心化博彩网络。2017 年 8 月,一名黑客利用智能合约代码漏洞窃取了价值近 30 万美元的以太币。

  • Uniswap V2 的漏洞

2020 年 11 月,一名黑客利用 Uniswap V2 智能合约的漏洞窃取了价值近 30 万美元的比特币。为了操纵代币价格并利用套利机会,攻击者使用了闪电贷。

  • DAO 攻击

DAO(去中心化自治组织)是在以太坊区块链上开发的,是一个基于智能合约的投资基金。2016 年 6 月,一名黑客利用编程漏洞从 DAO 窃取了价值近 5000 万美元的以太坊。此次黑客攻击导致以太坊区块链发生硬分叉,从而催生了以太坊经典版。

  • Parity 钱包被黑

2017 年 7 月,一名黑客利用 Parity 多重签名钱包的漏洞窃取了价值近 3000 万美元的以太坊。由于智能合约编程中存在错误,黑客能够控制钱包并将所有资金转移到另一个账户。

预防和缓解策略

开发人员可以采用以下推荐的做法来创建安全的智能合约:

  1. 使用完善且经过审核的库和依赖项。使用完善且经过审核的库和依赖项有助于降低智能合约中引入漏洞的风险。应避免使用未经测试或不受信任的代码,开发人员应仔细检查他们使用的任何第三方代码的安全性。

  2. 实施边界条件检查。智能合约应实施边界条件检查,包括最大和最小输入参数值。通过这样做,可以减少整数溢出和下溢攻击。智能合约技术的有效性和广泛使用取决于智能合约攻击的预防和缓解。

  3. 使用完善且经过审核的库和依赖项有助于降低智能合约中引入漏洞的风险。应避免使用未经测试或不受信任的代码,开发人员应仔细检查他们使用的任何第三方代码的安全性。

  4. 避免时间戳依赖。为了降低时间戳被操纵的可能性,开发人员应避免将时间戳作为执行智能合约逻辑的唯一基础。当满足特定要求时,他们可以采用区块编号或区块哈希等替代技术。

  5. 全面测试。查找和修复智能合约漏洞取决于全面测试。开发人员应运行单元测试和集成测试,以确认合约按预期运行并尽早发现任何潜在问题。

  6. 正确实现铸币和黑名单功能。开发人员在实现铸币和黑名单功能时应小心谨慎,以防止不必要的访问和操纵。

  7. 确保计算准确。智能合约的正常运行取决于准确的计算。在执行困难的数学运算时,开发人员应使用经过验证的库并确保其计算准确。

  8. 安全审计。安全审计是查找智能合约弱点的有用技术。在部署智能合约之前,开发人员可以聘请智能合约审计公司对其进行审计。此类审计可以帮助团队在代码投入生产之前发现并修复任何潜在问题。

  9. 形式化验证。这是一种确认智能合约准确性的数学技术。此方法可以帮助确保智能合约按计划执行且安全。

  10. 漏洞赏金。通过提供漏洞赏金,鼓励安全研究人员发现并报告智能合约漏洞。为了发现并修复潜在问题,开发人员可以付费让大量安全专家发现漏洞。

结论

总之,虽然智能合约提供了一种革命性的区块链交易自动化方法,但它们很容易受到黑客攻击和安全漏洞的攻击。开发人员必须遵守智能合约审计和安全测试等推荐做法,以防止智能合约遭到黑客攻击。

开发人员可以确保区块链技术的长期健康发展,并为所有用户创建一个值得信赖的生态系统,免受智能合约黑客攻击的危险。他们可以通过实施漏洞赏金、形式验证和安全审计等程序来实现这一结果。最后,优先考虑安全性对于智能合约和区块链领域的发展至关重要。

智能合约如何遭到黑客攻击?这篇文章最先出现在 Coinfomania 上。