木马核心技术剖析读书笔记之木马通信与防火墙穿透

基于 TCP 的木马控制通信

TCP 协议是字节流式的传输协议 ,木马通信还需要自定义应用层的协议

被控机器的唯一标识一般是对被控机器的硬盘序列号、MAC 地址等固定信息进行 Hash 计算得到

粘包与分包处理

粘包是指在接收方接收数据时,可能一次接收到多个数据包的数据组成的数据段,也可能收到一个或者几个完整的包与一个后续包的部分数据组成的数据段

TCP粘包产生有两方面原因:一方面,由于TCP协议在客户端和服务器维系一个连接,数据通过连接持续发送。若发送的数据长度过小,会将多个数据包进行合并,然后再进行发送,于是会产生粘包;另外一方面,接收方在收到数据后,先存储在缓冲区中,如果应用没有及时从缓冲区将数据取出,下次取数据的时候就会取到多个包的数据

分包是指接收方接收数据时,每次只能接收到某个数据包的一部分,经过多次接收,才能完整地接收到该协议数据包

产生这种情况的原因是,在数据包长度大于IP协议的MTU值时,IP包会分片传输,导致一个应用数据包最终附加在多个IP报文上通过上面的分析可以看出,粘包和分包1习题的出现,是由于TCP协议的实现机制引起的,与发送方和接收方的发送和接收缓冲区的大小关系不大

对粘包和分包的处理,一般的做法是在要发送的应用层数据包前标识整个数据包的大小,如本节中自定义的协议头。另外一种做法是,在包的末尾添加明显的终结标志 \r\n\r\n,如HTTP协议。由于TCP协议是全双工,这样服务器和客户端都需要进行粘包和分包的处理

链接保活

为了保证控制端能及时获知被控端的在线状态,以及及时下发控制指令,控制端和被控端之间的TCP连接通常采用长连接。当一直有数据交互时,连接双方可以通过数据发送函数的结果来判断连接是否断开

但当长时间无数据交互后,交互双方可能会因为断电、应用崩溃和系统关机等原因,其中一方没有正常断开TCP连接,使得另一方(通常是控制端)无法知道连接是否已经断开,它会一直维护这个连接而产生死连接。同时,路由器等中间设备会为内网里与公网交互的主机之间建立一条动态路由,如果在预定时间内双方没有交互,中间设备会删除该条路由,导致长连接中断,也会产生死连接

当死连接过多时,会造成控制端资源的浪费。为了解决这个问题,需要使用TCP的保活机制 (Keepalive)。产生死连接的主要原因是TCP连接正常断开的机制。TCP连接的建立需要三次握手,而终止一个连接则需要四次握手。与建立连接不同的是,TCP断开连接可由客户端和服务器端任何一方主动进行

基于 UDP 的木马控制通信

UDP协议具有传输效率高、网络穿透性好等优点,又有传输不可靠等缺点,UDT(UDP-based Data Transfer Protocol,即基于UDP的数据传输协议)是一个比较好的折衷方案。UDT完全基于UDP协议实现,很容易穿透防火墙,也非常适合作为木马通信的协议。UDT使用应用层级别的可靠控制和拥塞控制机制,以UDP协议高效传输数据,其传输数据的速率远高于TCP协议

基于 HTTP/HTTPS 的木马通信

从通信交互上来讲,一条 HTTP 请求对应一条响应,当前的请求只有在前一条请求的响应到达后才能发送;而且,HTTP协议是响应式协议,服务器只能给对应请求返回对应的响应,在没有请求到达时,不能给客户端发送响应。如此会导致木马控制端对被控端不能实现实时的控制,在被控端没有主动发送数据时,甚至无法向被控端下发控制命令

边界防火墙穿透

防火墙通常分为网络防火墙和主机防火墙两大类。网络防火墙又分为软件防火墙和硬件防火墙,一般处于网络边界处,也称为边界防火墙。软件防火墙是一组软件程序运行在一般的主机上;硬件防火墙是一个基于硬件平台的防护设备,通常运行在网络的边界,对网络数据传输进行控制。基于主机的防火墙,主要是运行在一台PC上,在主机网络协议栈上提供一层(如Windows下的基于 TDI 或者 NDIS 的过滤驱动)过滤机制,来控制当前主机的网络数据交换

认证代理需要用户提供身份信息,采用规定的认证方式:Basic、NTLM、Kerberos 和 RADIUS 等

你可能感兴趣的:(读书笔记,木马核心技术剖析读书笔记)