區塊鍊是個偉大的發明,它帶來了某些生產關係的變革,讓「信任」這種寶貴的東西得以部分解決。但,現實是殘酷的,人們對區塊鏈的理解會存在許多誤區。這些誤區導致了壞人輕易鑽了空子,頻繁將黑手伸進了人們的錢包,造成了大量的資金損失。這早已是黑暗森林。

基於此,慢霧科技創始人餘弦傾力輸出——區塊鏈黑暗森林自救手冊

原用標題:慢霧出品| 餘弦:區塊鏈黑暗森林自救手冊

目錄

  • 引子
  • 一張圖
    • 創建錢包
      • Download
      • Mnemonic Phrase
      • Keyless
    • 備份錢包
      • 助記詞/私鑰類型
      • Encryption
    • 使用錢包
      • AML
      • Cold Wallet
      • Hot Wallet
      • DeFi 安全到底是什麼
      • NFT 安全
      • 小心簽名!
      • 小心反常識簽名!
      • 一些高級攻擊方式
    • 傳統隱私保護
      • 操作系統
      • 手機
      • 網絡
      • 瀏覽器
      • 密碼管理器
      • 雙因素認證
      • 科學上網
      • 郵箱
      • SIM 卡
      • GPG
      • 隔離環境
    • 人性安全
      • Telegram
      • Discord
      • 來自 “官方” 的釣魚
      • Web3 隱私問題
  • 區塊鏈作惡方式
  • 被盜了怎麼辦
    • 止損第一
    • 保護好現場
    • 分析原因
    • 追踪溯源
    • 結案
  • 誤區
    • Code Is Law
    • Not Your Keys, Not Your Coins
    • In Blockchain We Trust
    • 密碼學安全就是安全
    • 被黑很丟人
    • 立即更新
  • 總結
    • 安全法則及原則
    • 貢獻者
    • 那些官網

引子

首先,需要先恭喜你的是:你看到了這本手冊。我不清楚你是誰,但如果你持有加密貨幣或對這個世界有興趣,未來可能會持有加密貨幣,那麼這本手冊值得你反复閱讀並謹慎實踐。

其次,需要有心理準備的是:本手冊的閱讀需要一定的知識背景,我盡量照顧初學者,但很難。我希望初學者不必恐懼這些知識壁壘,因為其中大量是可以 “玩” 出來的。如果你遇到不懂的知識點,需要擴展了解的話,建議你用好 Google。並強烈建議你掌握一個安全原則:網絡上的知識,凡事都參考至少兩個來源的信息,彼此佐證,始終保持懷疑。

是的,始終保持懷疑!包括本手冊提到的任何知識點:)

區塊鍊是個偉大的發明,它帶來了某些生產關係的變革,讓 “信任” 這種寶貴的東西得以部分解決。這已經很難得了,不需要中心化、不需要第三方角色,有些 “信任” 基於區塊鏈就可以得到很好解決,不可篡改、按約定執行、防止抵賴。但,現實是殘酷的,人們對區塊鏈的理解會存在許多誤區。這些誤區導致了壞人輕易鑽了空子,頻繁將黑手伸進了人們的錢包,造成了大量的資金損失。這早已是黑暗森林。

在區塊鏈黑暗森林世界裡,首先牢記下面這兩大安全法則:

  1. 零信任。簡單來說就是保持懷疑,而且是始終保持懷疑。
  2. 持續驗證。你要相信,你就必須有能力去驗證你懷疑的點,並把這種能力養成習慣。

注:本手冊中,安全法則就這兩大,其他都可以認為是這兩大推論出來的安全原則。

好,引子部分就到這。下面我們從一張圖開始,進入到這個黑暗森林,看看我們都會遇到哪些風險及我們應該如何應對。

一張圖

在仔細看後文之前,你可以先粗略過下這張圖。這張圖是你在這個世界(無論你如何稱呼這個世界,區塊鏈、加密貨幣還是 Web3 都行)里關鍵活動有關的內容,從流程上包括三大部分:創建錢包、備份錢包及使用錢包。

我們順著這三大流程,將涉及到的每個關鍵點展開分析。

創建錢包

錢包最最最核心的就是那個私鑰(或助記詞)。

私鑰長這樣:

0xa164d4767469de4faf09793ceea07d5a2f5d3cef7f6a9658916c581829ff5584

助記詞長這樣:

cruel weekend spike point innocent dizzy alien use evoke shed adjust wrong

注:用以太坊舉例,關於私鑰/助記詞的基礎知識請自行擴展。

私鑰即身份,如果私鑰丟了或被盜了,那麼這個身份也就不是你的了。錢包應用其實很多,知名的也不少,我並不打算也不可能一一介紹。但該手冊確實會提到一些具體的錢包,請注意,能被提到的必然是我有基本信任的,但我不擔保你在使用過程中可能出現的安全問題或目標錢包可能出現並不在我預期內的安全風險(後文我不會再不斷去廢話這些,引子裡提到的兩大安全法則希望你牢記心中)。

錢包從應用分類來說主要包括幾種:PC 錢包、瀏覽器擴展錢包、移動端錢包、硬件錢包及網頁錢包等。從觸網與否來說主要可以分為冷錢包和熱錢包。當我們要進入這個世界,首先要思考將擁有的錢包的用途,用途決定了你將用哪個錢包,同時用途也決定了你會如何對待這個錢包。

無論你選擇什麼錢包,但至少有一點可以肯定的:在這個世界玩久了後,你不可能只有一個錢包。

於是這裡我們又需要記住一個安全原則:做好隔離,也就是雞蛋不要放在一個籃子裡。一般來說使用越頻繁的錢包,自然也加大了出問題的風險。時刻牢記:面對一個新事物時,先準備個單獨的錢包,用單獨的小資金去玩一段時間。除非你已經如我這般,經歷無數,對許多事物都了然於心。但,常在河邊走,哪有不濕鞋呢?

Download

單這麼簡單的一點,其實也不簡單,原因:

  1. 許多人(真是許多人)找不到正確的官網,正確的應用市場,於是安裝了假錢包。
  2. 許多許多人對下載了的應用不知道如何確認是否被篡改過。

於是,出師未捷身先死。還沒來得及進入這個世界,就已經錢包空空了。

針對上面的第 1 點,找到正確的官網是有技巧的,比如:

  • Google
  • 行業知名收錄,如 CoinMarketCap
  • 多問一些比較信任的人

好,上面這幾點得到的信息可以全部結合起來參考,互相佐證,最終真相只有一個:) 恭喜你,找到了正確的官網。

接著,你要下載安裝應用了,如果是 PC 錢包,根據官網提供的下載鏈接,下載後需要自己去安裝。但在安裝之前,建議做下是否篡改的校驗工作,雖然這個做法並無法防止源頭就被完全篡改的情況(比如官方自己內部作惡、內部被黑、官網被入侵替換了相關信息等等),但可以防止如:源頭被部分篡改、被中間人劫持篡改等這些情況。

是否篡改的校驗,實際上就是文件一致性校驗。常見的方式有兩種:

  • 一種是哈希校驗,比如 MD5、SHA256 等,MD5 絕大多數情況下夠用,但存在被哈希碰撞的極小風險,所以業內一般選擇 SHA256,夠用且夠安全。
  • 另一種是 GPG 簽名校驗,這個其實也很流行,強烈建議掌握 GPG 工具、命令、方法,雖然對於新人來說有那麼些費力,但上手後,相信我,你會很快樂的。

話雖至此,其實業內這樣做的項目方並不多,所以一旦遇到,真是難能可貴,彌足珍惜,比如一款比特幣錢包 Sparrow Wallet,下載頁面的 “Verifying the Release” 簡直良心了,提到的兩種方式都有清晰指南,可以直接參考學習:

https://sparrowwallet.com/download/

這個頁面提到的 GPG 工具有兩個:

  • GPG Suite,macOS 下運行的。
  • Gpg4win,Windows 下運行的。

如果你細心觀察,你會發現這兩個 GPG 工具的下載相關頁面其實都有給出兩種方法的一致性校驗說明,但不好意思的是,並沒手把手教你如何校驗。估計吧,都是認為你會是聰明人,該補上的知識你已經補上了:)

如果是瀏覽器擴展錢包,比如這世界家喻戶曉的 MetaMask,你唯一有機會注意的就是目標擴展下載頁面裡的用戶數多不多、評分情況如何,比如 MetaMask 在 Chrome 網上應用店裡,用戶數可是超過一千萬的,同時有兩千多用戶評分的,雖然最終評分並不高。有人要說這不可以刷出來嗎?這位朋友,是這樣的,刷,我相信,不過刷的量如此之巨大,當各方是傻子呢。

如果是移動端錢包,判斷方式類似擴展錢包,不過需要注意的是,iPhone 的 App Store 是分區的,加密貨幣在中國大陸被驅趕得不行,所以如果你用 App Store 中國區賬號下載到了錢包,建議只有一個:別用,換成如美區的 App Store 賬號下載吧。另外,通過正確的官網也能引導到正確的下載位置(比如全球知名的 imToken、Trust Wallet 等,官網安全一定要做好,官網都被黑了,那這安全責任就真大了)。

如果是硬件錢包,簡單來說,可以從官網源頭的引導下購買,不要直接去在線商城,到手後也需要留意是否存在被異動手腳的情況,當然有些針對硬件包裝的異動是很高明的,不一定都能看得出。此時建議:無論如何,使用時,先連續至少三次從頭開始的創建,記錄下生成的助記詞、相關錢包地址,不會重複就行。

如果是網頁錢包,非常不建議使用這種在線的錢包,除非你不得已,那麼識別好是官方的後,速戰速決吧,千萬別有任何感情依賴。

Mnemonic Phrase

一般來說,我們創建了錢包後,直接打交道的關鍵信息是助記詞(而不是私鑰),畢竟助記詞是方便人類記憶的。助記詞是有標準約定的(如 BIP39),這就對助記詞提了要求,比如一般 12 個英文單詞,也可以是其他數量(3 的倍數),不過不會超過 24 個單詞,要不然太複雜也就不助記了,數量少於 12 的話,安全性也不靠譜,12、15、18、21、24 都好說。不過從業內習慣來說,一般流行的是 12 位,安全性足夠,有的安全嚴謹到變態的如 Ledger 這類硬件錢包,24 位標配走起。還有除了英文單詞,也可以是其他的,比如中文、日文、韓文等等。但也不是什麼單詞都可以,有一個固定 2048 個單詞列表,具體參考:

https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md

創建錢包時,助記詞的出現是非常敏感的,請留意你身邊沒有人、攝像頭等一切可以導致偷窺發生的情況。同時留意下助記詞是不是足夠隨機出現,正常來說這些知名錢包生成的助記詞隨機數是絕對足夠的,這不以防萬一?你真的很難知道,拿到手的錢包到底有沒有萬一的貓膩。你也不要嫌麻煩,這些安全小習慣形成後,相信我,你真的會很快樂。最後,有的場景下,你甚至可以考慮斷網來創建錢包,尤其是你準備把該錢包當成冷錢包使用時,斷網簡直就是暴力美學。

Keyless

Keyless,顧名思義是無私鑰的意思。在這我們把 Keyless 分為兩大場景(注意,這裡的區分不代表業內公認區分方式,只能說是方便我講解):

  • Custody,即託管方式。比如中心化交易所、錢包,用戶只需註冊賬號,並不擁有私鑰,安全完全依託於這些中心化平台。
  • Non-Custodial,即非託管方式。用戶唯一掌握類似私鑰的權力,但卻不是直接的加密貨幣私鑰(或助記詞)。比如依托知名 Cloud 平台做託管、認證授權,此時知名 Cloud 平台成為木桶的那塊短板。還有利用了安全多方計算 (MPC) 來確保不存在單點風險,同時也結合知名 Cloud,將用戶體驗做到最好。

