Jump to content

本文會詳細介紹針對華碩路由器的Cyclops Blink 惡意軟件變種的技術能力,並包括150 多個當前和歷史命令和控制(CC) 服務器的Cyclops Blink 殭屍網絡的列表。

最近一個名為Cyclops Blink的模塊化殭屍網絡對諸多型號的華碩路由器發起了攻擊。自2019年首次出現以來,該殭屍網絡最初針對的是WatchGuard Firebox設備。根據英國國家網絡安全中心(NCSC) 進行的分析,Cyclops Blink 是一種高級模塊化殭屍網絡,據報導與Sandworm 或Voodoo Bear 高級持續威脅(APT) 組織有關,最近已被用於攻擊WatchGuard Firebox 設備。我們獲得了針對華碩路由器的Cyclops Blink 惡意軟件系列的變種。

本報告討論了這個Cyclops Blink 惡意軟件變種的技術能力,並包括了Cyclops Blink 殭屍網絡的150 多個當前和歷史命令和控制(CC) 服務器的列表。此列表旨在幫助網絡安全防御者在其網絡中搜索受影響的設備並進行修復。追踪發現,儘管Cyclops Blink 是一個國家支持的殭屍網絡,但它的CC 服務器和木馬會影響不屬於關鍵組織的WatchGuard Firebox 和華碩設備,或者那些對經濟、政治或軍事間諜活動具有明顯價值的設備。

因此,我們認為Cyclops Blink 殭屍網絡的主要目的可能是為進一步攻擊高價值目標構建基礎設施。

Sandworm APT 組織被認為創建了Cyclops Blink 和VPNFilter 物聯網(IoT) 殭屍網絡。 VPNFilter 於2018 年首次被發現,專門針對路由器和存儲設備。據報導,它還感染了數十萬台設備。 2021 年,趨勢科技發布了VPNFilter 的技術分析,其中專門介紹了殭屍網絡在被發現兩年後如何繼續影響受感染的系統。

Sandworm 還對許多引人注目的攻擊負責,包括2015 年和2016 年對烏克蘭電網的攻擊、2017 年NotPetya 攻擊、2017 年法國總統競選、2018 年冬奧會奧運會毀滅者攻擊以及2018 年針對禁止化學武器組織。

Cyclops Blink 惡意軟件分析Cyclops Blink 是用C 語言編寫的模塊化惡意軟件。在其核心組件中,惡意軟件首先要做的是檢查其可執行文件名是否以'[k'開頭。如果沒有,它將執行以下例程:

1.它將stdout 和stderr 文件描述符重定向到/dev/null;

2.它為SIGTERM、SIGINT、SIGBUS、SIGPIPE 和SIGIO 信號設置默認處理程序;

3.它使用新的'[ktest]'進程名稱重新自我加載。

然後它會等待37 秒,然後再設置其硬編碼參數。這些包括硬編碼的CC 服務器和應該用於與CC 服務器通信的時間間隔。

它還通過調用pipe() 函數來創建用於進程間通信(IPC) 的管道,以獲取用於讀取和寫入數據的兩個文件描述符。它還通過使用ioctl() 為寫入文件描述符啟用非阻塞I/O。

之後,將在內存中創建一個新的數據包,然後將其發送到CC 服務器。本分析稍後將介紹此通信的詳細信息。

對於用於與CC 服務器通信的每個硬編碼TCP 端口,惡意軟件會在Netfilter(Linux 內核防火牆)中創建一個規則,使用libiptc1 中的iptc_insert_entry() 函數來允許與其進行輸出通信。規則具有以下參數:

1.png

由於未知原因,惡意軟件刪除了上述規則並再次創建它們,這次是通過system() 函數使用iptables 命令。命令如下:

2.png

然後對OpenSSL庫進行初始化,核心組件繼續初始化硬編碼的模塊。

模塊初始化在此期間,核心組件初始化模塊。通過管道與模塊進行通信。對於每個硬編碼的模塊,惡意軟件會在它們自己的子進程中執行之前創建兩個管道。

3.png

初始化模塊的函數

