Fomo3D式套利模式再現:「聰明」玩家狠狠地薅了一把羊毛!
導讀:還記得此前攻擊?TronBank Pro 獲利2,673萬個 TRX 的黑客「wojak」嗎?最近,他又出來搞事情了!
PeckShield 預警「玩家」高回報異常獲利
7月27日凌晨3點至上午10點,PeckShield 安全盾風控平台 DAppShield 監測到 THeRTT 開頭的地址在參與 MULTI.TODAY 合約遊戲時,持續獲得高回報異常獲利,短短數小時內便獲利102,652個TRX。
PeckShield 安全人員分析發現,該「玩家」採用了一種針對遊戲機制的「卡位」回滾投注方式,通過部署腳本合約來參與遊戲,利用遊戲本身存在的運營機制「不平等」(比如先入場的玩家獲利大)特性,成功實施「卡位」進而獲取最大的投資回報率。
這類似於互聯網上利用腳本程序惡意刷單,把原本屬於普通玩家的收益許可權給侵佔了。這讓人想起,去年 Fomo3D 火爆時,黑客利用以太坊公鏈因 gas 費用機制存在的交易擁堵問題,成功製造阻塞,拿走10,469個 ETH 獎金的攻擊事件。
這個「聰明」的玩家,採用了類似 Fomo3D 式的「特殊方式」,狠狠地薅了 MULTI.TODAY 遊戲一把羊毛。
「wojak」重現江湖
這個「聰明」的玩家究竟是何方神聖呢?
PeckShield?安全人員進一步分析發現,THeRTT 開頭的地址就是此前大名鼎鼎的「wojak」,他曾經攻擊過 TronBank Pro,並因此獲利 2,673萬個 TRX。
當時 TronBank Pro 遭攻擊的原因是,其合約代碼中留有「後門」,而「wojak」則成功地命中了後門,並將合約餘額全部取走了。儘管這件事情本身撲朔迷離,是巧合還是背後有陰謀,到現在都沒人說得清楚,然而,這倒讓「wojak」這一代號名揚四方了。不禁要問,此次「wojak」重現江湖,又會掀起怎樣的風浪呢?
MULTI.TODAY?遊戲玩法說明
要理清這個問題,我們得先系統了解下 MULTI.TODAY 遊戲。按照官方說明,所有參與投資的玩家會組成一個隊列,每次排名隊列首位的玩家會獲得投資額的11%—41%作為回報,之後該玩家會被移除隊列。
只要不斷有玩家參與投資,那麼先參與遊戲的玩家都將獲得豐厚回報,同時,為了避免最後一位玩家吃虧,遊戲還規定如果持續30分鐘沒有後續玩家投資,那麼最後一位玩家將獲得獎池的5%作為回報。
「wojak」的卡位回滾操作技術原理
MULTI.TODAY 於每天的 22:00 GMT 3(北京時間凌晨3點)開啟新的一輪遊戲,只有當遊戲正式開始後,玩家的投資才會被認可。由於遊戲規則的設定,所有玩家都爭搶著第一個參與。
通過 ?PeckShield TRON 大數據分析平台,可以看到在北京時間07月27號凌晨3點之前,多個玩家嘗試參與遊戲,但因為遊戲時間還沒有開始,交易都被回滾了:
(圖示1:遊戲開始前的交易)
當遊戲時間到達後,有多筆交易都被打包進了 11315294 區塊(即遊戲開始的區塊)。在這個區塊中與該遊戲合約有交互的前兩筆交易分別為「wojak」發起的 Tx1 合約交易,以及由普通玩家發起的 Tx2 交易。
下圖2為普通玩家發起的交易,圖3為「wojak」發起的合約交易:
(圖示2:普通玩家交易)
(圖示3:「wojak」發起的合約交易)
「wojak」首先調用 TK5HmY 地址開頭的合約,再由 TK5HmY 地址開頭的合約調用遊戲合約完成投資。PeckShield 安全人員分析後發現,區別於普通玩家,「wojak」發起的交易可不簡單,存在多層調用。
TK5HmY 地址開頭的合約首先調用 MULTI.TODAY 智能合約中的 startTime(),prizeAmount() 等靜態方法,以此來判斷遊戲是否開始,是否已有玩家投資;當確認遊戲開始,且尚未有玩家投資後,再多次調用遊戲合約的 deposit()方法進行投資。雖然遊戲合約設置在返利後移除排名隊列首位的玩家,但因為該玩家是通過合約來進行多次投資的,可以保證被移除後仍然保持榜首。
「wojak」獲利的關鍵是得讓這筆合約交易率先被 SR 節點打包。
在以太坊中,攻擊者可以通過提高 gasPrice 來惡意競爭,讓交易被礦工先打包處理,而波場沒有類似 gasPrice 的概念,所有交易是通過 SR 節點打包產生的。「wojak」事先準備好自動化腳本,在時間到達前通過自動化腳本不斷調用合約來完成交易,這會比普通玩家的手速要準確的多。同時,智能合約中的交易都是原子操作的,只要上鏈,合約可以保證交易中的所有操作按順序進行,這就大大提高了合約交易率先被 SR 節點處理的概率。
從鏈上數據分析看,「wojak」通過合約投資32次,單筆交易就獲利近10萬個 TRX。他確實是一位極度聰明的玩家,當其他玩家還在拼手速時,他已經通過部署合約的方式,製造了不平等特殊許可權,獲取了豐厚回報。
下圖為「wojak」的合約調用流程:
(圖示4:「wojak」調用合約流程圖)
「wojak」除了在 MULTI.TODAY 每輪遊戲開始時爭當頭名玩家外,PeckShield 安全人員還發現,針對遊戲第二種類似 Fomo3D 式的玩法,「wojak」也一直在「守株待兔」。
例如 TKjcLB?地址開頭的賬戶於07月27號 09:13:57發起了一筆投資,在此之後的30分鐘內沒有玩家參與,直至09:43:57,「wojak」發起了另一筆交易,在最後時刻成功阻攔 TKjcLB 地址開頭的賬戶獲得大獎。跟之前分析類似,「wojak」的這筆交易也是調用遊戲合約的 stage(),getCurrentCandidateForPrize()等靜態方法,獲取遊戲當前回合數和投資資金,以此判斷30分鐘內是否有玩家參與。
事件後續
PeckShield 安全人員在發現該問題後,第一時間和遊戲項目方取得了聯繫,項目方也及時升級了合約。
需要說明的是,「wojak」並沒有攻擊 MULTI.TODAY 合約,MULTI.TODAY 遊戲本身也不存在相關智能合約的漏洞,「wojak」只是聰明地利用了合約的設定規則,達到了「薅羊毛」獲利的目的,不能稱其為一次黑客攻擊行為。
不過,透過事件本身我們看出,上次 TronBank Pro 事件並非偶然,「wojak」確實是一位不折不扣的「技術牛人」。
寫在最後
雖然此次事件並非因漏洞誘發的黑客攻擊行為,僅是聰明「玩家」合理利用遊戲機制實施的高智商薅羊毛行為,但其暴露的問題卻值得我們深思:
1、遊戲運營機制設計的缺陷同樣會威脅到遊戲的參與體驗,透支並傷害大部分普通用戶對遊戲本身的信任;
2、合約玩家對如今 DApp 生態而言是把雙刃劍,合約會幫助黑客以最低的成本,掃蕩全網大量 DApp,且總能找到疏漏之處,進而下手;
3、遊戲項目方應完善自身的風控應急響應機制,一旦監測到異常獲利或攻擊行為,應立即對遊戲實施一鍵暫停,終止正在進行的攻擊行為,必要時可尋求第三方安全公司幫助,進而減少或避免數字資產損失;
4、遊戲玩家在參與遊戲時,應時刻注意項目官方或者安全公司發出的預警消息,對於已經遭受攻擊尚未停止運營的遊戲,應避免再次參與,以免遭受更大的數字資產損失。
(作者:PeckShield,內容來自鏈得得內容開放平台「得得號」;本文僅代表作者觀點,不代表鏈得得官方立場)
※Newton:打造全新社群經濟
※2019 BOINC全球開發者研討會在芝加哥揭幕,區塊鏈轉型成最大亮點
TAG:鏈得得APP |