原文鏈接:Reptile Malware Targeting Linux Systems
譯者:知道創宇404實驗室翻譯組

Reptile 是一個針對Linux系統的開源內核模塊rootki(其可在 GitHub 上獲取)。Reptile 可隱藏自身及其他惡意軟件,主要針對目標為:文件、進程和網絡通信等。Reptile的隱藏功能不僅包括它自己的內核模塊,還包括文件、目錄、文件內容、進程和網絡流量。

與其他通常只提供隱藏功能的 Reptile惡意軟件不同,Reptile 可以提供了一個反向shell,允許威脅參與者輕松控制系統。端口敲門是Reptile 支持的最顯著的特性,當打開惡意軟件時受感染系統的特定端口會進入到備用狀態。威脅者會向系統發送Magic Packet,而接收到的數據包也會作為與C&C服務器建立連接的基礎。

該方法類似早期Avast在報告中提到的Syslogk,但主要的區別在于Syslogk是基于另一個Adore-Ng的開源Linux內核rootkit而開發的。但兩者間的相似點在于:被Magic Packet 觸發之前在受感染的系統中會處于待機狀態,且會使用定制的 inySHell (即Rekoobe)作為攻擊的后門。

在GitHub上開放源代碼后,Reptile一直被用于攻擊中。Mandiant最新報告證實一個位于中國的威脅組織在利用Fortinet產品中的零日漏洞持續進行的攻擊過程中攻擊中使用了Reptile 。此外,ExaTrack在分析Mélofée惡意軟件的報告中也發現了Reptile rootkit。ExaTrack將此歸因于位于該事件時中國的Winnti攻擊組織行為。

本文我們將簡要分析Reptile的基本結構和功能,并整理出它被用于攻擊韓國公司的事件概述。最后,我們將根據惡意軟件的安裝路徑或偽裝的目錄名,總結與Mélofée惡意軟件案例的相似之處。

1 爬蟲分析

1.1 Reptile 結構分析

圖1:Reptile 的運行結構

1.1.1 威脅行為者系統分析

除支持安裝在受感染系統上的惡意軟件,Reptile還支持威脅行為者使用的工具。偵聽器是一個命令行工具,通過給定偵聽端口及運行密碼。它等待反向shell的連接,該連接會在受感染的系統上執行。根據選項的不同,Reptile可以在安裝后建立指定地址的反向shell連接。這種情況下,運行在C&C服務器上的偵聽器接收此連接并向威脅者提供shell。

即使未指定威脅者的C&C服務器,其也可以使用端口敲門方式將特定數據包傳輸到受感染的系統,從而觸發反向shell。這個行為主要通過一個Packet的命令行工具實現,該工具接受反向shell連接地址和端口敲門方法中使用的協議等參數。偵聽器和數據包可以手動使用,也可以通過提供接口的客戶端使用。

1.1.2 受影響的系統

如果未指定安裝路徑,則默認安裝在“/reptile/”目錄下,文件名分別為“reptile”、“reptile_shell”和“reptile_cmd”。“reptile”加載程序負責解密和加載在文件中進行加密的reptile rootkit內核模塊,也就是說Reptile rootkit不是只作為內核模塊文件直接存在的。相反,它是由加載程序通過解密安裝的。

圖2:安裝目錄

reptile_cmd負責向Reptile rootkit傳輸命令,通過指定并執行要隱藏的目標作為參數來與rootkit通信。反向shell惡意軟件 reptile_shell接收命令行參數,并由Reptile rootkit進行執行。

如果指定了在安裝過程中嘗試直接連接到C&C服務器的選項,該命令則將分配給/reptile/reptile_start腳本文件。Reptile惡意軟件通過加載內核模塊執行上述腳本文件來操作反向shell。此外,如果通端口敲門方法接收到該地址,還可以執行反向shell并發送解密后的C&C服務器地址。

1.2 惡意爬蟲軟件分析

