所有文章

防范恶意智能合约

blockchainJanuary 29, 2026·#Blockchain

本文分析了黑客经常用来窃取用户资产的复杂攻击机制,例如重入、无限制的批准权限和代理技术。

防范恶意智能合约

Tan Phat Digital分析,去中心化金融(DeFi)和去中心化应用(dApp)的爆发带来了金融自治的革命,但同时也为网络犯罪分子开启了一个新时代。 2022 年至 2023 年期间,智能合约相关攻击和诈骗造成的损失已达到数十亿美元,有报告称仅 2022 年这一数字就达到 37 亿美元。今天最令人担忧的一点不仅仅是无意的技术漏洞,而是以“故意恶意逻辑”设计的合约的兴起。这些实体利用区块链的不变性和用户缺乏技术理解的优势,在没有可逆机制的情况下执行资产挪用。识别经常被忽视的毒性迹象需要透彻理解以太坊虚拟机(EVM)架构、代币标准以及区块浏览器的操作流程。

恶意智能合约的本质和执行机制

恶意智能合约不仅仅是一段有缺陷的代码;它是恶意智能合约的本质。它们是旨在打破有关用户安全的假设的金融工具。智能合约的核心特征之一是自动执行且独立于第三方,这意味着一旦交易被触发,如果出现错误,监管机构或银行都无法干预以保护用户的利益。智能合约欺诈通常包括安装“后门”,允许项目所有者提取流动性池(池)中的所有资产或通过隐藏条件阻止用户提取资金。

查看更多:什么是智能合约?关于智能合约的知识

蜜罐合约中的重入和扭曲漏洞

重入是如何利用合约逻辑从协议中耗尽资金的经典示例。当合约在有时间更新其内部余额状态之前调用外部地址(通常是攻击者的合约)时,就会发生这种机制。在这种情况下,攻击者使用fallback函数在单笔交易中多次回调受害者的提款函数,从而允许他们提取超出实际余额的资金。

当这种技术用于“蜜罐”合约时,危险会增加。诈骗者故意部署一个容易受到重入漏洞攻击的合约,以吸引开发人员或漏洞搜索机器人存入资金,以期“破解”该合约。然而,蜜罐合约包含额外的检查或隐藏功能,使得提款几乎不可能,从而使黑客自己成为受害者。这表明风险不仅来自与 dApp 的交互,还来自试图利用区块链上看似“糟糕”的合约。

常见的重入类型:

  • 重入单一函数:在第一次执行结束之前再次重复调用的函数。这破坏了余额数据的完整性,导致无限提款。

  • 函数间重入:攻击者使用两个不同的函数但共享相同的状态。这种类型通过单一逻辑测试较难检测,需要分析全局状态。

  • 合约间重入:当一个合约的状态依赖于另一个合约未更新的状态时发生,通常会导致复杂的 DeFi 协议中的系统逻辑错误。

访问控制和铸币逻辑的违规

恶意软件最常见的迹象之一,用户经常忽略的是具有过多权力的管理功能的存在。 mintUnlimitedTokens()ownerOnlyWithdraw() 等函数或 blacklist() 函数的变体允许合约所有者完全控制其用户资产的命运。一个现实的例子是 DMC 项目遭到黑客攻击,其中 mintFromStake() 函数缺乏访问控制机制,导致攻击者能够铸造超过 4000 万个新代币并耗尽 PancakeSwap 的流动性。

不正确的访问控制通常伪装成技术名称或看似无害的函数名称。欺诈者可以使用 tx.origin 而不是 msg.sender 来执行代理网络钓鱼攻击,或者使用隐藏在混淆的源代码深处的所有者更改逻辑 (setOwner)。用户通常只看到闪亮的用户界面,而不检查管理钱包地址是否实际上被锁定(放弃)或是否掌握在能够操纵整个供应的私人钱包手中。

另请参阅:审批骗局有多危险以及为什么这么多人落入陷阱

令牌审批权限和复杂网络钓鱼攻击的风险

令牌审批权限(令牌Approval)是 DeFi 交易的支柱,允许 dApp 有权代表用户花费代币。然而,这也是网络犯罪分子利用最为彻底的“致命弱点”。当用户与去中心化交易所 (DEX) 交互时,通常会要求他们签署批准交易。通常,dApp 需要通用批准权限(无限批准),以便用户不必再次执行此操作,并为以后节省 Gas 费用。

无限批准机制和 TransferFrom 函数

