形式化驗證工具之離線免費版Beosin—VaaS
近期,筆者注意到一款智能合約自動形式化驗證工具Beosin—VaaS推出了離線免費版。所謂**“離線免費版”,相較於之前該公司推出的在線免費版、企業版而言,亮點自然不言而喻。對於開發者來說,離線版的驗證工具將提供一個不聯網的測試環境,在很大程度上能從根源上將黑客攻擊的可能拒之門外。
經筆者測試,雖然這次推出的版本爲免費版,但功能毫不遜色,依然能有效檢測出智能合約的常規安全漏洞,並精確定位到有風險的代碼位置,以及導開發者修改合約代碼。**對大多數智能合約的安全性而言,需求都已經滿足。在此附體驗網址:https://beosin.com/#/,有需要的朋友可自行前往體驗。
儘管筆者認爲離線免費版Beosin—VaaS的功能已足夠強大,但根據官方發佈的消息,對於一些複雜類型的業務合約、以及對安全性要求高的業務合約,比如數字金融類(如DeFi)、物流供應鏈類、跨境支付類、防僞溯源類等等,還是建議選擇企業版Beosin—VaaS或人工審計服務更好。
下面筆者將針對這款離線免費版Beosin—VaaS工具進行簡單展述。
1.什麼是形式化驗證技術?
其實,形式化驗證技術最早是應用於航空、軍事等領域的安全關鍵軟件中的技術,本身受衆範圍沒那麼廣。當成都鏈安最早嘗試將形式化驗證技術應用在驗證智能合約的安全性上,最後發現審計效果比起傳統的驗證方式,更具備優勢。
**形式化驗證技術是一種基於數學和邏輯學的方法。**具體來講,在智能合約部署之前,對其代碼和文檔進行形式化建模,然後通過數學的手段對代碼的安全性和功能正確性進行嚴格的證明,可有效檢測出智能合約是否存在安全漏洞和邏輯漏洞。
該方法可有效彌補傳統靠人工經驗查找代碼邏輯漏洞的缺陷,其優勢在於,用傳統的測試等手段無法窮舉所有可能輸入,而用數學證明的角度,就能克服這一問題,提供更加完備的安全審計。
2.什麼是Beosin—VaaS工具?
Beosin—VaaS相關工具就是將形式化驗證技術應用在對智能合約安全性驗證的集大成者。Beosin—VaaS能夠面向EVM和WASM智能合約,自動化檢測智能合約的10大項32小項常規安全漏洞,爲智能合約提供**“軍事級”的安全保護**;並精準定位風險代碼位置並給出修改建議;檢測準確率>97%,全球最高;從源碼到字節碼完備的形式化驗證;支持多個智能合約編程語言,如Solidity、Go、C++、Python等。
3.一些Beosin—VaaS的測試實例
筆者選取了655個測試問題進行檢測,Beosin—VaaS工具總計檢測出635個問題,命中率爲96.9%;誤報共115個,誤報率爲15.3%。因此,Beosin—VaaS工具可檢測出業務類大多合約案例,具體檢測項如下:
Beosin—VaaS工具檢測項
漏洞檢測項 | Beosin—VaaS工具 |
---|---|
ERC20 標準規範 | √ |
Fake Recharge Vulnerability(假充值) | √ |
TransferToZeroAddress(目標零地址檢測) | √ |
Re Entrancy(重入) | √ |
TXOriginAuthentication(tx.origin使用錯誤) | √ |
Invoke Low Level Calls(call調用,delegatecall調用,自殺函數調用) | √ |
BlockMembers Manipulation(區塊參數依賴) | √ |
Invoke Extcodesize(調用Extcodesize函數) | √ |
Invoke Ecrecover(調用Ecrecover函數) | √ |
Unchecked Call Or Send Return Values | √ |
(call和send的返回值檢測) | √ |
Redefine Variable From Base Contracts(合約繼承中的變量覆蓋) | √ |
Unprotected Ether Withdrawal(無保護的轉賬) | × |
Check This Balance(合約資金受到嚴格限制) | √ |
ArbitraryJumpwith Function(具有函數類型變量的任) | √ |
Overload Assert(重寫assert函數) | √ |
CompilerVersionDeclaration(編譯器版本聲明) | √ |
Constructor Mistyping(構造函數失配) | √ |
Unary Operation(+= 寫成=+ ) | √ |
No Return(返回值適配) | √ |
Unchecked Api Return Values(沒檢查API返回值) | √ |
Emit Event Beforerevert(事件在revert前觸發了) | √ |
Integer Overflow(整數溢出) | √ |
Exception State(異常檢測,包括數組越界、除0、assert失敗等)) | √ |
Call problem | √ |
Function problem | √ |
Require Fail | √ |
通過大體測試,離線免費版自動形式化驗證工具Beosin—VaaS在很大程度上都能夠滿足大多數開發者的驗證需要。大家可以前往https://beosin.com/#/進行體驗,不吝賜教。