在/reptile/目錄中創建的Reptile不是一個內核模塊,而是一個用戶模式應用程序。當加載程序被執行時,它會解密包含在數據段中的Reptile 內核模塊,然后使用init_module()函數將其加載到內存中。此外,用于加密和解密的算法也將在解密Magic Packet時使用。同時在構建過程中也會隨機生成鍵值,而這也會導致生成的每個文件會有不同的值。

圖3:爬蟲中使用的加密功能

加載的Reptile是一個內核模塊,主要通過kmatryoshka開源工具進行打包。kmatryoshka是一個基于Linux內核模塊的打包器,負責解密以加密形式存在的原始內核模塊。然后它利用sys_init_module()函數來進行加載。因此,原始的Reptile爬蟲以打包的形式存在于用戶模式和內核模式中。

圖4:kmatryoshka 程序

1.2.1 隱蔽特征分析

Reptile使用KHOOK的Linux內核函數掛鉤引擎來掛鉤內核函數。如:它掛鉤 ip_rcv()內核函數來使用端口敲門方法,以此監控收到的數據包。

當向rootkit發送命令時,Reptile使用reptile_cmd向爬蟲內核模塊發送ioctl。為了監視這個ioctl,inet_ioctl()內核函數被掛起。在發送給ioctl的數據中,cmd表示命令號。與進程隱藏命令一樣,如果需要額外的數據(如PID),則使用控制結構的argv變量來傳輸數據。在命令下發過程中,AUTH和HTUA是隨機值。爬蟲監視ioctl,并在找到匹配項時執行相應的操作。

圖5:ioctl 的傳輸

表1:cmd 命令

除了隱藏和端口敲門功能之外,Reptile還提供了一個功能:可以使用root命令為當前用戶提供root權限。它還通過Udev支持持久性。下面的規則文件是在/lib/udev/rules.d/目錄中創建的,復制的路徑被指定為確保即使在重新引導后也能執行。

圖6:已創建udev規則文件

1 文件和目錄隱藏

Reptile惡意軟件可以根據“hide”和“show”命令隱藏或顯示文件和目錄。隱藏目標是在生成過程中包含指定字符串的路徑。為此,它掛鉤了多個內核函數,包括 fillonedir()、filldir()和filldir64()。如果隱藏目標的字符串出現在路徑名中,掛鉤函數返回“ENOENT”,即“沒有這樣的文件或目錄”錯誤。

圖7:隱藏文件和目錄

2 自我隱藏

“hide”和“show”命令不僅支持文件和目錄的隱藏,還支持Reptile內核模塊本身的隱藏。當接收到“hide”命令時,當前模塊將從模塊列表中刪除。因此,使用lsmod命令將不會顯示當前安裝的Reptile內核模塊。

3 過程隱藏

當 PID 與“隱藏”或“顯示”命令一起給出時,PID 的進程被隱藏。進程隱藏主要有四種方法,一個是掛鉤find_task_by_vpid() 函數為隱藏目標的進程返回NULL,另一個是掛鉤 vfs_statx() 函數返回“ EINVAL ”(無效參數)錯誤。此外,find_task_by_vpid() 函數用于系統調用,如 getsid()和getpgid()。

此外,掛鉤next_tgid()可以跳過隱藏目標的進程,使其在/proc/列表中不可見。最后,sys kill和x64_sys_kill系統調用,并返回一個“ESRCH”(No such process)錯誤。除此之外,load_elf_binary()函數是掛鉤的,路徑為reptile_shell的進程是隱藏的。

4 TCP/UDP隱藏

如果將“conn”命令和隱藏目標的 IP 地址作為參數傳輸,則可以隱藏TCP/UDP網絡通信。tcp4_seq_show() 和udp4_seq_show() 函數則會進行掛鉤。

5 文件內容隱藏

Reptile提供了一個文件篡改功能,其允許文件內容被隱藏。當在構建過程中的標簽(如下所示)被添加到文件內容中時,這些標簽之間的字符串將被隱藏。默認情況下,可以使用標簽“#”和“#”。激活該特性的命令是“文件篡改”,它涉及到掛鉤vfs_read()函數。