對我來說,Keyless 的幾種方式我都有使用。實力雄厚及口碑良好的中心化平台體驗好,只要不是因為自身原因導致的被盜幣(比如賬號相關權限被盜),這些平台也會兜底賠付。至於 MPC 為主的 Keyless 方案是我覺得很有前景且應該盡快普及的,我用過不錯的如(ZenGo、Fireblocks、Safeheron)。優勢很明顯,我這簡單提幾點:

  • MPC 算法工程實踐在這些知名區塊鏈上,越來越成熟,只需針對私鑰開展即可。
  • 一套思路可以解決不同區塊鏈的多簽方案差異巨大的問題,使其在用戶感知上通用,這是我們常說的:通用多簽。
  • 可以確保真實的私鑰從不出現,通過多方計算解決單點風險。
  • 結合知名 Cloud(或有人提的 Web2)讓 MPC 不僅安全且體驗更順滑。

優點明顯,但缺點也是有的,我也簡單提幾點:

  • 滿足業內公認標準且開源的,這方面的成熟度還遠不夠,各位仍需努力。
  • 有不少人說基本只玩以太坊系列(或者說基於 EVM 的區塊鏈),那麼 Gnosis Safe 這種智能合約方式的多簽方案也就夠了。

無論哪種方式,只要是你覺得安全可控的、用起來舒服的,那麼都是好方式,仁者見仁智者見智。

好,創建錢包的相關安全注意點就先介紹這些,有一些通用性的安全問題會統一在之後介紹,先不著急:)

備份錢包

許多挺厲害的人都在這踩坑了,其中包括我,常在河邊走,濕鞋我也認,好在這不是個大資產錢包,並且最終我在慢霧的兄弟幫我破解解決了。這也是厲害的地方,我沒備份好,我踩坑了,但我卻有厲害的資源能幫我解決這個坑。不過我也會冒冷汗,人之常情。冒冷汗的感覺你肯定也不喜歡,那就集中精力學習下如何安全地備份錢包吧。

助記詞/私鑰類型

我們所說的備份錢包,其實歸根結底是備份助記詞(或私鑰,為了方便介紹,後文一般情況下只提助記詞)。我們拿到的助記詞其實可以主要分為幾種類型:

  • 明文
  • 帶密碼
  • 多簽
  • Shamir's Secret Sharing,簡稱 SSS

這幾種類型,我簡單展開說說。

明文,很好理解,那 12 個英文單詞你拿到了,裡面的資產就是你的了。其實這個時候可以考慮做些特別的 “亂序規律”,甚至把某個把單詞替換為其他的單詞。這樣做對於壞人來說頭疼了,但如果這個 “規律” 你自己忘記了,就輪到你頭疼了。千萬不要覺得你頭疼是不可能的,相信我,一年、兩年、五年後,記憶這東西真的會錯亂。幾年前,我玩 Ledger 硬件錢包時,就踩坑了,助記詞 24 個單詞,我抄寫備份時打亂了順序,幾年後我忘記了排序規律,且不記得自己是不是替換了其中的單詞。如前面說的,我的問題後來解決了,專門的破解程序碰撞出了正確的助記詞順序且糾正了其中的個把單詞。

帶密碼,根據標準,助記詞是可以帶密碼的,助記詞還是那樣的助記詞,只是帶上密碼後會得到不一樣的種子,這個種子就是之後拿來派生出一系列私鑰、公鑰及對應地址。此時,你不僅要備份好助記詞,這個密碼也千萬別忘記了。順便說下,帶密碼的形式,除了配套助記詞,私鑰也有相關標準(如 BIP38),還有如以太坊系列常見的 Keystore 文件。

多簽,可以理解為目標資金需要多個人簽名授權才可以使用,多簽很靈活,可以設置審批策略,比如 3 個人都有鑰匙(助記詞或私鑰),需要滿足至少 2 人的簽名審批,目標資金才可以使用。每個區塊鏈都會有自己的多簽解決方案,比特幣系列的很好理解,知名的比特幣錢包都原生支持多簽。不過以太坊系列的,主要通過智能合約來實現多簽,如 Gnosis Safe。另外,除了這些比較普遍的多簽方案,還有一類正在流行的:MPC(Secure Multi-Party Computation),即安全多方計算,和傳統多簽體驗接近,但原理卻很不一樣,通過 MPC,可以實現通用多簽,並不需要不同鏈不同的多簽方式。

SSS,Shamir 秘密共享方案,作用就是將種子分割為多個分片(常見的每個分片有 20 個單詞),恢復錢包時,需要使用指定數量的分片才能恢復。具體參考業內最佳實踐:

https://support.keyst.one/v/chinese/gao-ji-gong-neng/zhu-ji-ci/chuang-jian-dao-ru-fen-pian-zhu-ji-ci
https://wiki.trezor.io/Shamir_backup

用了多簽、SSS 這類方案,其實會放心很多,避免了單點風險,但管理上也相對複雜了,而且這很多時候會涉及到多個人。便捷與安全是永恆的矛盾,具體看自己。但在法則、原則上千萬別偷懶。

Encryption

加密是個非常非常大的概念,無論對稱、非對稱還是其他什麼高級的,只要加密了後,多年以後,你或者你的災備人可以很好解開,而其他人解不開的加密就是好加密。

根據 “零信任” 這個安全法則,當我們在備份錢包時,每個環節都要假設可能會被入侵,哪怕物理環境,如保險箱。別忘了,這個世界除了你自己,並沒有其他人是完全可信的,其實有的時候自己也不可信,比如記憶可能會淡忘、錯亂等。但我不會把這個世界假設的如此可怕,否則最終還是會把事情搞砸了。

備份時一定要特別考慮災備。災備主要就是要避免單點風險,萬一你沒了,萬一你備份目標所在的環境沒了,該怎麼辦?所以重要的東西,一定要有災備人;重要的東西,一定有多處備份。

那麼,災備人的選擇我就不廢話了,看你信任誰吧。我重點提提多處備份。先看看備份位置的幾個基本形態:

  • Cloud
  • Paper
  • Device
  • Brain

Cloud,許多人談雲備份色變,似乎黑客真的就上天入地,來無影去無踪的。其實攻防對抗永遠都是成本對抗,看誰投入的大,無論是人才還是錢。對於我來說,我會比較信任 Google、Apple、微軟等提供的相關雲端服務,因為我知道他們的安全團隊是如何實力,安全投入是如何之大。但除了對抗外部黑客入侵,我還很關心內部安全風控的能力及隱私數據保護有關的約束力。我比較信任的幾個,都算是把這些我在意的安全風險規避得不錯的。但凡是絕無絕對。如果我選擇這些雲來備份我非常重要的數據(如錢包),我一定還會給錢包再做至少一次加密的。

我強烈推薦掌握 GPG,除了前面提到的 “簽名驗證” 用途之外,加解密方面安全性也足夠強了。關於 GPG 這塊的入門可以參考:

https://www.ruanyifeng.com/blog/2013/07/gpg.html

好,你掌握了 GPG:) 現在你已經在離線安全環境下用 GPG 加密了你的錢包(助記詞或私鑰)有關內容,你可以把加密後的文件直接扔到這些雲服務裡去了,保存好,沒事的。但這裡我需要提醒下,你 GPG 的私鑰別丟了、私鑰密碼別忘記了...

到這,安全帶來的麻煩似乎還沒適應,GPG 好不容易入門了,你還得備份好 GPG 的私鑰及私鑰密碼。其實真到這步了,你也熟悉了,再備份這點東西其實也就不麻煩了。這點我不展開,留給實踐出真知的你。

如果你想偷懶,還有一種方案是可以考慮的,只是安全性上會打點折扣,我不好衡量具體折扣多少,但有時候有的場景下我也會偷懶,於是我會考慮用知名的工具來做輔助。這個工具就是 1Password。1Password 新版本已經支持直接保存錢包相關內容,如助記詞、密碼、錢包地址等,這方便用戶。其實其他同類型工具(如 Bitwarden)也可以,只是使用起來不像這樣方便。

Paper,許多硬件錢包都會附帶幾張質量上乘的紙卡片,你可以將助記詞(明文、SSS 等形式的)抄寫在上面。除了紙質的,還有鋼板的(抗火抗水抗腐蝕,當然我沒驗證)。助記詞抄寫完成後,會做一次驗證,沒問題後,放進你覺得安全的位置,比如保險箱。其實我個人挺喜歡 Paper 的,Paper 所處環境不錯的話,壽命遠大於電子設備。

Device,各種設備吧,電子設備是常用的一種,電腦、iPad、iPhone、移動硬盤、U 盤等都可以拿來做備份,看個人喜好。然後設備間的安全傳輸,讓我比較有安全感的是:隔空投送 (AirDrop)、USB 等這類點對點且挺難出現中間人劫持情況的方式。只是我天然對電子設備不放心的一點是多年後可能就壞了,所以會保持每年至少一次的檢查習慣。有一些重複做法(如加密)參考 Cloud 小點裡的說法就行。

Brain,腦記很爽很刺激,其實每個人都有自己的 “記憶宮殿” 的,這玩意不玄乎,可以訓練,熟能生巧,加深記憶。有不少東西確實還是腦記好,至於到底是不是只唯一用腦記看你自己。反正注意兩種風險:一是時間會讓記憶淡忘或錯亂;二是自己可能出意外。這塊不多說了,請自行擴展。

現在你都備份好了。加密不能太過分了,否則多年以後等於 “同歸於盡”,因為到時候你可能自己都解不開。根據安全法則 “持續驗證”,無論過不過分的加密及備份方法,一定要做到定期不定期地驗證,驗證頻率得看你的記憶,有時候轉頭可能就忘記了。驗證不代表一定都要完整解開看看,只要整個過程不會錯,採用部分驗證也是可以的。最後,也需要注意驗證過程的機密性及安全性。

好了,長舒一口氣,其實入門是最難的,以上你都準備好後,咱們開始真正進入這個黑暗森林吧:)

使用錢包

當你創建及備份好錢包後,真正的大挑戰才來了。除非你非常的佛系,不怎麼折騰持有的價值資產,平時也不會去玩以太坊系列的 DeFi、NFT、GameFi 等智能合約有關的項目,或者說當下喜歡提的 Web3。那麼實際上你的資金是挺安全的。

AML

嗯,也只是 “挺安全”,因為這裡還是有風險的,所謂 “人在家中坐、禍從天上來”。為什麼這樣說呢?你想呀,你最開始的加密貨幣是從哪裡來的?不會是憑空出現的吧?那麼在加密貨幣活動可能中,你拿到的加密貨幣都可能遇到 AML(Anti Money Laundering) 即反洗錢風控。也就是說你此刻持有的加密貨幣可能是不干淨的,甚至如果足夠倒霉,還可能存在被直接在鏈上凍結的情況,比如公開報告中 Tether 曾經在執法單位的要求下凍結了一些 USDT 資金。被凍結列表可以看這:

https://dune.xyz/phabc/usdt---banned-addresses

驗證是否被 Tether 凍結,可以在 USDT 合約地址進行:

https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#readContract

在 isBlackListed 輸入目標錢包地址即可判斷。USDT 所在的其他鏈大體同理(別較真)。

但你的比特幣、以太坊是不會出現鏈上凍結情況的,也許未來出現了這個情況,那這點本來非常堅定的去中心化信仰可能也就沒了。我們現在經常聽到的加密貨幣凍結實際上絕大多數並不是發生在鏈上的,而是發生在中心化平台裡,如中心化交易所(Binance、Coinbase 等)。你的加密貨幣在這些中心化平台裡,意味著你並不是真正意義上持有這些加密貨幣,中心化平台凍結的其實是你的賬號,尤其是你的交易、提幣權限。凍結這個概念其實很容易對圈外人造成無解,於是出現一些很爛的自媒體胡亂解讀及散播比特幣的各種陰謀論。

