0×01背景
現(xiàn)在的很多遠(yuǎn)控/后門因?yàn)槟壳爸髁鞣阑饓σ?guī)則的限制,基本上都采用TCP/UDP反彈回連的通訊形式;但是在較高安全環(huán)境下,尤其負(fù)責(zé)web相關(guān)業(yè)務(wù)的環(huán)境,因?yàn)榘卜涝O(shè)備(防火墻,IDS,IPS等)規(guī)則的嚴(yán)格限制,TCP/UDP(HTTP/HTTPS/DNS)甚至ICMP等隧道都不能很輕易從內(nèi)網(wǎng)訪問Internet,只接受外部的請求。在這種場景下,攻擊者在拿到了webshell的前提下,考慮植入除webshell以外的后門就需要考慮如何來繞過防火墻等安防設(shè)備的限制了。
實(shí)際上關(guān)于端口復(fù)用這一古老的后門技術(shù),一直研究者眾多,也提出了一些卓有成效的方法和工具,其中很多的解決方案都是通過劫持web服務(wù)器相關(guān)進(jìn)程/服務(wù)的內(nèi)存空間、系統(tǒng)API甚至劫持網(wǎng)絡(luò)驅(qū)動去達(dá)到目的,手法相當(dāng)精妙,不過因?yàn)閯幼鬏^大在不經(jīng)意間就會觸發(fā)主動防御。本文將從IIS 6.0以后的微軟提供的原生機(jī)制出發(fā),討論一種較自然的端口復(fù)用的技術(shù):Net.tcp Port Sharing,直譯是為“端口共享”。
本文將通過分析Net.TCP Port Sharing這個機(jī)制,最后實(shí)現(xiàn)一個基于端口復(fù)用的正向后門,目的是分享一些攻防技術(shù)的研究成果,請勿作為非法用途。
0×02 Net.TCP Port Sharing 機(jī)制
在以前的Web應(yīng)用中,一個Web應(yīng)用綁定一個端口,若有其他應(yīng)用則需要綁定其他的端口才能是西安監(jiān)聽。如下圖所示,Web Application 1綁定了80端口后,Web Application 2再去綁定80端口會出錯。

現(xiàn)在使用微軟提供的NET.TCP Port Sharing服務(wù),只要遵循相關(guān)的開發(fā)接口規(guī)則,就可以實(shí)現(xiàn)不同的應(yīng)用共享相同的web服務(wù)器端口。如下圖中Web Application1 和Web Application2同時(shí)綁定在80端口。

Net.TCP Port Sharing服務(wù)是WCF(Windows Communication Foundation)中的一個新的系統(tǒng)組件,這個服務(wù)會開啟net.tcp 端口共享功能以達(dá)到在用戶的不同進(jìn)程之間實(shí)現(xiàn)端口共享。這個機(jī)制的最終是在HTTP.sys中實(shí)現(xiàn)的,目前將許多不同HTTP應(yīng)用程序的流量復(fù)用到單個TCP端口上的HTTP.SYS模型已經(jīng)成為Windows平臺上的標(biāo)準(zhǔn)配置。這為防火墻管理員提供了一個共同的控制點(diǎn),同時(shí)允許應(yīng)用程序開發(fā)人員最小化構(gòu)建可利用網(wǎng)絡(luò)新應(yīng)用程序的部署成本。跨多個 HTTP應(yīng)用程序共享端口的功能一直是Internet信息服務(wù)(IIS)的一項(xiàng)功能。實(shí)際上,HTTP.SYS允許任意用戶進(jìn)程共享專用于HTTP流量的TCP端口。
HTTP.sys是在Windows Server 2003最開始引進(jìn)的,這個驅(qū)動監(jiān)聽HTTP流量,然后根據(jù)URL注冊的情況去分發(fā),這樣多個進(jìn)程可以在同一個端口監(jiān)聽HTTP流量了。微軟公開了HTTP Server API庫,像httpcfg,netsh.exe等都是基于它的。如下圖。

整個過程描述如下:
(1)當(dāng)IIS或者其他的應(yīng)用使用HTTP Server API去監(jiān)聽請求路徑的時(shí)候,這些應(yīng)用需要在HTTP.SYS上面注冊url prefix ,關(guān)于注冊URL的規(guī)則,可以參考MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364698(v=vs.85).aspx 。這是注冊的過程。
(2)當(dāng)一個請求到來并被http.sys獲取到,它需要分發(fā)這個請求給注冊當(dāng)前url對應(yīng)的應(yīng)用,這是路由的過程。
0×03 后門實(shí)現(xiàn)方式研究
微軟提供了HTTP Server API庫用于構(gòu)建在Windows上的Web服務(wù)器,原生支持基于Net.tcp Port Sharing的Web Application 開發(fā)。目前HTTP Server API有兩個版本,推薦使用HTTP Server API 2.0。微軟提供了HTTP Server API 1.0的一個demo,地址在: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364640(v=vs.85).aspx。
這是一個簡單的基于HTTP Server API 1.0的web server 例子,通過修改可以實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行的功能。
開發(fā)的應(yīng)用只需要注冊與當(dāng)前系統(tǒng)不沖突的URL(綁定的地址是一致的,只是URL路徑有差別),就可以實(shí)現(xiàn)URL注冊,瀏覽器(或者自定義開發(fā)的客戶端網(wǎng)絡(luò)程序)訪問對應(yīng)的URL,服務(wù)端網(wǎng)絡(luò)程序會根據(jù)自身注冊的URL去解析執(zhí)行客戶端的命令。基于此,完全可以通過服務(wù)器注冊一些特殊URL與客戶端訪問這些URL來達(dá)到一個HTTP一問一答的訪問模式的正向后門。
0×04 功能演示
環(huán)境:Windows 2008 R2 x64
IIS 7.0(默認(rèn)設(shè)置)
防火墻狀態(tài)默認(rèn)開啟
權(quán)限要求:功能需要Adminstrator用戶的完整性級別,即使沒有啟用Administrator,通過UAC提高程序完整性級別即可運(yùn)行程序。
達(dá)到的目的:與Web服務(wù)器綁定同一端口,自身程序不監(jiān)聽端口,通過注冊回調(diào)函數(shù)等待系統(tǒng)服務(wù)分發(fā)流量。服務(wù)器通過解析客戶端發(fā)送的請求(GET/POST或者其它方法)載荷,解析執(zhí)行命令,然后以HTTP Response 的形式返回給客戶端。
(1)在部署IIS的服務(wù)器上,后門程序注冊一個URL

當(dāng)前編寫的只是一個demo,若是要做用戶態(tài)Rootkit,就需要做自身隱藏的功能,請讀者朋友們自由發(fā)揮,在這個過程中需要注意權(quán)限的控制。 (2)使用控制器連接目標(biāo)機(jī)器的URL

當(dāng)前控制器作為一個demo實(shí)現(xiàn)了一個交互式的CMD SHELL,代碼優(yōu)化后會開源出來。
0×05 緩解措施與對抗策略研究
(1)防火墻/IDS/IPS與web服務(wù)器配合使用,在其規(guī)則中采用白名單機(jī)制去判斷是否屬于web服務(wù)器當(dāng)前允許的ACL URL。
(2)請大家提出更多的建議。
|