天天看點

區塊鍊DAPP安全标準的一些建議

本文的目的是強調安全問題,并為 DApp 開發人員提供必要的資訊,以安全地啟動他們的項目或減輕可能發生的任何問題。

正常注意事項

沒有什麼是絕對安全的。沒有單一的通用方法足以確定軟體安全。系統必須依賴多種安全增強方法。安全性增強實踐應用越多越好。任何形式的驗證、安全審計、開發更好的程式設計語言、智能合約的可更新性或任何其他措施都不能保證軟體實作的絕對安全。聲稱某一方提供的服務可以保證 DApp 的完全安全,這要麼是一個神話,要麼是一個謊言,要麼是一個營銷舉措。

安全改進方法和措施的組合可以顯著降低 DApp 被黑客攻擊的風險。每個安全改進政策都會引入一個新的安全層,強烈建議使用多個 “安全層”。将重點放在系統容錯上,而不是試圖使其不可破壞,可能會更好。在 DApp 中,容錯是指 DApp 在檢測到惡意活動時進行修複/調試的能力。在評價安全增強方法時,安全審計雖然是最昂貴的方法,但卻是最有效的方法之一。

安全改進實踐

開發人員為了提高 DApp 的安全性,必須考慮的最常見的措施:

  • 開發開源應用程式。使您的應用程式開源可以提高安全性,并確定執行諸如 “BUG賞金” 等安全增強方法的能力,這些方法進一步提高了系統的總體安全性。有一種誤解認為對公衆隐藏系統的源代碼可以防止缺陷和漏洞被利用。這種誤解被稱為通過模糊實作的安全性。
  • 安全審計。安全審計是由第三方專家或安全專家團隊對智能合約代碼進行的同行審查。這被證明是最有效的方法之一,因為它可以覆寫任何類型的邏輯和特定于應用程式的錯誤。有專門的公司為智能合約開發人員提供安全審計服務。
  • 漏洞報告獎勵。BUG 獎勵是将源代碼釋出給社群評審,并為報告發現的漏洞或缺陷提供獎勵的做法。如果處理得當,漏洞獎勵也是確定系統安全性的一種非常有效的方法。發現漏洞的獎勵必須與審閱者所執行的工作量相比對,并且在審閱者決定利用漏洞而不是報告漏洞的情況下,必須與可能造成的損害程度相比對。
  • 自動化異常檢測。在 DApp 中,異常檢測是智能合約的一個特殊功能,當智能合約中出現不想要的行為時,會自動觸發對策/報警。在某些情況下,可以預測哪種行為是惡意的,并實作一個 “檢測功能” 和 “合同禁用觸發器”。例如,如果你開發了一個應用,一個玩家連續赢了 30 次,那麼很明顯他可能是在作弊,就需要進一步調查。禁用智能合約可能是值得的,這樣可以防止惡意玩家在利用合約漏洞的情況下耗盡智能合約。異常檢測可以作為一種看門狗服務實作,由第三方鍊外服務操作,而不需要在智能合約邏輯中實作。這種方法的有效性取決于智能合約開發人員确定哪種活動應該被視為 “異常” 的能力。這種方法對于防止特定于應用程式的故障非常好,但僅靠它是不夠的。這種做法應與其他安全改進措施結合使用。
  • 手工測試和測試網部署。盡可能的測試你的軟體。讓智能合約開發人員和所有團隊成員親自嘗試系統。在測試網絡釋出一個系統版本,讓社群使用幾個月,然後再釋出最終版本。這肯定會減少軟體最終版本中出現漏洞的風險。這不是一種充分的安全改進方法,但它足夠廉價和有效。
  • 自動化測試。自動化測試或單元測試涉及到開發一個特殊的軟體,該軟體将與 DApp 互動,以便檢測任何缺陷并確定 DApp 對任何類型的輸入的響應的正确性。這種方法的有效性顯然取決于測試軟體實作的正确性。一般來說,自動化測試是一種輔助工具,可以減少安全審計員/社群評審員/軟體測試人員的開銷。自動化測試可以覆寫一般軟體實用程式的正常案例,但在識别邏輯錯誤/業務模型缺陷或任何其他特定于應用程式的潛在威脅方面,它被證明是糟糕的。自動化測試并不是確定整個系統安全的可靠措施。這些程式必須結合使用,并與其他安全增強程式一起使用。
  • 形式化驗證。形式化驗證很像自動化測試,是減少軟體測試人員/審計人員/開發人員開銷的另一種方法。這在某些情況下是有幫助的,但形式驗證不是確定系統安全的充分的方法,不能完全依賴。
  • 遵循良好的程式設計實踐。安全性并不是一個新的程式設計領域,有許多衆所周知的、被廣泛采用的方法和實踐已經經過了時間的證明。堅持編碼标準。注釋你的代碼。強烈建議合約開發人員閱讀他們打算使用的平台的編碼标準描述。建議您閱讀大型程式設計社群所采用的令人尊敬的編碼标準,如 GNU coding Standard。這是非常重要的,它不僅僅是一個偏好的問題!編碼标準的目的是使代碼片段所表示的邏輯盡可能簡單明了,這大大提高了審計人員/軟體測試人員/代碼審查人員識别和報告系統缺陷的能力,且代碼的可讀性更好。
  • 盡可能使應用程式子產品化。遵循軟體開發的這種方法将提高代碼的可稽核性。這也增加了審計和測試的有效性。與面向對象的實踐相反,過程式程式設計語言可能很難做到這一點。然而,将程式劃分為獨立的子產品可以更好地測試/調試和每個子產品的獨立審計。這也提高了系統的可更新性,這對容錯很重要。

我們在開發 DApp 項目時,應結合項目自身的情況,考慮應用以上幾種安全措施的組合來讓我們開發的 DApp 足夠安全。尤其是哪些涉及到資金轉賬的項目,因為一個惡意漏洞被利用可能會讓你遭受嚴重的損失。

繼續閱讀