新一代安全公司如何學(xué)習(xí)保護(hù)區(qū)塊鏈代碼
今年9月初,由Cameron和Tyler Winklevoss創(chuàng)建的加密公司“雙子信托”宣布,該公司已獲得紐約州監(jiān)管機(jī)構(gòu)的批準(zhǔn),將推出一套與美元價(jià)值掛鉤的數(shù)字代幣。
這種被稱為“雙子幣”的代幣可以在以太坊區(qū)塊鏈上通過一個(gè)叫做“智能合約”的專門程序來發(fā)送。為了確認(rèn)它的代幣實(shí)際上是由傳統(tǒng)美元支持的,雙子公司公布了一份獨(dú)立會(huì)計(jì)師事務(wù)所的報(bào)告。該公司還發(fā)布了一份獨(dú)立的審計(jì)報(bào)告,重點(diǎn)不是財(cái)務(wù),而是來自紐約一家名為Trail of Bits的安全公司的基礎(chǔ)軟件代碼。
“評(píng)估的目的是發(fā)現(xiàn)漏洞,讓攻擊者只對(duì)發(fā)行商Gemini進(jìn)行操作,”在Gemini發(fā)布的一封信中,該公司首席執(zhí)行官Dan Guido寫道,他解釋說,測試中發(fā)現(xiàn)的任何問題都是固定的。
Trail of Bits是數(shù)家為智能合同提供技術(shù)安全審計(jì)的公司之一,這些公司負(fù)責(zé)為區(qū)塊鏈創(chuàng)業(yè)公司募集資金,以及在區(qū)塊鏈網(wǎng)絡(luò)上構(gòu)建的復(fù)雜數(shù)字市場等一切交易,從最初的代幣發(fā)行到融資。智能合約是由支持區(qū)塊鏈的計(jì)算機(jī)運(yùn)行的專用程序,通常具有在滿足某些條件時(shí)接收和分發(fā)加密貨幣或其他數(shù)字代幣的能力。專家們說,寫這些程序需要新的思維方式,這可能會(huì)讓沒有經(jīng)驗(yàn)的程序員不知所措。
悉尼區(qū)塊鏈軟件和網(wǎng)絡(luò)安全公司Sigma Prime的主管Mehdi Zerouali說:“實(shí)際上,編寫智能合約是一個(gè)完整的、不同的新模式。”
"有一些漏洞是令人震驚的"
所有的軟件都有漏洞,但由于智能合約通常是決定誰擁有寶貴的加密資產(chǎn)的唯一方式,所以他們代碼中的缺陷可能是災(zāi)難性的。當(dāng)然,如果他們被發(fā)現(xiàn),他們可能會(huì)被黑客們利用來竊取加密資金。根據(jù)ICO追蹤公司CoinSchedule的數(shù)據(jù),僅今年一年,公司就通過ICO募集了超過200億美元的資金。
“有一些缺陷是驚人的,”Guido告訴Fast Company。“如果你制作了它們,它們不僅高度嚴(yán)格,而且對(duì)于查看您的智能合約代碼的人來說,它們也是非常明顯的。”
其中最著名的錯(cuò)誤是一個(gè)分散的、由以太坊驅(qū)動(dòng)的投資基金The DAO,它代表了分布式自治組織。2016年,黑客利用代碼中的漏洞盜取了約5000萬美元的加密貨幣,不過后來以太坊本身也做了調(diào)整,以歸還被盜的資金。
自那以后,安全專家一直在努力尋找可能導(dǎo)致智能合約發(fā)生故障的因素,并開發(fā)工具來幫助自動(dòng)檢查代碼中的錯(cuò)誤。他們還對(duì)新的智能合同進(jìn)行了審計(jì),這些合同通常會(huì)公開發(fā)布,這些合同可以幫助投資者和最終用戶放心,他們不會(huì)因?yàn)槌绦蚬收隙鴵p失資金。
Trail of Bits發(fā)布了一些開源工具,用于分析和測試用Solidity編寫的程序,Solidity是一種常用的編程語言,用于編寫智能合約。Guido說,開發(fā)Solidity程序的標(biāo)準(zhǔn)工具不像開發(fā)更成熟的語言那樣復(fù)雜,因此它們可以讓bug在部署專門的軟件之前一直運(yùn)行。
“它缺乏許多其他現(xiàn)代語言所具有的安全保障,”他說。
當(dāng)智能合同被愚蠢的錯(cuò)誤所困擾時(shí)
智能合同可能會(huì)成為可能影響其他軟件的一些相同類型的 bug 的犧牲品, 如基本算術(shù)錯(cuò)誤或程序員無意中重用了多個(gè)值的相同變量名。但是, 它們也可能受到特殊類別的錯(cuò)誤的影響: 可利用對(duì)區(qū)塊鏈代碼可用的計(jì)算能力的限制來觸發(fā)拒絕服務(wù)攻擊, 以超出其處理能力的數(shù)據(jù)來壓倒智能合同。對(duì)某些數(shù)值的大小的限制會(huì)導(dǎo)致錯(cuò)誤, 在這種情況下, 過多的數(shù)字會(huì)回退到零, 類似于臭名昭著的 Y2K bug。這可能會(huì)導(dǎo)致大量賬戶被削減至幾美分,甚至是負(fù)余額。
一些不安全的代碼可以使用自動(dòng)分析工具檢測, 而無需進(jìn)行過多的人工干預(yù): 如果一個(gè)合同允許任何用戶提取其資金, 這可能是一個(gè)錯(cuò)誤, 連鎖安全公司聯(lián)合創(chuàng)始人兼首席科學(xué)家Petar Tsankov說。該公司是一家瑞士初創(chuàng)公司,從久負(fù)盛名的技術(shù)大學(xué)蘇黎世分校分拆出來。ChainSecurity 開發(fā)了一種稱為 Securify 的工具, 它可以快速地發(fā)現(xiàn)和標(biāo)記凝固代碼中潛在的問題。
但是其他的bug只是在合同實(shí)際應(yīng)該做的事情的背景下被發(fā)現(xiàn), 這意味著安全審核的第一階段通常是與開發(fā)人員坐下來, 以準(zhǔn)確理解他們的合同希望完成什么。
Tsankov 說: "通常, 關(guān)于合同應(yīng)該做什么, 有非常非正式的文件。
然后,通常會(huì)出現(xiàn)一種混合的人類分析和自動(dòng)化測試,以確定是否有可能使合同違反其規(guī)范。Bits 的蹤跡開發(fā)了一種稱為Echidna的工具, 它可以通過各種輸入快速執(zhí)行智能合約,尋找讓代碼出錯(cuò)的方法。當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí),安全測試人員將為開發(fā)人員標(biāo)記他們,并幫助確保他們?cè)诖a部署到實(shí)時(shí)的公共區(qū)塊鏈之前就得到了解決。
安全公司通常會(huì)說,他們的客戶在了解常見錯(cuò)誤后,在編寫安全的智能合同代碼方面越來越熟練。Zerouali說,隨著技術(shù)的成熟和程序員共享有效的實(shí)踐,這種模式以前在包括web本身在內(nèi)的科技行業(yè)的其他角落都出現(xiàn)過。
但與此同時(shí)加密創(chuàng)業(yè)公司曾一度只需要對(duì)最初發(fā)行代幣的合同進(jìn)行審計(jì),現(xiàn)在卻在利用其ICO收入來構(gòu)建更復(fù)雜的產(chǎn)品。Tsankov說,其中包括更復(fù)雜的智能合同,它們需要審計(jì)自己的bug。
“現(xiàn)在,他們都開始回到我們身邊,”他說。“復(fù)雜性的程度正在迅速上升。