雖然你的比特幣、以太坊等不會在鏈上被凍結,但如果你的這些加密貨幣本身就涉及到相關執法單位在處理的案件,一旦你的加密貨幣轉移進中心化平台,這些中心化平台就有可能因為 AML 等要求將你的加密貨幣凍結。

為了比較好地避免 AML 問題,需要選擇口碑好的平台、個人等作為你的交易對手。別瞎搞基本問題不大。如果要深度地解決這些問題實際上也是有不少辦法的,比如以太坊系列上,幾乎所有壞人及特別在意隱私的人都會選擇 Tornado Cash 進行混幣。更多的方法就不提了,因為這些方法實際上也會被用來作惡。

Cold Wallet

冷錢包有好幾種使用方法,對於錢包本身來說是不聯網的,那麼就可以認為這是個冷錢包。那麼不聯網如何使用?首先,如果僅僅是接收加密貨幣,問題不大,配合個觀察錢包體驗就已經挺不錯了,比如 imToken、Trust Wallet 等都可以直接添加錢包地址,成為目標錢包地址對應冷錢包的觀察錢包。

如果冷錢包要發送加密貨幣,常見的方式有幾種:

  • QRCode
  • USB
  • Bluetooth

這幾種都需要專門的應用(這裡稱之:Light App)搭配冷錢包使用,這個 Light App 是聯網的,包括前面提到的觀察錢包。我們只需明白其中本質原理就會明白這些方式了。本質是:最終只需想辦法把簽名後的內容廣播上鍊。我大概解析下過程:

  • 待簽名的內容由 Light App 通過這些方式傳輸給冷錢包。
  • 簽名由擁有私鑰的冷錢包搞定後再通過這些方式傳輸回 Light App。
  • Light App 將簽名後的內容廣播上鍊。

所以這裡無論是二維碼 (QRCode)、USB、還是藍牙 (Bluetooth) 等方式,用途就是如上所說。當然不同的方式會有不同的細節,比如二維碼信息容量是有限的,遇到簽名數據很大的時候就得拆分。

這樣使用似乎麻煩了點,不過習慣了就好,甚至滿滿安全感。但,千萬別把安全感加滿,因為這裡還是有風險的,已經許多案例是因為這些風險而導致損失慘重。風險點如:

  • 轉幣的目標地址沒嚴格檢查,導致幣轉給了其他人。人都是有慣性或惰性的,比如很多時候檢查一個錢包地址主要就看開頭、結尾幾位是不是正確的,而沒有幾乎完整檢查。於是壞人就激動了,專門用程序來跑出頭尾幾位一樣的地址,然後通過一些手法把你的轉幣目標地址給替換為他控制的地址。
  • 授權相關幣種給了未知地址,通常來說授權是以太坊系列智能合約代幣的機制,就是那個 approve 函數,一個參數是授權給目標地址,另一個參數是數量。許多人不了解這個機制,於是就可能把無限數量的代幣授權給目標地址,此時目標地址就有權限把這些代幣轉走了。這就是所謂的授權盜幣,手法還有其他變種,這裡就先不擴展了。
  • 一些看去不重要的簽名,實際上藏著巨大的陷阱,這點也先不展開,之後會有解析。
  • 冷錢包可能並沒給你足夠的必要信息展示,導致你大意了、誤判了。

這一切都可以歸結為兩點:

  • 所見即所簽這種用戶交互安全機制缺失。
  • 用戶的有關知識背景缺失。

Hot Wallet

相比冷錢包,冷錢包有的風險熱錢包基本都會有,除此之外,熱錢包多了個:助記詞(或私鑰)被盜風險。此時的熱錢包要考慮的安全就多了,比如運行環境的安全,如果運行環境有相關病毒🦠,那麼就有被盜風險。還有熱錢包如果存在某些漏洞,通過漏洞也可以直接盜走助記詞。

熱錢包除了常規的轉幣功能外,如果要與那些 DApp(DeFi、NFT、GameFi 等)交互,要么直接用自帶的瀏覽器訪問,要么通過 WalletConnect 協議與 PC 瀏覽器打開的 DApp 交互。

注:本手冊提到的 DApp 默認指運行在以太坊系列區塊鏈上的智能合約項目。

默認情況下,這樣的交互是不會導致助記詞被盜的,除非錢包安全設計本身有問題。從我們的安全審計及安全研究歷史數據來看,存在錢包助記詞被目標頁面惡意 JavaScript 直接盜取的風險。但這個情況比較罕見,因為這實際上屬於極其低級的錯誤,知名錢包都不大可能會犯這種錯誤。

這裡我最擔心的問題實際上都不是以上這些,這些對我來說都可控(你也可以的),我最關心/擔心的問題是:知名錢包的每次版本迭代是如何確保不會被植入惡意代碼或後門?這個問題言下之意很清楚:當前的錢包版本我驗證了沒什麼安全問題,我敢放心用,但我不知道下一個版本安全性如何,畢竟,我或者我的安全團隊不可能有那麼多時間與精力都去做驗證。

這裡所說的惡意代碼或後門造成的盜幣事件已經好幾起了,如曾經的 CoPay、近期的 AToken 等,具體事件可以自行搜索了解。

對於這種情況,作惡主要有幾種方式:

  • 錢包運行時,惡意代碼將相關助記詞直接打包上傳到黑客控制的服務端裡。
  • 錢包運行時,當用戶發起轉賬,在錢包後台偷偷替換目標地址及金額等信息,此時用戶很難察覺。
  • 破壞助記詞生成有關的隨機數熵值,讓這些助記詞比較容易被破解。

安全這東西,無知者無畏、知者敬畏,許多點是細思恐極的。所以對於存有重要資產的錢包,我的安全原則也簡單:不做輕易更新,夠用就好。

DeFi 安全到底是什麼

當我們提 DApp 時,可能是 DeFi、NFT 或 GameFi 等等,這幾個的安全大多是相同的,但會有自身的特別點。我們這里以 DeFi 為例先講解下,當我們提 DeFi 安全時,到底指的是什麼?業內幾乎都只看智能合約部分,似乎智能合約安全了也就沒事了。其實遠遠並非如此。

DeFi 安全至少包括如下幾部分:

  • 智能合約安全
  • 區塊鏈基礎安全
  • 前端安全
  • 通信安全
  • 人性安全
  • 金融安全
  • 合規安全

智能合約安全

智能合約安全確實是安全審計最重要的切入點,慢霧針對智能合約的安全審計點可以參考:

https://www.slowmist.com/service-smart-contract-security-audit.html

對於高級玩家來說,如果智能合約部分本身安全性可控(無論是自己能安全審計還是讀懂專業機構的安全審計報告),那麼也就無所謂其他部分的安全了。可控是個很有差異的理解,有的得看玩家實力。比如說智能合約權限過大的風險,玩家是有要求的,除非項目方本身實力雄厚及口碑良好,完全中心化也都無所謂。但對於那些不大知名的、有爭議的或新出現的項目,如果你說這個項目的智能合約有權限過大的風險,尤其是這種權限還可以影響你的本金或收益,你肯定就不願意了。

權限過大這種風險是很微妙的,很多時候權限這東西是方便項目方做相關治理及風險應急的。但對我們來說,這就是人性考量了,萬一項目方作惡呢?於是業內有了折中的實踐:增加時間鎖 (Timelock) 來解決一些權限過大的風險,比如:

Compound,這個老牌知名的 DeFi 項目,它核心的智能合約模塊 Comptroller 及 Governance 的 admin 權限都加了 Timelock 機制:
Comptroller(0x3d9819210a31b4961b30ef54be2aed79b9c9cd3b)
Governance(0xc0da02939e1441f497fd74f78ce7decb17b66529)
的 admin 地址是:
Timelock(0x6d903f6003cca6255d85cca4d3b5e5146dc33925)

鏈上可以直接看到 Timelock 的時間鎖(delay 參數)是 48 小時(172800 秒):

也就是說,如果 Compound 的 admin(項目方)需要變更目標智能合約的一些關鍵值時,這筆交易上鍊後會有記錄,但必須等到 48 小時後才可以最終完成執行。這意味著,只要你願意,你是可以審計 admin 的每一次操作,你至少有 48 小時來反應。比如如果你不放心,你可以在 48 小時內把資金撤走。

還有一種削弱項目方權限過大風險的做法是:將 admin 多簽了,比如用 Gnosis Safe 進行多簽管理,這樣至少不會出現一言堂。這裡需要注意的是,多簽可以是 “皇帝的新衣”,比如一個人掌握了多把鑰匙。所以目標項目的多簽策略需要公示說明清楚,鑰匙都由誰保管,保管鑰匙的角色也一定是有口碑的。

這裡需要特別注意,任何安全策略,都可能出現 “皇帝的新衣” 問題,表面做得好,實際上卻不是,呈現出了一種虛假安全感。再舉個例子,Timelock 這玩意,看去似乎挺好,實際上出現過有的項目方部署的 Timelock 是有後門的情況。用戶一般也不會直接去看 Timelock 源碼,而且也不一定看得懂,於是放了個後門在那,一時半會還真不一定有人留意到。

除了權限過大風險,智能合約安全的其他內容也都很關鍵,但理解門檻還是挺高的,這裡就不展開了,我的建議是這樣:至少可以逐步學會閱讀安全審計報告,熟能生巧。

區塊鏈基礎安全

區塊鏈基礎安全指的是區塊鏈本身的安全性,如:共識賬本安全、虛擬機安全等。如果區塊鏈本身安全性堪憂,其上運行的智能合約項目也可以直接喝西北風了。選擇一條擁有足夠安全及知名度的區塊鏈,甚至大概率可以源遠流長的區塊鍊是多麼的重要。

前端安全

前端安全真是魔鬼,與用戶走得太近了,特別容易讓用戶魔怔後上當受騙。可能大家主要的注意力都在自己的錢包上和目標項目的智能合約安全上了,前端安全非常容易被忽視。這裡我需要再次強調,前端安全是魔鬼!我重點說說。

前端安全裡我最在意的點是:我怎麼知道我在這個前端頁面裡的交互對象就是我以為的智能合約?

造成這種不安全感主要是因為以下這兩種風險:

  • 內部作惡
  • 第三方作惡

內部作惡很好理解,比如開發人員偷偷將前端頁面裡的目標智能合約地址替換為一個有後門的合約地址,或者直接植入個授權釣魚腳本。當你訪問該前端頁面時,你錢包後續的一系列涉及加密貨幣的操作都可能是在陷阱裡完成的。神不知鬼不覺,幣沒了。

第三方作惡,主要指的是兩種:

  • 一種是供應鏈作惡,比如前端依賴的第三方模塊被植入了後門,隨著打包發布一起被直接帶入目標前端頁面了。如 SushiSwap(僅僅舉例子,並不代表截圖裡的項目有發生這個問題):
  • 一種是前端頁面引入的第三方遠程 JavaScript 文件,如果這個 JavaScript 文件作惡或被黑,那麼目標前端頁面可能就會被影響,如 OpenSea(僅僅舉例子,並不代表截圖裡的項目有發生這個問題):

為什麼這裡說可能會被影響是因為,如果項目方在前端頁面以下面這樣的方式來引用第三方遠程 JavaScript 文件的話,就可能不會被影響:

<script src=" https://example.com/example-framework.js " integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7" crossorigin="anonymous"></script>

這裡的關鍵點是 HTML5 的一個不錯的安全機制:標籤裡的 integrity 屬性(SRI 機制),integrity 支持 sha256, sha384, sha512,如果第三方 JavaScript 資源不滿足 integrity 的哈希完整性校驗,就不會加載,這個可以很好防止非預期的代碼執行。但使用這個機制需要目標資源支持 CORS 響應。具體參考:

