[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

雲鼎實驗室發表於2020-09-03

一、背景

近日,騰訊雲安全團隊監測到部分雲上及外部使用者機器存在安全漏洞被入侵,同時植入 watchdogs 挖礦病毒,出現 crontab 任務異常、系統檔案被刪除、CPU 異常等情況,並且會自動感染更多機器。攻擊者主要利用 Redis 未授權訪問入侵伺服器並透過內網掃描和 known_hosts 歷史登入嘗試感染更多機器。(對此,騰訊雲安全團隊第一時間釋出了病毒預警——預警 | 中招 watchdogs 感染性挖礦病毒,如何及時止損?)

相較於過去發現的挖礦病毒,這次的挖礦病毒隱藏性更高,也更難被清理。伺服器被該病毒入侵後將嚴重影響業務正常執行甚至導致奔潰,給企業帶來不必要的損失

二、指令碼分析

首先,可以直接從crontab任務中看到異常的任務項:

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

該crontab任務實現從 hxxps://pastebin.com/raw/sByq0rym 下載shell指令碼並執行,shell指令碼內容為:

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

該指令碼實現從 hxxps://pastebin.com/raw/tqJjUD9d 下載檔案,檔案內容為經過base64編碼處理;

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

base64解碼後為shell指令碼,shell指令碼主要功能如下:

1. 修改環境變數,將常見的可執行檔案目錄新增到系統路徑中,確保指令碼中的shell命令正常執行;同時再次覆寫crontab任務。

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

2. 清理其他惡意程式,如"kworkerds","ddgs"等挖礦程式;同時透過chattr -i等命令解鎖和清理相關係統檔案

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

3. 根據系統資訊下載對應惡意程式執行;駭客主要透過將惡意程式偽裝成圖片上傳hxxp://thyrsi.com圖床站點,shell指令碼下載hxxp://thyrsi.com/t6/672/1550667515x1822611209.jpg儲存為/tmp/watchdogs檔案,賦予可執行許可權後執行該惡意程式;

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

4. 再進一步橫向擴充套件感染,檢查本地 ssh 憑證,遍歷/root/.ssh/known_hosts檔案中的IP地址,利用預設公鑰認證方式進行SSH連線,執行惡意命令橫向擴充套件感染;

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

5. 最後清空系統日誌等檔案,清理入侵痕跡。

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄


透過bash指令碼我們可以得知關鍵檔案為其中的watchdogs檔案。

進一步透過top命令未見異常程式,而CPU空閒率為100%,但又明顯感覺到機器執行遲緩。

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

進一步透過vmstat進行確認,可以發現CPU使用率95%以上,由此可以推斷存在隱藏程式,並且hook了相關readdir 等方法,具體案例我們在以前的文章已經做過分析。安全研究 | Linux 遭入侵,挖礦程式被隱藏案例分析

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

進一步分析watchdogs檔案,可以清楚看到病毒釋放了/usr/local/lib/libioset.so的動態連結庫並將路徑寫入/etc/ld.so.preload來實現了程式的隱藏,與我們上面的推測是一致的。具體可見樣本分析部分。

三、樣本分析

樣本 watchdogs

主要功能:

1.獲取當前程式id,寫入/tmp/.lsdpid檔案

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

2. 複製 /tmp/watchdogs至/usr/sbin/watchdogs路徑,並將watchdogs新增至啟動項及服務項

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

3. 釋放libioset.so檔案至/usr/local/lib/libioset.so,並將該so檔案路徑寫入/etc/ld.so.preload,同時刪除/usr/local/lib/libioset.c檔案

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

4. 訪問ident.me獲取機器IP

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

5. 設定定時任務,定時從 https://pastebin.com/raw/sByq0rym 上獲取shell執行指令碼

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

6. 寫入/tmp/ksoftirqds、/tmp/config.json,執行ksoftirqds後刪除

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄


7. 刪除生成的相關檔案

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

8. 訪問 https://pastebin.com/raw/C4ZhQFrH 檢查更新

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

樣本 libioset.so

64位程式中,惡意樣本會釋放出libioset.c檔案,採用原始碼編譯的方式生成libioset.so檔案,而32位程式則直接釋放出libioset.so檔案

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄


[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

libioset.so主要功能為hook刪除、檢視等系統命令函式,過濾掉watchdogs等相關資訊,導致ls、rm等命令對該惡意程式無效,該so檔案匯出函式如下所示

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

例如,readdir64函式中,載入了libc.so.6

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

獲取原始函式地址

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

如果呼叫該函式的程式不是ksoftirqds或watchdogs,則過濾掉所有包含惡意程式相關的結果。

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

unlink函式同樣進行了過濾,導致無法清除惡意程式相關的LD_PRELOAD、libioset.so等。


該惡意程式同樣隱藏了CPU資訊和網路連線資訊,如下所示:

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

當呼叫fopen開啟/proc/stat時,返回偽造的資訊

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

當呼叫fopen開啟/proc/net/tcp或/proc/net/tcp6時,同樣進行過濾

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

四、流程還原

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

基於上面的指令碼和ELF樣本分析可以發現整體入侵和感染流程大概為:


1、透過Redis未授權訪問漏洞入侵機器並修改crontab任務;或者透過遍歷known_hosts中的連線歷史進行橫向擴充套件;


2、crontab任務執行bash指令碼,進行相關清理和下載執行惡意程式watchdogs並橫向擴充套件:

a)      覆寫crontab任務;

b)      清理其他惡意程式;

