Analise smart-contract
12.04.2024

代理探测器说明

我们继续专门描述智能合约中欺诈计划的系列文章。

代理智能合约因其现代化和灵活性而在区块链领域大受欢迎。但是,此类合约也具有很大的危险性,尤其是在被恶意用户使用时。欺诈者经常在代理智能合约中使用欺骗手段来欺诈用户。要识别此类威胁,您需要了解可能存在的风险并精通技术。

让我们来详细了解一下代理智能合约中的潜在危险、常见欺骗方案以及如何识别此类威胁。

代理智能合约的危险:

  1. 未经授权的更新:
    代理合约允许所有者更新底层合约。但是,如果不安全地实施这一机制,就可能导致未经授权的更新,从而允许攻击者向合约中注入恶意代码。

  2. />
  3. 未检查的外部调用:
    流氓程序员可能会在未进行适当验证的情况下对不信任的合约使用外部调用。这可能导致漏洞,包括重入攻击,即恶意合同重复调用代理合同,从而耗尽其资金。

  4. 缺乏透明度:
    管理合同的源代码通常未经验证。

  5. 虚假项目:
    欺诈者创建虚假项目,承诺高回报或独特功能等诱人特性。他们可能使用代理合同来制造合法的假象,同时隐藏恶意意图。

  6. 庞氏骗局:
    欺诈者以代理合约为基础建立庞氏骗局,用高回报的承诺引诱用户。此类计划可能有可更新的组件,以维持可信的假象。

  7. 克隆合同:
    欺诈者克隆合法项目,并在克隆合同中引入漏洞或更改。毫无戒心的用户可能会与此类克隆进行交互,并将其误认为是原始合约。

您如何独立判断智能合约中是否存在此类威胁?

值得注意的是,如果智能合约的目标代码包含对外部合约(代理)的引用,那么在几乎 100% 的情况下,该代理合约都将带有隐藏的源代码。在这种情况下,外部控制合约完全可以对目标合约执行任何操作(例如:更改用户余额、启用和禁用交易、启动排放等)。

因此,值得理解的是,使用代理智能合约是一场真正意义上的轮盘赌游戏(赌场永远是赢家)。

在智能合约中查找代理调用非常容易。

如果您想自行确定智能合约中是否存在代理功能,以下提示将对您有所帮助。

  • 进行合约审计: 在使用任何智能合约之前,请审查其源代码和功能。请注意是否存在记录完备的更新流程、访问控制机制和项目透明度。

  • 确保智能合约已通过知名公司的外部安全审计。审计报告可以让我们深入了解潜在的漏洞。

  • 研究项目开发团队。透明、值得信赖的团队不太可能参与欺诈。

  • 咨询项目社区,从其他有合约使用经验的用户那里获得反馈。骗子通常会避免公开讨论。

  • 在处理合同时,使用知名的钱包程序和工具,它们提供额外的安全和交易保护功能。

  • 在处理新的和未经证实的合同时要小心,尤其是那些承诺高回报或表现出异常行为的合同。

  • 如果合同中的内容似乎好得不像真的或可疑,请相信自己的直觉并避开它。

  • 随时了解我们社区的最新动态(Telegram 频道)和欺诈检测的最佳实践(我们的博客和 YouTube 频道)。

>Lotus Market 的安全扫描仪可发现所有常见(包括隐藏)的外部控制(代理)功能。使用我们的高级订阅,保护您的资金免受威胁。


以下是您在检查智能合约以识别潜在恶意功能时应注意的常见红旗和可疑模式的示例。了解这些迹象对保护自己和他人免受潜在欺诈非常重要。让我们来看看一些代码模式的变化和提示,以帮助您识别智能合约中的可疑功能:

主要规则是,如果合约代码中包含 Call、CallCode 或 DelegateCall 函数的调用,则意味着该合约调用了外部代码,并将其数据控制权传递给了外部代码。

tips around proxy

让我们看看使用代理合约的主要示例。

1. 未初始化的存储变量。

代理合约中最常见的漏洞之一是存储变量的误用。当使用代理合约通过DelegateCall调用实现合约的函数时,会修改代理合约的存储变量。然而,如果代理合约的存储变量未初始化或具有默认值,这可能导致意外行为。

        contract Implementation {
            address public owner;
    
            constructor() {
                owner = msg.sender;
            }
        }
      

在此示例中,如果代理合约中的owner变量未初始化,调用代理合约的owner()将返回实现合约的owner变量,这可能不是用户所期望的。

2. 未验证的外部调用。

欺诈合约可以在没有适当检查的情况下使用外部调用来调用不受信任的合约。如果代理合约通过DelegateCall直接或间接调用恶意合约,恶意合约可以执行任意操作,包括重入攻击,而没有适当的防护措施。

        contract Proxy {
            function execute(address target, bytes memory data) external {
                target.delegatecall(data);
            }
        }
        

如果用户将任意合约和恶意数据作为目标地址发送,可能会导致以用户名义执行未经授权的操作。

3. 不当的访问控制。