https://developer.mozilla.org/zh-CN/docs/Web/Security/Subresource_Integrity

等等,為什麼我前面又提了 “可能”,是因為有存在被繞過的場景。至於繞過方式我就不提了,因為大多情況下,你只需關注目標前端頁面在引入第三方遠程 JavaScript 文件時是否有 integrity 機制。可惜的是,OpenSea 沒有,讓我們祝福它。

通信安全

通信安全這部分,重點看 HTTPS 安全就好。首先目標網站一定要 HTTPS,絕不允許存在 HTTP 明文傳輸的情況。因為 HTTP 明文傳輸實在太容易被中間人劫持攻擊了,現在 HTTPS 這種安全傳輸協議已經非常普遍。如果 HTTPS 出現中間人劫持攻擊,比如植入了惡意 JavaScript 代碼到目標前端頁面,此時瀏覽器必然會出現 HTTPS 證書錯誤的高顯目提醒。舉個例子,曾經 MyEtherWallet 的坑。

MyEtherWallet 曾經是個很流行的網頁錢包,現在也挺知名,不過已經不僅僅是網頁錢包了。我前面有說過,網頁錢包我非常不建議使用,除了前端安全的各種貓膩之外,還可能出現 HTTPS 劫持的風險。

2018.4.24,MyEtherWallet 就出現過 HTTPS 劫持的重大安全事件,回顧可見:

https://www.reddit.com/r/MyEtherWallet/comments/8eloo9/official_statement_regarding_dns_spoofing_of/
https://www.reddit.com/r/ethereum/comments/8ek86t/warning_myetherwalletcom_highjacked_on_google/

當時黑客是通過 BGP 這個上古協議劫持了 MyEtherWallet 大量用戶所用的 DNS 服務(Google Public DNS),這導致許多用戶訪問 MyEtherWallet 時,瀏覽器出現 HTTPS 錯誤證書的提醒。其實吧,遇到錯誤證書了,原則上就別繼續訪問了,因為這表示目標頁面已經被劫持了。但是真的許多用戶不懂這個安全風險,頂多猶豫下就忽略錯誤證書的提醒繼續強制訪問了。

由於目標頁面已經被劫持,黑客注入了惡意 JavaScript 代碼,直接就盜走了目標用戶在目標頁面上的明文私鑰,之後批量轉走這些用戶相關的加密貨幣(主要是 ETH)。

這絕對是個經典案例,黑客為了盜幣,動用了 BGP 劫持,真是殺雞用了牛刀。之後也出現過幾起類似的案例,這裡就不提了。這裡對於用戶來說實際上只需要注意一點,當你真的要用網頁錢包或玩相關 DApp 時,一定要注意:當目標頁面出現 HTTPS 錯誤證書提醒時,就立即停止繼續訪問、關閉頁面,那麼你什麼事都不會有。

安全上有個殘酷現實,是這樣的:當已經出現風險時,就別給用戶選擇,一旦給了,總會有用戶無論出於何種原因會掉坑里。其實這裡項目方是需要肩負起相關責任的,比如這個 HTTPS 劫持,其實已經有很好的安全解決方案,項目方的開發人員只需配置好 HSTS 即可。HSTS 全稱 HTTP Strict Transport Security,是瀏覽器支持的一個 Web 安全策略,如果開啟了這個配置,瀏覽器發現 HTTPS 證書錯誤後就會強制不讓用戶繼續訪問。明白什麼意思了吧?

人性安全

人性安全這塊很好理解,比如項目方內部作惡,這點在前面已經提了些內容,暫時就不過多展開。因為之後,這塊還會專門展開講講。

金融安全

金融安全是個很需要敬畏的概念,放在 DeFi 上,涉及到金融的點,用戶最關心的是幣價、年化收益,一定要好,至少要穩。簡而言之是,我作為用戶,我玩這個 DeFi,我要賺錢。如果虧了,得讓我心服口服。嗯,這也是人性。

這部分可能出現詬病的有:

  • 不公平啟動,比如預挖、老鼠倉。
  • 巨鯨攻擊,所謂的鈔能力。
  • 黑莊,看誰跑得快。
  • 市場黑天鵝,比如突然的大瀑布,還有如目標 DeFi 與其他 DeFi/Token 套娃或互操作,這個時候木桶短板可能就決定於其他 DeFi/Token 了。
  • 還有一些比較技術性的或者說科學家手法,比如搶跑、三明治攻擊、閃電貸攻擊等。

合規安全

合規安全是個非常大的話題,前面提到的 AML(Anti Money Laundering) 只是其中一點,還有如 KYC(Know Your Customer)、制裁地區限制、證券風險有關的內容等等。其實對於用戶來說,這些不是我們可以對抗的,只能說當玩一個項目時,目標項目可能會受到某些國家的安全監管,因此可能會出現我們在意的隱私信息採集的問題。你可能不在意這點隱私,但卻有在意的人。

比如,2022 年初出現的一件小事:錢包支持 Address Ownership Proof Protocol(AOPP) 協議。

當時我看了下 AOPP 的協議設計,原來支持了 AOPP 的錢包可能洩露用戶隱私:監管機構會有能力知道一個被監管的交易所和一個不知道的外部錢包之間的關聯。參考:

https://gitlab.com/aopp/address-ownership-proof-protocol

怪不得許多隱私錢包重視這個反饋,紛紛刪除了這個協議的支持。話說回來:這個協議設計還真有意思。我注意到也有的錢包暫無計劃刪除對 AOPP 的支持,比如 EdgeWallet,他們的觀點認為 AOPP 並沒暴露更多的用戶隱私,而且可以讓加密貨幣的流轉提供更大的幫助,因為,如果用戶無法證明一個外部錢包地址屬於自己,那麼一些被監管的交易所是不允許用戶提幣到這個外部錢包地址的。

剛開始知名硬件錢包 Trezor 也是不刪除 AOPP 的支持,後來在 Twitter 上迫於社區及用戶壓力做了刪除妥協了。

你看,就這麼小的一點,實際上對於有的人來說是隱私大事。這裡並不是說要對抗監管,不管合規安全。其實在我的觀點裡,適當的合規安全妥協是必要的。這個話題就不繼續展開說了,按你的舒服的方式去理解就行。

到這,DApp 安全的主要部分的相關內容就介紹完了。

除了以上這些,還有未來的新增或更改而引入的安全問題,我們經常說 “安全是動態的、不是靜態的”,指的就是這點。比如現在很多項目方都有安全審計及漂亮的安全審計報告,但如果認真閱讀質量不錯的報告就會發現,這些報告會說明清楚,什麼時間範圍安全審計了什麼內容,內容的唯一標記是什麼(比如鍊上開源驗證後的地址或 GitHub 倉庫的 commit 地址,再或者目標代碼文件的哈希值)。所以報告是靜態的,如果你發現目標項目有不符合報告裡的描述內容,就可以指出。

NFT 安全

前面提的 DeFi 安全幾乎內容都可以應用到 NFT 安全上,但 NFT 又有自己獨特的安全點,比如:

  • Metadata 安全
  • 簽名安全

Metadata 指的主要就是圖片、動圖等內容,關於 Metadata 的具體標準建議可以參考 OpenSea 出的:

https://docs.opensea.io/docs/metadata-standards

這裡可能帶來的安全問題主要有兩點:

  • 一個是圖片(或動圖)所在的 URI 是不可信的,比如隨便的中心化服務,一方面不穩定,另一方面項目方隨便改圖片都行,那麼 NFT 的數字藏品能力也就沒了。一般都會用 IPFS、Arweave 這些去中心化存儲,並且用知名的 URI 網關服務。
  • 另一個問題是可能造成隱私洩露,隨便的 URI 是可以採集用戶的基本隱私的(如 IP、User-Agent 等)。

簽名安全問題很嚴重,下面展開。

小心簽名!

簽名安全是我特別需要提的,因為簽名協議坑很多,已經發生了數起安全事件,尤其圍繞 NFT 的。但我注意到其實太多人還是無法很好應對這部分安全問題,究其原因在於很少有人把這部分安全問題講明白。

簽名安全里首要遵守的最大安全原則是:所見即所簽。即你看到的內容就是你預期要簽名的內容,當你簽名發出去後,結果就應該是你預期的,絕不是事後拍斷大腿的。

簽名安全有關的一些內容在 “Cold Wallet” 部分有提到,印像不深的建議回顧下,這裡重點講講不一樣的內容。

OpenSea 在 2022 年前後出現過數起用戶持有的知名 NFT 被盜事件,尤其是 2022.2.20 集中爆發,根本原因在於:

  • 用戶在 OpenSea 授權了 NFT(掛單)。
  • 黑客釣魚拿到用戶的相關簽名。

比較正確的解讀可以見這:

https://twitter.com/Nesotual/status/1495223117450551300

這個相關簽名要拿到其實不難,黑客需構造正確的待簽名內容,哈希後,誘騙目標用戶完成簽名(這裡是盲簽,也就是說用戶實際上不知道自己到底簽名的內容是什麼),黑客拿到簽名後的內容,構造利用數據,完成利用。

我這裡拿其中一個 NFT 市場進行具體說明(不一定是 OpenSea)。當目標用戶在 NFT 市場裡授權了相關 NFT 掛單後,攻擊者構造了正確的待簽名內容,通過 Keccak256 哈希後,在釣魚頁面上彈出了待簽名的內容給用戶,此時用戶看到的東西如下:

仔細看,MetaMask 彈出的這個窗口,能看出什麼?賬戶及餘額、簽名請求的來源網站、正在簽名的消息,沒了... 就這點內容,用戶怎麼會想到自己一旦點擊了 “簽名” 後,災難就來了,自己的相關 NFT 就可以被盜走了。

這其實就是一種盲簽,用戶並不需要在 NFT 市場裡簽名,可以被誘騙在任何網站(釣魚網站)上簽名,而用戶根本就不知道這些簽名的實際意義,可惜的是黑客知道。對於用戶來說,只需牢記:拒絕盲簽。OpenSea 之前存在盲簽情況,2022.2.20 後改進了,採用 EIP-712 進行了升級改進。但即使不是盲簽,還是有用戶會粗心大意。

為什麼會出現這種情況,最最本質的原因還是在於簽名並不存在瀏覽器同源策略的約束,你可以簡單理解為:同源策略可以確保一個行為只在明確的域名下發生,不會跨域發生,除非項目方故意要跨域的發生。如果簽名有同源策略,那麼非目標域名產生的請求籤名,即使用戶簽名完成了,黑客也沒法將這個簽名用於目標域名下的攻擊。這裡就不繼續展開說了,協議級別的安全改進,我有註意到新草案,我希望這種情況能盡快得到改善。

目前提到的簽名安全涵蓋了主要方式,但變種其實挺多,無論如何,萬變不離其宗。最好的吃透方式是自己從頭到尾完整將攻擊復現一遍,甚至首創一些獨特的攻擊方式。比如這裡提到的簽名,其實裡面有大量細節,比如如何構造待簽名內容、簽名後的內容具體都是什麼?除了 approve 這種授權方式,還有其他的嗎(有,比如 increaseAllowance)。好吧,這裡展開的話就太過技術了。很好的是,你清楚簽名的重要性了。

對於用戶來說,取消授權 (approve) 是可能在源頭上對抗這類攻擊的,你可以用如下這些知名的工具來操作:

小心反常識簽名!

還沒結束,我還想特別提一種風險:反常識風險

什麼是反常識,比如你已經特別熟悉以太坊了,各種 DeFi、NFT 玩得小白們直呼你大佬。此時你去玩 Solana,同樣也遇到了各種釣魚網站,你可不畏懼,輕蔑一笑:“這些在以太坊系列生態裡都麻了,我怎麼可能上當?”

