嗨,早!
現在是 Gitcoin Grants 的投票期間1。如果你想參與這次的平方募資,可以先到 Gitcoin Passport 驗證身分2,取得 20 分以上積分之後,再到 Gitcoin Grants 上以零錢投票(建議每個專案等值 1.5 美元或 0.001 ETH)支持你所喜歡的專案。區塊勢需要大家的支持,也歡迎參考即時的開票結果。進入正題。
你曾經在個人錢包或交易所帳戶,收過幾乎是 0 元的莫名轉帳嗎?假如事後沒人來討回那筆錢的話,那你可要小心了。這並不是白吃的午餐(其實金額也不夠吃午餐),而是你的錢包地址或交易所地址已經成為駭客鎖定的攻擊目標。
先別緊張,並不是你操作失誤,只是駭客鎖定的對象太廣泛,幾乎可說是亂槍打鳥。過去幾個月我也多次收到這類轉帳,幸好沒有誤入陷阱。直到近期我才發現,噢,原來它們都是駭客送來的糖衣毒藥。
這篇文章討論駭客為什麼要空投加密貨幣給大家、真的有人上鉤嗎,以及我們該如何防範?
零元釣魚
下圖是我錢包的轉帳歷史紀錄。今年 3 月,我從錢包轉出一筆 500 USDT 到交易所。也就是圖中下方白色字體 -500 USDT 的那筆交易。沒過幾秒鐘,我的錢包馬上就收到另一筆 +0.0005 USDT 的交易轉入。當下我覺得有點奇怪,我明明是轉錢出去,怎麼交易所會退錢回來?也不退多一點。但因為 0.0005 USDT 金額太小(約值 0.015 元台幣),我也就沒花時間追究原因。
接下來幾個月,類似的情況一再出現。每當我轉出一筆加密貨幣,就會近乎即時地收到一些些零錢碎屑。最近一次就發生在上週,當時我還一口氣收到兩筆轉入通知。雖然兩筆匯款加起來還不足 1 元台幣,但它激起我的好奇心 —— 到底是誰在亂撒錢、他們又有什麼目的?
原來這些錢都是駭客佈下的誘餌。以上圖為例,當時我轉出 500 USDT 的收款地址為 0x2E2c 開頭、725D 結尾。巧合的是,幾秒後轉入我錢包內的 0.0005 USDT 同樣也是來自 0x2E2c 開頭、725D 結尾的地址。如果沒有仔細看,很容易就會像我一樣誤以為是交易所退錢。
但實際上兩個地址並不一樣,只是長得極其相似而已。如果再往後面看幾碼,就會發現交易所的地址開頭其實是 0x2E2c4,但轉零錢給我的錢包地址開頭則是 0x2E2c8。電話號碼差一碼,接電話的就是不同人。轉帳地址差一碼,收錢的當然也是另有其人。這就是駭客精心設計的釣魚騙局。
這個月就有一位資深的幣安交易所員工在調度內部資金時誤踩陷阱,把高達 2,000 萬美元等值的 USDT 轉入駭客錢包內。
攻擊手法
根據幣安執行長 CZ 的說法:
我想分享昨天發生的一起非常聰明,且幾乎要成功的詐騙案件。我們救回了 2,000 萬美元,希望這個經驗未來也可以拯救你們。駭客現在技術高超,他們能產生開頭和結尾字母完全相同的釣魚地址。而這就是大多數人在操作加密貨幣轉帳時會檢查的資訊。
實際上許多錢包會用「...] 來隱藏地址的中間內容,藉此讓使用介面更簡潔。但駭客會惡意利用這個功能向你發送一些假交易,讓他們的釣魚地址出現在你的錢包裡。假如你之後要轉帳一筆交易,你可能會直接複製上一次的交易地址。這時候你可能就會複製到駭客給你、長得非常相似的釣魚地址。這就是昨天發生在一位經驗老道的加密貨幣操作者身上的真實事件。幸好這位操
作者立即發現錯誤,我們也立即請求凍結資金。這些資金才沒有被駭客拿走。
我用金流追蹤圖來還原幣安差點弄丟 2,000 萬美元的驚險過程。下圖左邊由上而下的 5 個方塊都是幣安的熱錢包地址,中間那個方塊則是幣安的資金調度中繼站。右上方塊是資金調度的終點,很可能是存放資金的冷錢包。右下方則是駭客的錢包地址。
從 7 月 14 日起,這位幣安員工就陸續從中繼站轉了總額高達 1.69 億美元的 USDT 到冷錢包內存放,也就是圖中右上角的那條金流。但在 8 月 1 日,這名幣安員工在調度一筆 2,000 萬美元的資金時,竟然把錢轉到了右下方的駭客地址。
仔細看會發現,右下方的釣魚地址和右上方的冷錢包地址長得極其相似。兩者都是以 0xa7b 開頭,以 90570 結尾。如果只看頭尾,很容易會以為兩個是同樣地址。從 CZ 的敘述可以推測,這名經驗老道的幣安員工很可能就是直接複製之前交易的地址,卻沒有仔細檢查,才會不小心踩雷。
但幣安的動作很快,肯定也與 USDT 發行商 Tether 有直接聯繫管道。因此在交易轉錯後的 50 分鐘左右,這筆價值 2,000 萬美元的 USDT 就被 Tether 強制凍結了。
反倒是駭客慢了好幾拍,連有肥羊上鉤了都還不知道,直到 USDT 被凍結後的 1 小時才發現有 2,000 萬美元入帳。這時駭客匆匆忙忙轉入一些 ETH 要領出 USDT。只是這筆錢早已動彈不得。
只能說幸好這次的受害者是幣安,請得動 Tether 在 1 小時內凍結這筆資產。如果事件主角換成是你我,光意識到自己被駭,到經過層層轉介找人幫忙,駭客早就已經把 USDT 換成其它加密貨幣逃之夭夭。
可能有人會問,駭客鎖定幣安的錢包攻擊很合理,那裡都是大額交易進出,但怎麼會連你我這樣的個人使用者也會成為駭客鎖定的目標呢?
防範措施
Coinbase 曾經拆解過駭客的這套零元釣魚手法(Zero Transfer Phishing),他們將駭客的攻擊拆成 3 步,分別是搜尋、投餌、等待。
在搜尋階段,駭客會寫程式監控區塊鏈上所有人的一舉一動,並鎖定那些近期曾經送出轉帳的錢包地址下手。鏈上紀錄公開透明。駭客會觀察這些人都是把錢轉到哪些地址,並馬上用電腦產生出一個頭尾非常相似的釣魚地址。
接著,駭客會替這個釣魚地址儲值一些零錢並把零錢轉給受害者。這個步驟越快越好。許多人根本沒有意識到剛剛已經有一筆交易轉入,還以為上一筆是自己操作的交易。
最後就是等待。雖然從使用者的錢包來看,轉出、轉入的方向完全相反,理應不會弄錯。但因為駭客產生的釣魚假地址長得太像真的,只要使用者一個不注意,就會不小心把資產轉到駭客的口袋裡。
許多人會好奇,駭客要產生頭尾相同的地址有這麼容易嗎?Coinbase 還做了實驗給大家看。他們用蘋果的 M1 Ultra 晶片搭配網路上的免費工具 Profanity2,只花 3 秒就能產生出末 4 碼相同的錢包地址,只花 18 秒就能產生前 4 碼與末 4 碼完全相同的錢包地址。非常驚人。
駭客只要再搭配自動化工具,把監控、投餌的流程串起來,就成了開頭我碰到的奇怪狀況。
只不過這樣的攻擊也有其成本。駭客每次投下誘餌,都要支付一筆區塊鏈的礦工手續費。也因此,在手續費比較便宜的 Tron、Polygon、BNB 區塊鏈,釣魚行為會更加猖獗。
去年底就有資安公司對這樣的「零元釣魚空投」提出警告,不過到目前為止仍然沒有有效的反制方法。畢竟在區塊鏈上轉帳是每個人的自由,更何況駭客也可以主張自己是在空投,哪知道就意外地收到「回禮」。使用者自己轉錯地址,能不能算是一種「被駭」也很難說。
最有效的方法,暫時是得回到使用者身上。現在有許多錢包 app 都內建聯絡人功能,只要將常用的錢包地址都先加入白名單,駭客創造的釣魚地址再怎麼像也騙不到你。另外,大家也可以趁最近幣圈熊市、以太坊 gas fee 比較便宜的時候承租自己的 ENS 域名3。以 mnhsu.eth 當成錢包地址,總是比 0x36F322fC….E2b38381 好記得多。
不僅能增加 Gitcoin Passport 的真人分數,還能降低日後操作錯誤的意外風險。讓駭客的投資報酬率下降,誘餌、gas fee 有去無回,就是目前最有效的反制方法。
區塊勢是由讀者付費訂閱來維持營運的獨立媒體。如果你覺得區塊勢的文章不錯,歡迎你分享這篇文章或是到會員成立的 Discord 參與討論,或收藏 Writing NFT 將這篇文章加入自己的 Web3 紀錄。
此外,也請大家推薦區塊勢給親朋好友。若想查閱區塊勢過往的出刊內容,可以參考文章列表。有鑒於常會有讀者寄信來問我推薦碼,因此我將它們整理成一頁。歡迎大家使用。
這故事也可以告訴我們,為何統一發票對中頭獎很難,中兩百元(末 3 碼)還滿容易的 😆
好危險…不講真的想不到是做什麼的,謝謝明恩的介紹!