木马通信的隐蔽技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引言
木马通常需要利用一定的通信方式进行信息交流(如接收控制者的指令、向控制端传递信息等)。
系统和应用程序一般采用TCP/UDP通信端口的形式与控制端进行通信。
木马一般也是利用TCP/UDP端口与控制端进行通信。
通常情况下,木马进行通信时直接打开一个或几个属于自己的TCP/UDP端口。
早期的木马在系统中运行后都是打开固定的端口,后来的木马在植入时可随机设定通信时打开的端口,具有了一定的随机性。
可是通过端口扫描很容易发现这些可疑的通信端口。
事实上,目前的许多木马检测软件正是通过扫描本地和远程主机系统中打开的已知木马端口进行木马检测的。
木马通信端口成为暴露木马形踪一个很不安全的因素。
为此采用新技术的木马对其通信形式进行了隐蔽和变通,使其很难被端口扫描发现。
2木马通信形式的隐蔽技术
木马为隐蔽通信形式所采用的手段有:端口寄生、反弹端口、潜伏技术,嗅探技术。
2.1端口寄生
端口寄生指木马寄生在系统中一个已经打开的通信端口,如TCP80端口,木马平时只是监听此端口,遇到特殊的指令才进行解释执行。
此时木马实际上是寄生在系统中已有的系统服务和应用程序之上的,因此,在扫描或查看系统中通信端口时是不会发现异常的。
在Windows9X系统中进行此类操作相对比较简单,但是在WindowsNT/2K系统中实现端口寄生相对比较麻烦。
在控制端与木马进行通信时,如木马所在目标系统有防火墙的保护,控制端向木马发起主动连接就有可能被过滤掉。
2.2反弹端口
反弹端口就是木马针对防火墙所采用的技术[1]。
防火墙对于向内的链接进行非常严格的过滤,对于向外的连接比较信任。
与一般的木马相反,反弹端口木马使用主动端口,控制端使用被动端口。
木马定时监测控制端的存在,发现控制端上线,立即主动连接控制端打开的被动端口。
为了隐蔽起见,控制端的被动端口一般开在TCP80。
这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似TCPUSERIP:1026CONTROLLERIP:80ESTABLISHED这种情况,用户可能误认为是自己在浏览网页。
这种反弹端口的木马常常会采用固定IP的第三方存储空间来进行控制端IP地址的传递。
下面的代码演示了被控制端的客户套接字连接控制端的服务套接字。
CServerSocket*pMy;//CServerSocket是CAsyncSocket的派生类……
//初始化是开始连接,同时建立定时器
BOOLCServiceDlg::OnInitDialog(){
CDialog::OnInitDialog();pMy=NULL;
SetTimer(199,30000,NULL);pMy=newMySock;pMy->Create();
pMy->Connect(m_ip,80);//连接目标的80端口,让人感觉在上网ComputerKnowledgeAndTechnology}
//在定时器中检查是否有连接,否则试图重新连接V oidCServiceDlg::OnTimer(UINTnIDEvent){
If(nIDEvent=199){
If(pMy->Send(“test”,4)=SOCKET_ERROR){pMy->Detach();deletepMy;pMy=NULL;
pMy=newMySock;pMy->Create();
pMy->Connect(m_ip,80);}}
CDialog::OnTimer(nIDEvent);}
2.3潜伏技术
ICMP(互联网控制报文协议)是IP协议的附属协议,用来传递差错报文以及其他需要注意的消息报文。
它是由内核或进程直接处理而不会打开通信端口。
采用潜伏技术进行通信的木
马一般都是使用ICMP协议。
由于不利用TCP/UDP协议,不会打开通信端口,所以不会被一些端口扫描软件和利用端口进行木马防范的软件检测到[2]。
通常情况下,木马利用ICMP 报文与控制端进行通信时将自己伪装成一个Ping的进程,这样系统就会将ICMP_ECHOREPL Y(Ping的回包)的监听、处理权交给木马进程,一旦事先约定好的ICMP_ECHOREPL Y包出现(可以判断包大小、ICMP_SEQ等特征,这此包实为控制端发给木马的命令和数据),木马就会接受、
分析并从报文中解码出命令和数据尽而采取相应的操作。
有的采用潜伏技术的木马不会完全采用ICMP协议进行通信,它们只是监听ICMP报文,当出现特殊的报文时,例如特殊大小的包,特殊的报文结构等,它会打开TCP端口等待控制端的连接。
在本地可以看到状态为ESTABLISHED的木马连接(如果端口的最大连接数设为1,在远程用CONNECT方法进行端口扫描时没有办法发现)。
一个严格采用潜伏技术的木马会严格地使用ICMP协议来进行数据和控制命令的传递(数据放在ICMP的报文中)。
木马利用ICMP协议与控制端进行通信的基本过程如下:
为了实现发送/监听ICMP报文,都要首先建立SOCK_RAW(原始套接口)。
建立SOCK_RAW 之前需要定义一个IP首部,然后定义一个ICMP首部:
typedefstruct_ihdr{BYTEi_type;//8位类型BYTEi_code;//8位代码
USHORTi_cksum;//16位校验和
USHORTi_id;//识别号(一般用进程号作为识别号)USHORTi_seq;//报文序列号ULONGtimestamp;//时间戳}IcmpHeader;
这时可以通过WSASocket建立一个原始套接口SockRaw=WSASocket(AF_INET,//协议族SOCK_RAW,//协议类型,SOCK_RIPPROTO_ICMP,//协议,IPPROTNULL,//WSAPROTOCOL_INFO置空0,//保留字,永远置为0
WSA_FLAG_OVERLAPPED//标志位);
随后使用fill_icmp_data子程序填充ICMP报文段,调用CheckSum子程序计算ICMP校验和。
然后通过sendto函数发送ICMP_ECHOREPL Y报文:
sendto(sockRaw,icmp_data,datasize,0,(structsockaddr*)&dest,sizeof(dest));
木马控制端监听程序的基本操作与木马端相同,只是需要使用recvfrm函数接收ICMP_ECHOREPL Y报文并用decoder函数将
接收来的报文解码为数据和命令:
recv_icmp=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(structsockaddr*)&from,&fromlen);dec ode_resp(recvbuf,recv_icmp,&from);
对于严格采用ICMP协议通信的木马,除非过滤分析网络链路层的信息或者监视Windows 系统的SocketAPI调用,否则是很
难发现其行踪的。
2.4嗅探技术
2.4.1共享环境下嗅探技术原理
嗅探技术即sniffer技术,指在网络上监听数据报文的方法[3]。
一般来说,sniffer技术应用环境为共享式以太网(Hub-basedEth-ernet)。
在以太网中,所有的通讯都是广播的,通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据。
在实际系统中,数据的收发是由网卡来完成。
当收到网络上传输来的数据时,首先由网卡对数据帧的目的MAC地址进行检查,如果目的MAC地址与本地的MAC地址相匹配,则认为应接收该数据并产生相应的中断信号通知CPU,如果不匹配,则直接丢弃该数据帧,本地计算机将根本不知道有数据帧的到来。
网卡一般有如下4种接收模式:
1)广播方式,网卡能够接收网络中的广播信息。
2)组播方式,网卡能够接收组播数据。
3)直接方式,只有目的网卡才能接收该数据。
4)
混杂模式,网卡能够接收一切通过的数据。
由于所有的物理信号都能被连接在该网络上的计算机所接收,因此可以通过混杂模式(promiscuousmode)方式使网卡能够接收到一切通过它的数据,而不管实际上数据的目的地址是不是计算机。
2.4.2Sniffer技术的实现
假定攻击者事先知道被攻击主机所在网段的IP地址范围,因此黑客可以构造IP报文,其目的地址为局域网内某台主机的地址(可以随便设定),源地址也可以随意设定,然后向此局域网内发送报文。
被攻击主机中的木马程序使用sniffer技术监听网络数据报文,并且依据攻击者事先设定的通信协议来辨别和提取黑客的数据报文。
实现时利用了WinSock2的特性,可以不使用驱动程序,因此程序核心部分代码如下。
首先打开一个socket,参数必须是AF_INET、SOCK_RAW和IPP不能设置SIO_RCV ALL属性:m_s=socket(AF_INET,SOCK_RAW,IPPROTO_IP);然后设置该socket的超时参数等选项:intrcvtimeo=4000;
if(setsockopt(m_s,SOL_SOCKET,SO_RCVTIMEO,(constchasizeof(rcvtimeo))==SOCKET_ERR OR){
//错误处理代码};
再将该socket与本机的某个网络接口绑定。
接下来就可以设置SIO_RCV ALL属性。
if(SOCKET_ERROR!=WSAIoctl(m_s,SIO_RCV ALL,&dwBuffersizeof(dwBufferInLen),&dwBu fferLen,sizeof(dwBufferLen),&dwBytesReNULL)){
//错误处理代码};
……
此后就可以利用这个socket(m_s)来读取网络上的数据包了。
3结束语
该文重点研究了木马系统中涉及到的隐蔽通信技术及实现。
由于防火墙技术的不断改进和系统对网络协议漏洞的定期修补,木马的通信技术将会变得更为复杂和接近底层。
参考文献:
[1]朱明,徐蓦,刘春明.木马病毒分析及其检测方法研究[J]计算机工程与应用,2003(28):176-179.[2]赵树升.计算机病毒分析与防治简明教程[M].北京:清华大学,2007.[3]胡勇.网络嗅探器及安全对策[J].现代电子技术,1999(4):5-6.。