【blocktimes線上人物對話第二十ㄧ期】區塊鏈資安遠比你想像的重要
人物對話
23天前
8734

螢幕快照 2019-01-30 下午6.24.38.png


對話時間 : 1 月 19 日 19:30

微信社群 : blockchain-in-臺灣

對話嘉賓 : 圖靈鍊科技創辦人 胡耀傑 Jeff Hu

輪值群主:blocktimes主編-Wade


來賓簡介:

Turing Chain 創辦人暨執行長,香港科技大學資工系最高榮譽畢業。曾為港科大 首位前往矽谷實習的學生,後於香港 J.P. Morgan 與瑞士洛桑聯邦理工研發深 造。獲慕尼黑 ACM CryBlock'18 論壇最佳論文,為國際期刊 CPE 特別邀稿作者, 知名專欄作家兼近景魔術師。


【第一問】

請先介紹一下您自己,還有您在區塊鏈相關領域正在做的事情。


Jeff:

目前有兩種身份:開發者或是研究人員,自己有團隊在做底層開發與研究,最近也有一篇論文發表剛上了美國舊金山的IEEE DappCon 2019。研究的鏈主要是以太坊,同時也在研究EOS跟TRON,平時也開設區塊鏈相關課程。第二個身份是區塊鏈新創公司共同創辦人,主要做台灣與其他亞洲地區的業務,也曾接過紐約的新聞區塊鏈大型案子。


主要做的是,區塊鏈上的安全審計。所謂的安全審計是,客戶提供一份智能合約,我們將提供團隊為這份合約提出審計報告,並提出修補建議。


其他還有的案子是密碼女孩(Crypto Beauty),它就是在TRON上面可以讓你抽卡蒐集模特兒照片、見面會入場券的方式,它就是結合模特兒、攝影師、蒐集者的一個虛擬循環。


【第二問】

因為ICO熱潮讓許多非技術人士開始關注區塊鏈,大眾從一開始會討論共識機制層面的安全疑慮(例如:算力攻擊、女巫攻擊、自私挖礦…),到現在因為以太坊、EOS這種智能合約平台的盛行,讓隨機數缺陷、Honeypot、Transaction Congestion Attack受到注意,最近讓以太坊升級延遲的Re-entrancy漏洞也成為話題。首先想問的是,區塊鏈存在哪些資安議題?大眾與業者應該看待這些進步的過程呢?


Jeff:

區塊鏈上面存在的問題太多了。

很多人說交易所被駭、錢包被偷,區塊鏈是不是不安全。其實很多問題是來自在區塊鏈上搭建dApp、系統或相關應用程式的開發者,因為不熟悉區塊鏈、沒有做資安審計,導致程式上出現漏洞,而非區塊鏈本身的問題。


如果從智能合約的漏洞來講的話,之前有一個十大漏洞的整理,裡面最著名的是溢出漏洞(overflow)。一般出現在加法減法或是對數值做運算的時候,如果沒有上下限,或者任何檢查的話,有可能數值會加超過存儲空間,就會溢出使數值歸零。這在很多的合約上都遭到攻擊,現在大家都用一個叫safe math的模組庫來做修正。


另外還有就是編譯器版本造成的問題,像是solidity 0.4.13 這個版本,它會直接忽略空字串,如果在調用一個函數時,第一個函數若是空字串,第二個字串會直接遞補上去。那這樣的遞補就可能造成原本打算轉錢給自己或其他人,但產生其他結果。


還有比較酷的東西就是,有人開始會在網路上搜尋大量的智能合約看看有什麼漏洞,藉以得到錢財。而介於白帽與黑帽駭客之間的「灰帽」,就發明了蜜罐合約(honey pot)。蜜罐合約有趣的地方就是,它是用來反駭客的,合約內容會故意顯現一些明顯的漏洞,吸引比較弱或經驗少的駭客攻擊,蜜罐合約則會透過抵押的方式把駭客的錢鎖進這個合約裡面。


最近大家可能比較關心的是,以太坊計畫更新時所發現的re-entrancy漏洞。從技術上來講,你要讓一個合約將錢寄送給其他人的時候,有三種路徑:call / transfer / send。早期來說只有用call這個指令,但它沒有gas上限,假設當一個合約出現漏洞時,它可能會持續被執行。所以出現了 transfer / send 兩種路徑,將gas上限設置在2300個gas,基本上做完一次傳送之後,就不會再次執行。


也就是說,如果你的合約有re-entrancy漏洞,但用的指令是transfer / send 兩種路徑的話,發生這種錯誤的可能性就幾乎是零。


如果君士坦丁堡讓部分邏輯優化,讓資料存儲與更新時所需要的gas下降,也就是說讓轉送錢財過程之後,你仍然可以執行一些錯誤邏輯,這就會使得re-entrancy漏洞又再度被允許。


其實如果是按照正常的智能合約開發程序,是不會發生這樣的重複訪問漏洞(re-entrancy)。


現在在市場上最建議的合約開發順序,在一個函數內應該是先檢查放入的變數是否符合期望,再去執行內部邏輯,直到最後一兩行,再去調用外部邏輯。


重複訪問漏洞(re-entrancy)做錯的就是,我先調用外部邏輯,再做內部邏輯。那如果外部邏輯是有問題的話,那你的函數有可能就不會結束,內部邏輯就不會被調用到,而是一直執行錯誤,或者是惡意的外部邏輯。

其他還有許多資安議題可以說,不僅是以太坊,EOS也有自己的問題。


