木马通信的隐蔽技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多媒体技术及其应用本栏目责任编辑:唐一东木马通信的隐蔽技术
张春诚,路刚,冯元
(解放军炮兵学院计算中心,安徽合肥230031)
摘要:服务器和客户机如何通信是木马研究的一个核心技术,该文讲述了如何利用网络协议躲避了防火墙和系统工具的检查,成功实现了木马的隐蔽通信,给出的源代码均调试通过。
关键词:木马通信;隐藏通信
中图分类号:TP393文献标识码:A 文章编号:1009-3044(2008)35-2481-03
Covert Technologies on Communications of Trojan Horse
ZHANG Chun-cheng,LU Gang,FENG Yuan
(PLA Artillery Academy Computer Center,Hefei 230031,China)
Abstracr:The communications between server and client is a kernel technology to research Trojan.This paper describes how to hide out inspect of firewall and system tools through network protocol,and successful implement on covert communications of Trojan.These sound codes are all debugged and passed.
Key words:communications of trojan horse;covert communications
1引言
木马通常需要利用一定的通信方式进行信息交流(如接收控制者的指令、向控制端传递信息等)。系统和应用程序一般采用TCP/UDP 通信端口的形式与控制端进行通信。木马一般也是利用TCP/UDP 端口与控制端进行通信。通常情况下,木马进行通信时直接打开一个或几个属于自己的TCP/UDP 端口。早期的木马在系统中运行后都是打开固定的端口,后来的木马在植入时可随机设定通信时打开的端口,具有了一定的随机性。可是通过端口扫描很容易发现这些可疑的通信端口。事实上,目前的许多木马检测软件正是通过扫描本地和远程主机系统中打开的已知木马端口进行木马检测的。木马通信端口成为暴露木马形踪一个很不安全的因素。为此采用新技术的木马对其通信形式进行了隐蔽和变通,使其很难被端口扫描发现。
2木马通信形式的隐蔽技术
木马为隐蔽通信形式所采用的手段有:端口寄生、反弹端口、潜伏技术,嗅探技术。
2.1端口寄生
端口寄生指木马寄生在系统中一个已经打开的通信端口,如TCP 80端口,木马平时只是监听此端口,遇到特殊的指令才进行解释执行。此时木马实际上是寄生在系统中已有的系统服务和应用程序之上的,因此,在扫描或查看系统中通信端口时是不会发现异常的。在Windows 9X 系统中进行此类操作相对比较简单,但是在Windows NT/2K 系统中实现端口寄生相对比较麻烦。在控制端与木马进行通信时,如木马所在目标系统有防火墙的保护,控制端向木马发起主动连接就有可能被过滤掉。
2.2反弹端口
反弹端口就是木马针对防火墙所采用的技术[1]。防火墙对于向内的链接进行非常严格的过滤,对于向外的连接比较信任。与一般的木马相反,反弹端口木马使用主动端口,控制端使用被动端口。木马定时监测控制端的存在,发现控制端上线,立即主动连接控制端打开的被动端口。为了隐蔽起见,控制端的被动端口一般开在TCP80。这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似TCP USERIP :1026CONTROLLERIP :80ESTABLISHED 这种情况,用户可能误认为是自己在浏览网页。这种反弹端口的木马常常会采用固定IP 的第三方存储空间来进行控制端IP 地址的传递。
下面的代码演示了被控制端的客户套接字连接控制端的服务套接字。
CServerSocket *pMy;//CServerSocket 是CAsyncSocket 的派生类
……
//初始化是开始连接,同时建立定时器
BOOL CServiceDlg::OnInitDialog(){CDialog::OnInitDialog();pMy=NULL;SetTimer(199,30000,NULL);pMy=new MySock;pMy->Create();pMy->Connect(m_ip,80);//连接目标的80端口,让人感觉在上网
收稿日期:2008-07-02
作者简介:张春诚(1982-),男,硕士,研究方向:网络安全;路刚(1983-),男,硕士,研究方向:计算机人工智能;冯元(1983-),男,硕
士,研究方向:计算机网络技术。
ISSN 1009-3044
Computer Knowledge And Technology 电脑知识与技术
Vol.4,No.8,December 2008,pp.2481-2483E-mail:eduf@ Tel:+86-551-569096356909642481
Computer Knowledge And Technology电脑知识与技术2008年第4卷第8期(总第35期)
}
//在定时器中检查是否有连接,否则试图重新连接
Void CServiceDlg::OnTimer(UINT nIDEvent)
{
If(nIDEvent=199){
If(pMy->Send(“test”,4)=SOCKET_ERROR){
pMy->Detach();
delete pMy;
pMy=NULL;
pMy=new MySock;
pMy->Create();
pMy->Connect(m_ip,80);
}
}
CDialog::OnTimer(nIDEvent);
}
2.3潜伏技术
ICMP(互联网控制报文协议)是IP协议的附属协议,用来传递差错报文以及其他需要注意的消息报文。它是由内核或进程直接处理而不会打开通信端口。采用潜伏技术进行通信的木马一般都是使用ICMP协议。由于不利用TCP/UDP协议,不会打开通信端口,所以不会被一些端口扫描软件和利用端口进行木马防范的软件检测到[2]。通常情况下,木马利用ICMP报文与控制端进行通信时将自己伪装成一个Ping的进程,这样系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马进程,一旦事先约定好的ICMP_ECHOREPLY包出现(可以判断包大小、ICMP_SEQ等特征,这此包实为控制端发给木马的命令和数据),木马就会接受、分析并从报文中解码出命令和数据尽而采取相应的操作。
有的采用潜伏技术的木马不会完全采用ICMP协议进行通信,它们只是监听ICMP报文,当出现特殊的报文时,例如特殊大小的包,特殊的报文结构等,它会打开TCP端口等待控制端的连接。在本地可以看到状态为ESTABLISHED的木马连接(如果端口的最大连接数设为1,在远程用CONNECT方法进行端口扫描时没有办法发现)。一个严格采用潜伏技术的木马会严格地使用ICMP 协议来进行数据和控制命令的传递(数据放在ICMP的报文中)。
木马利用ICMP协议与控制端进行通信的基本过程如下:
为了实现发送/监听ICMP报文,都要首先建立SOCK_RAW(原始套接口)。建立SOCK_RAW之前需要定义一个IP首部,然后定义一个ICMP首部:
typedef struct_ihdr{
BYTE i_type;//8位类型
BYTE i_code;//8位代码
USHORT i_cksum;//16位校验和
USHORT i_id;//识别号(一般用进程号作为识别号)
USHORT i_seq;//报文序列号
ULONG timestamp;//时间戳
}IcmpHeader;
这时可以通过WSASocket建立一个原始套接口
SockRaw=WSASocket(
AF_INET,//协议族
SOCK_RAW,//协议类型,SOCK_R
IPPROTO_ICMP,//协议,IPPROT
NULL,//WSAPROTOCOL_INFO置空
0,//保留字,永远置为0
WSA_FLAG_OVERLAPPED//标志位
);
随后使用fill_icmp_data子程序填充ICMP报文段,调用CheckSum子程序计算ICMP校验和。然后通过sendto函数发送ICMP_ECHOREPLY报文:
sendto(sockRaw,icmp_data,datasize,0,(structsockaddr*)&dest,sizeof(dest));
木马控制端监听程序的基本操作与木马端相同,只是需要使用recvfrm函数接收ICMP_ECHOREPLY报文并用decoder函数将接收来的报文解码为数据和命令:
recv_icmp=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from,&fromlen);
decode_resp(recvbuf,recv_icmp,&from);
对于严格采用ICMP协议通信的木马,除非过滤分析网络链路层的信息或者监视Windows系统的Socket API调用,否则是很难发现其行踪的。
2.4嗅探技术
2.4.1共享环境下嗅探技术原理
嗅探技术即sniffer技术,指在网络上监听数据报文的方法[3]。一般来说,sniffer技术应用环境为共享式以太网(Hub-based Eth-ernet)。在以太网中,所有的通讯都是广播的,通常在同一个网段的所有网络接口都可以访问在物理媒体上传输的所有数据。在实际系统中,数据的收发是由网卡来完成。当收到网络上传输来的数据时,首先由网卡对数据帧的目的MAC地址进行检查,如果目的MAC地址与本地的MAC地址相匹配,则认为应接收该数据并产生相应的中断信号通知CPU,如果不匹配,则直接丢弃该数据帧,本地计算机将根本不知道有数据帧的到来。网卡一般有如下4种接收模式:
2482
多媒体技术及其应用
本栏目责任编辑:唐一东