1. 程式人生 > >《我學區塊鏈》—— 三十四、以太坊智慧合約靜態安全分析

《我學區塊鏈》—— 三十四、以太坊智慧合約靜態安全分析

三十四、以太坊智慧合約靜態安全分析

       以太坊的智慧合約程式碼審計,筆者找到兩種方式:一是 CertiK,一個提供智慧合約安全服務的區塊鏈平臺,是一條公鏈系統,採用 PoP(proof-of-proof)共識機制,用來分析合約需要消耗該區塊鏈平臺的原生數字幣;二是使用本地化的靜態安全分析工具。本篇將主要介紹本地化的靜態安全分析工具。

       靜態安全分析工具主要有 Oyente、Maian、Mythril。Oyente 是 DAO 漏洞發生後,由某團隊研發並開源的,目前基本上已經過時。Maian 是一款更先進的工具,但團隊擔心工具被攻擊者非法利用,因此並未開源。Mythril 借鑑了前面兩個工具的優點,且已經開源,本篇就是這款工具的使用介紹,通過 Docker 方式使用,還是比較方便的。

一、下載映象

docker pull mythril/myth

二、編譯合約獲取 Bytecode

       如果是用 truffle 構建的合約專案,使用以命令進行編譯:

truffle compile

       之後在 build 目錄,找到合約的 json 檔案,其中就可以找到 bytecode:

{
  "contractName": "Airdrop",
    ...
  "bytecode": "0x608060405234801561001057600080fd5b506102e2806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631561ae3114610046575b600080fd5b34801561005257600080fd5b506100f4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919050505061010e565b604051808215151515815260200191505060405180910390f35b600080600080855111151561012257600080fd5b60405180807f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81526020017f7432353629000000000000000000000000000000000000000000000000000000815250602501905060405180910390209150600090505b84518110156102a8578573ffffffffffffffffffffffffffffffffffffffff16827c010000000000000000000000000000000000000000000000000000000090048887848151811015156101d557fe5b90602001906020020151876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506000604051808303816000875af192505050151561029b57600080fd5b8080600101915050610185565b6001925050509493505050505600a165627a7a72305820dd2f79867460b3f93bacf34118b328b1314c2377e5e9965e947124b7139a2dcf0029"
, ... }

三、呼叫容器分析合約

docker run mythril/myth -xc 0x608060...f0029

四、檢視分析結果

       以筆者的合約為例,也許比較簡單,編寫也比較規範,並沒有掃出什麼問題來。

The analysis was completed successfully. No issues were detected.