从技术上讲,approve(spender, amount) 函数在区块链上记录特定合约地址的“津贴”值。如果用户签署了最大值($2^{256} - 1$)的批准,dApp 有权随时通过 transferFrom() 函数提取用户钱包中该代币的全部余额。当 dApp 的合约被黑客攻击或 dApp 本身是欺诈工具时,就会出现这种风险。攻击者不需要持有用户的私钥;

按审批状态进行风险分析:

  • 无限审批用户:因限额值大于等于钱包余额而面临永远失去全部代币余额的风险,让transferFrom函数随时成功执行

  • 用户批准限制:仅获取一定数量的批准代币。 transferFrom 功能被特定的签名限额值阻止。

  • 用户仅连接钱包:此状态是安全的,不会丢失任何资产,因为区块链上没有记录 approve 交易,transferFrom 命令将被还原(取消)。

网络钓鱼趋势和恶意越南的签名

在越南,绕过审批层的欺诈形式以“诈骗空投”或“虚假技术支持”的名义变得非常流行。欺诈者向用户的钱包发送奇怪的代币,其中包含虚假网站的链接。当用户访问并尝试“领取”奖励时,他们会被引诱签署批准请求或Permit签名 (EIP-712)。其中Permit签名尤其危险,因为它允许用户无需进行链上交易就可以批准代币访问,使受害者不知道gas费被扣除,安全性具有主观性。

此外,“杀猪”这种浪漫投资诈骗形式还利用恶意智能合约锁定受害者资金。受害者被指示将资金存入虚假交易平台,实际资金通过设置了隐藏提款权的合约直接转移到骗子的钱包。

混淆和代理:恶意合约伪装技术

为了避免被自动扫描工具和安全分析师检测到,攻击者经常使用代码混淆技术(Obfuscation)和复杂的代理结构。使用误导性的函数名称是一种常见的策略;例如,一个基本上没有资金的函数 (rugPull),但名为 safeWithdraw()emergencyRefund()

Delegatecall 和合约升级风险

代理模型允许一个合约(代理)通过命令delegatecall将执行逻辑转发到另一个合约(实现)。关键是,delegatecall 命令执行目标合约的源代码,但使用调用合约的存储空间。这允许项目所有者随时更改逻辑合约地址。项目可以从完全干净的合约开始以通过初始审核,然后“升级”到恶意版本以勒索用户资金。

攻击者还可以利用代理结构中的存储冲突来更改重要变量,例如所有者地址 (owner) 或交易控制标志。这些漏洞对于普通用户来说通常很难检测到,因为在像 Etherscan 这样的区块浏览器上,他们只能看到与不包含直接恶意逻辑的代理地址的交互。

恶意智能合约测试和识别过程

Tan Phat Digital建议用户执行多层测试过程,不要仅仅依赖表面信息,而是深入链上数据。检查源代码的真实性是第一步也是最重要的一步。在 Etherscan 或 BscScan 上经过验证的合约将有一个绿色勾号图标,允许社区查看实际的源代码。

流动性锁定分析

流动性是决定用户是否可以出售其代币的因素。恶意项目通常会通过耗尽交易池的流动性来执行“地毯式拉动”。用户可以按照以下步骤在区块浏览器上进行手动检查:

  1. 在区块浏览器上进入该代币的“Token Tracker”页面。

  2. 搜索初始流动性存款交易并检查 LP(流动性提供者)代币接收地址。

  3. 确认 LP 代币是否被发送到“销毁”地址或信誉良好的锁仓合约

常见流动性锁定方式:

  • 销毁地址:将LP代币转入以dEaD结尾的地址。这是一种绝对的信任程度,因为没有人可以提取烧毁的资产。

  • Unicrypt / PinkSale 平台:使用具有锁定期的中介智能合约。信任度高,解锁时间可在平台网站上公开查看。

  • 开发者钱包(已解锁):LP代币直接位于程序员的钱包中。信任度很低,项目方可以随时提款进行Rug Pull。

审计和KYC报告评估

仅仅因为一个项目声称经过了CertiK或Hacken等单位的审计并不意味着它是完全安全的。用户必须直接在审计公司的网站上检查该报告的真实性。真实的审计报告需要与 GitHub 上的有效合约地址和源代码提交相匹配。常见的欺诈迹象包括拼写错误、设计不一致或链接到个人 GitHub 页面而不是审核员的官方排行榜页面。

主动防御工具和策略

使用 Revoke.cash 和 Rabby 钱包管理审批权限

定期检查和撤销代币审批是一项重要的安全习惯。 Revoke.cash 是一款领先的工具,允许用户查看所有已批准的 dApp 的列表,并执行“撤销”或将批准限制更新到安全级别。与此同时,Rabby Wallet 因其内置的风险警告功能而被认为是安全钱包,如果交易需要未经验证的合约批准或显示出恶意迹象,则会显示红色通知。

