朱漢云, 洪 濤
(1.安徽電子信息職業技術學院 電子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)
基于自建網絡堆棧通訊技術實現木馬隱蔽通信的方法研究
朱漢云1, 洪 濤2
(1.安徽電子信息職業技術學院 電子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)
木馬如何隱藏于網絡通訊過程,及其產生的網絡流量已經成為一個新的技術難題.本研究基于自建網絡堆棧的互聯網通訊技術,同時采用在驅動層完成網絡安全通信技術實現方案.底層自建TCP堆棧技術來進行流量隱藏,實現前后臺之間的命令和文件交互,完成隱蔽通信.
自建網絡堆棧;驅動層;TCP;流量隱藏
網絡安全防護技術的飛速發展和個人安全意識的提高,使得木馬的安全性和隱蔽性越來越難以提高.特別在木馬系統與控制后臺通訊階段,產生的網絡連接、網絡流量等信息,極易被防火墻等軟件偵測到,如360安全衛士自帶的網絡流量監控功能,已經成為用戶常規的網絡木馬檢測手段.因此木馬如何隱藏網絡通訊過程,及其產生的網絡流量已經成為一個新的技術難題.
故此,以提高木馬的安全性和隱蔽性為宗旨,鑒于當前網絡安全技術水平,為了實現木馬系統前后臺之間保密通信,通過研究新的網絡通訊技術,設計了基于自建網絡堆棧的互聯網通訊技術,同時采用在驅動層實現網絡安全通信技術實現方案.底層技術通過自實現的驅動,以及自建的TCP堆棧技術來進行流量隱藏.

圖1 系統分層結構
物理層包括物理網卡和網卡驅動,物理網卡,將需要傳輸的信息轉換成實際的電信號或者光信號,在物理線路上傳輸到對端.鏈路層對應于Windows的NDIS(Network Driver Interface Specification)層,主要是封裝了所有NIC硬件的實現,使得上層應用可以通用的編程接口訪問下面的各種NIC接口卡.網絡層和傳輸層在Windows體系的TDI(Transport Driver Inteface)驅動中實現網絡層和傳輸層的封裝,可以向上提供數據服務,向下調用NDIS層實現封包和收發.自建網絡堆棧通訊技術主要通過在NDIS底層截獲數據包,然后在已有數據包的基礎上,在用戶態自建Tcp/IP堆棧,從而實現了一個與Windows網絡架構平行的一個網絡體系.
“底層數據包”是運行于數據鏈路層的數據包,簡單的說就是“以太網幀”,而我們常用的Socket只能發送運行在傳輸層的TCP、UDP等包.木馬發送的IRP寫請求(WriteFile()函數),傳遞到協議驅動程序后,調用派遣函數NdisProtWrite,通過IRP I/O堆棧里面的內核文件對象循環遍歷FilePort鏈表找到對應的節點,然后把木馬截取的數據通過緩沖區讀寫設備的方式拷貝到NDISPROT_OPEN_CONTEXT結構的相應的Priority SendQueue優先級隊列中.按照多級反饋隊列調度算法處理,經過簡化的TCP/IP協議棧,然后再調用NdisSendPackets函數逐步微流量發送給網卡驅動程序.在TCP/IP協議棧中,把該數據的優先級值賦值給IP首部的服務類型(TOS)字段中,使收包的時候根據此字段的優先級值把包放進相應的收包優先級隊列中.用IPPROTO_RAW初始化的原始套接字可以直接收發網絡層數據包,發送一個TCP包時需要手工構造隱藏IP頭、TCP頭、內容以及各校驗和,構造完隱藏數據包后,用sendto方法將該包發送.Winpcap是一個由多組件(動態鏈接庫+驅動程序)和相關SDK組成的"庫".Winpcap用它發送一個以隱藏以太網幀的代碼如下:


隱蔽發送接收一個以太網幀,可分為三步:打開Win-Pcap設備、手工構造一個底層數據、發送和接收.Winpcap最底層是一個NPF(Netgroup Packet Filter,網絡組包過濾)驅動,這是一個NDIS中間件驅動,所有經過網卡的數據包都會“途經”該驅動,在收到路過的數據包時,NPF可以選擇僅僅統計一下包的情況或寫入文件(做流量監控),或者寫到一個環形緩沖區中,然后用戶態程序調用wpcap.dll中一些函數,使用WinAPI和驅動程序交互,獲取驅動緩沖區中的數據,則達到了監控底層數據包的目的.至于發送數據包,用戶態程序調用Winpcap的SDK函數,這些函數調用dll中的方法,dll再用API和NPF通信,NPF是很最低層的驅動了,但它并不負責直接收發數據,NPF再調用更底層的網卡驅動實現數據包的發送.
Winpcap中NPF的數據包過濾部分基于BSD Packet Filter(BPF),這是一種能實現極高效率數據過濾的方案,在BPF中,一個復雜的過濾(匹配)規則被轉化成一個規則符號串(或稱BPF程序),然后在過濾的時候并不會對原過濾規則進行計算,而是將數據送入一個由規則符號串控制的狀態機中進行處理,這種符號串可由狀態機表示,在NPF中則進行了進一步優化,匹配規則轉化為符號串再生成為機器碼.過濾規則由用戶態程序給出,在傳入驅動之前,wpcap.dll將其轉換為BPF程序,NPF收到后,在調用它過濾之前將其轉換為機器碼,再調用轉換后的“過濾函數”匹配底層數據包,以追求高效率.
Winpcap使用NDIS驅動來做到監聽、發送底層數據包,已經是一種很好的解決方案了.AFD驅動是一個未公開接口的驅動層次(系統的一部分),由Winsock等調用,這方面的知識很多源自對ReactOS的源碼分析,TDI(Transport Driver Interface)即傳輸層驅動接口,該層由AFD調用,用于實現傳輸層邏輯并和上層程序聯系,一些防火墻和大部分流量監控軟件均基于TDI層驅動,在該層的優勢是在監控、攔截和執行網絡行為的同時,仍可以獲得相關進程信息.TDI的層次比較低,如果程序直接調用該層進行網絡操作,那么基于TDI以上層次的防火墻和監控程序將無法檢測到.該工程已經實現了一個最基本的無連接NDIS協議驅動,支持收/發以太網幀.
木馬已經成功在宿主機運行的情況下,如需要長期穩定的監控宿主機狀態,在保證木馬系統的隱蔽性之外,以上述底層堆棧技術通過自實現驅動以及自建的TCP堆棧技術來進行流量隱藏,實現前后臺之間的命令和文件交互,借以完成了隱蔽通信任務.
〔1〕祝明慧.網絡安全中的堆棧溢出技術解析[J].微計算機信息,2006(33):109-111.
〔2〕陳國定,姚景新,洑佳紅.基于堆棧式自編碼器的尾礦庫安全評價[J].浙江工業大學學報,2015(03):326-331.
〔3〕楊璐皓.分布式隱蔽通信系統的設計與實現[D].北京郵電大學,2014.
TP393.08
A
1673-260X(2017)04-0010-02
2017-02-03