1.2.2 端口敲門

Reptile惡意軟件支持端口敲門技術。在被安裝到受感染的系統上后,它不會立即連接到C&C服務器,而是打開某個端口并等待,直到威脅者向系統發送Magic Packet后開始運行。通過Magic Packet接收的數據包含C&C服務器地址,基于此,反向shell連接到C&C服務器。

在Reptile的defconfig文件中,有一些基本的配置。默認情況下,MAGIC_VALUE設置為“hax0r”,PASSWORD設置為“s3cr3t”,SRCPORT設置為“666”。

圖8:取消配置文件

受感染系統上的Reptile程序rootkit掛鉤內核功能,并監控通過TCP、UDP和ICMP協議傳入的數據包。如果收到TCP或UDP數據包,首先檢查源端口。上面配置文件中指定的“666”端口是目標端口。

圖9:SRCPOR掃描

威脅者可以使用客戶端將Magic Packet傳輸到受感染的系統。他們可以選擇TCP、UDP或ICMP協議中的一個作為端口敲門技術的一部分。接著必須在上面創建Reptile過程中指定受感染系統的IP地址和配置數據集,包括MAGIC_VALUE、PASSWORD和SRCPORT。之后,執行run命令時,Packet加密數據將其傳輸到受感染的系統中。

圖10:使用端口敲門shell

端口666上偵聽的Reptile通過該端口接收到一個數據包,接著會掃描收到的數據包中的數據,以檢查值“hax0r”(該值由MAGIC_VALUE和TOKEN指定)。接著Reptile會對數據包進行解密,并獲得C&C服務器的地址和端口號。然后使用這些值作為參數來執行reptile_shell(這是一個反向shell)。

圖11:MAGIC_VALUE 掃描

1.3 反向shell

Reptile惡意軟件執行的反向shell基于接收到的地址連接到C&C服務器,并提供shell訪問。接著使用參數“s3cr3t”執行反向shell,該參數在配置數據中指定為PASSWORD,其口令用主要作用在C&C服務器上偵聽器通信的會話密鑰。

反向shell是一個命令行工具,基于所提供的參數進行操作,主要通過兩種不同的方式執行。第一種方法是上面介紹的端口敲打技術。第二種方法涉及在Reptile rootkit內核模塊的安裝過程中執行。

圖12:reptile_shell 的論元結構

安裝完成后,Reptile惡意軟件會在初始化過程中執行名為reptile_start的啟動腳本。其中以包含許多命令,值得注意的命令是執行反向shell的命令。

圖13:make進程和創建的爬蟲啟動腳本文件

Reptile的反向shell基于TinySHell(一個開源的Linux后門)產生的。Rekoobe是一個基于 TinySHell 的后門惡意軟件。此外,根據Avast的報告:Syslogk rootkit還支持由 Magic Packet 觸發的端口敲門方法。它還利用TinySHell 的定制版本 Rekoobe 作為后門。基于這些相似性,可以推測 Syslogk 威脅者可能在其惡意軟件中采用了Reptile的結構。

與 TinySHell 相比,Reptile的反向shell顯示出驚人的相似性,大部分代碼以及支持的命令都是相同的。特別是使用HMAC SHA1算法和AES-128密鑰來加密C&C服務器的通信數據和在通信過程中用于完整性驗證的數據也是相同的。

圖14:make進程和創建的爬蟲啟動腳本文件

具體來說,Reptile反向shell除了支持文件下載/上傳和命令執行之外,還支持延遲命令。此外,它還包含一個內置功能,可以通過ioctl向Reptile惡意軟件發送隱藏命令,有效地隱藏與C&C服務器的通信。

2 攻擊事件

2.1 病毒總數搜索

由于它是一個開源惡意軟件,因此隨著時間的推移,它已經被各種各樣的威脅者所利用。即使排除掉最近Mandiant報道的中國威脅組織對Fortinet產品的零日漏洞攻擊案例后,仍可觀察到VirusTotal平臺上Reptile惡意軟件內容的定期上傳。