区分断开连接和撤销

一个常见的错误是认为将钱包与 dApp 断开连接将保护资产。但是:

  • 断开连接:仅取消网站查看您的钱包地址和余额的权限。它不会影响区块链上记录的批准权限。

  • 撤销:是真正的区块链交易,删除 dApp 花费代币的权利。这是唯一可以防止恶意合约通过 transferFrom 命令从您的钱包提取资金的操作。

资产救援和白帽救援

一旦钱包被“Sweeper Bot”攻破,提取剩余资产将变得极其困难,因为机器人加载后会自动耗尽 Gas 费。

工具救援和主要机制:

  • Flashbots: 采用封闭式捆绑交易机制,不经过公共内存池。需要技术知识来配置index.js和私钥。

  • 被黑钱包恢复:提供一个接口来支持自动捆绑包创建。用户需要切换到特殊的RPC,以避免将交易暴露到公共网络。

  • Revoke.cash(漏洞利用检查器):检查钱包是否在被黑的dApp列表中。该工具仅具有预防和撤销的作用,并不能保存已转移的资金。

10个有关智能合约安全的常见问题(FAQ)

  1. 仅断开钱包与dApp的连接是否足够安全?不会。断开连接只会阻止网站查看您的钱包余额。授权权限保留在区块链上,允许恶意合约随时通过 transferFrom 命令提取您的资金。您必须执行撤销命令才能实际撤销对资产的访问权限。  

  2. 如何知道项目的流动性是否真正被锁定?需要通过区块浏览器(Etherscan/BscScan)进行查看。如果流动性代币(LP代币)被发送到销毁地址(0x...dEaD)或期限超过6-12个月的信誉良好的锁定合约(例如Unicrypt、PinkSale),则被认为是安全的。  

  3. 为什么 dApp 经常请求无限的“批准”权限?dApp 请求最大权限(2256−1),为用户在未来的交易中带来便利并节省 Gas 费用。但是,如果该合约包含恶意代码,则黑客可以耗尽您钱包中的所有代币,而无需您签署任何其他订单。  

  4. 什么是“蜜罐”合约以及如何识别它?蜜罐是一种合约,允许您购买代币,但会安装阻止您出售代币的代码。你可以通过Dexscreener来识别:如果图表上只有买单(蓝色)而没有卖单(红色),那么这绝对是一个陷阱。  

  5. 如果我发现我的钱包里有“扫地机器人”怎么办?绝对不要向该钱包添加更多的钱,因为机器人会立即将其提取。唯一的解决方案是使用 FlashbotsHacked Wallet Recovery 等工具创建一个封闭的交易包,以便在机器人做出反应之前“窃取”资产。  

  6. 审计报告是否确保项目完全不可破解?不。审计只是在某个时间进行评估。该项目可以稍后通过代理模型更改逻辑,或者黑客可以利用审计人员遗漏的错误。  

  7. “Permit”(EIP-712)签名有多危险?这是一种“离线”签名类型,不消耗 Gas,但与 Approve 命令具有相同的值。黑客经常通过虚假的Airdrop网站诱骗用户签署Permit,从而在受害者不知情的情况下控制资产。  

  8. 如何检查KYC或审计报告的真实性?您必须直接访问发行人的网站(如CertiK Leaderboard)并搜索项目名称。永远不要相信项目本身提供的屏幕截图或 PDF 链接,因为它们很容易编辑。  

  9. 除了加密货币,还有哪些类型的“合同诈骗”很流行?常见的形式包括房屋维修合同诈骗(要求大额押金然后消失)和电话合同诈骗(冒充网络运营商获取个人信息以注册昂贵的套餐)。

  10. 通过恶意合约从钱包中提取资金后可以拿回钱。不是吗?由于区块链的不可变性和去中心化特性,交易一旦进行就不可逆转。唯一的机会是向中心化交易所(CEX)报告,这样如果窃贼将资金转移到那里,他们就可以封锁资产。  

恶意智能合约的演变表明,区块链技术越复杂,逻辑缺陷就越难以预测。 Web3 安全的未来将转向“持续安全”模型和实时监控。据Tan Phat Digital专家介绍,提高用户对审批权限管理和自检能力(DYOR)的认识将是网络犯罪分子的最大障碍。安全不仅来自于干净的代码行,还来自于安全技术和每个参与市场的个人的警觉性的结合。

分享

评论

0.0 / 5(0 条评分)

请登录后发表评论。

暂无评论,成为第一个分享想法的人吧。