天天看點

區塊鍊安全手冊

作者:001休養生息

慢霧:區塊鍊黑暗森林自救手冊(完整版)

區塊鍊慢霧科技加密貨币

2022-04-15

區塊鍊安全手冊

科普教程 欄目

學習,從這裡開始

掌握你的加密資産安全

原文标題:《區塊鍊黑暗森林自救手冊》
原文作者:餘弦,慢霧安全團隊

引子

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

其次,需要有心理準備的是:本手冊的閱讀需要一定的知識背景,我盡量照顧初學者,但很難。我希望初學者不必恐懼這些知識壁壘,因為其中大量是可以「玩」出來的。如果你遇到不懂的知識點,需要擴充了解的話,建議你用好 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://image.theblockbeats.info/other/pic404.png"https://example.com/example-framework.js" target="_blank" rel="noopener noreferrer">https://example.com/example-framework.js" integrity="sha384-Li9vy3DqF8tnTXuiaAJuML3ky+er10rcgNR/VqsVpcw+ThHmYcwiB1pbOxEbzJr7" ></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 上迫于社群及使用者壓力做了删除妥協了。

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

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

除了以上這些,還有未來的新增或更改而引入的安全問題,我們經常說「安全是動态的、不是靜态的」,指的就是這點。比如現在很多項目方都有安全審計及漂亮的安全審計報告,但如果認真閱讀品質不錯的報告就會發現,這些報告會說明清楚,什麼時間範圍安全審計了什麼内容,内容的唯一标記是什麼(比如鍊上開源驗證後的位址或 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) 是可能在源頭上對抗這類攻擊的,你可以用如下這些知名的工具來操作:

· Token Approvals

https://etherscan.io/tokenapprovalchecker
是以太坊官方浏覽器提供的授權檢查及取消的工具,以太坊系列區塊鍊基本都類似,因為他們的區塊鍊浏覽器基本都是 Etherscan 代為開發的,如:
https://bscscan.com/tokenapprovalchecker
https://hecoinfo.com/tokenapprovalchecker
https://polygonscan.com/tokenapprovalchecker
https://snowtrace.io/tokenapprovalchecker
https://cronoscan.com/tokenapprovalchecker

· Revoke.cash

https://revoke.cash/
老牌經典,隻支援以太坊。

· APPROVED.zone

https://approved.zone/
也是老牌,也隻支援以太坊。

· Rabby 擴充錢包

https://rabby.io/
我們安全合作比較多的一款錢包,他們的「授權檢查及取消」功能支援的以太坊系列是我見過最多的...

· 小心反常識簽名!

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

什麼是反常識,比如你已經特别熟悉以太坊了,各種 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 等社交平台買号散播,熱點及技巧拿捏得好,中招也是不少的。這種釣魚沒什麼特别,一般就是粗暴的讓使用者的錢包授權相關 Token(包括 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.trzor.com
區塊鍊安全手冊

這個域名是有「亮點」的,仔細看那個 并不是英文字母 e。非常的迷惑性,實際上這是 Punycode,标準說明是這樣的:

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

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

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

這種域名看去很像的釣魚就可以讓許多人上當,更别提更進階的攻擊方式,比如一些官方郵箱被控制,還有一種使用者郵箱 SPF 配置問題導緻的郵件僞造攻擊。在使用者眼裡看到的郵件來源就是一模一樣的官方特征。

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

· Web3 隐私問題

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

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

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

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

永遠不要去考驗人性。

區塊鍊作惡方式

區塊鍊技術的出現誕生了我們現在所處的行業,無論你如何稱呼這個行業,鍊圈、币圈、區塊鍊、加密貨币、虛拟貨币、數字貨币、Crypto、Web3 等等,一切的核心幾乎都還是圍繞區塊鍊。最熱鬧的都與金融活動有關,比如币這個玩意,包括非同質化 Token(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...
即刻
一些匿名的朋友
...

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

那些官網

區塊鍊安全手冊
區塊鍊安全手冊
區塊鍊安全手冊
原文連結

繼續閱讀