c)      解鎖刪除相關係統檔案;

d)      下載執行watchdogs;

e)      橫向掃描其他機器;

f)       清理相關檔案和痕跡。


3、watchdogs執行實現寫開機啟動、服務項並釋放動態連結庫實現隱藏,同時釋放執行挖礦程式:

a)      獲取程式ID寫/tmp/.lsdpid;

b)      將/tmp目錄下的watchdogs複製到/usr/sbin/目錄並加入開機啟動項和服務項;

c)      釋放libioset.so並寫入/etc/ld.so.preload實現程式等隱藏;

d)      訪問ident.me獲取機器外網IP;

e)      再次覆寫crontab任務;

f)       釋放挖礦程式ksoftirqds和配置檔案config.json並執行;

g)      刪除相關生成的檔案並檢查更新。


最終完成了一個漏洞利用到植入挖礦程式,同時隱藏和橫向感染的過程。

而相對與過去我們分析過的隱藏程式的挖礦病毒,在該病毒釋放的動態連結庫中同步對unlink函式進行了過濾,過濾名稱同時包含ld.so.preload和libioset.so,而同時由於刪除、檢視等系統命令函式也受過濾影響,就導致透過常規自帶的方法無法直接刪除libioset.so或者修改ld.so.preload解除惡意程式的隱藏,只能透過busybox 來實現對這些檔案的刪除清理。

在我們將/usr/local/lib/libioset.so檔案清理後,就可以透過top命令看到執行的挖礦程式。

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

透過捕獲的錢包地址檢視駭客收益:

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

[原創]事件分析 | Linux watchdogs 感染性隱藏挖礦病毒入侵還原錄

(資料來源:f2pool)

該錢包總收益約為56.5門羅幣,約合1.9萬人民幣,過去24小時內收益1.3門羅幣,當前算力約為430KH/S。

五、修復建議和清理方法

修復建議

Redis未授權訪問:

1、為 Redis 新增密碼驗證(重啟Redis才能生效);

2、禁止外網訪問 Redis(重啟Redis才能生效);

3、以低許可權執行Redis服務(重啟Redis才能生效) 詳細操作請參考:http://bbs.qcloud.com/thread-30706-1-1.html。

內網感染:

1、建議不要將連線機器的私鑰直接放在伺服器上,如有必要建議新增密碼;

2、建議透過有限的機器作為跳板機實現對其他內網機器的訪問,避免所有機器的隨意互聯互通,跳板機不要部署相關可能存在風險的服務和業務。

挖礦木馬清理方法

1、刪除惡意動態連結庫/usr/local/lib/libioset.so;

2、排查清理/etc/ld.so.preload中是否載入1中的惡意動態連結庫;

3、清理crontab異常項,刪除惡意任務(無法修改則先執行5-a);

4、kill 挖礦程式;

5、排查清理可能殘留的惡意檔案:

a)      chattr -i /usr/sbin/watchdogs /etc/init.d/watchdogs /var/spool/cron/root /etc/cron.d/root;

b)      chkconfig watchdogs off;

c)      rm -f /usr/sbin/watchdogs /etc/init.d/watchdogs。

6、相關係統命令可能被病毒刪除,可透過包管理器重新安裝或者其他機器複製恢復;

7、由於檔案只讀且相關命令被hook,需要安裝busybox透過busybox rm命令刪除;

8、部分操作需要重啟機器生效。

六、附錄

IOCs:

樣本

1. aee3a19beb22527a1e0feac76344894c

2. c79db2e3598b49157a8f91b789420fb6

3. d6a146161ec201f9b3f20fbfd528f901

4. 39fa886dd1af5e5360f36afa42ff7b4e

礦池地址

xmr.f2pool.com:13531

錢包地址

46FtfupUcayUCqG7Xs7YHREgp4GW3CGvLN4aHiggaYd75WvHM74Tpg1FVEM8fFHFYDSabM3rPpNApEBY4Q4wcEMd3BM4Ava.teny

URLs

1. hxxps://pastebin.com/raw/sByq0rym

2. hxxps://pastebin.com/raw/tqJjUD9d

3. hxxp://thyrsi.com/t6/672/1550667515x1822611209.jpg

4. hxxp://ident.me

相關連結:

https://mp.weixin.qq.com/s/1AF5cgo_hJ096LmX7ZHitA


本文作者:安全攻防組@騰訊安全雲鼎實驗室 

騰訊安全雲鼎實驗室專注雲安全技術研究和雲安全產品創新工作;負責騰訊雲安全架構設計、騰訊雲安全防護和運營工作;透過攻防對抗、合規審計搭建管控體系,提升騰訊雲整體安全能力。


[公告]請完善個人簡歷資訊,招聘企業等你來!

相關文章