近期許多NFT Discord遭駭,故本人特別寫篇文章,希望減少未來類似事件發生的機率。本文將會持續更新。
前言
智能合約寫得再嚴謹,Discord被攻擊,項目照樣破發。相信大家親眼目睹過很多次,在此就不舉例了。被駭的原因普遍是Mod缺乏資安知識。在Web3的世界,駭客手中拿著AK,而一堆人連頭盔都沒戴就輕裝上陣。若不想成為那個被打成蜂窩的可憐人,請乖乖看完這篇文章並取得你的防具。
註:本文不探討hacker及cracker的區別,為方便解說,文中所指駭客皆指社會大眾普遍認知的駭客。
文中有少部分和資安無關,但會造成社群混亂和困擾,所以仍應盡量避免。
內文有粗體底線的字點擊會跳轉到該區塊,有詳細的解釋。
本文會就下面目錄,詳細分析各種安全威脅的預防、處理及善後流程。
[點擊有底線的類別可以直接跳轉]伺服器設置缺失
伺服器設定
伺服器驗證等級過低
管理所需的2FA要求未開啟
未設置進群驗證
身分組設定
權限
管理頻道
管理身分組
管理webhooks
管理伺服器
踢出成員
對成員停權
禁言成員
提及@everyone、@here和所有身分組
管理訊息
管理活動
管理者
允許任何人@mention這個身分組
位階
順序錯誤
頻道設定
權限未同步
個人Discord帳號設定缺失
email驗證
手機驗證
2FA(Two Factor Authentication)
管理失當
停權/踢出/禁言
社交工程(social engineering)
偽裝項目管理員
偽裝metamask官方
偽裝Discord官方
釣魚連結
free Nitro
假官網
木馬程式(Trojan)
下載不明檔案
高危機器人
惡意授權
盜版collab.land
機器人被駭
QR Code
token盜取
javascript拖曳
spamming
spamming attack
token spamming attack
邀請連結置換
server vanity url如何預防
事件發生時處理方式
善後
伺服器驗證等級過低
如圖,一般伺服器預設是最上面那個無,社群伺服器預設為低。
這功能是伺服器的第一道防線。我建議一律調成最高,可以防止大部分的selfbot。
一般Discord官方認定合法的bot,如mee6,稱為bot。而selfbot指的是調用Discord API,將帳號自動化的程式。本文中如提及bot都是指合法的bot,selfbot會以selfbot特別區別。
selfbot不一定會為你伺服器帶來資安風險,有些selfbot的目的只是當伺服器舉辦抽獎時,自動點表情符號抽獎;又或者自動發言刷經驗值。雖說如此,有selfbot在伺服器中對社群發展還是很不健康。
另外,上圖中必須成為此伺服器的成員要超過10分鐘隱含的意思是,加入未滿10分鐘的成員無法點擊emoji,代表也無法通過mee6的進群驗證,可以特別提醒成員等待需10分鐘後再驗證(雖然我想各位到處肝白單這個應該蠻熟了)。
溫馨小提醒:不要碰selfbot,如果你是項目方或Mod 絕 對 不 能 碰
1.官方封帳
因selfbot違反Discord的使用者規範(TOS, Terms of Service),官方對selfbot一向抓很嚴,抓到就是同IP全部一起封,而且無論是不是誤鎖,申訴通常不會有回應。上圖是官方對selfbot的定義。
更棒的是,如果你是項目方,而你的伺服器沒有設定其他管理者,被封後整個伺服器完全無法維護和管理,新增bot、修改頻道名稱,甚至刪除伺服器都做不到,只能眼睜睜的看著伺服器凋亡。
另外,推廣selfbot很可能影響伺服器。Discord對推廣selfbot的伺服器也是0容忍,被抓到不只你遭殃,伺服器和成員的帳號也會一起被封。
下圖是我以前寫selfbot自動抓寶可夢結果被封,官方寄來的信。
我被封了20幾個帳號= =,現在金盆洗手,不碰黑魔法了。
2.項目方封你
很多項目方都發現有自動聊天的selfbot,有些優質的項目會在規定中明文禁止selfbot。
3.帳號被盜
要使用selfbot會需要你的token。網路上很多現成的selfbot會盜取你的token。此外,有些selfbot還是木馬(稍後會提到),除了你的Discord帳號外,其他社群媒體帳號和註記詞,攻擊者也會一併盜取。即使程式沒問題,在雲端(如repl.it)運行時,token往往沒放進環境變數,等於把自己的密碼貼在網路上供大家欣賞。
回目錄
管理所需的2FA要求未開啟
相信我,先開起來就對了,後面會花很多篇幅詳細解釋2FA。
回目錄
未設置進群驗證
進群驗證的目的當然是為了防止selfbot和低能兒。
最簡單的驗證方式如下,對mee6的驗證訊息按下emoji,mee6會自動assign身分組。
由於很多selfbot會點遍伺服器中所有emoji,嘗試進入伺服器,因此mee6驗證強度已不足了,目前普遍使用下圖的Captcha bot,能有效防止selfbot。
captcha即Completely Automated Public Turing test to tell Computers and Humans Apart,「全自動區分電腦和人類的公開圖靈測試」,我相信沒人知道captcha的英文和中文在供三小,所以我直接放圖。
回目錄
以下所有權限都不是一般成員該有的,請從一般成員的身分組中移除這些權限
另外,為方便管理,若該身分組沒有特殊權限需求,請不要勾選權限,維持預設即可。
管理頻道
白話文:建立、刪除、編輯所有頻道
威脅:所有頻道遭到刪除
回目錄
管理身分組
白話文:建立身分組,編輯、刪除比自己最高身分組低的身分組
威脅:將有管理身分組指派給自己,將Mod權限降級(位階設定失當的情況下)
請特別注意,此權限威脅性與管理者相當,非必要不要授予此權限,授予前請檢查位階設置是否正確。
回目錄
管理webhooks
白話文:建立、刪除、編輯webhooks
威脅:散佈任意釣魚連結、假mint網站
webhook是啥?就是下面這東西
長的很像一般的bot對吧?你可以把webhook當成功能很少的bot。
差別在於,webhook只能從外部被呼叫,一般的bot可以使用各種指令並讀取伺服器中的各種資訊,Discord的webhook只能發送訊息,當然webhook也可以改頭像。
下圖就是Rare Bears及SUI被駭後Webhook的攻擊應用。
回目錄
管理伺服器
白話文:如題
威脅:攻擊者可以亂改伺服器名稱和調整伺服器驗證等級,也能撤銷邀請連結。
回目錄
踢出成員
白話文:把成員踢出伺服器,只要成員有邀請連結就能隨時加回伺服器。
威脅:踢出任何比攻擊者最高身分組位階還低的任何人(除了伺服器擁有者外),簡而言之項目會血流成河。
回目錄
對成員停權
白話文:永久將成員從伺服器停權,解除停權前成員無法再次加入伺服器。我覺得這中文翻的很爛。總之就是ban的意思。和踢出成員一樣,差別在於無法重新加入伺服器。
威脅:同踢出成員,一樣會血流成河,流量大到可以拿去水力發電。
如下圖,官方還搞了個雷神索爾的gif
回目錄
禁言成員
白話文:如圖
威脅:所有成員被禁言
回目錄
提及@everyone、@here和所有身分組
白話文:讓大家狂噴通知,@here會提及所有該頻道上線的成員,@everyone會提及所有成員,包含未上線的成員。
威脅:很吵。
回目錄
管理訊息
白話文:刪除/釘選訊息
威脅:所有訊息被刪除
回目錄
管理活動
白話文:建立、刪除、編輯活動
威脅:替換成假的mint網站
回目錄
管理者
白話文:除了比攻擊者最高身分組還高的身分組動不了外,可以做到任何事。
威脅:伺服器頻道刪光、成員被禁言、散布假mint官網、項目破發。
回目錄
允許任何人@mention這個身分組
白話文:同提及@everyone、@here和所有身分組。
威脅:很吵
回目錄
順序錯誤
Discord的身分組有位階之分,即使你擁有管理者權限,仍只能操作比你最高身分組低階的身分組。Discord會將你暱稱的顏色設為你最高階身分組的顏色。
威脅1:機器人身分組高於Mod身分組
威脅2:任意身分組高於管理身分組,且該身分組擁有管理身分組權限
1.假設今天機器人被駭,Mod完全無能為力,只有伺服器擁有者一人有權限能處理。
2.攻擊者可以透過新增/移除身分組的方式為自己提升至管理者權限,並把Mod身分組拔光,這種情況Mod一樣束手無策。
除此之外,當然還有其他可能的狀況。最好的方法就是一開始就確保設定沒有缺失。若真的遇到了,請盡速聯絡有權限的人協助處理。
權限未同步
這裡的未同步是指預設身分組的權限未與頻道身分組的權限同步。
許多時候,大家預設身分組的地方設置的很嚴謹,頻道身分組權限卻設的一塌糊塗,資安風險也就由此產生。
舉例來說,nice身分組的預設權限全部都是關閉的。
而在cmd頻道,nice身分組卻擁有所有權限。
很多人都會忽略頻道權限設置,導致的結果就是攻擊者雖然沒有所有頻道的權限,但可在特定頻道為所欲為。
另外,設置權限時請不要像下圖這樣搞,很不優雅,維護起來也很累。
看到❌和✔️之間那可愛的斜線了嗎?
/代表預設,也就是頻道權限會跟隨伺服器身分組的設定。
設定伺服器權限的步驟應為:
1.設定伺服器身分組權限
2.設定類別權限
3.設定頻道權限
處理2和3時請善用可愛的斜線和同步權限功能,沒有要修改的權限請用斜線。
回目錄
email驗證
驗證你的email信箱,才能加入大部分伺服器,我想這大家已經已經知道了。
冷知識:沒驗證信箱的,未來帳號隨時可能被鎖。
回目錄
手機驗證
驗證手機號碼,現在大部分項目都把伺服器驗證等級調成最高,這也是必備的。
回目錄
2FA(Two Factor Authentication)
2FA的中文是雙因素驗證,相信有用過交易所都應該蠻熟的。2FA的2指的是有別於密碼外,額外的第二層驗證。有些交易所使用的是手機簡訊驗證,Discord使用的則是Google Authenticator。所有Mod都應該開啟2FA,這能有效提升帳號安全性,如同防彈背心一樣。但這並不代表你可以亂點連結,防彈背心只是防流彈,即使開了2FA,你token被盜一樣涼了。先不說2FA,正常情況下,使用email和密碼在新的IP登入時,Discord會傳email到你信箱,要求授權新位置的登入,如果沒授權就無法登入。而token登入可以繞過email驗證和2FA。至於為啥官方把token放在local,我也不知道。社群已經吵這個吵了好幾年了,官方死都不改= =。
回目錄
停權/踢出/禁言
管理項目時,對scam的請直接停權,FUD的踢出,起爭執的解決完衝突視情況禁言。
被停權的對象,直到解除為止都無法加入該伺服器。
如果遇到在每個頻道都貼scam連結的,停權+刪除24小時內所有訊息是最好的方法。Mod應清楚這些動作的使用時機。
回目錄
偽裝項目管理員
騙你註記詞或Discord帳號。
別理私訊。
回目錄
偽裝metamask官方
騙你註記詞。
別理私訊。
回目錄
偽裝Discord官方
騙你Discord帳號。
別理私訊。
回目錄
free Nitro
nuff say
回目錄
假官網
騙你錢包授權。
別理私訊。
回目錄
下載不明檔案
本人親身經歷,有個自稱設計師的freelancer要我幫他發NFT,以保密協定為由,傳了個格式特殊的檔案,實際上是木馬。當然我沒事,用虛擬機開過了。
套句粗俗點的話
trojan will kill your cat, eat your dog and make love to your wife.
回目錄
惡意授權
授權給盜版的bot會讓攻擊者取得你帳號的所有權限。
隨意授權有去無回,授權前請比對是否為官方bot。
回目錄
盜版collab.land
騙你助記詞或錢包授權。
點下去你的NFT就和你say goodbye了。
回目錄
機器人被駭
雖然這不太常發生,如果發生了絕對血流成河。真的發生時請至設定中找到已授權的應用程式並取消該bot的授權,並立刻踢出bot。
更:我錯了,前陣子CaptchaBot跟TicketTool都出事了……
回目錄
QR Code
攻擊者可能會以合作/徵才等名義要求你掃QR Code驗證。有些還會配合盜版的機器人,實際上你掃的就是下面這個。掃了以後攻擊者就擁有該帳號所有權限,如下圖。
下圖為Demi CCIE向Dyno官方求證是否為盜版機器人的結果
回目錄
javascript拖曳
javascript是種程式語言,網頁的各種酷功能就是用javascript寫的。
當然很多危險的程式也是用js寫的。
以下是朋友遇到的真實事件。
起因是攻擊者假冒Sekira項目方,找我朋友擔任Mod,開出不錯的薪水,如下圖。
接著項目方要求我朋友照著以下影片方式操作,取得白單碼。
影片中可以看到,將網頁上的物件拖曳至書籤列,之後會自動跳轉至Discord。
其實這個行為就是在執行攻擊者的程式,用開發人員工具檢查那個物件,可以發現他執行了javascript,如下圖。
乍看之下程式碼沒啥問題,唯一可疑的是那串編碼過的字串。
於是我用工具去解碼base64。
看到下圖左方解碼結果,相信寫過js API的各位應該很熟悉。如果你不知道API是啥的話,簡單來說解碼出來的那段程式,會執行那個.txt裡面的程式。
.txt檔裡面的程式會盜你的token
如果你真的很想看看那個txt的內容,這裡是雲端連結,請自取。
https://drive.google.com/file/d/11SiUpyN_qsjdeT7uFFLB0ATdtZCgo7J_/view?usp=sharing
另外,稍微解釋一下token是什麼,和如何查看你的token。token中文翻譯叫權杖,簡單來說就是帳號密碼合一,由亂碼組成的字串。擁有帳號的token就等同擁有該帳號完整的存取權,也能執行很多自動化的程式。token會隨著密碼而改變,密碼變更後,舊有的token會失效,這點我在2FA的地方提過了。
要查看你的token,在Discord網頁版按下F12開啟開發人員工具,找到Application分頁,點左邊的storage找到https://discord.com,再從右邊用你的老花眼找到token,找到以後把token給我,我就可以用你的帳號加一些色色的群(誤)。總之,如果你用的工具會需要和你要token,最好清楚自己在做什麼。
回目錄
spamming attack
用selfbot惡意洗頻,除了很煩以外其實還好,停權+刪除24小時內訊息就完事了。預防方式就是把伺服器驗證等級調到最高,使用captcha進群驗證。如果前面你有認真讀的話應該知道怎麼處理。舉個例子,之前狐蒙群有個小粉紅在吵政治,後來惱羞就用selfbot洗一排台獨去死還啥的。
回目錄
token spamming attack
這個比較棘手一點,攻擊者會用selfbot大量發送token,Discord程式會判定該伺服器在進行騙取token的活動,並封鎖該伺服器。這個無法可防,預防方式和上面一樣,但有心人真的要攻擊也擋不了,加上Discord官方消極的處理方式,要恢復受攻擊的伺服器很難。
回目錄
server vanity url
在講這攻擊方式前,我們要先了解伺服器邀請制度。
有很多種方式可以產生邀請連結邀請別人。
下圖是在頻道建立邀請。
下圖則是在伺服器上點右鍵邀請其他人。
上面兩者所產生的邀請連結都可以自訂邀請時間和最大使用次數等等,如下圖。
上面2者產生的邀請連結屬於個人邀請連結,而我們要討論的是伺服器個性化網址。伺服器個性化網址要伺服器boost達到等級3才能解鎖。
伺服器個性網址的設定介面如下圖。
那麼,為何個性化網址會有資安風險?
正常情況下是很安全的,但如果你開開關關這個功能就不是了。
舉個栗子🌰,前陣子Gucci Discord點邀請連結進去卻是假的。
原因是Gucci原本開了伺服器個性網址,後來又關了。伺服器個性網址的機制是,可以取任何名字,只要不與現存的網址衝突即可。假設Gucci當時的伺服器個性網址是https://discord.gg/gucci,當Gucci的Mod關閉這功能時,攻擊者馬上創一個假的伺服器,將伺服器boost到等級3,並把伺服器個性網址改成https://discord.gg/gucci。如此一來,往後使用者點這個邀請連結,進入的就會是假的Discord,連上假的mint網站,ETH被騙光光。
預防方式:
1.一開始就不要開伺服器個性網址
2.如果已經開了,就不要關
處理方式:
如果已經發生了,請在Twitter、Instagram等其他社群媒體發布公告,請大家協助刪除之前發布的原邀請網址,並提醒大家小心詐騙。
回目錄
如何預防
Mod應有完善的資安觀念,定時檢查頻道權限。
事件發生時處理方式
1.先查看審核日誌確認受到攻擊的原因(Mod帳號被盜?伺服器權限設定失當?)。
2.如果你是伺服器擁有者或者是Mod且權限夠,馬上停掉所有身分組的管理權限。如果你權限不夠請聯絡伺服器擁有者處理。如果你是帳號被盜的那個,請嘗試改掉你的密碼和開啟2FA(你早就應該開了= =)。由於改密碼會重置token,攻擊者持有的舊token也就沒用了。
3.刪除攻擊者發布的釣魚連結、假mint網站。
善後
1.查看審核日誌,確認攻擊者做的變更已復原,特別是webhook,請全部刪掉。
2.重新檢查身分組、頻道權限。
3.發布公告,和成員解釋事件始末。
4.加強資安觀念,把本文6000多字全部背起來。
已經到底啦=w=
Congrats!你現在是Discord資安大佬了,應徵項目Mod時可以和項目方說你讀過這篇文章,說不定馬上就被錄取了呢(笑)
我認為這些知識是每個Moderator都該具備的。如果你是Mod,這篇文的內容你應該刻在腦子裡;如果你是項目方,可以抽考看看你的Mod到底知不知道這些知識,如果一問三不知可以直接炒了(誤)。如果你的身分不是上面兩者,你也應該熟讀本文,保護好自己,並分享給你認識的項目方好朋朋。
阿…你說你上面有看沒有懂?沒問題!你付ETH,我幫你弄到好,讓你省去吸收這些知識的時間UwU。在本文撰寫時,正好Rare Bears和Aiyah Verse被駭,頻道全噴光。這就是資安防護的重要性,也就是為什麼一堆項目願意花大筆ETH找我的原因。
大家可能不知道我是誰,簡單自我介紹一下
我是Xeift,19歲單身,。興趣是下西洋棋(很菜)和看動漫,平常偶而啃啃台灣/日本文學,目前努力自學javascript、solidity和日文中。學測成績廢到笑,一拿到答案卡直接當六合彩簽。多益860還算堪用。有多年Discord管理經驗,也是Discord bot開發者,我寫的NFT bot在34個項目的Discord上運行。目前在各NFT項目和社群,如台灣DAO,擔任Mod和資安防護的部分。有些項目方想實現一些酷功能也會找我寫客製化bot。合作或有任何疑問歡迎透過以下管道找我,平常很忙,回覆訊息若有延遲請見諒。不接Mod,目前大多以顧問的角色親自處理和解答Discord相關問題。要割韭菜的項目請不要找我,價格再高我都不會接,我已經推掉好幾個合作。我只為打算付出心力認真經營的項目方做事。
如果覺得這篇文章寫得不錯,歡迎點左下角的拍手。
本文將同步刊載至Matters。
Discord: Xeift#1230
Facebook: https://www.facebook.com/xeift
GitHub: https://github.com/Xeift/
Telegram: https://t.me/Xeift
Twitter: https://twitter.com/Xeift1
Email: Xeift@yandex.com
ENS: xeift.eth