荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Kernel (空を见上げて), 信区: Security
标  题: ICMP木马(上)
发信站: 荔园晨风BBS站 (Wed Mar 20 20:25:18 2002) , 转信

在揭开木马的神秘面纱(二)发表后,有很多朋友来信询问新型木马的详细情况,本文会详
细的分析Win2000下一种新型木马的内部构造和防御方法。(本文默认的操作系统为Win2000
,开发环境为VC++6.0。)

  大家知道,一般的"古典"型木马都是通过建立TCP连接来进行命令和数据的传递的,但

这种方法有一个致命的漏洞,就是木马在等待和运行的过程中,始终有一个和外界联系的端
口打开着,这是木马的阿喀琉斯之踵(参看希腊神话《特洛伊战纪》),也是高手们查找木
马的杀手锏之一(Netstat大法)。所谓道高一尺,魔高一丈,木马也是在斗争中不断进步

断成长的,其中一种ICMP木马就彻底摆脱了端口的束缚,成为黑客入侵后门工具中的佼佼者


  什么是ICMP呢?ICMP全称是Internet Control Message Protocol(互联网控制报文协

)它是IP协议的附属协议,用来传递差错报文以及其他需要注意的消息报文,这个协议常常
为TCP或UDP协议服务,但是也可以单独使用,例如著名的工具Ping(向Mike
Muuss致敬),就是通过发送接收ICMP_ECHO和ICMP_ECHOREPLY报文来进行网络诊断的。

  实际上,ICMP木马的出现正是得到了Ping程序的启发,由于ICMP报文是由系统内核或进
程直接处理而不是通过端口,这就给木马一个摆脱端口的绝好机会,木马将自己伪装成一个
Ping的进程,系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马进程,一
旦事先约定好的ICMP_ECHOREPLY包出现(可以判断包大小、ICMP_SEQ等特征),木马就会接
受、分析并从报文中解码出命令和数据。

  ICMP_ECHOREPLY包还有对于防火墙和网关的穿透能力。对于防火墙来说,ICMP报文是被
列为危险的一类:从Ping of Death到ICMP风暴到ICMP碎片攻击,构造ICMP报文一向是攻击

机的最好方法之一,因此一般的防火墙都会对ICMP报文进行过滤;但是ICMP_ECHOREPLY报文
却往往不会在过滤策略中出现,这是因为一旦不允许ICMP_ECHOREPLY报文通过就意味着主机
没有办法对外进行Ping的操作,这样对于用户是极其不友好的。如果设置正确,ICMP_ECHOR
EPLY报文也能穿过网关,进入局域网。

    为了实现发送/监听ICMP报文,必须建立SOCK_RAW(原始套接口),首先,我们需要定

一个IP首部:

typedef struct iphdr {

 unsigned int version:4; // IP版本号,4表示IPV4

 unsigned int h_len:4; // 4位首部长度

 unsigned char tos; // 8位服务类型TOS

 unsigned short total_len; // 16位总长度(字节)

 unsigned short ident; //16位标识

 unsigned short frag_and_flags; // 3位标志位

 unsigned char ttl; //8位生存时间 TTL

 unsigned char proto; // 8位协议 (TCP, UDP 或其他)

 unsigned short checksum; // 16位IP首部校验和

 unsigned int sourceIP; //32位源IP地址

 unsigned int destIP; //32位目的IP地址

}IpHeader;

  然后定义一个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_RAW表示是原始套接口

          IPPROTO_ICMP, //协议,IPPROTO_ICMP表示ICMP数据报

          NULL, //WSAPROTOCOL_INFO置空

          0, //保留字,永远置为0

          WSA_FLAG_OVERLAPPED //标志位

          );

  注:为了使用发送接收超时设置(设置SO_RCVTIMEO, SO_SNDTIMEO),必须将标志位置
为WSA_FLAG_OVERLAPPED




--
※ 来源:.荔园晨风BBS站WWW bbs.szu.edu.cn. [FROM: 61.144.235.40]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店