不好意思,黑客笑了,你確實上當了。因為出現了個反常識流程,人都是有慣性或惰性,這導致你大意了,沒有閃。

好,讓我們來看看這個反常識真實案例。

2022.3.5,一個安全預警:Solana 上的授權釣魚殘忍多了,攻擊者批量給用戶空投 NFT(圖 1) ,用戶通過空投 NFT 描述內容裡的鏈接 (www_officialsolanarares_net) 進入目標網站,連接錢包 (圖 2),點擊頁面上的 “Mint”,出現批准提示框 (圖 3)。注意,此時的批准提示框並沒有什麼特別提示,當批准後,該錢包裡的所有 SOL 都會被轉走。

當點擊 “批准” 時,用戶會和攻擊者部署的惡意合約交互:  3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v

該惡意合約的功能最終就是發起 “SOL Transfer”,將用戶的 SOL 幾乎全部轉走。從鏈上信息來看,該釣魚行為已經持續了幾天,中招者在不斷增加。

這裡面有兩個坑,需要注意的:

  1. 惡意合約在用戶批准 (Approve) 後,可以轉走用戶的原生資產 (這裡是 SOL),這點在以太坊上是不可能的,以太坊的授權釣魚釣不走以太坊的原生資產 (ETH),但可以釣走其上的 Token。於是這裡就存在 “常識違背” 現象,導致用戶容易掉以輕心。
  2. Solana 最知名的錢包 Phantom 在 “所見即所簽” 安全機制上存在缺陷 (其他錢包沒測試),沒有給用戶完備的風險提醒。這非常容易造成安全盲區,導致用戶丟幣。

一些高級攻擊方式

高級攻擊方式其實真很多,大多在大眾視角下無非就是:我被釣魚了。但這釣魚可真高級了,比如:

https://twitter.com/Arthur_0x/status/1506167899437686784

黑客通過郵件發送釣魚,郵件裡附帶的文檔是:

A Huge Risk of Stablecoin(Protected).docx

這確實是一份很有吸引力的文檔... 但這份文檔打開後電腦就可能被植入木馬(一般通過 Office 宏腳本方式或 0day/1day),這類木馬一般都會包括如下常規功能:

  • 各種憑證採集,如瀏覽器的,SSH 有關的等,這樣黑客就可以把觸手伸向目標用戶的其他服務。所以中毒後,一般都會建議用戶不僅目標設備清理乾淨,相關賬號權限該改的都需要及時更改。
  • 鍵盤記錄,尤其採集那些臨時出現的敏感內容,如密碼等。
  • 相關截屏、敏感文件採集等。
  • 如果是勒索病毒,進一步的就是將目標設備上的文件都高強度加密了,等待受害者來支付贖金,一般是支付比特幣。但這裡不是勒索病毒,畢竟勒索病毒的動作太大了,意圖直接粗暴。

除此之外,針對加密貨幣行業的木馬還會進行特別利用定制,如採集知名錢包、交易所的敏感信息,以實施盜幣。上面提到的木馬,根據專業的分析可以發現存在針對 MetaMask 的特別攻擊:

https://securelist.com/the-bluenoroff-cryptocurrency-hunt-is-still-on/105488/

木馬會將用戶的 MetaMask 替換為一個有後門的 MetaMask,一個有後門的 MetaMask 就意味著你在其中使用的加密貨幣就不是你的了。即使你配套硬件錢包,這個有後門的 MetaMask 也會通過篡改目標地址、金額的方式來實施盜幣。

這種攻擊方式是專門針對財富外露的知名人士。我注意到的現像是,有些知名人士過於傲慢,被黑也就是遲早的事了。一般被黑後,許多人會從教訓中痛定思痛、全面复盤、全面改進,並與信得過的專業安全人士或機構保持長期的合作及友誼。但,這個世界永遠存在例外,有的人或項目方被黑一次,還會有第二、第三次。如果說是天將降大任於斯人也,每次被黑都真的是遇到了對手,那麼此人或項目方,我會非常尊重,並稱之為先驅,而且大概率之後也能發展起來。可惜的是,許多被黑是因為低級問題,而且可以舉一反三的,這就真不可理解了。這種人或項目方建議遠離。

那種廣撒網的釣魚攻擊,其實手法就一般了,無非就是準備了一批域名相近的釣魚網站,Twitter 等社交平台買號散播,熱點及技巧拿捏得好,中招也是不少的。這種釣魚沒什麼特別,一般就是粗暴的讓用戶的錢包授權相關代幣(包括 NFT),然後盜走。

還有一些高級攻擊,如結合 XSS、CSRF、Reverse Proxy 等技巧來讓整個攻擊更加絲滑順暢。沒法都展開聊,這裡可以專門說其中一個非常細節的利用點(Cloudflare 中間人攻擊),屬於 Reverse Proxy(反向代理)有關的場景,這個利用點已經發生過真實的盜幣攻擊,且非常的隱蔽。

這裡的問題並不是 Cloudflare 本身作惡或被入侵的問題,而且項目方用了 Cloudflare,項目方的賬號權限被盜後的問題。大體過程是這樣的,如果你的網站用了 Cloudflare 服務,在管理後台可以注意到 Workers 這個功能模塊,這個 Workers 官方說法是:

構建無服務器應用程序並在全球範圍內即時部署,從而獲得卓越的性能、可靠性和規模性。具體參考:  https://developers.cloudflare.com/workers/

我很早就做了個測試頁面:

https://xssor.io/s/x.html

你訪問後會有個彈窗,內容是:

xssor.io, Hijacked by Cloudflare.

其實這個彈窗,甚至整個 x.html 內容都不是這個文件本身的,全部都是 Cloudflare 提供的,原理見下圖:

截圖裡這段代碼意思很簡單:如果我是黑客,我控制了你的 Cloudflare 賬號,我就可以利用 Workers 特性,往任意頁面注入任意惡意腳本。但此時用戶是很難意識到目標頁面被這樣偷偷劫持篡改了,目標頁面不會有任何錯誤提示(比如 HTTPS 證書錯誤),甚至項目方也一時半會意識不到這地方會出問題,可能花了大量的時間排查服務器、人員等安全。等意識到這個,損失也就大了。

Cloudflare 其實很好,許多網站或 Web 服務都會使用 Cloudflare 來做 Web 防火牆、對抗 DDoS 攻擊、全球 CDN 加速、反向代理等場景,由於有免費版本,所以用戶眾多,類似 Cloudflare 的,還有 Akamai 等服務。

用戶一定要注意自己的這類賬號的安全性,賬號安全問題從互聯網流行開始,全球隨時隨處都在談,再說似乎都要炸。但沒辦法,確實太多人還會因為賬號安全而被黑。比如針對重要服務的密碼並非唯一使用的強密碼(1Password 這類密碼安全管理軟件普及率其實還是很堪憂的),再比如雙因素 (2FA) 懶得開啟、甚至不知道有這玩意、不知道該如何使用。更別提針對一些服務,每年至少要重置下密碼吧。

好,一點高級攻擊手法就先介紹這些。對於你來說,只需明白這確實是個黑暗森林,但凡有可能就多了解了解各種五花八門的攻擊手法。見多後,甚至自己踩過幾次坑,你至少也可以成為一名非職業網絡安全人員了(這樣的一種身份多好,技多不壓身)。

傳統隱私保護

不容易,你學習到這裡了。傳統隱私保護老生常談了,2014 年我就寫過一篇:

隱私大爆炸,你得學幾招保護自己
https://evilcos.me/yinsi.html

回頭讀這篇文章,絕大多數建議都沒過時,我建議你消化下,很快,畢竟當年這篇屬於特別入門型的。下面我將開始新的介紹。隱私保護實際上和安全息息相關,在這你也可以認為是你的安全保護,保護的是什麼?當然是你的隱私,私鑰什麼的屬於隱私的一種。另外,別認為這是傳統就不重視,傳統的這些才是基石,基石都不安全了,基石的隱私都沒了,上層建築也就是空中樓閣,危如累卵,脆弱不堪了。

這裡有兩大資源是我非常推薦的:

一個是:

SURVEILLANCE SELF-DEFENSE
TIPS, TOOLS AND HOW-TOS FOR SAFER ONLINE COMMUNICATIONS
https://ssd.eff.org/

SSD(SURVEILLANCE SELF-DEFENSE) 即監視自衛,由非常知名的電子前沿基金會 (EFF) 發起,專門出了相關指南來告訴你,在監視/監控橫向的互聯網世界裡,如何避開老大哥 (Big Brother) 看著你。其中包括了不少有用的工具(比如 Tor、WhatsApp、Signal、PGP 等)。

另一個是:

Privacy Guide: Fight Surveillance with Encryption and Privacy Tools
https://www.privacytools.io/

這個網站是專門羅列相關工具的,已經很全面了。看到了沒?它還推薦了加密貨幣交易所、錢包等。注意,網站里羅列的工具其實不少我都不怎麼用,主要是我有一套自己的方式,你也應該逐步形成你自己的方式,不斷對比不斷完善。

這裡我重點提下我覺得無論如何你都必須掌握的或使用的工具。

操作系統

Windows 10(及以上版本) 和 macOS 的安全性都挺讓人滿意了,你選擇哪個都行。你能駕馭好,用 Linux 也是你的自由,比如 Ubuntu,或如 Tails、Whonix 這些隱私及安全變態的操作系統也行。

操作系統方面最容易上手的安全原則是:重視系統安全更新,有安全更新就立即行動。然後才是一些駕馭技能的掌握,很多人說 Windows、Mac 電腦還需要學習什麼駕馭技能?點來點去不就行了嗎?當然遠遠不行。對於安全小白來說,安裝個殺毒軟件是絕對的標配,如卡巴斯基、BitDefender 這種口碑很好的,Mac 上也有。

接著記住下載的安全原則,前面有提。不亂下程序其實已經杜絕了絕大多數風險了。

然後可以思考下,如果你這台電腦丟了、被偷了怎麼辦?電腦就一個開機密碼是不夠的,如果磁盤沒加密保護,壞人把磁盤拆下來,將裡面的資料拿走就行了。此時我建議對於重要的電腦設置好磁盤加密保護。參考:

https://docs.microsoft.com/zh-cn/windows/security/encryption-data-protection
https://support.apple.com/zh-cn/HT204837

還有 VeraCrypt 這種磁盤加密神器,曾經是 TrueCrypt,非常傳奇,非常強大。如果你感興趣可以了解並適應下:

https://veracrypt.fr/

更進一步的是啟用 BIOS 或固件密碼,這點看你自己,反正我是這樣做了。不過一定要牢記相關密碼,否則可能神仙也救不了你了。這個坑我很榮幸踩過,現在思來想去,浪費了一台筆記本、一點加密貨幣、一周的時間,但積累了寶貴的踩坑經驗。

手機

手機主要也就 iPhone、安卓系列,沒了,比如曾經我最愛的黑莓,被時代淘汰了。安卓以前的安全性很堪憂,一方面是發展早期,另一方面是版本太多碎片,不同手機品牌都有自己的 fork 版本。現在安全性逐漸好了不少。

手機方面同樣要重視系統的安全更新及下載的安全原則,並且警惕下面這幾點:

  • 不要越獄、Root 破解,除非你玩安全研究,否則沒必要。如果是為了盜版軟件這樣做,香不香得看你的駕馭能力。
  • 不要從非官方市場下載 App,還是那句話,除非你能駕馭它。而且即使從官方市場下載的 App 也存在不少假的,注意分辨。
  • 官方的云同步使用的前提是:賬號安全方面你確信沒問題,否則云端被控,手機也就麻煩了。

