ChachaDDoS惡意軟體分析
VestaCP使用者發現其管理憑證被竊,伺服器被感染Linux/ChachaDDoS。
感染向量
VestaCP論壇的使用者Razza稱,攻擊者嘗試通過SSH載入Linux/ChachaDDoS。目前還不清楚payload是如何釋放到/var/tmp目錄中的,假設攻擊者已經有了管理員密碼,那麼就很簡單了。在安裝過程中,VestaCP會建立一個有sudo許可權的admin使用者。但攻擊者是如何知道admin使用者的密碼的呢?
關於這個問題有很多的假設,第一個假設是VestaCP的web介面有漏洞。通過檢視程式碼發現,/root/.my.cnf中儲存有未加密的口令,但要想訪問檔案的內容攻擊者需要利用本地檔案包含和許可權提升漏洞。使用者Falzo發現許多版本的安裝指令碼都在洩露管理密碼和到vestacp.com的伺服器名。
L4ky指出,在Git的vst-install-ubuntu.sh檔案中,變數$codename含有傳送給 ofollow,noindex">http://vestacp.com/notify/ 的base64編碼的密碼和伺服器域名。
鑑於此,研究人員建議所有的VestaCP管理員修改admin密碼並加強對伺服器的授權訪問。
VestaCP維護人員稱其伺服器被入侵了。Git樹中的惡意程式碼還不清楚。攻擊者可能修改了伺服器上的安裝指令碼,而該版本也用於git中建立該檔案的下一個版本,但只針對於Ubuntu。這意味著伺服器可能從2018年5月就被入侵了。
Linux/ChachaDDoS分析
釋放在被入侵伺服器上的惡意軟體是一個DDoS惡意軟體ChachaDDoS的變種。其是多個現有DDoS惡意軟體的進化版本。Stage1和stage2將程序名設定為[kworker/1:1],這可以在ps的輸出中看到。
Stage 1
駐留機制
Linux/ChachaDDoS中使用的駐留機制與Linux/XorDDos除了檔名外都是一樣的。其中含有下面的步驟:
·將自己複製到/usr/bin/dhcprenew;
· 如果已有惡意軟體相關的駐留機制,就移除原有的駐留機制;
· 在/etc/init.d/dhcprenew中加入新的服務。
#!/bin/sh # chkconfig: 12345 90 90 # description: dhcprenew ### BEGIN INIT INFO # Provides:dhcprenew # Required-Start: # Required-Stop: # Default-Start: 1 2 3 4 5 # Default-Stop: # Short-Description: dhcprenew ### END INIT INFO case $1 in start) /usr/bin/dhcprenew ;; stop) ;; *) /usr/bin/dhcprenew ;; esac
· 在/etc/rc[1-5].d/S90dhcprenew和/etc/rc.d/rc[1-5].d/S90dhcprenew中建立到該服務的symlink。
執行命令列chkconfig –add dhcprenew和update-rc.d dhcprenew defaults來開啟服務。
下載和解密第二階段指令碼
設定完駐留機制後,會從硬編碼的URL上週期性的下載。研究人員通過分析不同樣本發現URL的結構有些共同的特點:
· 使用8852埠;
· 所有使用的IP地址都屬於193.201.224.0/24子網;
· Stage 2的資源名看起來是偽隨機的,但實際上是6到8個大寫字母字串。
URL的模式如http://{C&C}:8852/{campaign}/{arch}。研究人員發現stage2的二進位制檔案支援x86、ARM、MIPS、PowerPC等架構。在下載了與受害者主機架構相關的ELF檔案後,用ChaCha加密演算法進行解密。下面是解密函式的開始部分:
兩個演算法的區別是對初始狀態和1/4迴圈修改的順序進行了修改,這也是明文的核心操作。根據1/4迴圈中使用的特定迴圈,研究人員識別出了其使用ChaCha:
ChaCha解密所用的key大小是256位,在其他樣本中所用的key是相同的。為了避免重應用解密演算法的痛苦,研究人員寫了指令碼來模擬解密函式。解密出stage 2後,其輸出是LZMA壓縮的,所以用lzma -d < output > second_stage.elf就可以提取出二進位制檔案。
Stage 2
stage 2的二進位制檔案本身比stage 1的要大,主要是因為嵌入了Lua翻譯器。Lua中的惡意軟體與之前發現的 Linux/Shishiga 有些相像。Stage 2的目的是硬編碼的Lua payload,payload的任務都是完成周期性的下載任務。研究人員將任務看作是stage 3,因為任務是根據Lua程式碼翻譯的結果確定的。在所有的樣本中,stage 2所用的C2伺服器與stage 1相同。Stage 2會嵌入無數的Lua庫來與硬編碼的C2伺服器進行通訊,這與stage 1也是相同的。
下圖是繫結的有些二進位制檔案的原生函式,這樣就可以從lua程式碼中呼叫:
Lua payload下載的任務是Lua翻譯器解密和執行的ChaCha。在stage 2,用於下載任務的URL看似遵循一個特定的模式,如下圖所示:
Payload應該傳送URL所用的引數,但實際上,只會傳送MAC地址和其他資訊:
Stage 3
研究人員分析發現任務只是實現了DDoS函式,其程式碼非常明確含有對特定目標執行SYN DDoS攻擊的函式呼叫:
DDoS攻擊的目標IP地址為144.0.2.180,是中國的ISP。但還不清楚為什麼該IP地址會成為攻擊的目標,而且該IP地址好像並不提供任何服務。
任務檔案響應的最後一個修改的HTTP header表明從9月24日開始目標都是相同的。因為惡意軟體使用了If-Modified-Since header來避免重複下載payload,因此這個結果是可信的。
結論
研究人員分析發現,很明顯ChachaDDoS和Xor.DDoS在駐留機制上有程式碼重合。ChachaDDoS因為出現在VestaCP例項中引起了研究人員的關注,但存在多架構二進位制檔案說明包括嵌入式裝置在內的許多裝置都是攻擊的目標。
該事件的另一個啟示是開源軟體本例也不100%保證其是安全的。惡意軟體也可能利用這一點,GitHub上的惡意憑證竊取程式碼就存在了好幾個月。雖然開源及時幫助找出和修復一些安全漏洞,但也不能說明開源就是安全的或更安全的。