你玩的Dapp真的安全嗎?Trustlook反編譯平臺給程式設計師風險提示
編者按:本文來自36氪戰略合作區塊鏈媒體 “Odaily星球日報 ”(公眾號ID:o-daily, APP下載 )
只要談到區塊鏈、以太坊就必定離不開“智慧合約”(Smart contract)這個詞,由於具備了最基本的圖靈完備性,開發者可以基於以太坊完成各種應用的開發。據 Odaily星球日報 2 月 25 日釋出的 ETH 週報 顯示,目前 ETH 鏈上 Dapp 開發累計至 1602 個,“博彩類”、“交易所”仍然是目前 ETH Dapp 生態中日活以及交易額最高的兩大應用。
智慧合約為以太坊社群注入了生機,促成了生態的繁榮,但也帶來了各種各種各樣的安全問題。基於智慧合約的各類 Dapp 真的靠譜嗎?博彩類遊戲真的就如其說明書所言的公平嗎?
Odaily星球日報最近接觸的安全公司 Trustlook 在 2019 年 1 月釋出了基於二進位制智慧合約反編譯開放平臺 Smart Contract Insight 。據 Trustlook 創始人 Allan Zhang 介紹,他們認為,讓區塊鏈變得更安全的唯一路徑是從工具的角度重建區塊鏈社群——打造一個可用的工具,讓區塊鏈程式碼可讀,漏洞可被發現,從而做到真正的開源和共建。很多 Dapp 的合約都沒有開源,或是處於半開源狀態,對使用者來說,程式碼是否安全需要考量。
機器語言是用二進位制程式碼表示的一種計算機能直接識別和執行的一種機器指令,在智慧合約中,業界稱為二進位制的 EVM 程式碼。也就是說,在目前的狀況下,社群裡的開發者如果對某一份智慧合約產生了興趣,想要去了解它的功能甚至查詢漏洞,只能夠接觸到二進位制程式碼,對於大部分程式設計師而言,這是較大的障礙。
未編譯的機器程式碼長這樣
“反編譯開放平臺”這個概念聽起來有點拗口,簡單來講就是將二進位制的機器程式碼或通過合約地址逆向成人類可讀的計算機高階語言,並根據結果作出風險提示。目前提出的漏洞包括:整數數值溢位漏洞、重入攻擊漏洞、外部呼叫返回值未校驗漏洞、tx.origin依賴漏洞以及時間戳依賴漏洞等,用灰底的 “//ISSUE:” 提醒。
據介紹,整數數值漏洞說明幣有無限增發風險;
重入攻擊最有名,著名的 DAO attack 就是這個漏洞造成的,它最造成攻擊者重複呼叫取款函式,一直將合約賬戶中的所有代幣取走;
外部呼叫返回值是指,智慧合約在地址上執行操作的底層方法,比如: address.call()、address.callcode()、 address.delegatecall() 和 address.send。這些底層方法不會丟擲異常 (throw) ,只是會在遇到錯誤時返回 false 。在合約中呼叫外部合約時,應該對返回值進行判斷。如果沒有判斷,那麼呼叫者可能會誤判交易是否成功,對於交易所造成財產損失;
tx.origin 依賴漏洞是指,不慎使用 tx.origin 進行鑑權認證有可能帶來釣魚攻擊。
時間戳依賴漏洞指的是一些賭博類的 Dapp 使用時間戳來生成隨機數,會造成博彩類應用結果可預測,這樣攻擊者可以直接贏得博彩的獎勵。
舉個例子,我們從以太坊上選擇一個 211b 合約地址,如:0x20B5c52d43a87ae8B375670d47D572681753211b,將這個合約地址用 Smart Contract Insight 平臺“破解”,可以得到:
編譯後的高階語言及風險提示
Smart Contract Insight 平臺在提醒時用提醒風險或異常,方便判別合約安全性。我們可以看到,剛剛的合約地址反編譯後得到的程式碼有整數溢位風險,也就是說,如果這是一個發幣平臺,就意味著這個幣有無限增發的風險。
目前 Smart Contract Insight 平臺免費開放,但如果對二進位制合約有更詳盡的瞭解需求,平臺也提供人工稽核部分,收部分安全費用。目前該平臺支援以太坊或基於 EVM 程式碼的合約檢測。作為工具,操作非常簡單,但如果能根據編譯結果沉澱出一些分析結果或許更好。
智慧合約的安全問題一直被行業關注。此前,安全公司 CertiK 釋出智慧合約自動檢測引擎 CertiK AutoScan Engine(CASE ) ,並對Etherscan平臺進行了技術整合與大規模的通證安全檢測;評級機構 RatingToken 面向 C 端上線其智慧合約查詢檢測功能,同時為 B 端提供智慧合約實時監測功能。
Trustlook 是位於矽谷的移動安全解決方案提供商,多年來服務於華為、亞馬遜、高通等一線軟硬體廠商,創始人 Allan Zhang 曾是 Palo Alto Network 的創始安全工程師,團隊目前 17 人,均屬研發團隊。公司於 2015 年完成 1700萬 美元 A 輪融資,摯信資本領投,星元資本、線性資本等跟投。
我是Odaily星球日報記者遂心(微訊號wsuixin12),加好友煩請備註姓名、單位、職務和事由。