欺诈合约可能具有不适当的访问控制,允许未经授权的用户执行管理功能。使用代理合约时,应仔细控制谁有权限更新实现合约。如果不这样做,可能会导致合同行为的未经授权更改。

        contract Proxy {
            address public owner;
            address public implementation;
                                            
            function upgrade(address newImplementation) external {
                require(msg.sender == owner, "Only the owner can upgrade.");
                implementation = newImplementation;
            }
        }
        

在此示例中,如果owner地址未得到适当控制,或没有检查谁可以调用update函数,未经授权的人员可以将实现更改为恶意合约。

4. 版本控制和管理风险。

代理合约通常使用版本控制和管理机制来更新合约逻辑。如果这些机制未安全实施,可能会受到恶意方的攻击或操纵。

        contract Proxy {
            address public owner;
            address public implementation;
            address public pendingImplementation;
                
            function upgrade(address newImplementation) external {
                require(msg.sender == owner, "Only the owner can upgrade.");
                pendingImplementation = newImplementation;
            }
            function claimUpgrade() external {
                require(msg.sender == owner, "Only the owner can claim the upgrade.");
                implementation = pendingImplementation;
            }
        }
        

在这种情况下,攻击者可以提供一个新的“干净”合约,然后立即进行更新,实际上将他们的恶意代码投入运行。

tips around proxy

研究代理合同时我应该注意什么,它们会带来哪些威胁?

  1. 未经授权的资金转移:
    骗子最常见的窃取资金方式之一是通过合约持有者在未经授权的情况下将资金转移到自己或其他地址。

  2. 隐藏的“后门”:
    骗子可能会将恶意代码隐藏在混淆或误导性的功能名称后面,使用户难以检测其真正意图。不清楚或误导性的函数名称。授予某些地址特殊权限的条件运算符。

  3. 假冒代币和交易所:
    骗子经常创建假代币或假交易平台,诱骗用户将资产转移到恶意合约中。注意那些行为可疑的代币合约,例如铸造无限代币或接受未经授权的转移。

  4. 未经授权的发行或所有权转移功能:
    外部合约可以更改代币持有者或触发新发行,导致价格膨胀。

  5. 与代码行为不一致的误导性文档或注释:
    骗子可能会在其代码中提供误导性或不准确的文档或注释,以误导用户关于合约的真实功能。始终将文档与实际代码行为进行交叉检查。

  6. 缺乏安全检查:
    注意那些缺乏适当安全检查、访问控制或未实施常见漏洞防护措施(如重入攻击)的合约。在考虑一个智能合约时,始终仔细检查代码,寻找文档齐全且透明的设计,检查外部安全审计,研究社区反馈。此外,当与展示出这些特征的合约进行互动时要小心,因为它们可能被设计用来窃取资金或执行其他恶意活动。

  7. 复杂的条件表达式:
    骗子可能会使用难以理解的复杂条件表达式或逻辑,使理解合约的真实功能变得困难。注意不必要的复杂代码:过于复杂或不清楚的逻辑,以及与合约目的无关的条款和条件。

  8. 不明确的管理和所有权模式:
    骗子经常使用治理机制不明确或所有权结构隐藏的代理合约,使用户难以确定谁控制合约。

  9. 模仿已知项目:
    骗子经常创建模仿已知合法项目功能或外观的合约。始终检查项目的真实性,确保其不是假冒。注意名称、徽标或品牌的细微差异。声称为官方但缺乏适当验证的项目。

  10. 仓促或匿名部署:
    骗子可能会仓促部署合约,没有明确的身份信息,并且关于项目或其开发者的信息极少。注意那些未经充分尽职调查和规划,由未知团队发布的合约。

  11. 缺乏公共验证或审计:
    如果合约没有提供公共源代码审查或未经过第三方安全审计,您应极其谨慎地对待。

  12. 异常或隐藏的数据存储:
    骗子可能会使用非常规或隐蔽的数据存储方案来掩盖恶意功能。注意合同中可能在意想不到的地方存储的数据。

  13. 伪造流动性池:
    在DeFi项目的情况下,要警惕那些承诺高回报的流动性池。骗子可能会创建假池以吸引流动性,然后利用用户。流动性提供收入异常高。池操作机制缺乏透明度和文档。

tips around proxy

为了防范此类漏洞,使用代理模板和DelegateCall的合约应进行仔细审查和审核,实施访问控制机制,并确保外部调用的安全。用户在与合约交互时应谨慎行事,特别是那些具有复杂更新机制的合约,并应始终在与区块链上的智能合约交互之前进行尽职调查。

在快速发展的区块链世界中,保持警惕和知情是至关重要的,以保护自己和资产免受代理合约和DelegateCall功能相关的潜在欺诈方案和漏洞的侵害。


我们希望这些信息能帮助您更好地了解受管理(代理)智能合约方案。


由于区块链上的所有信息都是公开的(当然,前提是合约的源代码已验证),拥有这些知识后,您可以自行研究智能合约并识别各种骗局。

然而,我们已经为您做好了这一切!注册高级订阅,获得智能合约功能的独家过滤器和最新分析。提高您成功投资于盈利代币的机会。

Regards, Lotus Market team.

All posts

Connect to a wallet

Metamask