在下圖中,我們推斷出以下mod_t 結構:

4.png

推斷的mod_t 結構,最後一個成員未知。

參數然後初始化參數,它們由一個592 字節的結構組成,其中包含通過管道發送到模塊的基本信息。這些信息包括:

一個“p:”字符串頭;

核心部件的管道;

所有CC IP 地址和端口;

本地IP 地址;

CC服務器通信的時間間隔;

當下一個要發送到CC 服務器的數據包;

主進程PID;

硬編碼ID(0xA08F078B、0xBD0A5B36 和0xA244E5E2);

參數被推送到模塊,此時模塊被初始化。

CC 通訊從模塊獲取數據後,核心組件啟動加密程序,在將數據發送到CC 服務器之前對數據進行加密。

加密Cyclops Blink 使用動態加載的受感染設備中應該可用的OpenSSL 功能對數據進行加密。

數據使用AES-256 在密碼塊鏈接(CBC) 模式下使用隨機生成的256 位密鑰和128 位初始化向量(IV) 進行加密。然後使用每個樣本唯一的硬編碼RSA-2560(320 位)公鑰對其進行加密。

惡意軟件開發者決定使用EVP_SealInit() 函數。此函數執行所有上述加密步驟,包括隨機AES 密鑰和IV 生成。

CC服務器必須有相應的RSA私鑰才能解密數據。

加密後,如果數據包總長度大於98303 字節,則發送數據包。

數據傳輸為了向CC 服務器發送數據,核心組件在隨機TCP 端口上與隨機選擇的CC 服務器執行TLS 握手,兩者都來自硬編碼列表。

在選擇一個IP地址和一個TCP端口對之後,核心組件創建一個子進程來執行通信。子進程將連接到CC服務器,並向SSL套接字寫入四個字節。這四個字節是它想要發送的數據包大小。

5.png

子進程將四個字節寫入SSL 套接字

服務器必須用一個精確的四字節回答,也就是受害者的IPv4地址。

然後將10 個字節寫入核心組件管道。數據遵循特定格式。例如:

6.png

然後核心組件從CC 服務器接收更多數據。這一次,它希望使用硬編碼的RSA-2560 公鑰來解密加密的數據包。

惡意軟件需要一個響應,其中前四個字節是數據包的大小,後跟加密數據。

7.png

接收和解密來自CC服務器的數據的核心組件代碼

如果接收到某些內容,則將其解密並寫入到主管道。為了解密,該惡意軟件使用RSA_public_decrypt()函數,該函數利用RSA加密算法的“可逆性”解密用相應私鑰加密的數據。

最後,將更新一個變量,該變量包含下一次應該發送的數據包,並將所有的參數再次發送給模塊,這是因為核心組件可以從CC服務器接收新參數。

命令從CC服務器接收到的數據包括對核心組件本身或其模塊的命令。

首先,核心組件將受支持的命令發送到CC服務器,然後進入一個循環,在這個循環中它需要其中一個命令。

如果命令以核心組件為目標,它可以是以下之一:

0、終止程序;

1、繞過數據發送間隔,立即向CC服務器發送數據;

2、將新的CC 服務器添加到內存列表中;

3、設置發送下一個數據包到CC 服務器的時間;

4、設置發送下一個數據包到CC 服務器的時間;

5、添加一個新模塊(應該在命令之後收到一個ELF 文件);

6、重新加載惡意軟件;

7、設置本地IP地址參數;

8、設置新的worker ID;

9、設置未知字節值;

10、向所有正在運行的模塊重新發送配置;

模塊華碩(0x38)這個模塊可以從設備的閃存讀取和寫入,這些設備使用閃存來存儲操作系統、配置和文件系統中的所有文件。我們的研究是在RT-AC68U上進行的,但是其他華碩路由器如RT-AC56U也可能受到影響。然而,值得注意的是,由於惡意軟件本質上是模塊化的,它可以很容易地重新編譯以針對任何其他設備。事實上,這就是他們對WatchGuard 所做的,它是相同的代碼,但它已經為相關品牌重新編譯了。

