0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详谈两大智能合约签名验证漏洞分析

电子设计 来源:电子设计 作者:电子设计 2020-12-25 18:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

可重入(Reentrancy)或整数溢出漏洞,是大多数开发人员知道或者至少听说过的,关于智能合约当中容易出现的安全问题。另一方面,在考虑智能合约的安全性时,你可能不会立即想到针对密码签名实现的攻击方式。它们通常是与网络协议相关联的。例如,签名重放攻击(signature replay attacks),一个恶意用户可窃听包含有效签名的协议序列,并针对目标进行重放攻击,以期获得益处。

本文将解释智能合约处理DAPP生成签名时可能存在的两种类型的漏洞。我们将通过Diligence团队在今年早些时候完成的现实例子审计结果进行分析。此外,我们将讨论如何设计智能合约,以避免这类漏洞的出现。

协议层

签名是以太坊网络中的基础,发送至网络的每笔交易都必须具有有效的签名。下图显示了这种交易的一个例子。除了交易标准属性,例如 from、to、gas、value 或input在全局命名空间中可用,并且经常出现在智能合约代码中,字段v,r以及s共同组成了交易签名。

以太坊网络确保只有具有有效签名的交易可被纳入新的区块当中。这为交易提供了以下安全属性:

1.身份验证:以太坊节点使用签名来验证交易签名者是否具有与公共地址相关联的私钥。开发者因此可以信任这个msg.sender是真实的;

2.完整性:交易在签名后不会发生更改,否则签名就是无效的;

3.不可否认性:交易是由from字段中公共地址对应的私钥签名的,这是不可否认的,并且拥有私钥的签名方已经进行了任何状态更改。

合约层

协议层并不是签名发挥作用的唯一场地。签名也越来越多地被用于智能合约本身。随着gas价格的上涨,而扩容解决方案仍在进程当中,则避免链上(on-chain)交易便凸显出了越来越多的重要性。当谈到链外的交易时,签名也是非常有用的,EIP-191以及EIP-712,都是有关于如何处理智能合约中签名数据的通证标准。而后者旨在改善链外消息签名的可用性。那么,为什么它是有用的,以及它是如何节省链上交易的?

让我们来查看一个简单的例子。爱丽丝为鲍伯创建了一个命题,她将其编码成了一条消息。她还用自己的私钥创建了消息的签名,并通过协商好的通道发送给鲍伯。鲍伯可以验证爱丽丝是否签署了该消息,如果鲍伯认为该命题是合适的,那么他可以创建新的交易,将他自己的消息、爱丽丝的消息及签名共同纳入到一个智能合约当中。通过数据,这个智能合约可以证实:

1.鲍伯已签署了自己的信息(或者在这种情况下,交易会是更具体的)。而网络保证了身份验证、完整性以及不可否认性。

2.整个过程只需要一笔链上交易,其可提供明显更好的用户体验,同时可节省gas。需要注意的是,智能合约需要确保爱丽丝发送给鲍伯的消息,能够保持所有三个安全属性的完整性。

让我们分析现实世界中存在的两种签名验证漏洞,并探讨如何修复它们。

缺少针对签名重放攻击的保护(SWC-121)

第一个例子,是由Consensys的Diligence部门在审计去中心化新闻应用Civil时发现的一个漏洞例子,与此案例相关的系统的第一部分,被Civil称之为Newsroom(新闻编辑室),而内容编辑可以把自己的文章发布到这个Newsroom,他们还可以为自己的内存创作进行加密签名,以此证明内容实际上是由他们创造的。pushRevision() 函数对现有内容进行更新或修订。参数内容哈希、内容URI、时间戳以及签名,为内容创建新的修订。之后,verifiyRevisionSignature()函数会调用提议修订,以及最初创建第一个签名修订的内容作者。根据设计,新修订的签署者,只能是创建初始签名内容版本的作者。

verifiyRevisionSignature() 函数会根据DApp生成的内容哈希,以及Newsroom合约的地址,创建一个已签名的消息哈希。然后,调用recover()函数(来自OpenZeppelin 的ECRecovery库)。随后,调用ecrecover()函数,并验证作者是否真正签署了消息。已讨论过的两个函数代码是没有问题的,因为只有最初创建内容的作者才能为它创建新的版本,所以实际上它们不存在什么安全问题。

问题在于,合约是不会跟踪内容哈希的,因此,已提交的一个内容哈希及其用户签名,实际是有可能被提交多次的。而恶意的内容作者就可以利用这个漏洞,从其他作者那里获取有效的签名和内容哈希,并在他们不知情的情况下为他们创建新的有效修订。

Civil 已通过跟踪这些内容哈希,并拒绝已是先前修订部分的哈希,来解决这个问题。

缺乏正确的签名验证(SWC-122)

