7*24快訊智能合約漏...

智能合約漏洞搜尋的7 大策略

特別感謝 阿德里安·赫特曼, 亞歷杭德羅·穆尼奧斯-麥當勞, 伊万·貝納維德斯, 和 萊昂太空行者.

智能合約漏洞搜尋的7 大策略

尋找智能合約漏洞可能是一項高薪的可笑工作,它也是保護生態系統免受黑客攻擊的一個組成部分。我最近有幸 採訪開發者 誰發現了一個價值70 億美元的漏洞——並且 支付了220 萬美元 報告它。

在此博客中,我們將介紹此開發人員發現的錯誤以及它如何有可能損害7b 美元的價值,然後再提供一些有助於您發現錯誤的策略和工具。

讓我們潛入水中。

多邊形智能合約錯誤示例

積聚

2020 年5 月31 日, Matic 區塊鏈上線 (Matic 後來更名為 多邊形)。 Polygon 是一個與EVM 兼容的區塊鏈,以其低gas 費用和短出塊時間而聞名。該連鎖店最近開始探索 zk-rollup 技術.

如果你看看 塊 0 Polygon 是區塊鏈的絕對第一個區塊,也稱為“創世”區塊,您將看到10 筆交易。其中一項交易創建了一個名為MRC20 的合約。

Polygon 創世區塊的屏幕截圖。
多邊形創世區塊。

這份合同是什麼?

當我們發送一個原生區塊鏈代幣時,我們必須花費gas 才能這樣做。因此,Polygon 團隊部署了一份合約,允許您簽署交易以向某人發送ETH,而其他人則可以為此交易支付gas 費用。這種能力被稱為“元交易”,隨著 EIP-712.

您可以看到,該合約獲得了近100 億個MATIC 代幣,以幫助促進這些無氣體交易。然而,這個聰明的合約包含一個可能被利用來耗盡整個餘額的漏洞!

2021年12月3日故事主人公,偽匿名開發者 萊昂太空行者提交報告給 免疫缺陷賞金 程序列出了這個確切功能的細節。第二個英雄,我們稱之為Whitehat2,也在一天后報告了這個漏洞。

在鏈最終分叉、回滾和修復之前,大約有800,000 個MATIC 代幣被盜 2021 年12 月5 日。

這給我們留下了更多問題:漏洞是什麼?怎麼這麼久都沒被發現?它是如何被發現的?

漏洞利用

以下是促進這些無氣體交易的功能。

   function transferWithSig(
       bytes calldata sig,
       uint256 amount,
       bytes32 data,
       uint256 expiration,
       address to
   ) external returns (address from) {
       require(amount > 0);
       require(
           expiration == 0 || block.number <= expiration,
           "Signature is expired"
       );

       bytes32 dataHash = getTokenTransferOrderHash(
           msg.sender,
           amount,
           data,
           expiration
       );
       require(disabledHashes[dataHash] == false, "Sig deactivated");
       disabledHashes[dataHash] = true;

       from = ecrecovery(dataHash, sig);

       _transferFrom(from, address(uint160(to)), amount);
   }

乍一看,這似乎是無害的:它需要用戶的簽名、有多少代幣以及他們想將它們發送給誰,以及任何進一步的數據,以及交易的到期日期。

它運行一些要求,獲取數據散列以發送元事務,確保數據散列未被使用,然後執行此操作 ecrecovery 功能。

這個函數本質上是一個包裝器 Solidity ecrecover 功能.

Solidity ecrecover 函數包裝器的屏幕截圖。
Solidity ecrecover 函數包裝器。

此功能是我們如何驗證簽名交易的來源。你會注意到,即使在Solidity 文檔中,它也說它將“在錯誤時返回零”。這 ecrecovery 函數複製了這個,如果它有問題,它將返回0。正如許多開發人員所知,這可能很可怕。如果它在錯誤時返回零,這意味著我們應該檢查以確保返回的地址不為零,對嗎?

這是實際的代碼:

ecrecovery 截圖

以下是可能應該存在的內容:

ecrecovery 截圖

所以我們不對地址進行檢查以確保它沒有導致錯誤。不是問題。我們的最後一行代碼 transferWithSig 函數進行實際傳輸,我們肯定會在那裡進行某種檢查,對吧?

function _transfer(address sender, address recipient, uint256 amount)
   internal
{
   require(recipient != address(this), "can't send to MRC20");
   address(uint160(recipient)).transfer(amount); // It just sends the money!
   emit Transfer(sender, recipient, amount);
}

_transferFrom 函數剛剛調用了我們的 _transfer 功能,如上圖。你會注意到它沒有檢查以確保 from 地址有足夠的錢。

這意味著有人可以發送無效簽名,這將導致從ecrecovery 返回零地址,但MRC20 合約仍將發送 to 處理一筆錢。這就是9,999,993,000 MATIC 可能被耗盡的方式,因為MRC20 合約直接從自己發送資金!

檢查以確保 from address 有足夠的錢用於此已簽名的交易將阻止此問題。

智能合約漏洞如何躲避發現這麼久?

令我感到奇怪的是,在潛伏了將近一年半的漏洞之後,幾天之內就被另一個白帽黑客Leon 發現了。

好像很腥但Immunefi 團隊告訴我,這種情況經常發生。一些漏洞利用可能會因一篇文章、文章或 挑戰 然後人們開始尋找這個漏洞,導致幾個人同時發現它。

