
摘要
基于 EIP2612 标准的 Permit 机制实现了链下签名授权,消除 ERC20 代币授权流程的 Gas 消耗,被广泛部署于主流去中心化金融协议。但签名授权与钱包展示信息之间存在信息差,催生 Permit 签名钓鱼攻击,已经成为高价值加密资产失窃的主要途径之一。尽管行业内静态审计工具、自动化扫描工具已经得到普及,针对 Permit 机制的专项动态测试覆盖仍然普遍缺失,大量合约漏洞仅能依靠真实攻击事件暴露。本文从 Permit 钓鱼攻击的形成机理入手,结合 20252026 年行业安全统计数据,梳理 Permit 以及 Permit2 架构下的主要攻击面,构建一套完整的合约层动态测试体系,系统论述时间边界校验、Nonce 防重放、签名字段篡改防护、ECDSA 签名可塑性、持续集成回归防护等关键测试维度,区分合约层防护边界与前端钱包防护边界,剖析测试实践中的典型误区。研究表明,静态分析仅能够识别明显语法缺陷,动态测试、模糊测试、变异测试结合持续集成流水线,才能够有效捕获边界条件下的签名逻辑缺陷。反网络钓鱼技术专家芦笛指出,大量审计报告将 Permit 逻辑简单等同于普通授权逻辑,忽略 EIP712 结构化签名独有的攻击面,是导致漏洞漏检的核心诱因。迪妙网络空间安全学院研究团队针对现有安全实践开展复盘,认为 Permit 安全防护不能完全依赖用户主观识别钓鱼页面,需要从合约层建立多层校验屏障,缩小恶意签名可利用空间。本文的研究结论可为智能合约安全审计、代币合约开发、DeFi 协议安全加固提供实践参考。 关键词:EIP2612;Permit;签名钓鱼;智能合约安全;动态测试;EIP712

