智慧合約檢測工具Mythril掃描合約教學以及如何安裝到docker

閱讀時間約 10 分鐘
Mythril 是可以對Solidity 程式碼及EVM 字節碼的安全分析工具,使用符號執行等方式檢測合約,可以幫助開發和安全人員發現合約中潛在的漏洞和弱點。
Mythril是由ConsenSys Diligence所開發,檢測為乙太坊、Hedera、Quorum、Vechain、Roostock、Tron 和其他與 EVM 兼容的區塊鏈構建的智慧合約中的安全漏洞,目前為免費的開源工具,可以在GitHub找到相關的原始碼。
Mythril

安裝方式:

docker

docker pull mythril/myth

pip

pip3 install mythril
其他安裝方式可以查看文件
使用docker 運行mythril並分析本地合約的方式:
docker run -v $(pwd): (path) mythril/myth analyze /(path)/(contract name).sol
這邊提供一個有重入漏洞的合約範例
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
contract EtherStore {
  mapping(address => uint) public balances;
  function deposit() public payable {
  balances[msg.sender] += msg.value;
  }  
function withdraw() public {
  uint bal = balances[msg.sender];
  require(bal > 0);
  (bool sent, ) = msg.sender.call{value: bal}("");
  require(sent, "Failed to send Ether");
  balances[msg.sender] = 0;
  }
// Helper function to check the balance of this contract
function getBalance() public view returns (uint) {
  return address(this).balance;
  }
}
使用docker運行Mythril分析合約之畫面
完整掃描結果如下:
==== External Call To User-Supplied Address ====
SWC ID: 107
Severity: Low
Contract: EtherStore
Function name: withdraw()
PC address: 368
Estimated Gas Usage: 7278 - 62222
A call to a user-supplied address is executed.
An external message call to an address specified by the caller is executed. Note that the callee account might contain arbitrary code and could re-enter any function within this contract. Reentering the contract in an intermediate state may lead to unexpected behaviour. Make sure that no state modifications are executed after this call and/or reentrancy guards are in place.
--------------------
In file: /Downloads/reentrancy.sol:42
msg.sender.call{value: bal}("")
--------------------
Initial State:
Account: [CREATOR], balance: 0x21000537b4, nonce:0, storage:{}
Account: [ATTACKER], balance: 0x20200000000000000, nonce:0, storage:{}
Transaction Sequence:
Caller: [CREATOR], calldata: , value: 0x0
Caller: [ATTACKER], function: deposit(), txdata: 0xd0e30db0, value: 0x1
Caller: [ATTACKER], function: withdraw(), txdata: 0x3ccfd60b, value: 0x0
==== State access after external call ====
SWC ID: 107
Severity: Medium
Contract: EtherStore
Function name: withdraw()
PC address: 556
Estimated Gas Usage: 7278 - 62222
Write to persistent state following external call
The contract account state is accessed after an external call to a user defined address. To prevent reentrancy issues, consider accessing the state only before the call, especially if the callee is untrusted. Alternatively, a reentrancy lock can be used to prevent untrusted callees from re-entering the contract in an intermediate state.
--------------------
In file: /Downloads/reentrancy.sol:45
balances[msg.sender] = 0
--------------------
Initial State:
Account: [CREATOR], balance: 0x21200082d2d9, nonce:0, storage:{}
Account: [ATTACKER], balance: 0x4801000000228c000, nonce:0, storage:{}
Transaction Sequence:
Caller: [CREATOR], calldata: , value: 0x0
Caller: [ATTACKER], function: deposit(), txdata: 0xd0e30db0, value: 0x1
Caller: [ATTACKER], function: withdraw(), txdata: 0x3ccfd60b, value: 0x0

掃描鏈上合約:

mythril可以藉由設定rpc掃描鏈上的智慧合約。

掃描主網(mainnet)合約

Mythril 默認會嘗試查詢infura,因此需要前往infura註冊帳號。
Step 1 : create new api key
create new api key
Step 2 : manage key
manage key
Step 3 :  api key
api key
docker run --rm mythril/myth analyze -a [contract address] --rpc infura-mainnet https://mainnet.infura.io/v3/0df6422189fd41f7bf22587cb3d9bda2 --rpctls True --infura-id [yourApiKey]

掃描BSC(Binance Smart Chain)合約

docker run --rm mythril/myth analyze -a [contract address] --rpc bsc-dataseed1.binance.org:443 --rpctls True --infura-id [yourApiKey]

掃描本地鏈上的合約 (以下以Ganache舉例)

在docker中使用時,與文件有些許不同,需要使用以下指令。
Step 1 : 下載Ganache並在Remix上設定環境
選擇Ganache Provider
Step 2 : 發布合約後執行以下指令
docker run --rm mythril/myth analyze -a [contract address] --rpc host.docker.internal:[portNumber]

輸出格式

Mythril預設將掃描結果呈現在終端機,可以使用 -o 修改輸出格式。
輸出的檔案格式為text、markdown、json和jsonv2。

