按一下同意,780萬美元直接蒸發?這次真的不是Safe的鍋! 封面圖
加密貨幣

按一下同意,780萬美元直接蒸發?這次真的不是Safe的鍋!

錢包主人親手授權了一個有漏洞的小幫手合約,駭客輕鬆轉走780萬美元。這篇用最白話的方式,還原整起事件,教你以後怎麼按授權才安全。

你剛搬進一棟號稱銀行等級的新大樓,門禁、監視器都頂規,你安心到不行。結果你要出國,怕沒人幫你收包裹,就手寫一張授權小紙條給樓下代收店,上面寫:來拿包裹的人,可以直接開我家門進去放。更慘的是,你還把這張紙條拿去影印,隨手發給好幾個人。最後有個陌生人拿著影本,大搖大擺開門,把你家裡價值780萬美元的現金和名錶全部搬光。事後你去找大樓理論,人家只回你一句:大樓保全根本沒壞,壞的是你那張亂寫的紙條

這次在 以太坊 上的失竊案,劇情幾乎一模一樣。主角用的錢包是很多人愛用的 Safe,本身沒被攻破,真正出事的是錢包主人自己授權的一個 小幫手合約,裡面藏了一個超蠢的寫碼失誤。

你的錢包沒破,是你親手點頭的那個小幫手出賣了你

故事是這樣,朋友跟我聊到都傻眼。

這位受害者應該是個大戶,錢放在 Safe 這種多簽錢包裡。Safe 就像銀行的金庫,要好幾把鑰匙一起轉才能開,安全性在圈內是數一數二的。駭客根本打不穿它。

打不穿金庫怎麼辦?駭客就換個想法:騙你自己開門。

受害者為了方便操作,授權了一個 helper contract,也就是幫你跑腿的小幫手智能合約。可能是為了自動歸集資金、省 gas 費,或是跟某個 去中心化 應用互動。在我看來,這個動作就跟你在玩鏈遊、刷 流動性 挖礦時,按下的那個 Approve 一模一樣。

問題就出在這個小幫手的程式碼,有一行邏輯寫錯了。它大概長這樣:只要有人呼叫我,我就幫他從主人錢包搬錢,完全沒檢查 這個人到底是不是主人。駭客用鏈上工具一掃就發現了,馬上呼叫這個函式,金庫就這樣被合法地搬空了,整整 780萬美元

欸等等,我用的不是最安全的錢包嗎?怎麼還會被偷? 對,你家大門是沒壞,但你把備份鑰匙跟門禁卡,直接送給了壞人啊。

為了讓你秒懂,我們注意到可以這樣對照:

黑話 翻成白話 你可以這樣想
Safe 錢包 超安全的金庫 大樓本身,沒壞
helper contract 你授權的小幫手 你亂寫的代收紙條
Approve 授權 你親手按的同意鍵 你簽名把鑰匙交出去
駭客的手法 呼叫有漏洞的函式 拿著你的紙條影本開門

我認為這才是最毛的地方。整起攻擊沒有什麼高深數學,就是利用了你的信任。你以為你在授權一個貼心小工具,實際上你授權的是一個 看到誰都開門的笨管家

我認為:懶得看合約,就先別按確認

講白了,在加密貨幣世界,方便跟安全永遠在打架

以後不管你在 交易所 之外用熱錢包、冷錢包,只要看到跳出授權視窗,先停三秒。問自己三件事:這個合約是誰寫的?有沒有被審計過?我是不是給了無限額度?

養成習慣,定期去 revoke 工具上取消不用的授權,大錢一定要放多簽或硬體錢包,小錢才拿出來互動。別讓一個幾分鐘寫出來的小幫手,把你幾年存下來的錢一次送走。

延伸思考與常見問題

  • Q1:Safe 錢包是不是不安全了,以後還能用嗎?

    Safe 本身這次沒有被攻破,出包的是主人額外授權的外部小幫手合約。只要你不亂授權,Safe 依然是目前相對安全的選擇之一。

  • Q2:helper contract 小幫手合約到底是什麼東西?

    它就是一段幫你自動執行操作的智能合約,像是幫你一次領很多獎勵或省手續費的工具。你授權它,它就能在一定範圍內動用你錢包裡的錢。

  • Q3:一般人要怎麼避免按到這種死亡授權?

    第一是只跟知名、有審計的應用互動,第二是不要給無限額度,第三是定期檢查並取消用不到的授權。大額資產記得分開存放,不要全放在天天互動的熱錢包裡。

🪙

開始您的加密貨幣之旅

立即註冊全球最大加密貨幣交易所 幣安 (Binance),使用專屬推薦碼 CLICK168,即可享有手續費終身優惠與專屬的新人迎新大禮包!

👉 領取幣安專屬註冊優惠