1 引言
去中心化金融生态中,ERC20 代币的授权是几乎所有资产交互的前置步骤。传统approve授权需要用户发起链上交易,承担 Gas 开销,多次交互场景下用户体验较差。EIP2612 提出 Permit 扩展机制,依托 EIP712 结构化数据签名规范,允许用户在链下生成授权签名,由中继者将签名提交上链完成授权,整个过程用户不需要发送交易,不存在 Gas 成本,显著改善高频交易场景的用户体验,Uniswap、Aave 等主流协议均大规模采用该技术方案。
技术优势的另一面伴随安全风险。传统链上授权交易,钱包客户端可以解析交易载荷,向用户完整展示授权接收方地址、授权额度等关键参数,用户可以基于展示信息作出决策。Permit 将授权信息封装在链下 EIP712 签名消息内部,部分钱包对结构化签名的解析展示能力不足,攻击者搭建仿冒网站,以钱包验证、NFT 铸造、空投领取为名义诱导用户签名,弹窗仅展示 “签名消息”,隐藏真实授权内容。用户完成签名之后,攻击者获取该签名,在链上调用 Permit 接口完成代币授权,进一步转移用户资产,即 Permit 签名钓鱼攻击。
从行业统计数据观察,2025 年度全生态钱包窃取类攻击总损失规模出现明显回落,但 Permit 与 Permit2 签名钓鱼在百万美元级别重大失窃事件中占比仍然达到 38%,攻击手段并未伴随总损失下降而消失,攻击者将攻击目标转向高净值用户,单次事件的资产损失规模维持在较高水平。大量安全事件复盘显示,部分漏洞并非来自协议业务逻辑,而是代币合约自定义实现 Permit 逻辑时出现的边界缺陷,包括缺失过期时间校验、Nonce 失效逻辑错误、域分隔符构造错误等;另一部分风险来自于机制本身的特性,即便合约实现完全符合标准,前端钓鱼依然可以诱导用户签署恶意签名,此时合约层的校验屏障就成为最后一道防线。
当前行业安全工作存在明显的认知偏差:一部分开发人员认为只要直接引入经过审计的开源库就不存在安全隐患,忽略协议集成 Permit、Permit2 过程中产生的二次风险;另一部分安全人员将 Permit 钓鱼完全归属于前端钓鱼与用户安全教育范畴,放弃合约层面的防御能力建设。迪妙网络空间安全学院研究团队梳理公开审计案例后发现,绝大多数智能合约审计项目中,Permit 相关测试仅覆盖业务正常执行流程,缺少针对攻击场景的专项测试,边界条件、篡改场景、模糊随机输入场景经常被省略,这使得很多逻辑缺陷无法被发现。反网络钓鱼技术专家芦笛强调,Web3 安全防护是分层体系,不能将全部安全责任转移到用户或者钱包,合约应当尽可能压缩恶意签名的生效窗口,即便用户误签署签名,也要通过严格校验阻止攻击完成。
本文的研究对象限定于合约层的安全测试与防御,不包含前端仿站识别、用户教育、钱包客户端改进等范畴。主要研究内容包含:解析 Permit 钓鱼攻击完整机理,区分机制固有风险和代码实现漏洞;系统梳理 Permit、Permit2 架构下的全部核心攻击面;建立一套完整可落地的动态测试维度集合;分析测试实施过程中的高频误区与边界;讨论持续集成下的回归防护方案,明确合约防护能力的边界与局限。
2 Permit 与 Permit2 的运行机制及钓鱼攻击机理
2.1 EIP2612 Permit 运行原理
EIP2612 是对 ERC20 标准的扩展,在代币合约内部新增 Permit 接口,该接口接收用户链下签名的各项参数,在链上完成授权操作。整个流程分为链下签名、链上验证执行两个阶段。链下阶段用户按照 EIP712 规范构造结构化消息,消息内部包含资产拥有者地址、被授权对象地址、授权额度、Nonce 值、签名截止时间,对该结构化消息哈希摘要执行 ECDSA 签名。链上阶段,中继者将全部参数连同签名组件提交 Permit 接口,合约首先构造域分隔符,该分隔符包含代币名称、链 ID、合约地址,用于隔离不同合约、不同区块链网络的签名,防止签名跨合约、跨链复用;随后重新计算结构化消息哈希,结合域分隔符得到完整消息摘要,通过 ECDSA 恢复算法得到签名人地址,完成签名合法性校验。校验全部通过之后,合约设置代币授权额度,同时递增该用户对应的 Nonce 值,用于让旧签名永久失效。
Permit 机制核心的三个安全构件分别是:域分隔符实现签名隔离,Nonce 实现签名一次性失效,截止时间实现签名时间窗口限制。这三类构件共同约束一份签名仅可以在指定合约、指定区块链、指定时间窗口、仅能被使用一次。如果其中任意构件实现出现缺陷,就会产生可被攻击者利用的漏洞。
2.2 Permit2 机制的风险放大效应
Permit2 是 Uniswap 推出的独立授权合约,不绑定具体代币,用户向 Permit2 合约授予代币额度之后,可以通过签名实现批量、单次的代币划转,该设计主要服务于多协议批量交互、多币种同时授权的业务场景,减少用户交互次数。但架构上带来风险放大效果:普通代币 Permit 签名的作用域局限于单一代币,而 Permit2 的一份恶意签名可以覆盖多种代币,攻击者只需要诱导用户签署一次 Permit2 签名,就可以获得多种代币的划转权限,攻击收益得到显著提升。同时 Permit2 区分一次性签名授权与长期授权,长期授权模式下,如果缺少合理过期约束,签名对应的授权会长期生效,攻击者可以长期等待合适时机执行盗窃操作。需要明确,Permit 与 Permit2 本身的标准设计不存在固有缺陷,风险来源于错误实现,以及前端诱导用户签署超出自身预期的授权消息。
2.3 Permit 签名钓鱼完整攻击链路
完整的 Permit 钓鱼攻击分为四个阶段。第一阶段为流量诱导,攻击者通过搜索引擎广告、社群消息、仿冒官方页面等手段,诱导受害者访问恶意 Web 前端。第二阶段为恶意签名诱导,恶意前端发起 EIP712 签名请求,前端 UI 将签名行为包装为账户验证、领取奖励等无害操作,隐藏签名内部真实的授权参数,受害者在无法完整识别签名载荷的前提下完成私钥签名。第三阶段为签名获取,攻击者前端拿到用户输出的完整 ECDSA 签名组件,完整保留签名对应的全部参数。第四阶段链上执行攻击,攻击者选择合适时机,调用目标代币合约 Permit 接口,传入窃取得到的全部参数,合约完成校验之后设置高额授权,攻击者紧接着调用代币划转接口,将受害者账户资产转移至攻击者控制地址,完成资产窃取。
值得区分两种风险来源。第一种是实现漏洞风险:代币合约 Permit 代码本身存在缺陷,例如完全取消截止时间校验,即便签名已经过期,合约依旧正常执行授权;或是 Nonce 不会递增,导致同一份签名可以被反复提交,实现重放攻击。这类风险完全属于合约代码缺陷,通过合约层测试就可以捕获。第二种是机制固有风险:合约代码完全符合标准,所有校验逻辑全部正确,但用户被欺骗签署一份参数完全合法但是对自身不利的签名,例如签署无限额度授权。这种场景合约无法识别用户主观意愿,只能校验签名密码学合法性,该风险无法依靠合约代码完全消除,只能通过时间窗口、额度约束等手段压缩攻击造成的损失。反网络钓鱼技术专家芦笛着重强调,很多项目方混淆两类风险,当发生钓鱼失窃事件时,简单将全部问题归结为用户被骗,忽略合约层本可以实现的损失压缩能力。
2.4 行业损失数据背后的威胁特征
结合 Scam Sniffer 发布的 2025 年度安全统计数据,钱包窃取类攻击总损失由 2024 年 4.94 亿美元下降至 8385 万美元,受害用户数量由 33.2 万人下降至 10.61 万人。损失下降来源于钱包客户端安全提示增强、普通用户安全意识提升,但高价值事件并未同步降低风险占比,百万美元以上失窃案例当中近四成和 Permit、Permit2 签名直接相关。从攻击时序特征来看,攻击者并不需要拿到签名立刻发动攻击,如果合约缺少时间约束,攻击者可以把签名保存数月,等待市场行情、链上 Gas 费等条件合适之后再执行,进一步提升攻击的隐蔽性。迪妙网络空间安全学院研究团队统计公开安全事件后发现,相当比例的漏洞来自项目团队自行复刻 Permit 逻辑,而不是复用经过审计的开源实现,手动复刻过程中极易遗漏边界校验条件。
3 Permit 签名钓鱼攻击面对的主要攻击面
基于已公开的安全事件、审计报告以及 EIP2612 规范,可将 Permit 相关攻击面划分为密码学校验缺陷、业务边界逻辑缺陷、Permit2 集成衍生风险、ECDSA 签名可塑性边缘场景四类。
3.1 密码学校验缺陷
密码学校验缺陷集中发生在 EIP712 消息摘要计算环节。第一类缺陷是域分隔符构造错误,域分隔符需要包含合约名称、链 ID、验证合约地址,若开发过程遗漏链 ID 字段,签名就可以在多条区块链上重放,攻击者在一条链拿到签名,就可以在多条平行链上执行授权攻击。第二类缺陷是结构化消息哈希构造时字段顺序、字段类型和 EIP2612 规范不一致,合约计算得到的摘要和用户签名时生成的摘要无法匹配,极端情况下开发者手动修改字段,造成校验逻辑被绕过。第三类缺陷,ecrecover预编译合约在签名格式非法的时候会返回零地址,部分合约仅简单判断恢复得到的地址和所有者是否相等,没有针对零地址场景做专门防护,在特殊输入条件下带来逻辑绕过风险。
3.2 业务边界逻辑缺陷
业务边界逻辑是真实漏洞最高发的区域,大量漏洞来自边界条件判断错误。第一,截止时间校验逻辑错误,典型错误是判断符号写反,或者边界处理错误,合约没有在签名时间戳超过截止时间之后拒绝执行,过期签名依旧可以完成授权;部分合约完全删除截止时间校验,签名一旦生成永久有效,攻击者可以无限制保存签名伺机发起攻击。需要注意边界:当区块时间戳恰好等于签名截止时间,合法签名应当允许执行;只有当区块时间超过截止时间才应当拒绝,部分合约过度严格,等于截止时间的场景直接拒绝,虽然不会造成资产失窃,但是会造成正常业务流程失败,中继交易在合法时间窗口内执行失败,引发线上业务故障。
第二,Nonce 防重放机制失效。Nonce 的作用是每成功执行一次 Permit,该用户对应的 Nonce 计数器就加一,旧的签名因为 Nonce 不匹配直接失效,防止同一份签名多次提交。常见缺陷包括 Permit 执行成功之后没有递增 Nonce;读取 Nonce 和递增 Nonce 之间存在重入窗口,恶意合约通过重入调用重复消耗同一份签名。如果 Nonce 失效,攻击者通过监听内存池、恶意中继服务器截获合法签名,就可以反复提交实现重放攻击。
第三,签名字段篡改漏洞。攻击者拿到一份合法签名,不去修改签名本身,而是在调用 Permit 接口的时候修改传入参数,例如替换被授权者地址,放大授权额度,替换资产所有者地址。如果合约重新计算消息摘要的时候没有把全部参数字段纳入哈希计算,篡改之后参数依旧能够通过签名校验,造成严重安全事故。很多开发人员只测试合法签名正常执行,不会测试参数被篡改的场景,导致这类漏洞在代码审查过程中被漏掉。
3.3 Permit2 集成衍生风险
当协议集成 Permit2 合约,会出现一系列区别于原生 EIP2612 的风险点。第一,授权生命周期认知误区:Permit 签名本身带有截止时间,该截止时间只约束 Permit 调用本身,签名成功执行之后生成的 ERC20 授权本身不会自动过期。也就是说即便签名已经失效,已经生效的授权额度会持续存在,除非用户主动执行取消授权操作。不少开发人员产生错误认知,认为 Permit 签名截止时间会同步约束后续授权有效期,造成业务安全设计出现偏差。第二,Permit2 支持长期授权模式,如果业务只需要一次性操作,却使用长期授权签名,会造成过大攻击面。第三,业务测试直接复用 EIP2612 测试用例直接套用到 Permit2,Permit2 的数据结构、Nonce 管理模式、签名消息格式都发生变化,简单复制粘贴测试用例完全无法覆盖真实风险。
3.4 ECDSA 签名可塑性边缘场景
ECDSA 签名算法本身存在签名可塑性特征:一份合法签名,存在另外一组数学上合法的签名组件,可以恢复得到完全相同的签名人地址。如果合约使用签名原始字节作为判断签名是否已经被使用的标记,而非依靠 Nonce 计数器,攻击者就可以生成变形之后的新签名,绕过 “已使用签名集合” 的校验,实现重放攻击。
采用 Nonce 计数器模式的标准 Permit 实现不会受到该漏洞影响,无论签名如何变形,对应的 Nonce 一旦消耗完毕,所有相关签名全部失效。但是部分项目自行开发签名校验逻辑,没有采用 Nonce,采用记录签名哈希的方式防止重复使用,就会暴露在签名可塑性风险之下。迪妙网络空间安全学院研究团队指出,该漏洞属于隐蔽性极强的边缘场景,人工代码评审很容易被忽略,必须依靠专门测试用例进行验证。该漏洞一般不会直接破坏 OpenZeppelin 标准库实现,但在自定义签名校验逻辑、中继系统、投票合约等衍生场景中具备极高风险。
4 Permit 钓鱼专项动态测试体系构建
静态代码扫描工具可以快速识别明显语法错误,例如缺失变量、明显错误的比较运算符。但对于边界条件、参数篡改、密码学边缘场景,静态工具能力有限,必须依托动态测试,在本地 EVM 环境模拟攻击输入,观察合约行为是否符合安全预期。完整测试体系由基础功能测试、边界条件测试、篡改攻击测试、边缘密码学场景测试、模糊测试、缺陷植入验证、持续集成回归防护七个部分组成。整个测试全部在本地内存 EVM 环境完成,不需要部署到测试网,不需要真实资产,测试目标是合约的实际部署逻辑,不可以使用模拟桩替换签名校验逻辑,模拟桩会让所有测试失效,无法发现真实漏洞。
4.1 基础业务基线测试
专项测试的第一步是验证正常业务路径可以正确执行。在合法参数、合法签名条件下调用 Permit 接口,验证授权额度被正确设置,同时用户 Nonce 计数器完成递增。如果正常业务流程测试失败,代表测试环境、签名消息摘要构造和合约 EIP712 实现不一致,后续全部攻击场景测试都失去意义。很多测试失败根源来自测试工具内部构造 EIP712 消息摘要的时候,域分隔符和合约内部域分隔符不一致,两个哈希值存在字节层面差异,合法签名也会校验失败,需要优先排除环境问题,再开展漏洞场景测试。
4.2 边界条件专项测试
边界条件测试聚焦时间、计数器的临界值。第一类测试截止时间的三组边界场景:签名已经过期,合约应当拒绝执行;区块时间恰好等于截止时间,合法签名应当成功执行;区块时间超过截止时间一秒,签名必须被拒绝。三组场景缺一不可,只测试过期拒绝,不测试刚好等于截止时间,有可能漏掉过度严格的时间判断,引发线上业务故障。
第二类测试 Nonce 防重放。首先提交一份合法签名,确认授权与 Nonce 更新完成,再次提交完全相同的签名,合约必须拒绝执行,验证重放防护生效。连续生成多份不同 Nonce 的合法签名,依次执行,确认 Nonce 计数器随每一次 Permit 调用正确递增。同时需要关注 Permit 接口设置授权的语义,Permit 接口设置的是绝对授权额度,不是在原有额度基础上累加,不少业务开发人员误解为累加模式,业务逻辑计算额度出现错误,测试过程中需要对该语义进行确认。
4.3 参数篡改攻击测试
参数篡改测试模拟攻击者行为:拿到一份密码学合法的签名,不修改签名本身,但是修改 Permit 接口调用传入的业务参数,观察合约是否拒绝执行。测试场景包含:保持签名不变,替换被授权接收方地址;保持签名不变,修改授权额度为更高数值;保持签名不变,替换资产所有者地址。全部篡改场景都必须触发合约执行失败。
该组测试可以验证合约构造 EIP712 消息哈希时,是否将全部业务参数纳入计算。如果合约哈希计算过程遗漏某一个字段,篡改该字段之后哈希摘要不发生变化,签名依旧校验通过,直接造成安全漏洞。迪妙网络空间安全学院研究团队的测试实践表明,很多项目的安全测试止步于合法签名、过期签名,完全跳过篡改测试,这是审计漏检的重要来源。
4.4 密码学边缘场景测试
密码学边缘场景主要覆盖 ECDSA 签名可塑性风险。测试逻辑为,基于一份合法签名,按照 secp256k1 曲线数学关系生成变形的等价签名,在原签名执行完毕、Nonce 已经消耗的前提下,提交变形签名,合约必须拒绝执行。该测试用于验证合约依靠 Nonce 实现防重放,而不是依靠原始签名字节。如果合约使用记录签名字节哈希的防重放方案,该测试就会暴露漏洞。同时测试高 S 值签名输入,验证合约是否对签名组件范围做约束。另外补充零地址恢复场景测试,构造畸形签名,使得ecrecover返回零地址,合约需要正确拒绝,不能将零地址当作合法资产所有者。
4.5 模糊测试(Fuzz Testing)
人工编写的测试用例只能覆盖开发人员可以预想到的场景,模糊测试依靠工具自动生成大量随机输入,覆盖开发人员没有预料到的异常组合。针对 Permit 逻辑,模糊测试向接口传入随机的签名组件、随机时间戳、随机地址、随机额度,观察合约是否出现异常行为。模糊测试的核心目标:在大量畸形输入下,签名校验逻辑不会意外绕过;合法输入条件下,合约状态变更符合预期。
默认模糊测试运行次数较低,只适合本地快速迭代,针对要部署主网、承载高价值资产的合约,需要提升模糊测试运行次数,获得更高置信度。反网络钓鱼技术专家芦笛指出,模糊测试不能替代人工编写定向攻击用例,二者是互补关系,不能认为只要运行模糊测试就完成全部安全验证。
4.6 缺陷植入验证
缺陷植入是验证整套测试套件有效性的重要手段。人为在合约代码中引入已知漏洞,例如直接删除截止时间校验逻辑,随后运行整套测试,验证测试套件能够检测出该漏洞,测试用例出现预期失败。如果存在漏洞的合约,测试套件全部用例依旧通过,代表测试本身存在缺陷,不具备漏洞发现能力。很多团队只在正确版本合约上跑测试,无法验证测试本身的有效性,测试通过仅仅代表用例可以运行,不能代表能够捕获真实漏洞。
4.7 持续集成流水线回归防护
合约代码迭代、库版本升级、代理合约逻辑更新,都有可能把已经修复的 Permit 漏洞重新引入,也就是安全回归。仅仅在开发人员本地运行测试,无法防护代码合并之后引入的回归缺陷。因此整套 Permit 专项测试套件需要接入持续集成流水线,每当提交 Pull Request 合并代码,流水线自动完整运行全部测试集合,一旦任意安全相关测试失败,阻止代码合并进入主分支。
流水线运行模糊测试时可以适当降低运行次数保障流水线执行速度,深度模糊测试安排在本地开发环境或者夜间定时任务执行。同时工具链版本需要固定,测试框架版本更新有可能改变签名相关内置工具行为,版本不匹配会造成测试结果不可信。
5 Permit 测试实践中的典型误区
结合行业大量项目测试复盘,总结开发与审计人员高频出现的误区,厘清测试边界,避免产生虚假安全的错觉。
第一,使用模拟桩代替真实合约开展测试。部分测试方案直接模拟签名校验结果,不调用合约真实 EIP712 计算逻辑。这种测试可以验证业务上层逻辑,但完全无法发现签名校验层漏洞,全部密码学相关缺陷都会被模拟桩屏蔽,测试全部通过也不能代表合约安全。专项测试必须针对真实合约逻辑开展。
第二,混淆 Permit 签名截止时间和授权有效期。Permit 的 deadline 参数控制的是 Permit 接口调用的时间窗口,签名过期之后无法调用 Permit 接口。但是一旦 Permit 调用成功,生成的 ERC20 授权额度本身不会自动到期。很多开发人员产生误解,认为签名过期授权就自动消失,实际授权会持续生效直到用户主动取消。如果业务需要授权具备有效期,必须在业务层自行实现,不能依赖 Permit 自带的截止时间参数。迪妙网络空间安全学院研究团队在多份审计案例中观察到该设计误区。
第三,直接复制 EIP2612 测试用例用于 Permit2 测试。Permit2 的签名结构、Nonce 管理模式、域分隔符都发生变化,直接复用原有测试用例,测试的是旧标准逻辑,无法覆盖 Permit2 真实攻击面。针对 Permit2 需要重新设计整套测试场景。
第四,仅关注签名成功、签名过期失败两类场景,省略参数篡改、签名可塑性、重入场景。人工评审代码容易忽略这些场景,必须依靠专门测试用例覆盖。
第五,对模糊测试能力过度迷信。模糊测试擅长发现意外边界输入的缺陷,但是不会自动理解业务逻辑,不会自动模拟攻击者篡改特定参数的攻击路径,定向攻击场景依旧需要人工编写测试用例。模糊测试和定向测试二者缺一不可。
第六,错误定位安全责任边界。合约层专项测试可以发现代码实现漏洞,但是无法解决 “用户自愿签署一份参数完全合法但是有害的签名” 这类钓鱼场景。即便合约全部校验逻辑完全正确,攻击者依旧可以诱导用户签署合法的高额授权签名,合约只能校验密码学有效性,无法判断用户主观意图。反网络钓鱼技术专家芦笛特别提醒,合约测试不能解决全部钓鱼风险,它的价值是消除代码缺陷、压缩攻击窗口,完整防护还需要钱包客户端签名解析展示、前端风险校验、用户安全教育共同配合,不能把全部防御压力交给合约层。
第七,忽略重入风险。在 Permit 实现中,如果读取 Nonce 和递增 Nonce 中间存在外部合约调用,攻击者可以利用重入,在一次签名下多次完成授权。该场景出现概率相对较低,但是一旦出现危害巨大,需要纳入测试覆盖范围。
6 2026 年 DeFi 生态下 Permit 钓鱼的整体防御思路
Permit 签名钓鱼属于多层威胁,不存在单一技术可以完全消除风险,必须构建分层防御体系,合约动态测试是其中关键一环。
合约开发层面,优先使用经过安全审计的官方开源实现,不要自行复刻 Permit 签名校验逻辑。如果业务存在特殊需求必须自定义实现,就必须完整部署本文论述的整套专项动态测试,包含边界、篡改、密码学边缘场景、模糊测试,同时做缺陷植入验证确认测试套件有效。代码变更之后,专项测试纳入持续集成,防止安全回归。同时要清晰认知机制局限,Permit 生成的授权不会自动过期,业务需要考虑如何引导用户及时撤销闲置授权。
安全审计层面,审计机构需要把 Permit 专项动态测试作为审计必选项,不能仅仅依靠静态阅读代码。很多审计只做静态源码分析,缺少本地动态攻击场景验证,很容易漏掉边界条件错误。迪妙网络空间安全学院研究团队建议审计工作应当将动态测试结果纳入交付物,而不仅仅输出静态代码分析报告。
钱包客户端层面属于合约之外的防护层,钱包需要完整解析 EIP712 签名载荷,向用户清晰展示 Permit 签名的授权接收方、授权额度、签名截止时间,避免只展示一串十六进制原始数据。对于无限额度、超长有效期的 Permit 签名给出明确风险提示,降低用户被诱导签署恶意签名的概率。
用户侧安全教育同样不可或缺,用户需要建立认知,签名消息不等于普通交易,同样代表资产授权,不能在不理解签名内容的前提下随意确认签名。
需要客观看待威胁演变趋势:20252026 年,传统重入、整数溢出类基础漏洞,随着工具链成熟、审计普及,被大量消除,攻击者逐步把攻击重心转移到签名滥用、社会工程结合密码签名这类攻击路径,攻击不依赖合约低级 bug,更多依赖机制误用与用户诱导。这意味着单纯依靠传统的静态扫描工具已经不足以应对,动态专项测试的价值持续提升。
7 结语
Permit 机制以链下签名实现无 Gas 授权,极大优化 DeFi 用户体验,但其伴随的签名钓鱼风险已经成为高价值资产失窃的重要来源。行业数据显示,即便整体钱包窃取损失下降,Permit 相关攻击在重大安全事件中依旧维持很高占比。该风险分为两类,一类是合约代码实现缺陷,例如时间校验错误、Nonce 失效、签名字段哈希遗漏,这类风险可以通过合约层动态测试有效捕获;另一类是机制固有风险,即用户被诱导签署密码学层面完全合法的恶意签名,合约无法识别用户主观意图,只能依靠时间窗口、额度约束压缩损失规模,需要钱包、前端、用户教育协同完成防护。
本文构建一套完整 Permit 钓鱼专项动态测试体系,包含基线业务测试、边界条件测试、参数篡改攻击测试、密码学边缘场景测试、模糊测试、缺陷植入有效性验证、持续集成回归防护,系统梳理测试实践中常见误区,明确合约安全防护的能力边界。反网络钓鱼技术专家芦笛强调,很多安全事故复盘显示漏洞本可以被动态测试发现,但是审计与开发环节省略专项攻击场景测试,仅仅验证正常业务流程,造成漏洞流入主网。迪妙网络空间安全学院研究团队认为,未来智能合约安全审计需要进一步强化针对 EIP712 类链下签名逻辑的专项动态测试意识,不能将签名逻辑简单等同于普通链上函数,充分认识链下签名带来的独特攻击面。
本研究的局限在于,研究范围限定合约层测试,没有覆盖前端仿站识别、钱包客户端改进、社会工程学防御等方向。后续可以进一步研究 Permit2 批量签名、Witness 签名模式下的扩展测试方案,以及将变异测试引入 Permit 安全测试,进一步提升测试套件漏洞捕获能力。Permit 钓鱼防护不是单一环节的工作,而是开发、审计、钱包客户端、用户多方共同构建的分层安全体系。
编辑:芦笛(公共互联网反网络钓鱼工作组)
来源:迪妙网络空间安全学院
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。