手機方面,我個人會更依賴 iPhone。同時準備至少兩個 iCloud 賬號,一個中國區、一個海外區,安裝不同區域限制的 App 使用(挺奇怪,但這就是現實)。

網絡

網絡方面的安全問題曾經是爛透了,這幾年逐步好起來了,尤其是 HTTPS Everywhere 策略普及了後。如果真的發生了網絡劫持(中間人攻擊),那麼系統會有相應的錯誤反饋。但凡是都有例外,所以網絡方面,能有安全的選擇當然選擇安全的。比如不亂連陌生 Wi-Fi,尤其是 4G/5G 這種安全性高的網絡如此普及的情況下,除非信號不好,著急使用。

如果你很有安全潔癖,你非常重要敏感的設備是可以考慮獨立網絡的。選擇口碑好的路由器、運營商,切勿貪圖小便宜,並祈禱路由器、運營商層面不會有高級作惡行為出現。

瀏覽器

瀏覽器方面流行的主要就是 Chrome、Firefox 了,加密貨幣行業還有人會用 Brave,也行。知名度高的,團隊強大的,安全更新也會比較及時。瀏覽器安全話題實在太廣泛,對你來說,你只需注意這幾點就好:

  • 有更新就及時更新,千萬別僥倖。
  • 擴展如無必要就不安裝,安裝也看清楚口碑、用戶規模、背後是哪家知名公司維護的,並警惕擴展申請的權限,還有擴展必須來自瀏覽器自己的應用商城。
  • 瀏覽器可以多個共存,強烈建議:重要的操作在其中一個瀏覽器中進行,而其他常規、不重要的操作都可以在另一個瀏覽器中進行。
  • 一些隱私保護的知名擴展(如 uBlock Origin、HTTPS Everywhere、ClearURLs 等),看你個人喜好。

Firefox 上我還會用 NoScript 這個上古擴展神器,NoScript 可以很好對抗 JavaScript 作惡情況,當年威震四方。現在的瀏覽器越來越安全了,同源安全策略、CSP 安全策略、Cookie 安全策略、HTTP 安全響應頭策略、擴展安全策略等等等,瀏覽器現在的安全高度確實是不可同日而語。NoScript 這種安全擴展被使用的空間也就越來越小了,感興趣的可以自行了解。

密碼管理器

如果你還沒用密碼管理器,要么就是你不知道用上之後的安全快感,要么就是有自己強大的記憶宮殿。腦記風險前面也說過,一是時間會讓記憶淡忘或錯亂;二是自己可能出意外。無論如何,我還是推薦你使用密碼管理器來搭配你的腦記,知名的如:1Password、Bitwarden 等。

我並不需要過多講解這部分的內容,相關教程實在太氾濫了,甚至都不需要教程也很容易上手。我需要提醒的是:

  • 千萬千萬別忘記你的主密碼,且主密碼相關賬號信息別被盜了,否則一窩端。
  • 千萬千萬確保你的郵箱安全,如果你郵箱被盜,雖然這不會讓你的密碼管理器裡的敏感內容洩露,但壞人有能力銷毀這些。
  • 我曾驗證過我提到的工具(如 1Password)的安全性,並一直在留意其出現過的安全事件、口碑、動態等,我並無法確保這些工具擁有絕對高度的安全性,尤其無法確保未來它們不會出現什麼黑天鵝事件。

有一點我是很欣賞的,比如 1Password 的安全頁面有關介紹和說明:

https://1password.com/zh-cn/security/

其中包括安全設計理念、隱私及安全的相關權威認證、安全設計白皮書、安全審計報告等內容。這些內容的透明公開也是方便業內進行必要的驗證。這點是非常值得項目方們學習的。

Bitwarden 做得更徹底些,是全開源的,包括服務端,任何人都可去驗證、審計、貢獻。

你意識到了沒?1Password、Bitwarden 這樣做的意圖很明確:

我很安全很在意隱私,不僅是我自己說,第三方權威也說了,你們也可以來驗證,甚至為了方便你們驗證,我花費了巨大精力把能透明出來的內容都透明了。如果我說的沒做到,你很容易來挑戰我。

這叫什麼?這叫安全自信:)

雙因素認證

你在互聯網上的身份安全,第一層靠的是密碼,第二層得靠雙因素,第三層靠的是目標項目本身的風控能力。我不能說雙因素都是標配,比如你在用的去中心化錢包,有一層密碼就夠煩了(現在基本都配套人臉、指紋這類生物識別來提高體驗),雙因素就算了吧。但在中心化平台裡,沒有雙因素可不行。因為中心化平台任何人都可以訪問或有能力訪問,你的密碼被盜了,意味著你的賬號權限失守,資金也就沒了。而你的去中心化錢包,密碼僅僅只是發生在本地的認證,黑客即使拿到這個密碼,還需要有能力接觸到你這個錢包所在的設備。

明白其中區別了吧?好,知名的雙因素認證 (2FA) 工具有:Google Authenticator、Microsoft Authenticator 等,當然如果你用密碼管理器(如 1Password)也是自帶了 2FA 功能的,非常方便。無論如何都記得做好備份,因為丟失 2FA 是一件很麻煩的事。

另外,雙因素認證也可以是個廣義概念,比如賬號、密碼登錄目標平台時,我們的賬號一般是郵箱或手機號。此時郵箱或手機號通過收到驗證碼的方式來進行第二步認證,那麼這也可以認為這是一種雙因素認證方式。只是這種方式安全性就沒那麼好了,比如郵箱被黑了或手機的 SIM 卡被劫持了,再或者發送郵箱、短信的第三方服務被黑了,那麼平台發送的驗證碼也就被一覽無餘。

科學上網

這塊出於政策原因,不多說,知名的幾個自己對比。有能力肯定自建,這樣安全可控,畢竟我們的出發點還真是科學上網、安全上網。

如果並非自建,難保不會出現中間人攻擊。前面說過,現在網絡環境確實沒以前那麼糟糕,尤其 HTTPS Everywhere 策略普及了後。但有些平靜可能只是水面,水面之下早已暗流湧動卻不易被察覺。所以這塊我並沒特別好的安全建議,自建有門檻,但值得,實在不行,一定是多方確認,選擇那種存在已久、口碑良好的品牌。

郵箱

郵箱是真正重要的 Web 基礎身份,我們會用郵箱註冊一大堆服務,我們用的郵箱幾乎都是免費的,似乎如空氣一般,你覺得它應該不會消失。如果哪天,它消失了?那麼依賴這個郵箱的一大堆服務就尷尬了。這種極端情況真不是不會發生,比如因為戰爭、天災等。當然如果是這些極端情況發生,對你來說除了生存其他也就不那麼重要了。

郵箱方面,必然是選擇巨頭的,如 Gmail、Outlook、QQ 郵箱等。正好我曾經的安全研究方向有這部分,對你來說,這些郵箱安全性足矣。但無論何時你都一定要小心郵箱裡發生的釣魚攻擊。並不是每封郵件都需要搭理,尤其是郵件裡給的鏈接、附件文件,病毒木馬可能就藏匿在其中。

如果你遇到針對郵箱的高級攻擊,那隻能自求多福。

除了這些巨頭的郵箱服務之外,如果你很在意隱私,兩款口碑不錯的隱私郵箱,你可以了解了解:ProtonMail 與 Tutanota。我的建議是隱私郵箱就拿來隔離做需要特別在意隱私的服務註冊,並且注意下活躍頻率,長時間不活躍,免費郵箱可能也就回收了。

SIM 卡

SIM 卡,手機號很多時候同郵箱一樣也是很重要的基礎身份。這些年我們國家的幾大運營商對手機號的安全保護做得還是很不錯的,比如註銷、重辦 SIM 卡是有嚴格的安全認證流程,這些都發生在營業廳裡。SIM 卡攻擊這塊,我舉個案例:

2019.5,有人的 Coinbase 賬號遭遇了 SIM Port Attack(SIM 卡轉移攻擊),損失了超過 10 萬美金的加密貨幣,很慘痛。攻擊過程大概是:

攻擊者通過社會工程學等手法拿到目標用戶的隱私,並到運營商欺騙得到一張新的 SIM 卡,然後通過同樣的手機號輕鬆搞定目標用戶在 Coinbase 上的權限。SIM 都被轉移了,這就很麻煩了,基本來說我們很多在線服務都是通過手機號來做的二次驗證或直接身份驗證,這是一個非常中心化的認證方式,手機號成為攻擊的弱點。

詳細分析可以參考:

https://medium.com/coinmonks/the-most-expensive-lesson-of-my-life-details-of-sim-port-hack-35de11517124

這塊的防禦建議其實也簡單,啟用知名的 2FA 工具。

SIM 卡還有個風險,就是如果手機丟了或被盜了,SIM 卡被取出來使用就尷尬了。我的做法可以供你參考:我的 SIM 卡設置了密碼(PIN 碼),每次開機或重新使用 SIM 卡都需要輸入正確的密碼才可以。具體攻略請自行查詢。我只提醒:別忘記了這個密碼,否則麻煩,耽誤事。

GPG

這部分的許多知識點在前文都提到了,不過這裡再普及個小概念,以方便日後理解:

有時候會遇到 PGP、OpenPGP 及 GPG 這幾種看去相似的叫法,簡單這樣區分下:

  • PGP 是 Pretty Good Privacy 的縮寫,是商用加密軟件,發布 30 多年了,現在在賽門鐵克麾下。
  • OpenPGP 是一種加密標準,衍生自 PGP。
  • GPG,全稱 GnuPG,基於 OpenPGP 標準的開源加密軟件。

這幾個底層都類似,用 GPG 就可以兼容其他的。這裡我再次強烈建議:別整那麼多有的沒的,安全加密這塊,用好 GPG 絕對可以大力提升安全感!

隔離環境

專門強調隔離環境這個安全原則,本質就是要具備零信任安全法則思維。你一定要相信:我們這些人即使再強大,被黑也是遲早的事,無論是被外部人、內部人還是自己。當被黑的時候,止損是第一步。止損能力被許多人忽略了,從而可能因為一次被黑而陸續被黑。究其本質就是因為許多安全設計不存在的,尤其是隔離這種看似粗暴的安全原則。

一個良好的隔離習慣,當被黑時,損失的僅被黑目標的那些隱私,而不會危及到其他隱私。比如:

  • 如果你的密碼安全習慣可以,當你其中一個賬號被黑時,同樣的密碼就不會危及到其他賬號。
  • 如果你的加密貨幣並不只在一個助記詞下面,萬一踩坑,你也不會歸零重啟。
  • 你的電腦中毒了,好在這是一台專門拿來浪的電腦,裡面並沒多少隱私,那你也不會慌,重裝可以解決絕大多數的問題。如果你善於使用虛擬機,那就更好了,直接恢復快照就行。不錯的虛擬機工具有:VMware、Parallels。
  • 上文提到的許多,你都可以至少兩個賬號、兩個工具、兩台設備等等,你熟悉以後完全打造一個獨立的虛擬身份也不是不行。

我以前提過一個比較極端的觀點:隱私不是拿來保護的,隱私是拿來控制的。

提出這個觀點的原因是因為:在當下的互聯網環境,隱私實際上已經洩露得不行。好在這些年隱私有關的法案越來越普及,大家也越來越重視。一切確實都會往好的方向發展。但在此之前,無論如何,當你掌握了我羅列的這些知識點,你就有能力將你的隱私游刃有餘地控制著。在互聯網上你如果習慣了,你幾乎獨立的虛擬身份可能會有好幾個。

人性安全

