Kinsing 惡意軟體使用 Rootkit的分析

Kinsing附帶了數個shell腳本。這些shell腳本負責下載和安裝、移除或反安裝各種資源密集型服務和程序。這篇文章會重點介紹rootkit組件的作用。

我們上一次討論Kinsing惡意軟體是在2020年4月,當時我們分析其基於Golang的Linux程式會針對設定不當的Docker Daemon API端口植入虛擬貨幣挖礦程式。

隨著Shell腳本以及Linux惡意後門和程式的不斷發展,Kinsing作者會持續跟上腳步也不足為奇了。在本文中,我們會討論惡意軟體變種當前的功能,包括加入更難被受感染機器偵測到的功能。與Trident惡意軟體使用rootkit來隱藏虛擬貨幣挖礦程式的作法類似,Kinsing也整合了會預載程式庫的使用者模式rootkit

惡意軟體本身附帶了數個shell腳本。這些shell腳本負責下載和安裝Kinsing後門程式,挖礦程式和rootkit,以及移除或反安裝各種資源密集型服務和程序。這些腳本與前面文章裡討論的腳本類似。這篇文章會重點介紹rootkit組件。

技術分析


部署shell腳本的第一步是移除/etc/ld.so.preload(如果存在)。

Removing the immutable file flag
Removing the immutable file flag
圖1. 移除/etc/ld.so.preload

這/etc/ld.so.preload檔案會在開機時將共享物件或程式庫路徑列表載入每個使用者模式程序,早於任何其他的共享程式庫 – 包括C執行時期程式庫(libc.so)。各Linux發行版本預設不會存在該檔案。因此,必須特意去建立。

接著下載程式將rootkit下載到/etc/libsystem.so,然後建立新的/etc/ld.so.preload。再將指向rootkit的連結加入/etc/ld.so.preload檔。

 Downloading the rootkit and creating persistence
 Downloading the rootkit and creating persistence
圖2. 下載rootkit並建立持續性

請注意,從/etc/資料夾移除檔案或寫入檔案需要特殊權限。所以強烈建議要遵循最小權限原則,並且不要用root權限執行應用程式或容器

Kinsing惡意軟體也可以用較小權限運作,但沒有進階的持續性和rootkit功能。

Setting up the persistence function
Setting up the persistence function
圖3. 設定持續性功能

將下載的Kinsing惡意軟體註冊為”bot”系統服務來做到使用者等級的持續性。

另一種等級的持續性透過cron實現,會重複下載並執行安裝腳本。

cron persistence
cron persistence
圖4. cron持續性

Rootkit分析


這rootkit包含了隱藏文字列表和非掛鉤符號列表(原生函式會被掛鈎,但需要其原始地址被解析並保存以備後用)。這些列表透過單位元XOR加密。

Decryption algorithm used to obtain the names of hidden literals and hooked functions
Decryption algorithm used to obtain the names of hidden literals and hooked functions
圖5. 用來取得隱藏文字和掛鉤函式名稱的解密算法

這rootkit掛鉤的函式如下:

  • access
  • rmdir
  • open
  • readdir
  • readdir64
  • stat
  • stat64
  • __xstat
  • __xstat64
  • lstat
  • lstat64
  • __lxstat
  • __lxstat64
  • fopen
  • fopen64
  • link
  • unlink
  • unlinkat

這rootkit實作以下函式:

is_attacker

用來判斷攻擊者是否呼叫該程序,作法是檢查名為SKL的環境變數是否存在。

is_hidden_file

如果檔名是kinsing(後門和蠕蟲程序),kdevtmpfsi(加密程序)或lib_system.so(rootkit),它會返回代碼EPERM = Operation not allowed

在查看/proc/資料夾時,rootkit會搜尋程序資料夾內的環境檔案和變數SKL來判斷是否隱藏該資料夾。

hide_tcp_ports

用來解析/proc/net/tcp/proc/net/tcp6內的檔案,這些檔案包含當前活躍中的TCP連線列表。它會提取遠端IP地址並將其和要隱藏的文字進行比對。如果比對符合就會從列表隱藏相關TCP連線的資訊。

readdir

如果攻擊者執行程序(SKL環境變數是設定來讓程序呼叫readdir函式),則readdir運作會不受限制。

如果目前資料夾是/proc且程序名稱為kinsingkdevtmpfsi,則資料夾列表會忽略該資料夾。如果是’.’或隱藏檔案(kinsingkdevtmpfsilib_system.so),則它會忽略這些檔案。

對於其他掛鉤函式,攻擊者執行的程序可以不受限制地調用所有操作。對於其他程序(不是攻擊者執行的程序),如果存取了隱藏檔案則會返回ENOENT = No such file or directory錯誤代碼。

進一步搜尋顯示,駭客重複利用了公開的beurk rootkit,但進行了一些客製化修改。

beurk rootkit repository
beurk rootkit repository
圖6. Beurk rootkit儲存庫

結論


Kinsing仍然相當活躍且不斷發展。加入rootkit組件可以隱藏被感染系統內惡意組件的存在。重複利用公開原始碼是惡意行為者常見的作法,可以讓他們更加容易地為惡意軟體增添新功能。

入侵指標(IOC

雜湊值(SHA-256) 偵測名稱
4CE4F3EA11D62518C3C6248FB827E72628A0750AD4C4BD7E69D62C444F5FDB04安裝腳本Trojan.SH.KINSING.E
D5F089EA1B007AE0796D7D44B5A282C20195B074FEEBC113D7A1FD0D61C8C496安裝腳本Trojan.SH.KINSING.E
000BEF7B8B56BDB86606A03C6EC3887EC0F1EB5DC507F60144656C8046D89B2E安裝腳本 
7F44FE4766AEB78B65EE014864E49A76D2E61B2198A356F23060F48A5F057411安裝腳本 
1635095EA081FBF1B7C2CF3A88C610D0BCCBFD5B470F1E49AA093B086D21FFC8散播用腳本Trojan.SH.KINSING.E
C38C21120D8C17688F9AEB2AF5BDAFB6B75E1D2673B025B720E50232F888808ARootkitTrojan.Linux.KINSING.AA
CCFDA7239B2AC474E42AD324519F805171E7C69D37AD29265C0A8BA54096033DKinsing惡意軟體Coinminer.Linux.MALBTC.AMX

C&C IP地址:

  • 45[.]129[.]2[.]107
  • 45[.]156[.]23[.]210
  • 45[.]142[.]214[.]48
  • 93[.]189[.]46[.]81
  • 95[.]213[.]224[.]21
  • 95[.]181[.]179[.]88
  • 176[.]96[.]238[.]176
  • 185[.]156[.]179[.]225
  • 185[.]221[.]154[.]208
  • 185[.]237[.]224[.]182
  • 185[.]154[.]53[.]140
  • 185[.]87[.]48[.]183
  • 193[.]164[.]150[.]99
  • 194[.]87[.]102[.]77
  • 212[.]22[.]77[.]79

@原文出處:Analysis of Kinsing Malware’s Use of Rootkit 作者:Jaromir Horejsi,David Fiser