首先,模塊檢查內容/proc/mtd 文件,該文件提供有關設備的內存技術設備(MTD) 子系統的一般信息。 MTD提供了一個抽象層來訪問設備的閃存。

惡意軟件查找字符串“linux”和“rootfs”,並使用printf()類格式讀取它:

8.png

模塊查找“linux”和“rootfs”字符串

推斷出的mdt_data_t結構如下:

9.png

mtd_data_t 結構

數據被讀取到這個結構中。 Asus RT-AC68U 設備的/proc/mtd 內容如下:

10.png

來自Asus RT-AC68U 路由器的典型/proc/mtd

因此,根據這個案例,惡意軟件會打開/dev/mtd2,這是存儲Linux 內核映像的分區。為什麼惡意軟件開發者決定讀取“linux”或“rootfs”分區是不清楚的。因為它們有完全不同的目的。前者保存操作系統,後者存儲程序的關鍵文件,如可執行文件、數據和庫。

Cyclops Blink 從閃存中讀取80 個字節,寫入主管道,然後進入循環等待命令替換分區內容:

11.png

Asus 模塊主循環

如果來自核心組件的數據以“p:”開頭,則表示它是該模塊的參數,將80字節寫入閃存,有效替換其內容。

寫入由j_save_data() 函數完成。它首先通過ioctl()調用正確地擦除NAND擦除塊,然後寫入新的內容,如下圖所示:

12.png

用於寫入原始閃存的Cyclops Blink Asus 模塊代碼

由於閃存內容是永久性的,因此該模塊可用於建立持久性和恢復出廠設置。

雖然它不能用作歸屬證明,但前面的代碼讓我們想起了VPNFilter 進程的第三階段代碼中的一個例程,稱為“dstr”,旨在“破壞”受感染的設備。除了刪除許多重要文件甚至嘗試刪除整個根文件系統之外,這個特定的VPNFilter 階段還會將許多0xff 字節寫入原始閃存:

13.png

用於寫入原始閃存的VPNFilter “dstr”第三階段代碼

系統偵察(0x08)該模塊負責將信息從受感染設備發送到CC 服務器。以下數據來自受感染的設備:

1.模塊通過調用uname() 函數和/etc/issue 文件獲得的Linux 版本;

2.有關設備內存消耗的信息,它通過調用sysinfo() 函數獲取;

3.SSD 存儲信息,通過調用statvfs() 函數獲取;

以下文件的內容:

/etc/passwd

/etc/group

/proc/mounts

/proc/partitions

4.有關網絡接口的信息,它通過使用SIOCGIFHWADDR 和SIOCGIFADDR 命令調用if_nameindex() 和iotctl() 函數來獲取。

文件下載(0x0f)該模塊可以從互聯網上下載文件。使用DNS over HTTPS (DoH) 執行DNS 解析。惡意軟件使用以下標頭向Google DNS 服務器(8.8.8.8) 發送HTTP POST 請求:

14.png

通過SSL 進行DNS 解析的HTTP POST 請求

該模塊似乎是NCSC 報告的Cyclops Blink 變體使用的同一模塊(0x0f) 的早期版本。模塊之間的主要區別如下:

1.該模塊沒有上傳功能;

2.該模塊使用控制標誌中的0x1位來指定是否應該通過HTTPS進行下載。

基礎設施我們已經能夠確定Cyclops Blink 殭屍網絡從受感染的WatchGuard 設備和華碩路由器中感染了路由器。這些受感染的設備會定期連接到CC 服務器,這些服務器本身託管在受感染的WatchGuard 設備上。我們有證據表明,除了華碩和WatchGuard 之外,至少有一家供應商的路由器也連接到了Cyclops Blink CC,但到目前為止,我們還無法收集該路由器品牌的惡意軟件樣本。

Cyclops Blink 殭屍網絡已經存在了一段時間。使用互聯網範圍掃描的歷史數據和SSL 證書數據,Cyclops Blink 很可能至少可以追溯到2019 年6 月。自2019 年6 月以來,該攻擊者已頒發了50 多個SSL 證書,用於WatchGuard CC 上各種TCP 端口(據我們所知,使用了以下TCP 端口:636、989、990、994、995、3269 和8443)。

