APP下载

基于自建网络堆栈通讯技术实现木马隐蔽通信的方法研究

2017-05-10朱汉云

赤峰学院学报·自然科学版 2017年8期
关键词:堆栈传输层网卡

朱汉云, 洪 涛

(1.安徽电子信息职业技术学院 电子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)

基于自建网络堆栈通讯技术实现木马隐蔽通信的方法研究

朱汉云1, 洪 涛2

(1.安徽电子信息职业技术学院 电子工程系,安徽 蚌埠 233040;2.蚌埠市公安局,安徽 蚌埠 233000)

木马如何隐藏于网络通讯过程,及其产生的网络流量已经成为一个新的技术难题.本研究基于自建网络堆栈的互联网通讯技术,同时采用在驱动层完成网络安全通信技术实现方案.底层自建TCP堆栈技术来进行流量隐藏,实现前后台之间的命令和文件交互,完成隐蔽通信.

自建网络堆栈;驱动层;TCP;流量隐藏

1 前言

网络安全防护技术的飞速发展和个人安全意识的提高,使得木马的安全性和隐蔽性越来越难以提高.特别在木马系统与控制后台通讯阶段,产生的网络连接、网络流量等信息,极易被防火墙等软件侦测到,如360安全卫士自带的网络流量监控功能,已经成为用户常规的网络木马检测手段.因此木马如何隐藏网络通讯过程,及其产生的网络流量已经成为一个新的技术难题.

故此,以提高木马的安全性和隐蔽性为宗旨,鉴于当前网络安全技术水平,为了实现木马系统前后台之间保密通信,通过研究新的网络通讯技术,设计了基于自建网络堆栈的互联网通讯技术,同时采用在驱动层实现网络安全通信技术实现方案.底层技术通过自实现的驱动,以及自建的TCP堆栈技术来进行流量隐藏.

图1 系统分层结构

2 系统结构及程度设计

物理层包括物理网卡和网卡驱动,物理网卡,将需要传输的信息转换成实际的电信号或者光信号,在物理线路上传输到对端.链路层对应于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协议驱动,支持收/发以太网帧.

3 结语

木马已经成功在宿主机运行的情况下,如需要长期稳定的监控宿主机状态,在保证木马系统的隐蔽性之外,以上述底层堆栈技术通过自实现驱动以及自建的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

猜你喜欢

堆栈传输层网卡
基于行为监测的嵌入式操作系统堆栈溢出测试*
基于Python语言的网络传输层UDP协议攻击性行为研究
ZnO电子传输层在有机无机杂化钙钛矿太阳能电池中的应用
Server 2016网卡组合模式
物联网无线通信传输层动态通道保障机制
基于物联网GIS的消防智能巡检系统设计与实现
基于堆栈自编码降维的武器装备体系效能预测
挑战Killer网卡Realtek网游专用Dragon网卡
RHEL7 Network Teaming(网卡绑定)配置与测试
一种用于分析MCS-51目标码堆栈深度的方法