結論

Mythril旨在發現常見漏洞,並無法精確發現應用程序業務邏輯中的問題,自動化工具有助於檢查常見的 Solidity 漏洞或缺少​​的智慧合約最佳實踐的案例,檢測工具容易受到誤報的影響,需要藉由手動驗證進行協助。
作者Alice目前為區塊鏈安全從業人員,將來也會持續在Vocus以及medium上分享相關的研究,如果喜歡我的文章歡迎追蹤我的帳號喔!
另外,我已經加入由趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件
> 追蹤《區塊鏈生存守則》學習如何在區塊鏈的世界保護自己
> 關注防詐達人獲得其他最新詐騙情報
28會員
176內容數
我們整理了web3相關的熱門資安問題,包含加密貨幣投資詐騙、盜版NFT、空投釣魚和區塊鏈重大資安事件懶人包等等,並提供最完整的辨識方法教學,讓大家從0到1學習如何保護自己
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
89
閱讀心得:展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
68
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
2023-04-27
39
智慧和溫暖的老年女性 A wise and warm elderly womanJane stood by her front porch, her glasses reflecting the gentle afternoon sun, a soft smile playing on her lips.
Thumbnail
2024-06-01
3
詩歌智慧書|約伯記CH03:為何有光賜給我呢?受患難的人、為何有光賜給他呢.心中愁苦的人、為何有生命賜給他呢。~~~約伯3:10
Thumbnail
2023-12-14
16
【AI工具分享】 合約智慧生成工具「Draft by Robin AI」Draft 是一款由Robin AI 開發的合約智慧產生工具,商業團隊可以在幾分鐘內利用已批准的範本建立合約。這款應用程式內建了審批工作流程,使得法律團隊不再需要花費時間來建立常規文件,但仍可以透過內建的審批流程保持控制和監督。
Thumbnail
2023-10-17
1
禪心生活語錄-智慧和靈感分享禪心生活語錄感謝您長久以來的支持和關注。這裡分享著豐富的智慧和靈感的內容,幫助您在忙碌的生活中找到片刻寧靜。如果您對我們的內容感興趣,可以考慮訂閱或贊助支持我們,以持續收到新的語錄。
Thumbnail
2023-09-13
6
AI和遊戲:背後的智慧和娛樂遊戲一直是娛樂的一個重要組成部分,而現在,人工智能(AI)和機器學習正為遊戲世界帶來全新的維度。本文將深入探討AI在遊戲中的應用,以及它如何為玩家提供更智能、更具挑戰性的體驗。 遊戲中的機器學習和人工智能 1. 智能敵人: AI已經能夠模擬智能敵人的行為,使遊戲更具挑戰性。敵人能夠學習玩家的策略
Thumbnail
2023-09-11
2
何謂智慧EQ+財商+智商=智慧
2023-03-12
0
「勇氣、智慧和奉獻」故事中的主人公艾文是一個看似廢材的人,但他憑藉著勇氣和智慧,在戰爭中幫助國家取得勝利,並且在戰後帶領村莊復興。他不斷奉獻自己的時間和精力,為人民做出貢獻。這個故事告訴我們,只要有勇氣和智慧,並且願意奉獻,每一個人都能夠成就偉大的事業。
2023-02-27
3
放是一種本能和習慣,收是一種智慧和學習有一位碩士生的朋友 (Andy),明年九月即將加入此時此刻正在實習的公司。這是非常好的事情,在大缺工的時代,Andy的實習對勞資雙方絕對是大加分的行為。怎麼說呢? 實習對Andy和公司的好處 放是一種本能和習慣,收是一種智慧和學習 職涯是一場馬拉松,跑得久又跑得快的人才會贏
Thumbnail
2022-03-16
7
人工智慧搭上區塊鏈:智能型合約添「智慧」區塊鏈(Blockchain)是公鏈底層技術,透過共識協定(開源原始碼作業系統),以及預設的程序編寫程式而成的智能型合約。把計算中最吸引人的人工智慧(AI)的這一塊放到區塊鏈上,將智能型合約的演算能力不但提升,而且更有智慧。
Thumbnail
2022-01-31
3
透過一個人的思維方式,可以看得到一個人的教養、能力和智慧︱小K生活之路透過一個人的思維方式,便已經可以看得到一個人的教養、能力和智慧。假如自己的思維方式只有空洞或偏執的話,最終的結果就是不切實際,因此思維是講究實用和合乎眾議,不要讓自己的思維偏離軌道,否則很容易會作出錯誤選擇,誤入歧途。 另外有些人,他們對於情感非常執著,為甚麽呢?因為人類的感情最容易出現自私、執著
Thumbnail
迎新活動「方格新手村」:新格友註冊加入方格子,知名日料吃到飽餐券送給你! 👉 還不是 vocus 的會員嗎?點此註冊,參與新手村活動 👈 近期站上也出現了不少新格友,為了歡迎各位的加入,「方格新手村」隨之登場! 即日起,只要是新註冊帳號於活動期間內發佈 3 則文章,就有機會抽獎獲得知名日料吃到飽餐券。原格友也可以一起同樂,我們準備了小任
Thumbnail
2024-06-21
89
閱讀心得:展現自我的生活態度|成熟大人的說話課我們每天都在說話,但說出的話合適嗎? Sunny最近讀完一本有關溝通的書籍。 這是由世紀奧美公關的創辦人「丁菱娟」所寫的書,書的全名《丁菱娟的成熟大人說話課:如何說,才能得體又不傷人?反擊時,如何堅定又有力量?任何情境都可用的38個溝通之道》。 會找這本書來看,主要是因為Sunny 近期發
Thumbnail
2024-07-10
68
防曬產品係數測試報告彙整(2024年)從2014年起,自己對於市售防曬產品的效能產生了濃厚的興趣。因為當時候發現不少產品的防曬係數其實標示是有問題的,像是原本應該是人體測試的SPF與PA數值,實際上沒有做,只用機器測試的數據來充當,但這兩者卻有很大的差異。像是防曬係數其實有強度、廣度與平均度三個面向需要一起判斷,但多數廠商並沒有完整標示
Thumbnail
2023-04-27
39
智慧和溫暖的老年女性 A wise and warm elderly womanJane stood by her front porch, her glasses reflecting the gentle afternoon sun, a soft smile playing on her lips.
Thumbnail
2024-06-01
3
詩歌智慧書|約伯記CH03:為何有光賜給我呢?受患難的人、為何有光賜給他呢.心中愁苦的人、為何有生命賜給他呢。~~~約伯3:10
Thumbnail
2023-12-14
16
【AI工具分享】 合約智慧生成工具「Draft by Robin AI」Draft 是一款由Robin AI 開發的合約智慧產生工具,商業團隊可以在幾分鐘內利用已批准的範本建立合約。這款應用程式內建了審批工作流程,使得法律團隊不再需要花費時間來建立常規文件,但仍可以透過內建的審批流程保持控制和監督。
Thumbnail
2023-10-17
1
禪心生活語錄-智慧和靈感分享禪心生活語錄感謝您長久以來的支持和關注。這裡分享著豐富的智慧和靈感的內容,幫助您在忙碌的生活中找到片刻寧靜。如果您對我們的內容感興趣,可以考慮訂閱或贊助支持我們,以持續收到新的語錄。
Thumbnail
2023-09-13
6
AI和遊戲:背後的智慧和娛樂遊戲一直是娛樂的一個重要組成部分,而現在,人工智能(AI)和機器學習正為遊戲世界帶來全新的維度。本文將深入探討AI在遊戲中的應用,以及它如何為玩家提供更智能、更具挑戰性的體驗。 遊戲中的機器學習和人工智能 1. 智能敵人: AI已經能夠模擬智能敵人的行為,使遊戲更具挑戰性。敵人能夠學習玩家的策略
Thumbnail
2023-09-11
2
何謂智慧EQ+財商+智商=智慧
2023-03-12
0
「勇氣、智慧和奉獻」故事中的主人公艾文是一個看似廢材的人,但他憑藉著勇氣和智慧,在戰爭中幫助國家取得勝利,並且在戰後帶領村莊復興。他不斷奉獻自己的時間和精力,為人民做出貢獻。這個故事告訴我們,只要有勇氣和智慧,並且願意奉獻,每一個人都能夠成就偉大的事業。
2023-02-27
3
放是一種本能和習慣,收是一種智慧和學習有一位碩士生的朋友 (Andy),明年九月即將加入此時此刻正在實習的公司。這是非常好的事情,在大缺工的時代,Andy的實習對勞資雙方絕對是大加分的行為。怎麼說呢? 實習對Andy和公司的好處 放是一種本能和習慣,收是一種智慧和學習 職涯是一場馬拉松,跑得久又跑得快的人才會贏
Thumbnail
2022-03-16
7
人工智慧搭上區塊鏈:智能型合約添「智慧」區塊鏈(Blockchain)是公鏈底層技術,透過共識協定(開源原始碼作業系統),以及預設的程序編寫程式而成的智能型合約。把計算中最吸引人的人工智慧(AI)的這一塊放到區塊鏈上,將智能型合約的演算能力不但提升,而且更有智慧。
Thumbnail
2022-01-31
3
透過一個人的思維方式,可以看得到一個人的教養、能力和智慧︱小K生活之路透過一個人的思維方式,便已經可以看得到一個人的教養、能力和智慧。假如自己的思維方式只有空洞或偏執的話,最終的結果就是不切實際,因此思維是講究實用和合乎眾議,不要讓自己的思維偏離軌道,否則很容易會作出錯誤選擇,誤入歧途。 另外有些人,他們對於情感非常執著,為甚麽呢?因為人類的感情最容易出現自私、執著
Thumbnail