• 風險提示:防范以虛擬貨幣/區塊鏈名義進行的非法集資風險。 ——銀保監會等五部門

    區塊鏈技術重大挑戰:“堵不住”的漏洞

    白話區塊鏈 2017-12-17 22:01:01
    微信分享

    掃碼分享

    區塊鏈智能合約程序安全性與漏洞的特殊性與高危性。

    作者:歷史文章

    2017-07-25 老董 白話區塊鏈

    白話區塊鏈,從入門到精通,看我就夠了!

     

     

    可能很多剛進入幣圈的人都會覺得:我去,區塊鏈太牛了,趕緊各種投資。但今天老董主要想唱唱反調,揭開隱藏在區塊鏈狂熱的表象下的一些重大技術挑戰。老董認為這些技術挑戰正是區塊鏈投資者所最需要注意的“投資系統性風險”

    所謂系統性風險,就是說大部分區塊鏈技術平臺和應用所共同面臨的價值風險。換句話講,不論是區塊鏈貨幣,智能合約平臺,乃至在他們之上衍生的應用,他們的價值都會受這些風險所影響。系統性風險的發生或徹底解決,都會對整個市場有著巨大而深遠的印象。
    老董在這里不討論各種微觀層面的價格波動(操縱)和投機(比如最近的所謂“寒冬”)。雖然老董在投機方面有很多的教訓可以分享,但老董覺得,掌握一些更本質的東西,對一個眼光長遠的投資人來說,更為重要和有意義一些。

    上干貨。

    今天我們講的是,區塊鏈智能合約程序安全性與漏洞的特殊性與高危性

    乍一聽,安全和程序漏洞(bug)這個概念貌似很泛泛,可以說哪里有程序哪里就會有安全問題和漏洞,老董難道開始給干貨注水?顯然沒有!老董必須要強調的是,區塊鏈,尤其是在其上部署的智能合約,對于程序安全和漏洞的苛刻要求是讓人無法想象的。老董認為,這是短期內區塊鏈以及智能合約系統所面臨的最大風險。

    為什么?

    要講明白安全對于區塊鏈智能合約為什么這么重要,就要理解一個鏈下程序和鏈上程序的關鍵不同之處:誰在控制程序的部署與升級。
    對于鏈下程序(從微信,facebook, office之類的常規應用,到Windows, Linux等操作系統),當一個威脅程序安全的漏洞被發現的時候,程序的升級是可以迅速地甚至是在用戶完全不需要干預的情況下進行的(比如windows的各種自動更新,或者你手機上微信過段時間就會自動重新安裝,升級)。之所以鏈下程序可以做到這一點,是因為程序開發者完全控制了程序版本的升級和分發。記得前一段時間的Linux SSL漏洞,各大Linux分發商第一時間出了補丁,隨后全球的系統迅速升級在短時間大范圍地修補了這個問題。

    然而區塊鏈智能合約和普通的鏈下程序完全不同,一旦被部署,程序發布者立刻對這個程序的核心邏輯失去了控制。這也正是我們之前多次講到的區塊鏈核心價值:所有互不信任的人都信任這個大家共同維護的,一旦部署就不可變更的區塊鏈程序。
    區塊鏈“原教旨”主義者更是有“code-is-law” (代碼即是最高規則)的說法。由于區塊鏈智能合約具有這樣的“一旦部署不可變更”的特性,一旦有程序漏洞或者安全性問題,只能眼巴巴的看著程序被黑,錢被搶。你沒有辦法簡單的說:我們升級打補丁就好了。
    智能合約就像一個深空探測火箭,一旦發射就不受任何人控制。即是火箭發射10秒之后你發現一個小數點算錯,你只能眼睜睜的看著火箭爆炸成一個絢爛的禮花彈。我請大家花10秒體會一下這種絕望的感覺。

    有人會說:那這個很簡單啊,只要給當初部署區塊鏈程序的人緊急暫停區塊鏈程序的能力就好啦。但這個不行啊同志,這樣的話,智能合約的可信任性會被大大削弱,因為實際上智能合約的命運還是掌握在那個程序的部署者手中的,與整個區塊鏈的核心價值背道而馳。

    老董是不是在危言聳聽?

    很多剛入坑的朋友可能并不是很了解去年發生的一個程序漏洞事件:DAO Attack(http://www.coindesk.com/understanding-dao-hack-journalists/)。 給大家迅速回顧一下。
    DAODistributed Autonomous Organization,中文譯分布式自制組織是什么呢?具象的來說,就是你開個公司,股東們投錢到這個公司里面。但是呢,你們把整個公司的預算決算表決過程,甚至辦事章程區塊化為區塊鏈智能合約。即整個公司的運行由所有股東通過智能合約投票表決(票數多少和投資額度成正比)。這個是DAO的整體概念,那么這個DAO最直接的應用是什么呢:眾籌風投。簡單來說,就是大家集中投資到一個池子(the DAO)里面,每人獲得了相應的投票權。


    這之后,希望獲得這家眾籌風投投資的初創公司,就來給公司的“股東”公布自己的商業計劃和期望融資額度和股份出讓意愿,然后每一個投資DAO的股東開始投票,最終決定是否共同投資這個初創公司。

    按理來說,這個“投票決定接受不接受融資請求”的邏輯確實是挺簡單的,感覺搞個程序實現實現不是什么難事。很多人也是這么想的,而且覺得這事兒靠譜啊,群策群力搞風投,棒棒噠。于是在短時間內,眾籌額度達到了1.5億美元(如果按照今天的ETH價格算,大概是13億美元)。老董也是當時的眾多投資者之一,主要是因為DAO提供了短期穩定價值貨幣,同時有比較穩定的upside。

    之后一天半夜,我剛剛睡著,手機突然發了狂,不停的震動收到一堆郵件。一看,原來是我寫的交易平臺數據監控程序掛了,自己寫的郵件通知系統在瘋狂報警。

    心說怪了,這程序已經跑了六個多月了穩定運行,而且一般的錯誤都能自己恢復過來,這到底是怎么了。心想算了,估計交易平臺系統維護掉線了,明天再說吧,就把手機關了機。

    Z

    Z

    z

    z

    z

    z

    .

    .

    .

    .

    .

    .

    .

    .

    .

    .

    第二天,老董睡眼惺忪的起床刷牙,邊刷手機想看一眼交易平臺昨晚怎么回事兒。于是看到了下圖的優美價格直線,老董嚇得把牙膏都咽了。

     

    一夜之間 價格砍半。

    老董確認了自己不是在做夢之后,迅速刷起了新聞,得知了晴天霹靂:眾籌風投 the DAO合約代碼被發現漏洞,價值6000萬美元的ETH被盜,而且盜竊還在不斷進行當中。

    昨天我的數據監控系統宕機正是因為the DAO被黑之后,最先知道消息的投資者全部恐慌性出逃,導致當時不成熟的交易平臺交易系統徹底被擠爆。我本來可以躲過一劫,但居然就這么被我睡過去了。

     

    相信我,任何粗口都無法表達我當時崩潰的內心,對自己,以及對被黑的DAO。

     

    各大論壇上也是徹底炸了鍋。但同時一個非常具有魔幻現實主義的的場景出現了:所有人都在齊聲咒罵著攻擊DAO的黑客,但所有人都只能眼巴巴的看著!

     

    眼巴巴的看著啊朋友們!

     

    大家呆呆地站在原地,看著盜賊一卡車一卡車的把自己的錢燒成灰燼。因為智能合約一旦部署,無法修改,DAO is code, code is law。甚至從這個角度來說,盜賊“并沒有犯錯”,只是執行了智能合約中的某種隱藏的邏輯(漏洞)

     

     

    最為搞笑的是,這個賊偷到一半,居然特么停手了!留了一多半的錢在眾籌風投里面,讓眾多投資者在風中凌亂。

     

    所有人都懵逼了,大家不約而同的都在想:這接下去怎么搞???難道就這么被搶了?

     

    關鍵是,現在這劫匪是自己決定停下來搶劫的腳步啊,隨時都可以再次出發!而且因為所有的transaction都是公開的,任何對EVM工作機制有深度理解的人,都可以通過分析這次搶劫工作的方式,一秒變劫匪好么!整個Ethereum系統可以說是面領著前所未有的重大危機。

     

    萬幸的一點是,盜賊利用的漏洞是在DAO分割(split)的代碼當中,而分割出去的子DAO需要等28天才能將里面的錢取出來,這給大家帶來了一點緩沖的時間和希望。

     

    那么當務之急,就是止血:斷絕劫匪繼續取錢的能力,以及最終將錢取走的能力。為此大家提出了在ETH上進行“軟分叉”。

     

    所謂軟分叉,是指不改變任何已經發生的轉賬和程序執行歷史,也不改變整個protocol,但對未來的交易和程序執行作出針對性限制。簡單來說就是,希望所有人都能共同抵制對DAO的任何改變(包括黑客的取錢行為)。將未來所有對DAO的操作,暫時放入黑名單,冰封整個DAO的智能合約。

     

    “軟分叉”也是“分叉”,從嚴格意義上來講,也是對區塊鏈信任程度的一個損壞,因為你可以認為軟分叉在挽救DAO,但同樣可以認為,軟分叉是在“和諧”關于DAO的所有操作,這也是嚴重有悖于區塊鏈無人控制+無人和諧的核心價值的。

     

    但兩害相權取其輕,大家普遍同意了進行軟分叉。然而天有不測之風云,在軟分叉就要開始的前幾個小時,有人發現了軟分叉本身是有重大漏洞的。一旦軟分叉發生,攻擊者可以利用這個漏洞使得整個區塊鏈充滿垃圾transaction,導致整個區塊鏈停擺。

     

    唯一的希望之火破滅了,ETH價格再次大跌。

     

    那么留給大家的只有一個選擇:硬分叉。

     

    什么是硬分叉呢?簡單的來說就是“耍賴”。大家一起,暴力地將已經發生的搶劫有關的所有轉賬記錄全部抹掉,以及整個DAO的智能合約全部重寫成一個簡單的取款機,然后大家各自取款,回家找媽媽。

     

    聽起來喜大普奔?

     

    然而并沒有,非常沒有,特別沒有!

     

    大家想想這什么意思:簡單來說,這就是意味著,區塊鏈上的信息是可以更改的;區塊鏈的共識其實是不穩定的,隨時可以被抹掉的。

     

    因為這和區塊鏈所提供的核心價值是背道而馳的。

    因為這和區塊鏈所提供的核心價值是背道而馳的。

    因為這和區塊鏈所提供的核心價值是背道而馳的。

     

    不帶這么玩兒的啊!當初不是這么保證我們的好么!

     

    從價值觀上來講,這事兒確實是不能干的,因為對整個Ethereum的信用程度確實有很大損害。但是如果不硬分叉,強盜薅了那么多的羊毛,對整個Ethereum系統的信心(雖然這完全賴DAO自己)也會大打折扣。

     

    前有餓狼,后有猛虎,怎么搞?

     

    社區展開了長時間的辯論,期間各種drama不表。

     

    最后ETH內部分裂,變成了兩種貨幣:一是堅持原教旨主義的ETC,以及進行了硬分叉重置了整個DAO attack的ETH。整個Ethereum市場和信心也陷入了漫長的寒冬。

     

    老董是基本支持ETH的,不光是因為一己私利。我認為,任何早期技術,都應該給予犯錯和改正的機會。ETH當時還處在幼年,雖然硬分叉絕對不是一件好事,但兩害相權取其輕,還是可以干的。但老董也知道,only time and market will tell。

     

    講了這樣一個小漏洞引發的巨大慘案,想必大家已經了解了在智能合約系統下,安全性的挑戰和其他鏈下系統的不同之處。而且也意識到了這個風險的系統性。

     

    老董自己寫了非常多的程序,明白程序漏洞是永遠無法避免的。但大家想想,the DAO這么一個簡單的邏輯,都會出問題,那么之后更多花哨的,復雜的區塊鏈應用會不會出問題呢?老董覺得,這根本不是一個會不會的問題,問題100%會出。無非就是,什么時候出問題,以及出多大的問題而已。

     

    那么這么巨大的系統性風險,如果沒有可能的解決方法,區塊鏈投資還搞什么?搞搞投機好了?

     

    不不不,老董相信,沒有過不去的火焰山,尤其當ETH開著一輛用金子坐的車的時候。

     

    本文轉載自公眾號“老董區塊鏈干貨鋪

    整編 | WangMe


     

    作者簡介:

    老董(BS'12, PhD' 17),UIUC計算機科學系博士,主要研究領域:高速低延遲廣域網數據傳輸系統,網絡安全與形式驗證,博弈論,企業軟件定義數據中心架構,分布式系統。

     

    博士期間作為創始成員加入網絡安全初創公司Veriflow,現擔任核心算法與系統架構技術團隊負責人,同時兼任大客戶管理和一部分市場運營的工作。

     

    在業余時間,老董是區塊鏈技術愛好者,區塊鏈技術全棧工程師。

     

     

    點擊“閱讀原文”,查看公眾號所有歷史消息。

    本文鏈接:/kp/bi/201712/447.html

    來源:白話區塊鏈

    白話區塊鏈

    區塊鏈世界入口,人人都能看懂的區塊鏈;24 小時熱點實時追蹤。

    毛片免费看