說了這麼多,人才是那個最大且永恆的風險。《三體》裡有句話:“弱小和無知不是生存的障礙,傲慢才是。”

  • 別傲慢:如果你覺得你已經很強,你自己得瑟就好,不必藐視一切,尤其是傲慢到可以挑戰全球黑客們的境地。學無止境、坑無止境。
  • 別貪心:貪確實是很多時候的前進動力,但要琢磨下,憑什麼這種好機會留給了你?是你很帥,還是說話好聽?:)
  • 別衝動:衝動是魔鬼,處處遇陷阱,沒有把握的衝就是賭。

還有一堆人性有關的點,說也說不完,而且關鍵是我自己也有不少問題。只能說戰戰兢兢、如履薄冰了。下面重點講幾個需要特別注意的點,都是與人性這些缺陷有關的,壞人利用一些平台的便利性來將人性玩弄得死死的。

Telegram

以前我說過 Telegram 是最大的暗網了。首先不得不說 Telegram 太強,安全、穩定、足夠的開放性設計得到了太多人的喜歡。但 Telegram 的文化土壤也讓壞人們很喜歡:Telegram 太好用了,用戶基數足夠大,功能開放性足夠好,非常方便定制各類 Bot 服務,結合加密貨幣可以讓許多交易體驗超越 Tor 網絡裡的那些暗網市場。並且上面的魚兒太多了。

社交賬號的唯一字段基本都是類似什麼用戶名或 XX 號之類的,其他都可以被壞人完全復用。有的社交平台有賬號認證機制,比如加個藍 V 什麼的。開放的社交還可以通過一些指標來看是不是真賬號,比如 follow 情況、發布的內容情況、內容互動情況等。封閉些的社交確認上麻煩些,但類似 Telegram 這種引入了共同在哪些 Groups 的功能是挺不錯的。

人性是這樣,但凡有空子可以被鑽,收益可觀時,一定一堆壞人來鑽。

所以社交平台上充斥了大量釣魚陷阱,比如你在一個群裡聊著聊著,突然冒出了個看去就像官方的客服私聊你(嗯,任意私聊是 Telegram 的機制,並不需要加好友),然後拿出殺豬槃經典話術,一些人就陸續上鉤了...

進一步的話,直接拉你進入另一個群,裡面的人除了你,其他都是仿冒的。但你一看就覺得特別真實。黑產裡的群克隆技術指的就是這種。

這些都是初級的人性利用,高級點的就會結合漏洞來利用,更是難防。

Discord

Discord 是這兩年流行起來的新型社交平台,聊天、群組這些基本功能都有,最核心的功能是一個個獨立的社區服務器(不是傳統理解的那種服務器),如官方說法:

Discord 致力於打造一個您與您的朋友、家人及社區交談和閒逛的地方。在 Discord 上有數百萬不同的社區,從老朋友組成的小群體到成千上萬的人通過共同興趣連接在一起的大型服務器。

看去美好,但實際上安全設計挑戰也是很高的,官方也很努力,有專門的安全規則及政策說明:

https://discord.com/safety

可惜,許多人不會去仔細閱讀的。另外,官方也不一定都能把一些核心安全問題說清楚,因為有的安全問題必須站在攻擊者角度才能點透。

下麵點出其中一點。

Discord 上發生了這麼多起 NFT 被盜案,請問其中的攻擊技術要點是什麼?如果這都沒搞清楚,一堆 Discord 安全建議用處都不大。

不少項目方的 Discord 服務器被搞的技術要點是那個所謂的 Discord Token,實際上這個玩意是 HTTP 請求頭里的 authorization 字段內容。這玩意在 Discord 存在非常久了,對於黑客來說,只要想辦法拿到這個 Discord Token,即可幾乎完全控制目標的 Discord 權限,也就是說,如果目標是管理員、有管理權限的人或機器人 (Bot),那麼黑客就可以用這些特權來作惡了。

比如,發布 NFT 釣魚網站,大家一看:官方發的公告,於是就一股腦兒衝進釣魚網站了...

有人可能要問,我的 Discord 賬號增加雙因素 (2FA) 認證 OK 嗎?絕對好習慣!但應對這個攻擊是不行的!Discord Token 無視你是否開啟了 2FA。如果你中招過,你應該立即更改 Discord 密碼,這樣 Discord Token 就會刷新變化了。

至於黑客是如何拿到這個 Discord Token 的,我們已經摸清楚至少三大手法了,後面找機會寫清楚。對於普通用戶來說,防禦建議其實挺多的,核心要點是:不急不貪、多方驗證。

來自 “官方” 的釣魚

壞人真的善於借勢搞事,尤其是藉官方的勢。能仿冒就盡量仿冒得很像很像,如上面提過的假客服。還有如 2022.4 出頭,Trezor 這款知名的硬件錢包的許多用戶就收到來自 trezor.us 的釣魚郵件,實際上 trezor.us 並不是 Trezor 官方域名。Trezor 官方域名只是 trezor.io。僅僅域名後綴不一樣。另外釣魚郵件里傳播瞭如下域名:

https://suite.trẹzor.com

這個域名是有 “亮點” 的,仔細看那個ẹ 並不是英文字母 e。非常的迷惑性,實際上這是 Punycode,標准說明是這樣的:

A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA) 也就是國際化域名編碼,可以表示 Unicode 碼和 ASCII 碼的有限字符集。

如果把 trẹzor 解開後的樣子是這樣:xn--trzor-o51b,這才是真身!

Punycode 這種釣魚方式,幾年前就有真實利用了,比如 2018 年時,幣安的一些用戶就中招過。

這種域名看去很像的釣魚就可以讓許多人上當,更別提更高級的攻擊方式,比如一些官方郵箱被控制,還有一種用戶郵箱 SPF 配置問題導致的郵件偽造攻擊。在用戶眼裡看到的郵件來源就是一模一樣的官方特徵。

如果是內部人作惡,那用戶就自求多福了。項目方內部的安全風控一定要特別重視人員安全,這永遠是最值得花成本、花精力去建設的。人是最大的那隻特洛伊木馬,但卻最容易被忽視。有的人安全意識實在太差,在安全上又不思進取。這種人,誰招誰倒霉。

Web3 隱私問題

隨著 Web3 的流行,越來越多有趣或無聊的項目出現,如各種 Web3 基礎設施、社交平台等。基礎設施有的做了海量的數據分析,一不小心就發現感興趣的目標的各種行為畫像了,不僅各區塊鏈上的,還有 Web2 那些知名平台上的。畫像一出,目標基本就屬於透明人。而 Web3 社交平台的出現也可能加劇這類隱私問題。

想一想,當你將這些 Web3 有關的各種玩意都玩了一遍,如簽名綁定、鏈上各種交互等,你的隱私有沒有洩露更多?很多人以為不會,但其實許多碎片拼在一起實際上就能輸出更全面的畫像:你喜歡收藏哪些 NFT、你加入了哪些社群、你在哪些白名單裡、你和誰有了關聯、你綁定了哪些 Web2 賬號、你活躍在什麼時間段裡等等等。看吧,區塊鏈有時候讓隱私變得更糟糕。如果你在意隱私,那麼需要謹慎對待一切新事物,並保持隔離身份的好習慣。

此時,如果不小心私鑰被盜,損失的已經不是資金那麼簡單的了,是所有一切精心維繫的 Web3 權益。我們常說的私鑰即身份,現在看來真的是身份了。

人性安全部分就先到這,不繼續展開了,你舉一反三。

永遠不要去考驗人性。

區塊鏈作惡方式

區塊鏈技術的出現誕生了我們現在所處的行業,無論你如何稱呼這個行業,鏈圈、幣圈、區塊鏈、加密貨幣、虛擬貨幣、數字貨幣、Crypto、Web3 等等,一切的核心幾乎都還是圍繞區塊鏈。最熱鬧的都與金融活動有關,比如幣這個玩意,包括非同質化代幣(NFT,也叫數字藏品)。

這個行業有超凡的活力與吸引力,但存在太多作惡方式。由於區塊鏈的一些獨特性,也出現了些比較獨特的作惡方式。這些作惡方式大體包括:盜幣、惡意挖礦、勒索病毒、暗網交易、木馬的 C2 中轉、洗錢、資金盤、博彩等等。2019.1,我做了個思維導圖可做參考:

https://github.com/slowmist/Knowledge-Base/blob/master/mindmaps/evil_blockchain.png

同時,我們不斷在更新維護的 SlowMist Hacked 區塊鏈被黑檔案庫,大量的案例索引,一筆筆歷史印記:

https://hacked.slowmist.io/

本手冊提了許多安全點,如果你能消化成自己的,那麼真是恭喜你。至於這些五花八門的作惡方式,我就不准備展開了,如果你感興趣,你應該自己學會擴展。多了解絕對是好事,更何況新型作惡手法總是層出不窮,變種不斷。你的能力越大後,我也希望你能參與進來讓這個行業更好一些。

被盜了怎麼辦

既然說了被黑是遲早的。那麼當被黑時,甚至加密貨幣被盜時該怎麼辦?我就簡單地直切主題。以下步驟不一定完全這個順序,有的時候是來回穿梭的,但大體是這樣。

止損第一

止損就是讓損失不要放大了。這分為至少兩個階段:

  • 眼前著急階段。眼前的絕對是當務之急的,比如你都看到黑客正在陸續轉移你的資產,你還想什麼呢?趕緊搶著把剩餘資產安全轉移呀。有交易搶跑經驗的,就搶跑。看資產類型,如果是那種可以鏈上凍結的,就盡可能聯繫凍結。有能力做鏈上追踪分析的發現資金轉移進中心化平台,就可以聯繫做必要風控。
  • 局面控制後階段。局面穩住後,重點要琢磨的是如何不會出現二次、三次傷害。

保護好現場

發覺出事了,千萬冷靜,深呼吸三次後,一定要保護好有關現場。有幾個經驗供參考:

  • 針對電腦、服務器這類聯網設備,一旦這些是事故主場,立即斷網,但不關機(電源供電持續)。有人說如果是破壞性病毒,不關機的話,本地系統的文件就都被病毒破壞了。你說的沒錯,如果你的反應能快過病毒的話...
  • 除非你自己有能力,否則等待專業安全人員介入取證分析。

這點很關鍵,我們遇到不少情況是:當我們介入做分析時,現場已經亂七八糟了,甚至關鍵證據(如日誌、病毒文件)都出現被清理乾淨的情況。沒有保存良好的案發現場,會對後續的分析與追踪溯源產生極大的干擾。

分析原因

分析原因的目的是了解對手,輸出黑客畫像。這個時候事故報告就非常重要,也叫驗屍報告 (Post Mortem Report),當然國內把 Post Mortem Report 翻譯為驗屍報告怪怪的,我們喊事故報告就行。

我們遇到許多人被盜幣後,來諮詢我們怎麼辦,很糾結的是,許多人難以表達清晰,更別說出具清晰的事故報告了。但我覺得表達是可以練習或依葫蘆畫瓢出來的。比如至少把以下幾點說明下:

  • 概要 1:什麼人、什麼時間、發生了什麼事、總損失多少?
  • 概要 2:損失有關的錢包地址、黑客錢包地址、幣種類型、數量,一個表格就比較清晰了。
  • 過程描述:這點才是最難的,這裡需要把這個事故過程的方方面面細節點描述出來,這甚至會分析出黑客有關的各種痕跡,最終輸出黑客畫像(其中包括了作惡動機)

我們具體在對接時,模板會復雜的多,循序漸進的。有時候人的記憶也是有問題,甚至出現刻意隱瞞關鍵信息導致浪費時間或耽誤了絕佳時機。所以在實際對接中,消耗是真大,我們需要用我們的經驗去做好引導工作。最終和丟幣的人或項目方一起出具事故報告,並不斷更新這份事故報告。

追踪溯源

根據羅卡定律:凡有入侵、必留痕跡。我們只要用心查,總會有發現。這個查的過程實際上就是取證分析、追踪溯源了。我們會根據取證分析出來的黑客畫像來做追踪溯源,並不斷充實這個黑客畫像,這是一個動態、反复的過程。