在上一次审计去中心化协议0x的过程当中,Diligence发现了这种漏洞类型的一个实例。以下解释,是这次审计报告当中3-2节内容中描述的问题总结。0x协议具有不同签名类型的各种签名验证器,包括Web3以及EIP712。另一个存在的验证器称为SignatureType.Caller,如果order.makerAddress等于msg.sender(order.makerAddress是创建order的用户),则允许order有效。如果设置了SignatureType.Caller,则没有实际签名验证是由交易合约执行的。现在还不清楚为什么这会导致漏洞,因为已经证实msg.sender以及order的创建者是相同的,至少从理论上看是这样的。

除了交易合约之外,0x系统还有另一部分称为Forwarder的合约,有了这个合约,用户可以简单地发送以太币,以及他们想要填写的 order,而这个Forwarder合约会在同一笔交易中执行所有的order;

想要用以太币交易其他通证的用户,可以向其他用户发送order,而Forwarder合约将代表他们进行交易。这个交易合约会验证每个order,以确保order签名的有效性,并确保其他用户已实际签署了order。让我们再次查看上面的图,并重新评估以下假设:如果order.makerAddress等于msg.sender,则我们不需要在这个交易合约当中进行适当的签名验证,因为发送交易的用户也是order的创建者。如果用户直接向交易合约发送order,则该假设成立。但是,如果我们通过Forwarder合约发送这个order,将order.makerAddress设置为 Forwarder合约的地址,并使用SignatureType.Caller签名验证器呢?

在交易执行处理结算个别order的过程中,Forwarder合约会调用这个交易合约。这个交易合约会验证这个order.makerAddress中的地址,就是msg.sender,在这种情况下,可以将其设置为Forwarder地址。由于合约在交易双方之间起到了中介作用,所以order.takerAddress通常被设置为Forwarder地址。因此,恶意用户可以使用Forwarder处理order,其中合约会与其本身进行交易,因为它既是接受者又是制造者。这是因为以下的原因:

1.在 Forwarder当中,没有逻辑可以阻止合约成为一个 order的制造者;

2.用于transferFrom((address _from, address _to, uint256 _value) )的ERC20规范,不会阻止用户进行“空传输”。而 _from和_to可以是相同的地址;

3.这个交易合约允许基于以下事实来处理order:如果用户实际上已经签署了order,则msg.sender没有发送order。

在交易合约解决了order之后,这个Forwarder合约将得到完全相同的 balance,并且Forwarder合约将takerAmount转移给自己,而把makerAmount转移给一个恶意用户,而恶意用户可以使用这个场景,来创建“恶意order”,以便用1 Wei(以太币最低单位)的价格从 Forwarder合约中换取到所有的ZRX通证;

综上所述,假设消息的发送者也是其创建者,而不去验证其签名,这可能是不安全的,尤其是在通过代理转发交易的情况下。在合约处理消息签名的任何时候,都需要执行正确的签名恢复及验证。0x通过删除了 SignatureType.Caller签名验证器修复了这个问题。

总结

链外消息签名的方式,对于节省 gas以及改善用户体验方面,的确是一个好的方法。但从安全性的角度来看,这无疑增加了复杂性,并使得智能合约在处理已签名消息的情况下成为了一个更具挑战性的任务。如果你对针对基于签名的攻击,或其它智能合约漏洞示例感兴趣,你可以查看SWC-registry在Github的内容,里面拥有大量易受攻击的合约示例,此外还有关于智能合约弱点分类(SWC)计划的更多信息,我们一直在与社会各界合作。如果你想了解更多关于SWC的信息,或者有其他好的想法,那么欢迎你在ethereum/EIPs以及Ethereum Magicians里面参加关于EIP-1470的讨论;

