木馬技術(shù):上線方式的發(fā)展及新型上線方式的實現(xiàn)
0×00 前言
在講文章主題之前,我們還是習(xí)慣性地聊(che)一(che)聊(dan)。
遠程控制木馬大家都不陌生,尤其是早期接觸黑客技術(shù)的人,應(yīng)該可以發(fā)現(xiàn)早在2007-2009年,這段時間內(nèi),國內(nèi)的“黑客技術(shù)”正是蓬勃發(fā)展的時期,那個時候,可謂是“戰(zhàn)亂紛爭,萬馬奔騰”的年代,當(dāng)時流行各種黑客技術(shù),其中就包括遠程控制技術(shù)。
各種遠程控制木馬滿天飛,無論是最早葛軍編寫的“灰鴿子”,還是各種后起之秀的RAT,簡直不勝枚舉,各種被閹割的xxx專用版,各種新出的xxxRAT。如各類國產(chǎn)遠控木馬、上興、PCShare、黑防的ByShell、黑洞、冰河、SRAT、暗組的DRAT、XRAT、維度等等,包括國外的一些C/S,B/S型的遠控木馬也傳入了國內(nèi),各家似乎都在比拼誰的功能多,誰的免殺好,誰的反殺軟技術(shù)強。于是,各種HOOK SSDT,Rootkit級別的木馬比比皆是??墒?,后來因為國家的管控,各種黑客論壇,黑客網(wǎng)站,黑客雜志相繼關(guān)閉或消失。遠控木馬編寫技術(shù)和木馬免殺技術(shù)也不再那么流行,當(dāng)初寫木馬做免殺的“高手”,如今早已從網(wǎng)絡(luò)中銷聲匿跡。
引用王家衛(wèi)導(dǎo)演的《一代宗師》里邊的一句話——
“有的成了里子,有的成了面子,都是時勢使然。”
當(dāng)然,客觀的講,造成這種形勢的原因也是國內(nèi)安全行業(yè)的進一步發(fā)展所致。不過,我相信依舊有一幫人還在這個領(lǐng)域埋頭探索,在努力,木馬依舊可以繞過各種殺軟。畢竟,“攻永遠超前于防”。
0×01 傳統(tǒng)木馬上線方式概述
好了,聊(che)完了。該進入文章主題了。今天,不談別的,只“淺談”木馬上線技術(shù)的發(fā)展。
最早的遠控木馬都是“主動連接”,通俗的講是這樣的:假如你要控制某人的主機A,你得在主機A上執(zhí)行木馬, 木馬執(zhí)行后會開啟一個你提前配置好的端口,之后,你要與該主機A建立連接,在主控端上輸入該主機A的IP和端口,才能進行控制。
不過,后來因為互聯(lián)網(wǎng)的進一步發(fā)展,公網(wǎng)控制內(nèi)網(wǎng)就出現(xiàn)了一定的問題。于是,“被動連接”型的木馬上線技術(shù)就出現(xiàn)了,和“主動連接”的形式剛好相反,是木馬即被控端主動來連接主控端。主控端開啟一個端口,被控端去連接你配置好的IP地址。
“被動連接”也叫“反彈連接”。談到這個不得不提兩種經(jīng)典的木馬上線方式。一種就是FTP上線方式,另外一種就是DNS域名解析上線方式。
灰鴿子FTP上線方式如下圖:
在你的FTP服務(wù)器上寫入一個ip.txt,內(nèi)容就是你的主控端監(jiān)聽的IP地址和端口。當(dāng)你的IP地址改變之后,你只需要再次更新這個ip.txt的內(nèi)容即可。
在配置木馬的時候,只需要按照FTP上線方式的格式配置上線地址。
如下圖:
對于DNS域名解析上線,一直是木馬上線的最主要的方式,曾經(jīng)最流行的就是3322和花生殼。木馬執(zhí)行后會解析你配置好的域名,然后去連接對應(yīng)的IP地址的端口,進行通信。
0×02 新型木馬上線方式
從大量的APT攻擊案例中可以發(fā)現(xiàn),當(dāng)今的木馬在運行的隱蔽性,通信的穿透性,功能的多樣性,跨平臺性等方面有了很大的突破。
在研究分析過程中,有部分木馬的上線方式,開始采用第三方域名進行通信。這無疑增強了木馬的隱蔽性和反追蹤能力。
上線方式的說明,請看下圖:
這種木馬使用的第三方域名實際上是利用第三方網(wǎng)站能夠?qū)懭氩⒓皶r修改自己的通信數(shù)據(jù)。木馬編寫者往往會尋找知名的網(wǎng)站,至少不會出現(xiàn)宕機的情況,以保持肉雞的持久性控制。這樣的網(wǎng)站很多,比如說博客類網(wǎng)站等等??梢蕴崆鞍l(fā)表一篇博文,并在博文里插入控制命令,之后特制的木馬,就會去獲取控制命令,同時木馬也可以模擬編輯博文,寫入執(zhí)行結(jié)果的數(shù)據(jù)。
由于TCP通信涉及到socket對象的問題,部分木馬會專門使用支持php的第三方網(wǎng)站。并拿到webshell后,上傳一個進行數(shù)據(jù)轉(zhuǎn)發(fā)的php文件。這種情況下,控制被控端的流暢度可以得到保證。
而一般情況下,采用這種方式的木馬都是使用了HTTP協(xié)議進行通信,由于HTTP協(xié)議是無連接的。所以不會涉及到socket對象的問題。只要被控端為自己生成一個獨一無二的ID,即可與其他被控端區(qū)別開來。只要在編寫代碼的時候,對接受數(shù)據(jù),發(fā)送數(shù)據(jù),執(zhí)行控制命令這三個功能模塊做好處理,控制的流暢度還是可以得到一定的提升。
采用第三方域名上線的木馬,在隱蔽性方面有了很大突破,而且這種做法,也可以提高木馬的穿透性,對于一些防火墻來說,至少知名的網(wǎng)站總歸是允許進行數(shù)據(jù)通信的。#p#
0×03 第三方域名上線方式的實現(xiàn)思路
先把思路搞清楚。木馬上線采用的第三方網(wǎng)站為"博客園",注冊兩個帳號,一個為主控端用于發(fā)出控制命令所使用的賬號A,另一個是被控端發(fā)送本機信息以及控制命令執(zhí)行結(jié)果所使用的賬號B。用賬號A創(chuàng)建兩篇文章,一篇為木馬上線測試(下文簡稱文章A),一篇為木馬功能測試(下文簡稱文章B)。
被控端處理上線事務(wù)的線程設(shè)計思路如下:
上線信息的格式:
[主機名稱]&[當(dāng)前時間]&[主機唯一ID]
對于[主機唯一ID],如果是第一次上線會生成此ID,如果不是則會讀取已經(jīng)生成好的ID。
主控端處理主機上線事務(wù)的線程設(shè)計思路如下:
由于這種上線方式采用的實際上是HTTP協(xié)議通信的,所以無法像TCP通信一樣,存在相關(guān)的SOCKET事件。所以,主控端還需要有一個處理主機是否在線的線程,設(shè)計思路如下:
另外,為了防止文章A的評論區(qū)有很多評論,主控端在獲取完評論信息(主機上線信息),之后,添加一個刪除文章A的評論的線程即可。
0×04 第三方域名上線方式的簡單代碼實現(xiàn)
接下來,我們用簡單的代碼實現(xiàn)這個demo。為了快速實現(xiàn)這種木馬上線方式,主控端采用C# WinForm實現(xiàn),客戶端采用Python實現(xiàn)。搞清楚了設(shè)計思路,用什么編程語言去實現(xiàn)就是次要的事情了。
下面是被控端啟動后,向文章A提交評論(上線信息)的截圖:
發(fā)送上線信息后,文章A的評論截圖如下:
主控端的截圖如下:
功能測試的通信流程和上線測試的流程思路是相似的。在這里就不在贅述,這種上線方式雖然采用了HTTP協(xié)議通信但是和直接使用封裝的HTTP協(xié)議或者是瀏覽器訪問,是有一定的區(qū)別的。它無法進行大批量的數(shù)據(jù)傳輸,像文件傳輸這樣的功能雖然也可以實現(xiàn),但是"用戶體驗"很差,所以這種上線方式的木馬,大多被用來當(dāng)作一個隱蔽的后門木馬,只需要有一個文件下載和CMD Shell的功能。
0×05 總結(jié)
采用第三方域名上線方式的木馬設(shè)計思路,已經(jīng)很明確了,但是在實際實現(xiàn)的過程中還存在一些不足。包括上文中用code去實現(xiàn),也有很多處理事務(wù)線程和上線性能等方面需要進一步改進。所以代碼在此就不提供了。大家了解了這種思路就好。另外,對于將賬號B的登錄信息寫入客戶端,是否存在一定風(fēng)險?對于這個問題,大可不必細究。
“博客園”的登錄信息會被登錄頁面的js使用key進行加密然后提交,即使你分析出了登錄信息也是加密過的,并非原始明文密碼。另外,登錄成功后,會有一個session或者cookie,可以直接拿來當(dāng)作發(fā)表評論(主機上線信息)的令牌使用。也可以將cookie的生命周期加長,延長控制時間。
文章中還有很多"易噴點",歡迎來"噴"。
0×06一點題外話
對于木馬上線域名的分析和追蹤,在這篇文章《淺談從反木馬角度分析怎樣提高木馬反跟蹤能力》中作者提出了在木馬上線方式的時候使用UDP+TCP協(xié)議的方法來迷惑安全研究人員。實際上,這種辦法起不到任何作用。因為,要分析木馬的上線域名,最直接最有效的辦法就是用wireshark抓包,過濾出dns協(xié)議的數(shù)據(jù)包,很快就能分析出來。
即使你在編寫木馬的時候,并未對上線地址采用“硬編碼”,或者使用動態(tài)數(shù)組動態(tài)生成,又或者你進行了各種加密,又或者直接寫入內(nèi)存等“軟編碼”手段,這些只能對木馬上線地址的靜態(tài)分析起到一定的保護作用,如果去動態(tài)調(diào)試跟蹤,也是可以得到上線地址的。
對于使用域名生成算法(DGA)生成的域名,目前已經(jīng)有相應(yīng)的機器學(xué)習(xí)的手段去檢測是否為木馬的C&C域名。不過目前看起來,目前對于木馬上線地址的隱藏,最好的辦法就是使用第三方域名,這樣可以極好的保護木馬操縱者。