在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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,則沒有實際簽名驗證是由交易合約執行的?,F在還不清楚為什么這會導致漏洞,因為已經證實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

    瀏覽量

    6302
  • 智能計算
    +關注

    關注

    0

    文章

    190

    瀏覽量

    16684
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    簽名證書工具cfssl詳解

    CFSSL(CloudFlare's PKI and TLS toolkit)由 CloudFlare 用go語言開發的一個開源工具,用于證書簽名驗證和管理。
    的頭像 發表于 06-11 16:30 ?126次閱讀
    自<b class='flag-5'>簽名</b>證書工具cfssl詳解

    官方實錘,微軟遠程桌面爆高危漏洞,企業數據安全告急!

    近日,微軟發布安全通告,其Windows遠程桌面網關(RD)服務存在兩大高危漏洞:CVE-2025-26677CVE-2025-26677是遠程桌面網關服務DoS漏洞,允許未經授權的攻擊者觸發
    的頭像 發表于 05-16 17:35 ?235次閱讀
    官方實錘,微軟遠程桌面爆高危<b class='flag-5'>漏洞</b>,企業數據安全告急!

    電裝發布環境與安心兩大領域的戰略成果

    近日,電裝于「第二十一屆上海國際汽車工業展覽會」新聞發布會上,圍繞“環境”與“安心”兩大領域,展示在電動化、智能化與可持續發展領域的創新成果,彰顯長期深耕中國市場、持續推動可持續出行的戰略承諾與行動。
    的頭像 發表于 04-27 11:11 ?354次閱讀

    使用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

    東軟睿馳榮獲高工智能汽車金球獎兩大獎項

    近日,2024年(第八屆)高工智能汽車年會暨年度金球獎評選頒獎典禮在上海舉辦,東軟睿馳憑借NeuSAR OS與L2+城市車道領航控制器X-Box 5.0產品榮獲2024年度「金球獎」兩大獎項。東軟睿馳品牌市場企劃中心總監向文玲受邀出席頒獎典禮并發表主題演講。
    的頭像 發表于 12-16 16:29 ?650次閱讀

    常見的漏洞分享

    下來,使用nodejs反編譯 reverse-sourcemap --output-dir . 2.11aef028.chunk.js.map #DNS域傳送漏洞: 域傳送是DNS備份服務器從主服務器拷貝數據、若DNS服務器配置不當,未驗證身份,導致攻擊者可以獲取某個域所
    的頭像 發表于 11-21 15:39 ?632次閱讀
    常見的<b class='flag-5'>漏洞</b>分享

    華為發布兩大關鍵創新技術方向

    發展趨勢,深入洞察和分析應用對網絡連接要求的變化,探索移動AI基礎網的關鍵特征及其目標網演進方向。同時,面向移動AI基礎網,華為發布了兩大關鍵創新技術方向。
    的頭像 發表于 11-06 17:26 ?1305次閱讀

    物聯網系統的安全漏洞分析

    隨著物聯網技術的快速發展,越來越多的設備被連接到互聯網上,從智能家居、智能城市到工業自動化,物聯網的應用范圍不斷擴大。然而,隨著物聯網設備的增多,安全問題也日益凸顯。 一、物聯網系統安全漏洞的成因
    的頭像 發表于 10-29 13:37 ?1124次閱讀

    SoC的數字簽名加解密過程

    SoC的數字簽名驗證是指在系統啟動或固件更新等關鍵時刻,對加載的固件或軟件進行數字簽名驗證過程。通過驗證數字
    的頭像 發表于 10-21 14:52 ?759次閱讀

    如何使用 IOTA?分析安全漏洞的連接嘗試

    在當今數字化世界中,網絡安全變得至關重要。本文將探討如何利用流量數據分析工具來發現和阻止安全漏洞和惡意連接。通過分析 IOTA 流量,您可以了解如何識別不當行為,并采取適當的措施來保護您的網絡和數據。我們將深入研究IOTA的工作
    的頭像 發表于 09-29 10:19 ?467次閱讀
    如何使用 IOTA?<b class='flag-5'>分析</b>安全<b class='flag-5'>漏洞</b>的連接嘗試

    NFC協議分析儀的技術原理和應用場景

    檢查門禁系統是否存在漏洞或安全隱患。 智能標簽識別:在智能標簽識別領域,NFC協議分析儀可以用于讀取和分析
    發表于 09-25 14:45

    漏洞掃描一般采用的技術是什么

    。 Web應用掃描 :專門針對Web應用程序的掃描,檢查SQL注入、跨站腳本(XSS)等常見的Web漏洞。 被動掃描 : 流量分析分析網絡流量,尋找異常模式或已知的攻擊模式。 主動掃描 : 端口掃描 :發送數據包到目標系統的
    的頭像 發表于 09-25 10:27 ?798次閱讀

    普強成功榮登兩大榜單

    普強憑借其深厚的技術積累和創新能力,不斷推出高性能、高質量的產品和解決方案,成功榮登兩大榜單,這是對普強卓越的技術實力和應用層面的肯定。
    的頭像 發表于 09-13 10:34 ?1535次閱讀

    esp32c3安全啟動文檔里的簽名,使用與計算的簽名和使用idf.py簽名有什么不同?

    esp32c3安全啟動文檔里的簽名,使用與計算的簽名和使用idf.py簽名有什么不同?預簽名用的是--pub-key,普通的簽名用的是--k
    發表于 07-23 08:15
    主站蜘蛛池模板: 精品一区二区三区免费毛片爱 | 中国又粗又大又爽的毛片 | 天堂网2014av| 亚洲www视频| 乱e伦有声小说 | 波多野结衣三个女人蕾丝边 | 国产一级毛片国语版 | 欧美一区二区高清 | 四虎电影免费观看网站 | 欧美在线伊人 | 四虎精品成在线播放 | 国产视频首页 | 夜间免费小视频 | 国产在线精品香蕉综合网一区 | 中韩日欧美电影免费看 | 制服丝袜中文字幕第一页 | 亚洲bbb | 日日爽夜夜爽 | 国产免费久久 | 性色成人网 | 午夜影院h | 性欧美大战久久久久久久久 | 久久久久久综合 | 9久久99久久久精品齐齐综合色圆 | 国产高清一区二区三区 | 夜夜爽毛片 | 欧美成人区| 欧美日韩在线成人免费 | 午夜精品久视频在线观看 | freee性欧美| 欧美成人免费高清网站 | 欧美一级片在线视频 | 奇米888在线看奇米999 | 午夜精品久久久久蜜桃 | 国产伦一区二区三区免费 | 大尺度视频在线 | 天天干天天干天天干 | 一区二区三区视频网站 | 狠狠干亚洲色图 | 四虎在线最新地址公告 | 免费观看黄a一级视频 |