在區塊鏈中,專案方都需要利用程式碼打造他們的產品,而幫助專案審核代碼的安全性則尤其重要,這也是「審計商」專門的領域,本文將介紹關於「審計商」的解析。
(前情提要:PoR|傳統審計方急退場,CEX「交易所資產儲備證明」將何去何從? )
(背景補充:Merlin被駭是「Rug Pull」?分析師指官方藏後門,Certik否認安全審計出包 )
在加密行業中,審計是保證專案完整性和安全性的不可或缺的部分,細心觀察不難發現,比較優秀的專案諸如 Lido、Compound 在審計方面的投入是 7 位數美金起步的「天文數位」,並且往往會就同一批產品程式碼,僱傭多個審計服務商介入審計。
這一方面可以看出 DeFi 夏天以來,鏈上頂級業務 / 產品所獲頗豐,有充足彈藥持續打出,構築更縱深的競爭壁壘;另一方面其實也為同行中的諸多專案、創業者展開了審計的一個切面:審計工作並不會只是「花錢 – 僱人 – 出報告 – 宣發」的流程化簡單工作,而是應該有一套完整的「審計觀」和方法論 —— 什麼樣的產品交付需要審計?如何挑選供應商?如何最大程度確保審計工作的有效性?怎樣可以最經濟實惠又安全完備地完成審計工作?
筆者將在下邊的文章中,結合自身經驗,從具體做專案,搞創業的角度出發,與各位讀者討論下我心中理想的「審計觀」是如何。
安全服務商縱覽,貨比 N 家
審計供應商的可選性在近 2-3 年的光景中可謂是噴湧式增長,盤點下來市面上比較常見的審計供應商大概有 15-20 家左右(排名不分先後)。
就筆者經驗和其他同行的交流,中國的 Peckshield、SlowMist,海外 Trail of bits、OpenZeppelin 的綜合美譽度、技術能力和覆蓋完整度屬於第一梯隊。
整體上,華人主導的供應商(主要是第一行)仍然是加密行業中文專案的主要選擇,時差為零且語言暢通,報價上也比較高性價比,國產供應商的報價基本上是 12K-15K USD / 人 / 周的水平,隨著市場的淡季 / 旺季會有所波動;
相比之下,海外的供應商在中文行業存在度比較低,但這些供應商或因品牌溢價,或因創始團隊資源關係,或因覆蓋度 / 技術能力,普遍定價還是明顯高於華人供應商,基本上是 1.5-2 倍的報價差異,並且往往能夠出一批鉅額的訂單,譬如 OpenZeppelin 曾經被 Compound 以單季度上百萬美金的價格聘請進行審計。
與市面上主流的審計供應商平行存在的還有一類服務商,諸如 Immunefi、PwnedNoMore。筆者定義為「白帽社群」,在傳統的安全圈子中應當屬於比較成熟的業態,在加密行業中,屬於新近兩年冒出來的,不過依然吸引了不少專案進駐採用,基本的運作模式就是專案方去該平臺釋出希望被審計 /debug 的模組(前端、後端、合約等),定義 bug 的嚴重度以及對應的賞金,以期吸引「白帽」主動 report bug,解決問題。這種形式應該視為「公司制審計商」的一種有益補充,須要專案方能夠精準,清晰有效地定義 bug 的分類、層級和需要對方覆蓋的範圍,並大方地給出懸賞金,往往能獲得意外的驚喜。
審計流程、方法論和省錢指南
對於專案方而言,首次要請審計商 review 前,需要一定的設計和安排,一般建議要保證做到這幾個點:
- 送審的程式碼在內部要進行過 2 輪以上的測試,如果時間允許,最好是再有一輪社群的公測後再送審,避免「顯而易見」的問題需要付費解決;
- 送審的程式碼要儘量確保按照專案方的 milestone,批量打包,一次性交付審計,避免拉高成本;
- 確保送審的對接人清楚產品整體的執行原理、大致的程式碼量以及主要模組的分佈,避免在 initial setup 階段需求傳達不清,給專案拿回一份不合適的報價單;
- 排期要比較,重要產品節點有必要付費鎖定排期。
儘管市面上的供應商諸多,但是每家的排期差異巨大,送審人有必要就同一段程式碼向至少 3 個審計商發出評估請求,獲得排期、報價和工作量評估,重要的產品節點務必預付費一部分(一般建議 30%-50%),鎖住審計商的排期,避免影響進度。
就筆者的經驗,中文供應商的預約建議至少提前 2-4 個周(相較於希望報告產出的日期),海外供應商的預約至少提前 1 個月(這裡主要是考慮時差、對接人轉介以及老外普遍不 996 的耗時)。
在秉承上邊的送審原則後,確定排期、報價,專案程式碼交付審計商開始 review,過程中,比較負責任的審計商一般都會就 review 中的疑問和專案方進行討論,具體的對接人 & 專案方的技術人員有責任也有必要多和審計商溝通排解問題,對接人在過程中須要確保:
- 審計的中間進度如期進行;
- 審計商提供的初版審計報告須要讓專案團隊中的 2 位不同技術人員去交叉 review,再同步審計商定稿與否;
- 審計對接人要做好勾聯同步的作用,確保本團隊關鍵技術、產品人員,與審計商中實際進行程式碼 review 的人建立群聊,而不是被動地等待審計商出報告和簽字;
- 錦上添花】對接人能夠在審計過程中對市面上其他家審計商發的「安全事件 review 報告」保持關注,對可能匹配自家專案的情況,主動提出和審計商溝通,前置地把可能沒覆蓋的問題給 debug。
專案方要有鮮明的「偏見」,保留後門有必要
審計公司大多能夠完成的工作是程式碼本身的品質、邏輯、安全性是否完備、十足,對於程式碼和業務關聯觸碰很少。往往會出現程式碼邏輯 / 安全性上調整到位了,業務邏輯受到了影響的情況。
譬如對於合約許可權升級,費率調整、token 增銷等關鍵 module,從業務早期發展來說,其實需要一個專案方內能做決策的 core member 單籤控制,應對市場變化 / 突發安全事件及時調整,而不是一味地追求多籤控制,影響危機時刻專案的應變能力。
合理的「後門保留」/「超級許可權」不僅事關專案,亦可能攸關行業生死,試想,如果 BitMex 不曾拔網線,Circle 不曾停贖回,BNB Chain 不曾「停鏈維護」,行業如今又是什麼光景?
持續溝通和分享才能推動長線安全
審計商的服務只能 debug 而不能確保 100% 安全,安全事故總有可能在某個點引發。
一方面專案方要主動和審計公司溝通,商討如何處置(可能是賠付、免費二審、退款,或者其他方案)。
另一方面,每一個安全漏洞的發現 & 補足其實也都事關行業整體的進步,在不涉及專案方關鍵商業利益的情況下,鼓勵所有專案方積極與審計公司一起,公開化地 recap 每個類似的問題,能更好地讓行業共享一套更高的安全標準,其實也是在長期地降低每家專案方審計的成本。
專案方決策層應具備 hakcer 思維,重視社群力量
審計是一場曠日持久的資金戰爭,是專案方競爭的重要壁壘。
一方面應該在每一個產品的 milestone 之間都持續地投入資金,僱傭知名、可靠的外部審計商來覆蓋可能的安全漏洞;另一方面也應該重視社群的力量,鼓勵諸如 Immunefi、PwnedNoMore 這樣子白帽社群介入專案的安全 buidl。
筆者曾以約 30K 美金的賞金,成功請到一位社群中的白帽人員,debug 並協助修復部署了一個託管百萬美金的合約。
少另闢蹊徑,多複用成熟合約,也是降本增效的好手段。
加密行業的創業門檻已然大幅提高,數百萬美金的融資額即使在眼下的市面上,也屬於屢見不鮮的存在。從前邊的討論可以看出,要真正支撐一整套可靠、安全、穩定的 dApp 非常困難,哪怕是 Compound、Lido、Uniswap 等行業頂流應用也無法保證十足安全。
所以,從成本節約的角度出發,每個初創專案在合約、模型的選用上要最大可能巢狀入已有的成熟設施,避免另闢蹊徑,常見的 DEX、Lending、收益聚合器、流動性質押 & 再質押,乃至衍生品交易、合成資產等品類,其實都有一批成熟、可用的基礎設施給新晉專案方複用、巢狀,這在給專案方降低安全成本的同時,也有效地增強了專案本身的安全性,並且能夠確保系統的安全隨著複用物件的升級而進化。
從行業的整體角度來講,要做到十足的安全,其實需要市場上所有主體的參與和貢獻。
對於審計商而言:
- 防範專案的小心思。部分專案的常見操作是把真正去審計的程式碼,和面向社群交付上線的程式碼搞成兩套,這樣子審計商其實是白白掛了牌子和責任,所以在專案正式部署後,一般建議審計商再去二次查驗下實際版本的程式碼;
- 有必要探索和「保險」的結合,對於採購服務到一定量以上的客戶,理應在安全事故發生後有賠付機制,保障專案方的權益;
- 更廣泛地和同行公佈審計案例 & debug 經驗。審計商其實和醫療行業類似,整體的進步一方面依靠長線的技術、科研投入,另一方面高度依賴案例量的積攢。從這個角度看,時常被使用者調侃的「PR 式審計」其實也是推動行業進步的一種動能,至少更多的審計案例被行業共享。
對於使用者而言
- 冷熱錢包分離,專門 dApp 用專門的錢包地址,常常清理陌生授權,不操作莫名的空投 token 等,degen 的時候永遠要安全生產;
- 高淨值的使用者有必要養成常常翻閱各家審計商公佈的安全事件報告的習慣,對常見的安全風險做到心中有數。
📍相關報導📍
幣安AI報告》ChatGPT審計智能合約「分辨嚴重漏洞」慘輸人類