雖然不確定它們是否被用于實際的攻擊,但在過去幾年中,有大量的Reptile惡意軟件被定期上傳到VirusTotal。在本節中,從這些爬蟲部分樣本中提取配置數據并進行分類。在檢查內核模塊的ver magic時,明顯看到它們中的大多數專門針對RHEL或CentOS Linux,其主要用于攻擊或測試目的。

表2:爬蟲類rootkits上傳到VirusTotal

2.2 韓國的攻擊案例

Reptile 曾被用來攻擊韓國企業。最初的滲透方法仍未確定,但經過檢查Reptile惡意蟲軟件、反向shell、Cmd和啟動腳本都包含在內,從而可以確定基本配置。

在這個特殊的攻擊案例中,除了爬蟲之外,攻擊者還利用了一個名為ISH的基于cmp的shell。ISH是一種惡意軟件,它使用ICMP協議為威脅者提供shell。通常,反向shell或綁定shell使用TCP或HTTP等協議,但據推測威脅者選擇ISH主要是用來逃避由這些通信協議引起的網絡檢測。

2.2.1 REPTILE 分析

該惡意軟件被安裝在“/etc/intel_audio/”目錄中,威脅者使用 “intel_audio” 而不是“Reptile作為他們的關鍵字。

圖15:intel音頻啟動腳本

此外,intel_audio_start文件中沒有任何命令行來執行反向shell,這表明反向shell很可能是通過端口敲門方法使用的,或者是綁定的shell ISH。除此之外,攻擊者還激活了文件篡改功能。

接下來,在檢查rc.local自動運行腳本時,很明顯,在標簽“#”和“#”之間存在一個確保持久性的命令,這些標簽已經被標記為隱藏文件篡改功能。值得注意的一點是,威脅者以內核模塊的形式使用Reptile,而不是加載程序。因此,他們通過手動輸入insmod命令來加載“/etc/Intel _ audio/Intel _ audio . ko”命令。

圖16:rc.local中的自動運行腳本

Intel_audio.Ko 是一個內核模塊,被加載打包之前先用進行kmatryoshka打包。在檢查內核模塊“3.10.0-514.el7”。x86_64的vermagic后,推測出受感染的系統可能是Red Hat或基于CentOS的Linux系統。

提取的爬蟲包含各種硬編碼的配置數據。例如,在reptile_init()函數中,啟動腳本文件的路徑名“/etc/Intel _ audio/Intel _ audio _ start”被識別。一個顯著的特征是,威脅者將MAGIC_VALUE和PASSWORD字符串設置為與glibc相關的字符串,以將其偽裝成普通程序。

圖17:reptile 初始化()函數

表3:韓國攻擊事件中使用的reptile配置數據

2.2.2 ICMP shell 分析

在位于“/etc/Intel _ audio/gvfs-GD b-volume-monitor”的“rc.local”自動運行腳本中執行隱藏的文件是一個名為ISH的ICMP Shell。Ish由服務器模塊ishd和客戶端模塊ISH組成。“gvfs-gdb-volume-monitor”文件作為ishd運行,由Reptile rootkit 執行并保持監聽狀態。據推測,當攻擊者使用Ish建立連接時,會提供ICMP Shell。“gvfs-gdb-volume-monitor”中標識的命令行選項與ishd相同。

圖18:ishd 的主程序

此外,當威脅者創建ishd惡意軟件時,他們選擇不按原樣使用源代碼。他們進行了修改將其偽裝成一個正常的程序,這樣可以避免文件檢測。下圖中,左側顯示的是原ishd源代碼中標識的usage()函數,右側顯示的是“gvfs-gdb-volume-monitor”中的usage()函數。這使得惡意軟件被視為正常程序,而不是綁定shell,因為它在執行時輸出字符串“ICMP調試工具”,而沒有任何特定參數。

