9月5日,在由Odaily星球日報主辦、36Kr集團戰略協辦的P.O.D大會安全論壇上,獵豹區塊鏈研究中心安全專家楊文玉發表題為《智能合約自動化審計技術》的演講。楊文玉開場介紹了智能合約發展的現狀。大部分人認為區塊鏈現在是一個寒冬時期,但是據獵豹區塊鏈研究中心統計,過去一個月中,智能合約每日新增數量為1317個。研究中心收錄的項目中,區塊鏈基礎設施占9.38%,游戲和VR4.44%,商業和零售3.6%,社交媒體與通訊3.4%。在數量穩定增長的同時,智能合約還面臨著安全問題。從2017年到2018年6月,智能合約漏洞頻繁爆發,帶來大量資金損失,也使得區塊鏈甚至智能合約的一些開發者或者用戶對智能合約的安全性產生質疑,也阻礙了以太坊之后的發展。除此之外,Fomo3D在興起的時候,僅僅在第二天就出現了大量的山寨合約。山寨Fomo3D游戲開發者更改了積極分配的邏輯,導致投入的資金大部分都流向山寨合約開發者,也對DApp發展造成阻礙。在這樣的背景下,如何有效保障海量智能合約的安全?楊文玉認為,最好的方法是降低人工審計復雜度,采用智能合約自動化審計。具體來講,自動化審計方法主要分為三類:第一種是特征代碼匹配,就是對惡意代碼進行提取、抽象,形成匹配模塊對待檢測源碼進行檢測。優點是速度快、迅速響應新漏洞,缺點則是使用范圍有限、漏報率高。第二種是基于形式化驗證的自動化審計方法。最早是在2016年由Hirai提供,Grishchenko和Hildenbrandt之后進行了改進,采用F*framework和Kframework,將EVM轉化為一個Formalmodel。Formal是航空航天領域常見的形式化驗證框架,而Kframework則是一個語義的轉化框架。最后一種是現在最常用的方法,基于符號執行和符號抽象自動化審計。分析智能合約時,通過編譯源碼,可以形成EVMOPCODE,然后輸入到自動化分析引擎,轉化成CFG,再利用這兩種方法進行分析。比較典型的是Oyente和Securify系統,可以降低誤報率和漏報率,但是分析方法繁瑣并且耗時。不過,楊文玉也指出,現在自動化審計方法處于一個很不成熟的階段,主要面臨三大問題:誤報率高,自動化程度低、依賴人工二次審計,審計時間比較長。以下為楊文玉演講全文,enjoy:
聲音 | 獵豹區塊鏈安全中心:建議各礦工、交易所、以及節點運營商將Geth版本升級到1.8.21:針對當前以太坊君士坦丁堡代碼“可重入”漏洞:獵豹區塊鏈安全中心建議各礦工、交易所、以及節點運營商,請將Geth版本升級到1.8.21或降級至 1.8.19 。此外,請將 Parity Ethereum錢包升級到2.2.7-stable或降級至 2.2.4-beta 。[2019/1/16]
謝謝大家,今天非常榮幸來參加這個會議,今天我所帶來演講主題就是我們一起來淺析一下當下智能合約自動化安全檢測的技術,今天我的演講可能分兩位個部分,首先第一部分我們會一起來看一下現在以太坊上智能合約發展的現狀,第二部分基于這個現狀了解,再詳細描述一下現在智能合約自動化涉及的一些方法。首先我們一起看一下現在智能合約發展的一個現狀,根據我們平臺,可以知道在過去一個月當中,智能合約的數量每天還在以1317個的平均增長率高度穩定地增長著,可能和我們所理解的區塊鏈現在是一個寒冬時期,所不太一樣這種增長率還比較穩定的。其次我們通過一些NLT方法,把智能合約領域劃分出來,除了一些敏感領域,現在智能合約比較多的應用在一些基礎設施,商業零售,游戲以及社交媒體和通訊。這是一個智能合約大的現狀,智能合約現在面臨一個安全現狀是什么樣的,可能剛才兩位嘉賓已經都進行了非常詳細的描述,從2017到2018年6月,這種智能合約漏洞頻繁爆發,每次都帶來大量資金損失,也使得區塊鏈甚至智能合約的一些開發者或者一些用戶對智能合約這種安全性產生一些高度的質疑,也阻礙了以太坊之后的發展。除此之外,我們還可以看到像剛才嘉賓講到Fomo3D這件事情,除了基本智能合約安全,現在安全受到極大的關注,之前Fomo3D在興起的時候,僅僅在第二天就出現了大量的山寨合約,山寨的Fomo3D,在這種游戲當中,其實開發者更改了積極分配的邏輯,使得其實玩那個蜂窩游戲過程當中,投入的資金大部分都是流向山寨合約開發者,也對DApp發展造成阻礙。現在面臨一個問題是如何有效保障海量智能合約的安全,也是我們今天要討論的問題,也是第二部分想跟大家分享一個現在智能合約自動化審計技術的發展。再回顧一下,現在智能合約截止到昨天中午12點,以太坊總共有193萬個合約,日增長率穩定增長,現在審計方法有人工審計,以及自動化審計。在海量智能合約當中,我們最好的方法就是降低人工審計復雜度,從而讓更多通過自動化審計進行。我們把自動化審計分為三個部分。首先第一種是特征代碼匹配,第二類是基于形勢化驗證的子都化審計方法,最后一種是基于符號執行和符號抽象自動化審計。首先看特征代碼匹配,從名字可以很清晰理解到,就是對惡意代碼進行提取抽象,我們是一種語義匹配,匹配靜態原代碼,審計的方法優點是很顯而易見的,比如說速度很快,因為對源碼進行一個字符串匹配,第二個可以迅速進行新的漏洞,他審計出現一個新的漏洞,我們就可以快速提交一些新的匹配模式。他缺點在哪里,再來看一下,我們所理解的現在區塊鏈都上應該是公開透明的,但實際情況并不是這樣,我們大概做了一個統計,目前代碼的開原率僅僅只占48.62%,就是說在以太坊上,其實有超過一半合約是不開源的,只暴露code,剛剛那個嘉賓也說,他們也費了十分大的力氣去立項這個code這種限制就導致這種方法使用范圍有限,傳統的靜態審計方法比如說App檢測,會調用一個庫里面確定唯一一些函數,對他進行審計,智能合約里面一些函數一些特征變化性比較多的,所以說漏洞率比較高。第二個方法,我們就來探討一下現在比較火的,基于形式化驗證的自動化審計,形式化驗證審計智能合約安全,最早是在2016年由Hirai提供的,他提出了一點,他當時拿出邏輯交互證明器,通過IsabeldeLem-Language->Formal-model,通過形式化model驗證,來判斷代碼邏輯是否存在問題,這項工作最后的兩個把形式化方面進行進一步改造,他們放棄Lem-language也是比較低效的轉化方式,他們采用了F*framework和Kframework,將EVM轉化為一個Formalmodel,而Formal可能就是經常在航空航天領域當中做一些形式化驗證的框架,而Kframework則是一個語義的轉化框架,這兩個比較有代表性的技術研究,如果想更加深入了解可以參考下列的一些論文。第三點就是今天想要著重跟大家交流,以及現在最常用的一些方法,就是基于符號執行和符號抽象的自動化審計,這種自動化審計現在看一下,我們在分析一個智能合約的時候,首先要明確分析對象是什么,像我們剛才在解釋特征匹配代碼當中,我們知道現在EVM上智能合約代碼大部分是不公開的,我們現在分析對象就確認應該是EVMOPCODE,在通過一些源碼,我們通過編譯,可以形成EVMOPCODE,輸入到自動化分析引擎。在這種基于符號執行和符號抽象化自動化審計框架里面,有些共有的特性,OPCODE在輸入這個引擎當中,都會轉化成一個CFG,就是一個一個控制流程圖,通過這個CFG,可以簡單了解一下這個CFG是什么意思,CFG就是把合約代碼里面邏輯包裝成哪個快,在里面邏輯分叉的時候,左邊那個合約形成一個十分龐大完善的CFD,讓程序員更好了解能夠執行一些邏輯。在有CFG生成之后,現在就出現兩種分析方法,第一類就是基于符號執行的驗證,這類比較有代表性,大家都比較熟知像Mythril、Oyente、Maian,還有一種就是上個月剛剛公開的一個符號抽象分析的方法,就是Securify,今天主要跟大家講一下Oyente跟Securify這兩種系統具體的架構以及實現方法,首先我們來看Oyente,Oyente的邏輯我們可以從左邊看到,在CFG申請之后,首先是一個explorer,會把代碼當中每一個流程驗證一邊,進行一個形式化驗證,就像這個我們驗證是我們是否有一個X,使得X不僅滿足C1、C2、C3條件,這時候可以判斷狀態是no還是yes,以此驗證整個邏輯的流程。第二個coreanalysis這一部分其實是Oyente最為核心的一個部分,將剛剛輸出的explorer這種路徑,把它轉化,只進行一些漏洞驗證,目前只提供包括TOD和Timestampdependence和Mishandledexceptions,這三種驗證,最后這個系統又能保證誤報率和漏報率,他采用微軟的開源的驗證器,進行整體的架構封裝,在剛剛我們講述過程中,大家也應該了解到,在CFG轉explorer驗證的時候,我們是需要對他的循環,每次都是一個驗證,所以這種分析方法特別耗時,并且不一定成功。這就是Oyente目前存在一個巨大問題。在這個問題基礎上,像Securify,他們就提供了另外一種方法,他們認為現在合約的代碼其實是特別容易解耦合的,不像傳統代碼,耦合性特別高,像合約代碼這個一些比較固定形式化的解耦合模塊,我們并不是需要對整個合約邏輯進行一個交驗,我們對合約解耦各個模塊進行分析,以此提高自動化程度,左邊這個圖是整個驗證流程,把contractbytecode通過定義域語言之后有一個驗證模塊,特別像之前說的模式匹配,把一些漏洞轉化成驗證語言模式匹配框架,驗證這個語義是否磨合這個。最后也給出一個report,通過這個自動化審計方法,最終可以輸出錢包的管理者是可以被修改的。再具體一點是怎么做語義分析,其實分析這種explorer代碼是從兩個維度,第一個是邏輯,第二個是數據,邏輯方式定義兩種邏輯,第一個叫做MayFollow,第二個叫做MustFollow,MayFollow的意思就是說,L2必須是有一條路徑跟在L1后面,而MustFollow是說L2每一條路徑都跟在L1后面,這兩種區別定義了整個邏輯的框架。第二個是數據,怎么定義合約里面數據變化用了三種,第一個MayDepOn,就是兩個因素,一個叫做Y,一個叫T,T變,Y可能變也可能不變。第二個是Eq,就是Y是由T決定的。第三個是DetBy,Y和T是一一對應的,只要T變Y肯定要變了,這里面用更加形象的方法來想象一下,其實Maydepon就像我們的T變量是time,在一段時間中,Y可能是一個值,T變,Y可能不變,第三個就是說一對一關系,就像我們算哈希,只要你T變,Y肯定要變,通過邏輯和數據這兩個維度,他們進行一些驗證,最終驗證模塊現在提供了大概六、七個智能合約漏洞驗證性的語言,這種語言都是以插件化來寫的,其他的安全開發者可以在不斷豐富漏洞的驗證語言。最終我們在對自動審計進行評估的時候,是從要自動化程度、漏報率、誤報率提供這件事情,我們現在知道數據就可以綁定出來,檢測出來數據還是需要人工進行二次確認,這個工作是十分繁瑣的,經過這種方法可以是誤報率會降低,這兩種符號執行和符號抽象的自動化審計方法。最后回顧一下,現在自動化審計方法分為三種,特征代碼匹配,形式化驗證以及符號執行、符號抽象。回顧整個淺析過程,我們可以清楚知道,現在自動化審計方法是在一個很不成熟的階段,主要面臨三大問題,第一個是誤報率高,并不能做到完全自動化,還需要人工參與。第二個是自動化程度比較低,還需要不斷去審計它,第三個審計時間比較長。最后就是回顧一下我們整個分析,首先我們明晰一下智能合約發展現狀,又檢測自動化審計方法,左右各有我們技術交流群,有感興趣小朋友歡迎加入,可以一起更加深入的討論,這就是我今天所分享的內容,謝謝。
精選 | 獵豹區塊鏈安全實驗室提供TradingView高危漏洞測試方案及修復服務:獵豹區塊鏈安全團隊已協助多家合作數字貨幣交易所針對TradingView XSS高危漏洞進行測試和修復。TradingView 是一款開源免費的K線圖分析工具,大量使用于數字貨幣交易所。該高危漏洞可繞過現有防御機制導致用戶帳號權限被盜,賬戶內資產可被黑客任意轉移。獵豹區塊鏈安全團隊將免費提供對該漏洞的測試和修復服務。
在提供專業安全解決方案的同時,獵豹區塊鏈安全團隊目前也提供了臨時解決方案方便開發者自行修復漏洞具體步驟為:在TradingView 庫 bundles目錄下以 library 開頭的 js 文件中,暫時禁止使用indicatorsFile參數,就可以臨時修復此漏洞,等待TradingView官方更新。詳情以及解決方案可點擊原文鏈接查看。[2018/9/19]
動態 | Nebulas與獵豹移動達成合作:Nebulas與獵豹移動建立合作伙伴關系,以推動區塊鏈在移動領域的發展。據coinmarketcap數據,Nebulas (NAS)現全球均價為5.16美元,漲幅達7.07%。[2018/7/3]
獵豹移動:3月21日推出區塊鏈智能音箱產品——小豹AI音箱:近日獵豹移動公布了的2017財年第四季度及全年財報。獵豹移動已經開始將區塊鏈技術應用在獵豹的業務中。該公司將于3月21日推出一款智能音箱產品——小豹AI音箱,并鼓勵音箱用戶完成一些任務,從而賺取積分,用戶可以使用這些積分購買平臺上的增值服務,包括付費內容和云存儲服務。[2018/3/20]
獵豹CEO傅盛:將從安全領域切入區塊鏈,因為對CES新奇感已過:獵豹的CEO傅盛第三次來到CES時表示他對CES的新奇感正在減弱,準備將要從最擅長的安全切入區塊鏈,不涉及到交易,幫助用戶保護數字資產。[2018/1/11]
今日,推特網友“BTCKING555”稱,有傳言稱投資者威脅要起訴比特大陸,因其誤報財務信息并有重大遺漏.
1900/1/1 0:00:00編者按:本文來自鏈聞ChainNews,作者:VictorFang,Ph.D.,編譯:詹涓,Odaily星球日報經授權發布.
1900/1/1 0:00:00據Coindesk消息,三星子公司三星SDS目前已基于其聯盟鏈解決方案Nexledger,為韓國銀行開發了一種基于區塊鏈的身份認證平臺BankSign.
1900/1/1 0:00:009月5日,由Odaily星球日報主辦、36Kr集團戰略協辦的P.O.D大會在北京舉行。在大會的安全論壇上,區塊鏈大數據服務商ChaindiggCEO葉茂從數據角度,與眾嘉賓共同探討區塊鏈的安全問.
1900/1/1 0:00:00據財經網報道,2018年8月31日,比特大陸與深圳比特微電子科技有限公司的專利糾紛一案,以比特大陸一審敗訴結束.
1900/1/1 0:00:009月5日,由Odaily星球日報主辦、36Kr集團戰略協辦的區塊鏈P.O.D大會在北京舉行。會上區塊鏈確權專家SeanMoss-Pultz發表了題為《Propertyrightsfordata》.
1900/1/1 0:00:00