Chaos:Linux後門捲土重來
本文描述了一個在我們的SSH蜜罐中發現的後門,它生成了一個完全加密和完整性檢查的反向shell,並在蒙特利爾的GoSec 2017上展示過。我們將該後門命名為Chaos,與攻擊者在系統中給出的名稱一致。經過進一步研究,我們發現該後門是2013年左右活躍的sebd rootkit的一部分。
因為無法找到任何關於此後門技術細節的文檔,我們決定自己來!
一、導語
今年夏天,我們有一個項目是在FreeBSD系統中尋找惡意軟體,或者至少評估是否存在。為此,我們使用了FreeBSD jails,它被描述為「chroot on steroids」。我們的想法是僅使用jails來模擬Intranet結構,這是可行的,因為jails可以在主機上自己分配IP地址。然後,攻擊者會攻擊暴露於互聯網的jails,並從那裡通往其他jails。不幸的是,沒有人能做得這麼多,因為典型的攻擊者在意識到他們遇見FreeBSD系統時會立即離開。腳本化的機器人設法上傳了payload,但如果沒有Linux,ELF文件將無法運行,這樣就發揮不了作用。在這一點上,我們可以說FreeBSD是一種減少攻擊面非常好的方法,因為沒有攻擊者想要面對FreeBSD。當然,如果你已經被黑了的話,此建議無效。
當我們放棄尋找BSD惡意軟體時,我們決定尋找Linux惡意軟體。在蜜罐運行幾分鐘後,我們獲取到了一些。之後,又獲取了一些不同於Gafgyt(LizardSquad)和Mirai的東西。
二、首次通聯和偵察
2017年6月21日,攻擊者使用兩個已知屬於TOR網路的IP暴力窮盡SSH憑證攻破了我們的一個受監控系統:89.234.157.254 與192.42.116.16。
像往常一樣,攻擊者首先禁用了日誌記錄,然後檢查SSHD二進位文件以及某些特定文件,例如/usr/include/gpm2.h。這樣做的目的是確保被攻陷的機器尚未被其他人感染。攻擊者檢查的文件通常用於給SSHD漏洞(記錄盜取的SSH憑證)打補丁。之後,攻擊者通過下載並安裝payload來感染。
三、安裝Chaos
在第二階段,攻擊者從http://xxx.xxx.xxx.29/cs/default2.jpg下載了一個偽裝成jpg的文件。 事實上,該文件是一個.tar文件,.jpg擴展名是為了使它在可能的日誌文件或抓取的數據包中看起來更合理。tar包含:
1、Chaos (ELF 可執行文件)
2、Client (ELF 可執行文件)
3、initrunlevels (Shell腳本)
4、install (Shell腳本)
tar中的Chaos是安裝在受害者系統上的實際後門,Client文件是連接到後門的客戶端。有關這兩個ELF文件的更多細節將在下面討論,我們先來看看兩個shell腳本initrunlevels與install。install腳本將initrunlevels腳本複製到/etc/init.d,以確保該文件在系統每次啟動時都被執行。
initrunlevels: 持久性腳本
如上所示,initrunlevels腳本打開8338號埠並檢查是否存在某些特定文件。如果不存在,則腳本將這些不顯眼的文件複製到它檢查的路徑中。接下來,該腳本將client複製到/usr/include/cli.h中,並複製Chaos到/usr/include/stabd.h和/usr/sbin/smdb中。 這是為系統上的client和Chaos創建備份。攻擊者還釋放並執行了其他文件,以使該系統成為IRC殭屍網路的一部分,在本文中我們僅調查後門。
四、反向Shell
如上所述,攻擊者釋放了兩個文件:Chaos和Client。Chaos是啟用反向shell的後門,Client啟動Chaos的連接。
口令檢查後連接返回
後門的工作原理如下:首先Chaos打開一個原始的TCP套接字,檢查傳入的數據包是否包含特定的字元串。由於這是一個原始套接字,任何傳入打開埠的數據包都將被讀取和檢查。如果Chaos檢測到字元串,則它將連接TCP埠8338上監聽的Client。在連接Client後,Client和Chaos交換密鑰材料,從中派生出兩個AES密鑰。他們繼續使用挑戰—應答身份驗證檢查密鑰協商是否成功,如下所示。
Chaos的身份驗證和密鑰交換
有趣的是,雙方都有相同的兩個密鑰,用於發送和接收。加密後的口令竟然是硬編碼的,我們設法破解並以純文本形式獲取口令。口令在不同的感染系統中重複使用。後門可以規避防火牆。事實上,任何正常的防火牆都會阻止傳入的數據包進入任何沒有明確目的而打開的埠。但是,對於使用原始套接字的Chaos,可以在運行現有合法服務的埠上觸發後門。 作為一個例子,只暴露SSH(22),HTTP(80)和HTTPS(443)的Web伺服器由於服務佔用而無法通過傳統的後門進入,但是隨著Chaos的出現,這變得可能。此外,除非顯式指定-w標誌,否則通過netstat不能顯示原始套接字。
五、密鑰派生
Client從Chaos建立連接後,它會向Chaos發送一個40長的字元串。該字元串作為預共享密鑰並按照以下方式生成:
如圖所示,預共享密鑰由兩個塊組成,每塊用於生成兩個密鑰中的一個。密鑰從塊中派生,如下所示:
請注意,這些密鑰用於長度為128的CBC模式下的AES,這意味著SHA1的一部分將被丟棄。為確保加密數據包的完整性,生成兩個Hash在HMAC中使用。
在 IDA中, 我們可以清晰地看到AES的CBC 模式:
加密循環
注意到它沒有犯重複使用IV的常見錯誤。密鑰派生過程與Chaos二進位的工作方式相同,除了塊交換。
六、包結構
交換過程中的數據包格式如下:
正如我們所看到的,前兩個位元組決定payload的長度。size欄位和payload均已加密。為標記payload的結束,使用了三個連續的空位元組。在分隔符之後,seq欄位用於計數並保持數據包的順序。最後一個欄位是確保數據包完整性的HMAC。
七、數據包的完整性
每個通信數據包不僅被加密,而且使用HMAC檢查完整性。HMAC如下生成:
內部值是Constant1上的Hash,與size欄位,加密的payload,分隔符和序列號連接。 外部Hash通過Constant2和內部Hash生成。
八、竊取的後門復燃
如前所述,這個後門在2013年首次出現,是sebd rootkit的一部分。我們在hackforums.net上發現了一個帖子,用戶聲稱知道後門是如何公開發布的。據說後門的源代碼已經被另一個蜜罐捕獲,「研究人員」不合常理的在這個論壇上發布了源代碼,使其可被腳本小子使用。
攻擊者只是簡單地改變了後門的名字,讓人們認為這是一種新的,而實際上是竊取的。
九、受害者
為評估感染數量,我們使用從客戶端提取的握手進行了全網掃描。受害系統的數量非常少,低於150個。以下是受害者的地理分布:
我們聯繫了CCIRC,列出了受害系統的IP地址,由他們繼續通知CERT合作夥伴和受害者。
十、結論
Chaos後門非常有趣,因為它使用隱形原始套接字來產生具有完整網路加密和完整性檢查的反向Shell。 但是,如果預共享密鑰已知,後門的加密演算法很容易破解,因為它是以明文形式傳輸的。
有趣的是:由於攻擊者為傳入的數據包打開了8338埠,所以攻擊人員顯然希望在受感染的計算機上使用Client文件。他們會使用受感染的機器作為進一步犯罪的代理,這樣就可能可以跨越網路邊界。
據Virustotal稱,儘管後門已經存在好幾年了,但沒有防病毒軟體檢測到這個後門。
在下一篇博客中,我們將描述使受害系統成為IRC殭屍網路的其他惡意軟體。
附錄:IoC
有關此威脅的最新IoC信息,請參閱我們的malware-ioc github repository.
文件hashes
文件系統
警告:下面記錄的文件系統組件也是合法的系統文件。在做出結論之前,你需要仔細調查一下。
該組織在/usr/sbin/smdb中安裝後門,並將其備份為/usr/include/stabd.h。
/usr/sbin/smdb是合法的,Samba套件的一部分。為兼容Windows(如文件共享或集成Active Directory)安裝Samba。/usr/include/stabd.h是合法的,glibc頭文件的一部分,一個純文本文件,當惡意時它是一個二進位文件。
可以手動檢查文件或運行我們的Yara規則:
yara sedb_chaos.yar /usr/sbin/smdb
yara sedb_chaos.yar /usr/include/stabd.h
系統調查/etc/init.d/runlevels是一個惡意腳本,它將打開防火牆上的埠並執行後門程序。這是惡意軟體的持久性機制。
在普通的Linux伺服器上監聽原始套接字是非常罕見的事情。以root身份運行以下命令來檢查系統:
netstat -lwp
它會列出打開監聽原始套接字的進程。然後,可以調查進程以評估它是否合法。 如果不知道它是什麼,那麼可能是不合法的,因為監聽原始套接字很少見。
※甲方安全建設之Windows橫向移動攻擊的檢測
※uTorrent客戶端存在嚴重安全漏洞
TAG:嘶吼RoarTalk |