在附錄A 中,出於防護需要,我們列出了Cyclops Blink 使用的活動和非活動CC。我們觀察到,一些WatchGuard 和Asus 木馬從未清理過,因為這些路由器仍會定期嘗試連接到受保護或脫機的舊CC。

15.png

為Cyclops Blink CC 頒發的多個SSL 證書的時間線

我們的調查顯示,全世界有200 多名Cyclops Blink 受害者。受感染的WatchGuard 設備和華碩路由器的典型國家是美國、印度、意大利、加拿大以及包括俄羅斯在內的一長串其他國家。應該指出的是,這些受害者似乎不是經濟、軍事或政治間諜活動的明顯有價值的目標。例如,一些實時CC 託管在歐洲的一家律師事務所、一家為南歐的牙醫生產醫療設備的中型公司和美國的一家管道工使用的WatchGuard 設備上。這與其他APT 組織(例如Pawn Storm)執行的暴力攻擊數量不斷增加是一致的,該組織已經破壞了許多資產,例如電子郵件地址和目標的電子郵件服務器,這些資產通常與Pawn Storm 的目標不一致。

16.png

緩解措施在過去幾年中,物聯網攻擊在全球範圍內不斷升級,互聯網路由器一直是主要目標之一。這些設備受到攻擊者的青睞有幾個原因:1.修補頻率低,2.缺乏安全軟件,3.防御者的可見性有限。一旦物聯網設備感染了惡意軟件,攻擊者就可以不受限制地訪問互聯網,下載和部署更多階段的惡意軟件,以進行偵察、間諜活動、代理或攻擊者想做的任何其他事情。

大多數物聯網設備的底層操作系統是Linux,許多強大的系統工具也使用它。這可以允許攻擊者添加他們可能需要完成攻擊的任何其他內容。在Cyclops Blink 的案例中,我們已經看到連續30 多個月(大約兩年半)被攻陷的設備被設置為其他木馬的穩定CC 服務器。

VPNFilter 的目標供應商是華碩、D-Link、華為、Linksys、MikroTik、Netgear、QNAP、TP-Link、Ubiquiti、UPVEL 和ZDE。在Cyclops Blink 的案例中,我們收到了針對華碩路由器的樣本,這些樣本之前沒有被報導過。我們分析的華碩Cyclops Blink 惡意軟件版本與之前討論的WatchGuard 版本相比存在一些差異。

我們分析的樣本是為ARM 編譯的,並與uClibc 動態鏈接。它們還包含一個專門針對華碩路由器的模塊。華碩可能只是目前Cyclops Blink 目標的供應商之一。我們有證據表明其他路由器也受到影響,但截至報告時,我們無法為WatchGuard 和華碩以外的路由器收集Cyclops Blink 惡意軟件樣本。根據我們的觀察,這些都是Cyclops Blink 攻擊者深思熟慮的。

此外,該殭屍網絡的目的仍不清楚:它是否旨在用於分佈式拒絕服務(DDoS) 攻擊、間諜活動或代理網絡仍有待觀察。但顯而易見的是,Cyclops Blink 是一種高級惡意軟件。隨著居家辦公增多,間諜活動可能是物聯網設備仍然是高級攻擊者的主要目標的部分原因。受到攻擊的路由器越多,攻擊者可以使用的強大數據收集來源以及進一步攻擊的途徑就越多。擁有分佈式基礎設施也使網絡安全團隊更難以消除整個攻擊。

這也是為什麼在兩年多之後,仍然有活動的VPNFilter 主機出現的原因。

如果懷疑某個組織的設備感染了Cyclops Blink,最好換個新路由器。執行恢復出廠設置可能會清除組織的配置,但不會清除攻擊者修改的底層操作系統。如果特定供應商的固件更新可以解決Cyclops Blink 攻擊或系統中的任何其他漏洞,組織應盡快應用這些更新。但是,在某些情況下,設備可能是報廢產品,供應商也不在提供更新。

在這種情況下,普通用戶將無法修復Cyclops Blink 感染。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...