所以我覺得大家看待進步的過程不用太驚慌,技術人應藉漏洞累積經驗,而一般用戶則了解不同開發環境的狀況去做一些策略上的調整。


【第三問】

開源(open source)是區塊鏈開發生態中的要素,我們因此看到引用既有代碼的情況更為普遍,在缺乏多樣性的情況下,您看到「開源」有什麼資安上的優缺點?


Jeff:

開源(open source)這個東西其實是人類發現自己有開發盲點後的產物。


它的優點非常多,當你在開發專案的時候,全世界的人都可以幫助你來偵查邏輯漏洞。另外一方面是,如果你的程式是有資安疑慮的話,人們會很快地透過測試、攻擊來找到漏洞,並且提供補丁。你的開發方式是集中或是去中心化,就取決於你想要接納多少其他人的想法。


那開源有問題嗎?其實有。


之前就有發生過,有人在nodejs-model嵌入了有惡意邏輯的程式,因為大家相信這個程式是善意的,就直接把它用在自己的專案中,讓全世界使用這個model的人都受影響。


【第四問】

現在有越來越多區塊鏈資安公司出現,並且在重大事件發生時擔任調查機構,例如交易所被盜、ETC的Reorg事件、EOS DICE隨機數漏洞…等。您怎麼看區塊鏈資安公司在產業中的發展趨勢?


Jeff:

我覺得區塊鏈產業的差異在於,所有的東西一上線都是完整的。也就說我可能寫了很小的智能合約,不管在甚麼主鏈上,像是遊戲,所有的金流交易都是真錢,這就會吸引許多攻擊者,只要是能發現合約中一點點的漏洞,就可能可以無蹤跡地把合約裡的錢偷走。而且token也很容易變現的東西,讓作惡者很容易轉換成所期待的價值。


所以我覺得區塊鏈資安公司在整個區塊鏈生態中扮演非常重要的角色。


它要做的東西其實沒有很多,因為大多數的案子或dApp都是著重智能合約開發,只要你夠了解像是EVM、智能合約語言、編譯器、常見漏洞、偵測方法...等,你就可以幫別人去做安全審計。


然後,有個很困難的點就是,區塊鏈的合約語言一直不斷更新推進,像是solidity不段進行更新,當你學會之後,它就已經推進到下一個版本了,新的版本裡面的語法基本上跟之前有很多的差異。


所以區塊鏈資安公司要做的另一件事就是「跟上時代」,必須很快地跟上資安潮流。


【第五問】

近期,各公鏈的開發者開始有所遷徙,以太坊、EOS、TRON都各有新的開發移民,像是EOS雖然常有資安疑慮,但同時也在吸納越來越多的開發者,您認為開發者遷徙的原因有哪些?


Jeff:

這是個非常好的問題。


從以太坊的第二代公鏈之後,其實大家都在爭奪第三代公鏈的位置。


EOS那時候用它的一年募資計畫成功吸引了全世界的目光,每天固定售出的token量是開放讓參與者以競標的方式,讓參與者來分這筆token。競標者少的一天,將讓參與者可以用較少的金額來分那筆token。在一年的募資之後,有了龐大資源,並在全世界透過駭客松吸引更多開發者加入。


一個成功的公鏈必然需要有很多的dApp在上面,而駭客松則是最容易吸引開發者的方式,EOS第一次在香港舉行的駭客松就相當成功。後來大家發現EOS比以太坊快太多了,在遊戲體驗上升級,大家也慢慢轉型過去。而且使用dApp也不用花錢,因為EOS是以抵押token的方式使用資源(CPU、頻寬),只要有足夠的stake,就不用擔心每天的用量。


雖然它也有缺點,因為超級節點似乎是背離了區塊鏈完全去中心化的意義,而比較像是美國的代議制。


另外,像是TRON最近也在舉辦駭客松,提供高額獎金加上開發流程與以太坊幾乎相同,也吸引了許多以太坊上的開發者直接遷移過去。


至今還沒有一個主鏈搶到世界的市場,很多的開發者當然一開始是在以太坊,但可惜的是它的語言、開發更新都一再延後,基礎效率提升也沒有解決。


這些鏈也都還在互相競爭,開發者也是會依據各公鏈的特性、優點來遷移。


我曾帶團隊到TRON上面進行密碼女孩(Crypto Beauty)的專案開發,就是受到它駭客松的吸引。TPS較好,也讓它的使用者體驗比以太坊好。


我的各個客戶間也會因為不同應用,選擇不同公鏈來開發,例如:遊戲會選EOS,而固有資產就會選以太坊。資安公司也是會配合客戶的開發需求,審計不同公鏈上的智能合約。


【第六問】

想請問一般對智能合約審計有哪些工具呢?


Jeff:

如果是有很強的開發團隊的話,可以從這:https://consensys.github.io/smart-contract-best-practices/security_tools/


Securify是一個簡單易上手的智能合約檢查工具,一鍵檢查漏洞。


Oyente是一個remix的工具,它也是有檢查功能的工具可以使用。


目前工具還不多,一般就是邏輯審計,例如讓不該領錢的人領錢。

這是一般開發者不容易發現的。另一種就是語法漏洞,它就容易用上述的工具去發現的。


【傳承問】  想引薦哪兩位產業大咖來做客 blocktimes 進行分享呢 ?


Blockchain Education Network 香港的負責人 李婷婷Tina

比特幣中文社團的管理員 PoChen


回顧【blocktimes線上人物對話第二十期】區塊鏈怎麼為遊戲生態提升價值






專業的區塊鏈媒體平臺
新聞排行
熱門新聞

© blocktimes——專業的區塊鏈媒體平臺