圖19:修改的輸出字符串

3 與 Mélofée 的相似之處

ExaTrack 對最近以Linux服務器為目標的惡意軟件進行了分析,并將其命名為 Mélofée。根據攻擊中使用的惡意軟件和基礎設施,他們確定了與 Winnti (APT41) 威脅組織的聯系,該組織在中國開展活動。

威脅者在他們的攻擊過程中也使用了Reptile惡意軟件,一個顯著的特點是爬蟲安裝在路徑名“/etc/Intel _ audio/Intel _ audio . ko”中。作為參考,路徑“/etc/Intel _ audio/Intel _ audio . ko”與之前提到的針對韓國公司的Linux 服務器攻擊案例中Reptile rootkit的安裝路徑相同。

攻擊過程中Reptile惡意軟件的使用、安裝路徑相同,主要通過“insmod”命令而不是Reptile提供的常規方法直接安裝內核模塊,是這兩種攻擊案例之間的共同點。

圖20:由Mélofée創建的rc.modules文件

然而,也有不同之處。在Mélofée攻擊案例中,使用的Reptile只激活了文件隱藏功能,隱藏路徑被硬編碼到兩個位置:“intel_audio”和“rc.modules”。

圖21:隱蔽目標的硬編碼路徑

由于韓國攻擊事件中的可用信息有限,除了惡意軟件之外,可以收集的信息有限。然而值得注意的是,關鍵字“intel_audio”雖然只是用來偽裝成正常的內核模塊路徑,但它是一個不常見的字符串,這在兩種攻擊情況下都是一個顯著的特征。

4 結論

Reptile是一個Linux內核模式rootkit 惡意軟件,它為文件、目錄、進程和網絡通信提供隱藏功能。由于是開源的,Reptile很容易被各種威脅者利用,這導致了大量攻擊案例被發現。考慮到rootkits的性質,它們經常與其他惡意軟件結合使用。然而,Reptile本身也提供了一個反向shell,這使得其更同意被威脅者挾持。

為了防止這種安全威脅,必須檢查系統的攻擊的配置并保持更新,以保護它們免受攻擊。此外,V3應該更新到最新版本,這樣可以防止惡意軟件感染。

AhnLab的反惡意軟件解決方案V3使用以下檢測名稱來檢測和阻止這些惡意軟件。

File Detection

– Trojan/Script.Config (2023.07.20.03)
– Rootkit/Linux.Reptile.644496 (2020.05.31.00)
– Trojan/Linux.Reptile.10416 (2020.05.31.00)
– Trojan/Linux.Rvshell.55784 (2020.05.31.00)
– Backdoor/Linux.Ishell.10576 (2020.05.31.00)
– Rootkit/Linux.Reptile.560980 (2023.07.18.00)
– Rootkit/Linux.Reptile.802168 (2023.07.18.00)
– Rootkit/Linux.Reptile.799432 (2023.07.18.00)
– Rootkit/Linux.Reptile.569740 (2023.07.18.00)

IOC
MD5

– 1957e405e7326bd2c91d20da1599d18e: Startup script (intel_audio_start)
– d1abb8c012cc8864dcc109b5a15003ac: Reptile Rootkit (intel_audio.ko)
– f8247453077dd6c5c1471edd01733d7f: Reptile Cmd (intel_audio_cmd)
– cb61b3624885deed6b2181b15db86f4d: Reptile Reverse Shell (intel_audio_reverse)
– c3c332627e68ce7673ca6f0d273b282e: ICMP Shell (gvfs-gdb-volume-monitor)
– 246c5bec21c0a87657786d5d9b53fe38: Reptile rootkit (rxp.ko)
– bb2a0bac5451f8acb229d17c97891eaf: Reptile rootkit (falc0n.ko)
– 977bb7fa58e6dfe80f4bea1a04900276: Reptile rootkit (N/A)
– 5b788feef374bbac8a572adaf1da3d38: Reptile rootkit (myshell.ko


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/3004/