追踪溯源包含兩大部分:

  • 鏈上情報:針對錢包地址分析資金走向,比如進了中心化交易所、混幣平台等,監控預警新的轉移。
  • 鏈下情報:這部分的情報包括:黑客的 IP、設備信息、郵箱及這幾點關聯碰撞出來的更豐富信息,其中包括行為信息。

根據這些情報展開的追踪溯源工作就非常多了,甚至需要執法單位的介入。

結案

當然我們都希望有個好結局,歷史上披露的公共事件中我們重點參與的且有好結局的,舉幾個例子:

  • Lendf.Me,價值 2500 萬美金
  • SIL Finance,價值 1215 萬美金
  • Poly Network,價值 6.1 億美金

我們親歷的還有許多是未公佈的好結局、還行的結局。但大多數是不好的結局,挺遺憾。我們在這些過程中積累了大量寶貴經驗,希望未來能將好結局的比率提高一個台階。

這個部分就簡單提到這,我並不打算詳細展開,這塊的知識量是巨大的,有的我也不擅長。根據不同場景,我們需要掌握的能力有:

  • 智能合約安全分析及取證
  • 鏈上資金轉移分析及取證
  • Web 安全分析及取證
  • Linux 服務器安全分析及取證
  • Windows 安全分析及取證
  • macOS 安全分析及取證
  • 手機安全分析及取證
  • 惡意代碼分析及取證
  • 網絡設備或平台的安全分析及取證
  • 人員安全分析及取證
  • ...

幾乎方方面面,本手冊涵蓋的安全點也是方方面面,但幾乎都只是引入門罷了。

誤區

本手冊一開始就告訴你需要始終保持懷疑!包括本手冊提到的任何知識點。這是個朝氣蓬勃的、潛力巨大的行業,充斥大量的陷阱與亂象。這裡我們來看看其中的一些誤區,這些誤區如果當作真理,不加思考的話,就很容易掉入陷阱中,成為亂象的一部分。

Code Is Law

代碼即法律。但往往一個項目(尤其特指智能合約有關)被黑了或跑路了,受害者們幾乎沒人希望代碼即法律,最終還是會依賴真法律。

Not Your Keys, Not Your Coins

不是你的私鑰,就不是你的幣。其實許多用戶拿到了私鑰,但沒有能力駕馭好自己的私鑰,反而因為各種安全問題,幣丟了。有時候會發現,幣放在足夠大且信譽很好的平台裡,反而安全了許多。

In Blockchain We Trust

因為區塊鏈,我們相信。其實區塊鏈本身確實有能力解決一些根本的信任問題,比如不可篡改、抗審查等,我的資產及有關活動在區塊鏈上,我就可以默認相信沒人可以不經授權拿走我的資產,篡改我的活動。但現實往往是殘酷的,首先不是所有區塊鏈都有能力做到這些根本點,其次人性永遠是最大的突破點。許多黑客手法是超越絕大多數人的想像的,雖說攻防是成本對抗,比如當你的資產不夠大,沒有黑客會費力針對性地去黑掉你,但,多個這樣的你存在,那麼也就很有利可圖了。

我的安全建議說簡單也簡單:保持對一切的默認不信任(也就是默認懷疑一切),並做好持續驗證的工作。驗證(Verify)是很關鍵的安全動作,持續驗證是要告訴你,安全不是靜態的,此時沒問題,不代表未來不會出問題。驗證能力是對自己最大的考驗,但很有意思,你會因此而掌握足夠多的知識。當你足夠強時,沒人可以輕易欺負你。

密碼學安全就是安全

密碼學確實很強大很重要。沒有這麼多密碼學家的努力,這麼多紮實的密碼學算法及工程實現,也就別談我們現在的通信技術、互聯網技術、區塊鏈技術了。可惜有些人卻把密碼學安全當成一切的安全,於是就會出現一些很奇怪的疑問:

區塊鏈不是號稱很安全的嗎?私鑰不是說破解需要多少多少億億億年嗎?為什麼 FBI 破解了暗網比特幣?為什麼周杰倫的 NFT 還會被盜?

這些疑問我都可以忍... 不能忍的是有所謂安全人士拿密碼學安全去忽悠大眾,什麼軍級加密、殿堂級加密、宇宙級加密,系統特別特別安全,黑客沒轍。

黑客懶得理你...

被黑很丟人

被黑確實會讓心情很複雜,也確實會有丟人的感覺。但你需要明白被黑是 100% 普適現象,絕無例外。沒必要五十步笑百步,也沒必要覺得丟人就逃避遮掩。

被黑後,如果你僅僅需要對自己負責,那隨意;如果你需要對一些人、不少人負責的話,一個透明開放的被黑處理態度及負責任做法就非常之關鍵了。雖然可能會引來嘲諷、質疑、甚至動輒說你在自導自演這起黑客事件。

一個透明開放且不斷更新的被黑處理進度,再加上痛定思痛的引以為戒,你總會引來好運。你也可以這樣認為:你的項目如果連知名度都沒,誰去黑你?丟人的不是被黑,丟人的是:傲慢。

雖說被黑是 100% 普適現象,因為大量是小坑,踩踩小坑,加速成長,大坑還是得盡量避之。

立即更新

本手冊好幾次我建議要重視更新,有安全更新就立即更新。那麼你仔細思考下,我的這種說法是否具有普適性?

實際上是這樣的:大多時候,針對安全方面的 “立即更新” 是對的。但有些時候,更新解決了一個問題,可能會引入另一個問題。歷史上這類案例挺多,可以自行搜索了解。我舉例其中一個,關於 iPhone 與 Google Authenticator 的:

iPhone 新版 iOS 15 系統升級後有個風險,身份驗證器 Google Authenticator 裡面的信息可能會清空,也可能會 double,如果發現 double 了千萬不要去刪除重複的條目,這會導致重開 Google Authenticator 後裡面的信息全部丟失。建議未升級 iOS 15 系統且有使用 Google Authenticator 的最好先備份一下再升級。

後來,這個問題,Google 更新了 Authenticator 來全面解決了。

除了這點之外,錢包的更新我是不建議頻繁的,尤其是重資產的錢包。除非是大的安全更新需要你不得不更新錢包,或者有很重要的功能讓你不得不更新。這個就需要自己來做風險評估及抉擇了。

總結

本手冊開局這張圖:)

你注意到了嗎?我特意把圖中的人標紅了,是想反复提醒:人是萬物基礎(宇宙學領域稱之 “人擇原理”)。無論是人性安全,還是安全駕馭能力,最終都取決於你。是的,當你足夠強時,沒人可以輕易欺負你。

我順著圖開始展開,從創建錢包到備份錢包再到使用錢包這三大過程講解了許多安全要點。接著介紹了傳統隱私保護,我說傳統的這些是基石,是我們安全地玩區塊鏈生態的基石。人性安全部分再多提都不過。那些五花八門的作惡方式,多了解很好,甚至自己踩了幾次坑,許多紙上談兵的安全意識也就真成了你的安全經驗。沒有絕對的安全,於是我講解了被盜了怎麼辦,我不希望你被盜,但萬一發生,我希望這份被盜後的安全指南可以給你帶來幫助。最後就是談一些誤區,本意很簡單就是希望你有自己的批判思維,因為這個世界很美好,但也很多糟糕。

我已經很久沒寫這麼多文字了,上一次還是 10 年前,我的那本《Web 前端黑客技術揭秘》,挺酸爽。Web 安全攻防玩了許多年後,網絡空間安全也玩了許多年,帶隊做了個網絡空間搜索引擎鍾馗之眼 (ZoomEye)。我算是涉獵了安全攻防多領域的人了,但能說熟練的也僅個把而已。

現在玩區塊鏈安全,我也好,還是整個慢霧也好,都算是跑在比較前面的。這些年遇到的案例實在太多,幾乎可以認為每週都可能經歷那種恍惚感覺。許多心得體會不記錄下來確實可惜,終於在數位朋友的催促下,這本手冊誕生了。

當你閱讀完本手冊後,一定需要實踐起來、熟練起來、舉一反三。如果之後你有自己的發現或經驗,我希望你也能貢獻出來。如果你覺得敏感,可以適當脫敏,匿名也行。

最後,我需要致謝安全與隱私有關的立法與執法在全球範圍內的成熟;各代當之無愧的密碼學家、工程師、正義黑客及一切參與創造讓這個世界更好的人們的努力,其中一位是中本聰。

安全法則及原則

本手冊提到有關的安全法則及原則,特別整理如下。有不少是融入大段文字裡的,我就不做特別提煉了。

兩大安全法則:

  • 零信任。簡單來說就是保持懷疑,而且是始終保持懷疑。
  • 持續驗證。你要相信,你就必須有能力去驗證你懷疑的點,並把這種能力養成習慣。

安全原則:

  • 網絡上的知識,凡事都參考至少兩個來源的信息,彼此佐證,始終保持懷疑。
  • 做好隔離,也就是雞蛋不要放在一個籃子裡。
  • 對於存有重要資產的錢包,不做輕易更新,夠用就好。
  • 所見即所簽。即你看到的內容就是你預期要簽名的內容,當你簽名發出去後,結果就應該是你預期的,絕不是事後拍斷大腿的。
  • 重視系統安全更新,有安全更新就立即行動。
  • 不亂下程序其實已經杜絕了絕大多數風險了。

貢獻者

感謝貢獻者們,這個列表會持續更新,希望你有任何的想法也聯繫我:

餘弦,Twitter( @evilcos )、即刻 (@餘弦.jpg)

貢獻者們:

我夫人慢雾,Twitter(@SlowMist_Team),如:Pds、Johan、Kong、Kirk、Thinking、Blue、Lisa、Keywolf... 即刻一些匿名的朋友...

只要有被採納收錄至本手冊的幫助,比如:提供了具體的防禦建議、案例;翻譯工作;大錯誤糾錯等。

那些官網

SlowMist https://www.slowmist.comCoinMarketCap https://coinmarketcap.com/Sparrow Wallet https://sparrowwallet.com/MetaMask https://metamask.io/imToken https://token.im/Trust Wallet https://trustwallet.com/Gnosis Safe https://gnosis-safe.io/ZenGo https://zengo.com/Fireblocks https://www.fireblocks.com/Safeheron https://www.safeheron.com/Keystone https://keyst.one/Trezor https://trezor.io/Rabby https://rabby.io/EdgeWallet https://edge.app/MyEtherWallet https://www.myetherwallet.com/Tornado Cash https://tornado.cash/Binance https://www.binance.com/Coinbase https://coinbase.comCompound https://compound.finance/SushiSwap https://www.sushi.com/OpenSea https://opensea.io/Revoke.cash https://revoke.cash/APPROVED.zone https://approved.zone/ 即刻 https://okjike.com/Kaspersky https://www.kaspersky.com.cn/Bitdefender https://www.bitdefender.com/Cloudflare https://www.cloudflare.com/Akamai https://www.akamai.com/SURVEILLANCE SELF-DEFENSE https://ssd.eff.org/Privacy Guide https://www.privacytools.io/OpenPGP https://www.openpgp.org/GPG https://gnupg.org/GPG Suite https://gpgtools.org/Gpg4win https://www.gpg4win.org/1Password https://1password.com/Bitwarden https://bitwarden.com/Google Authenticator https://support.google.com/accounts/answer/1066447Microsoft Authenticator https://www.microsoft.com/en-us/security/mobile-authenticator-appProtonMail https://protonmail.com/Tutanota https://tutanota.com/VMware Workstation https://www.vmware.com/products/workstation-pro.htmlParallels https://www.parallels.com/

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。本文內容僅用於信息分享,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。