但更有可能的是,polygon 大約在這個時候驗證了Polygonscan 上的合同——所以那時人們 真的 開始看它。

也許故事還有更多,但也許沒有。

無論如何,讓我們把這個bug 作為一個可教的時刻,看看Leon 和其他bug 獵人用來發現bug 的一些技巧,幫助保護Web3 生態系統。

七大策略

現在,我們將學習Leon 和其他漏洞獵人用來發現這些漏洞並獲得漏洞賞金的技能。此提示列表假設您已經了解智能合約的基礎知識,所以是的, 學習Solidity 是先決條件.

使用這些超能力 道德黑客請記住 負責任地披露 您發現的任何漏洞。

發現漏洞的許多工作都來自於查看代碼和運行工具,例如 滑行. 對於這筆220 萬美元的支出,Leon 說他能夠通過逐行查看智能合約代碼來找到漏洞,所以請記住,查找漏洞通常是一項巨大的手動操作!

除了下面的實用技巧之外,Leon 最大的收穫是讓智能合約漏洞獵手“找到你的優勢”,但他的意思是什麼?通常,這意味著要找到使您與其他黑客不同的東西。作為一個社區,我們需要覆蓋智能合約空間的每一個角落,所以找到一個你特別擅長和擅長的部分。

以下是幫助您找到優勢的七種策略和技巧,讓您成為成功的智能合約漏洞獵手。

1. 找項目,找Bug

找到錯誤的第一種方法是了解協議的每一寸工作原理。這是每個智能合約漏洞獵人需要學習的首要技能之一:端到端理解協議的能力。

瀏覽文檔,嘗試自己重新實現協議,並在區塊瀏覽器上通過該協議查看交易。

Leon 說這種策略適用於其他獵人,但不適用於他。他專注於接下來的三個,但對於每個漏洞獵人來說,能夠做到這一點很重要。

2. 查找Bug 並蒐索項目

尋找bug 的一種更簡單的方法是找到一個鮮為人知的bug,並嘗試查看哪些協議實現了它。

這個策略需要大量研究,因為有很多人在研究 向公眾公開錯誤.

你首先需要了解所有基本的智能合約漏洞利用,然後是它們的高級版本。您需要了解最佳實踐,並查看是否有未遵循的協議。

一旦你發現一個你認為很多項目可能沒有得到保護的智能合約錯誤,就開始尋找那個錯誤。真正熟悉這個新錯誤以及如何找到它。並且一定要寫博客或某種帖子來幫助其他遇到此錯誤的智能合約開發人員保護自己。

3. 要快

希望漏洞獵人查看其智能合約的項目需要註冊漏洞賞金計劃,例如 免疫. 你會想成為第一批找到新賞金的開發者之一。如果您在其他獵人之前開始查看合同,您將比其他獵人有更多時間來發現錯誤。

有幾種方法可以加快速度——Leon 能夠在其他人之前發現智能合約漏洞的方法之一是通過為 免疫更新Discord 頻道. 每當有新項目進來或項目更新時,他都會收到通知。像這樣的工具可以幫助您在其他人之前深入研究代碼。

4. 有創意

Leon 獲得優勢的另一種方式是橫穿 社區論壇,並發現他們正在考慮提交錯誤。然後,他甚至在賞金獲得批准之前就開始查看智能合約。這給了他比其他開發人員更多的時間來查看合同,因為他們會等待提交錯誤賞金。

5. 了解你的工具

漏洞獵手使用VSCode Solidity 可視化開發者擴展、Hardhat、Foundry、Brownie、Dune、Etherscan 等工具,以及許多其他工具。

一個典型的錯誤搜尋策略可能是加載VSCode,使用Solidity 可視化擴展將代碼添加到VSCode,然後逐行查找常見錯誤或不良最佳實踐。

在找到弱點之後,設置一個測試環境來對合約進行測試是一個很好的下一步。您通常可以重用協議開發人員最初使用的大量測試。

6.不要害怕被審計的項目

這裡不多說。審計公司會犯錯誤。 Leon 發現的許多漏洞項目都經過了頂級公司的審計。

使用我們在本博客中討論的技能可以幫助您找到這些問題!

7. 行業特定知識

尋找優勢的最大優勢之一是專注於特定的利基市場。如果您非常了解某個領域,您將擁有了解所有功能如何相互交互的優勢。如果你是一位了不起的智能合約漏洞專家,但對DeFi 一無所知,那麼很難在DeFi 合約中發現漏洞。例如,許多開發人員了解代碼,但不了解金融原語。

你可以非常擅長理解去中心化交易所、借貸協議,或者僅僅是NFT!

如果您可以成為Web3 中的安全大師和某個垂直領域的大師,那麼您將處於有利位置,可以在其他所有尋找錯誤的人中占得先機。

概括

我希望這篇文章對您的智能合約漏洞搜尋之旅有用。如果您想在編寫智能合約時了解有關安全性的更多信息,請務必查看 十大DeFi 安全最佳實踐.

而且,與往常一樣,我希望看到你們在那裡建立並保持生態系統更安全。

鏈接

MRC20 合約。

免疫文章。

更改為Polygon 合約.

以前的多邊形合同。

排泄挑戰。

本文中表達的觀點僅代表作者個人觀點,不代表Chainlink 基金會或Chainlink Labs 的觀點和信念。



Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...