也欢迎大家随时浏览我们的Discord,告诉我们你希望通过安全分析工具检测到哪些漏洞… 但,请不要说出全部的内容。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 漏洞分析
    +关注

    关注

    0

    文章

    3

    浏览量

    6361
  • 智能计算
    +关注

    关注

    0

    文章

    195

    浏览量

    17033
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    伴芯科技重磅发布DVcrew与PDcrew两大创新产品,以AI智能体重构EDA

    重磅推出款AI智能体新产品——DVcrew与PDcrew。这款产品深度契合伴芯科技的核心使命:以AI智能体(AI Agents)重构电子设计自动化(EDA),最终实现芯片自主设计闭
    的头像 发表于 11-21 09:35 1077次阅读
    伴芯科技重磅发布DVcrew与PDcrew<b class='flag-5'>两大</b>创新产品,以AI<b class='flag-5'>智能</b>体重构EDA

    CW32F030C8T6数字签名实战

    或者 CPU 读取。数字签名相关信息在出厂时编程,用户固件或外部设备可通过读取数字签名来对 芯片的合法性进行验证。 1.2 产品唯一身份标识(UID) 寄存器(80bit) UID寄存器存储了芯片
    发表于 11-19 08:03

    CW32F030C8T6数字签名的实战指南

    或者 CPU 读取。数字签名相关信息在出厂时编程,用户固件或外部设备可通过读取数字签名来对 芯片的合法性进行验证。 1.2 产品唯一身份标识(UID) 寄存器(80bit) UID寄存器存储了芯片
    发表于 11-18 06:35

    华宝新能美学曲面光伏瓦亮相两大行业盛会

    近日,便携光储全球领导者和首家全场景家庭绿电企业华宝新能携美学曲面光伏瓦,同步亮相上海CADE建筑设计博览会与北京住博会两大行业盛会,美学曲面光伏瓦凭借“能源美学 + 技术突破”的双重创新赢得众多关注,成为两大展会绿色能源展区的焦点,为光伏建筑一体化(BIPV)行业发展注
    的头像 发表于 11-17 14:36 163次阅读

    迅镭激光多款核心产品亮相两大制造业盛会

    2025年9月至10月,迅镭激光以强劲姿态登陆国际舞台,连续亮相美国FABTECH 2025与土耳其MAKTEKKONYA 2025两大制造业盛会,迅镭激光携旗下多款核心产品强势亮相,以“中国智造”的硬核实力,向来自美洲、欧洲、欧亚、中东及北非市场的客户展示激光智能制造的
    的头像 发表于 10-16 10:36 394次阅读

    小身材,大智慧:深入解析是德科技N1000A CXA-m信号分析

    小身材,大智慧:深入解析是德科技N1000A CXA-m信号分析仪 在射频测试与测量领域,工程师们常常面临一个难选择:是追求顶级性能而承担高昂的成本和复杂性,还是为了预算和易用性而妥协性能?是德
    的头像 发表于 09-28 15:30 517次阅读
    小身材,<b class='flag-5'>大智</b>慧:深入解析是德科技N1000A CXA-m信号<b class='flag-5'>分析</b>仪

    领麦微红外测温传感器:赋能微波炉智能化升级的两大核心应用

    控温与红外测温赋能智能菜谱功能两大维度,解析其在微波炉中的创新应用价值。一、非接触测温:突破传统,实现食物温度动态监测传统微波炉多依赖预设功率与时间完成加热,但不同
    的头像 发表于 09-04 14:18 459次阅读
    领麦微红外测温传感器:赋能微波炉<b class='flag-5'>智能</b>化升级的<b class='flag-5'>两大</b>核心应用

    签名证书工具cfssl详解

    CFSSL(CloudFlare's PKI and TLS toolkit)由 CloudFlare 用go语言开发的一个开源工具,用于证书签名验证和管理。
    的头像 发表于 06-11 16:30 533次阅读
    自<b class='flag-5'>签名</b>证书工具cfssl详解

    官方实锤,微软远程桌面爆高危漏洞,企业数据安全告急!

    近日,微软发布安全通告,其Windows远程桌面网关(RD)服务存在两大高危漏洞:CVE-2025-26677CVE-2025-26677是远程桌面网关服务DoS漏洞,允许未经授权的攻击者触发
    的头像 发表于 05-16 17:35 756次阅读
    官方实锤,微软远程桌面爆高危<b class='flag-5'>漏洞</b>,企业数据安全告急!

    电装发布环境与安心两大领域的战略成果

    近日,电装于「第二十一届上海国际汽车工业展览会」新闻发布会上,围绕“环境”与“安心”两大领域,展示在电动化、智能化与可持续发展领域的创新成果,彰显长期深耕中国市场、持续推动可持续出行的战略承诺与行动。
    的头像 发表于 04-27 11:11 771次阅读

    使用mbedtls进行ECDSA签名验证失败的原因?

    我正在尝试使用 mbedtls 验证 ECDSA 签名,但不断MBEDTLS_ERR_ECP_VERIFY_FAILED。我已经验证了所有组件看起来都正确,但无法弄清楚验证失败的原因
    发表于 04-14 06:57

    STM32F1 xcube cryptolib ECDSA计算出来的摘要值和外部验证工具计算出来的签名值对不上怎么解决?

    STMF1 xcube cryptolib ECDSA签名,采用CMOX_ECC_CURVE_SECP256R1曲线、SHA256摘要算法,计算出来的摘要值和外部验证工具计算出来的签名值对不上,外部
    发表于 03-07 09:24

    亚成微电子斩获两大荣誉

    新春伊始,亚成微捷报频传,接连斩获两大里程碑式荣誉——成功通过IATF16949:2016汽车行业质量管理体系认证,并荣获“陕西省工业设计中心”荣誉称号!
    的头像 发表于 02-12 13:12 802次阅读

    格陆博科技荣登两大权威机构榜单

    近日,格陆博科技凭借其卓越的技术实力和市场表现力,荣登《2024年度中国智能电动汽车核心零部件100强》和《2024创业邦100未来独角兽》两大权威机构榜单。
    的头像 发表于 12-26 09:18 1446次阅读

    东软睿驰荣获高工智能汽车金球奖两大奖项

    近日,2024年(第八届)高工智能汽车年会暨年度金球奖评选颁奖典礼在上海举办,东软睿驰凭借NeuSAR OS与L2+城市车道领航控制器X-Box 5.0产品荣获2024年度「金球奖」两大奖项。东软睿驰品牌市场企划中心总监向文玲受邀出席颁奖典礼并发表主题演讲。
    的头像 发表于 12-16 16:29 992次阅读