2024年4月16日发(作者:)
百度文库 - 让每个人平等地提升自我
本 科 毕
业 论 文
基于网络的漏洞扫描系统
Vulnerability Scan System Based on Network
姓 名:
学 号:
学 院:软件学院
系:软件工程
专 业:软件工程
年 级:
指导教师:
年 月
摘 要
随着互联网的日益普及,网络的安全问题越来越成为人们关注的焦点之一。
而在所有安全事件中,99%的网络入侵都是基于已知的漏洞而产生的,因此检测
并修补已知的安全漏洞对保证网络的安全起着非常重要的意义。
基于网络的漏洞扫描系统是一种主动式的安全检测系统。它能够根据漏洞
1
百度文库 - 让每个人平等地提升自我
库中不同漏洞的特征,模拟黑客攻击的方式,向本地或远程主机发送一个或多
个经过特殊构造的数据包,捕获并记录目标主机发回的应答数据包。通过这种
方法,收集到目标主机的各种信息,并将这些信息与已有漏洞的特征进行匹配,
从而发现目标主机上的各种安全漏洞。
本文首先介绍了课题研究的背景和意义,以及安全漏洞的概念、产生的原
因,并对几种常见的漏洞进行了分析。接下来研究了安全漏洞扫描中使用的一
些关键技术,例如协议栈指纹识别技术、ICMP扫描技术、TCP扫描技术等,并
在此基础上设计和实现了一个基于网络的漏洞扫描系统。
该系统首先检测目标主机的存活状况,然后对远程主机操作系统版本进行
识别,紧接着扫描该主机所开放的服务端口,在得到这些信息的基础上对目标
可能存在的已知安全漏洞进行逐项检测,发现目标系统中存在的漏洞。在扫描
结束时,给出扫描报告,从而让管理员及时发现当前网络中的安全隐患,修补
系统中的漏洞,提高网络的安全性与抵御攻击的能力。
关键词:漏洞;网络安全;漏洞扫描
Abstract
With the increasing popularity of the Internet, network security is drawing more
and more people's attention. For all the security incidents, 99% of the network
instrusions are based on the known vulnerabilities, so it is significant for network
security that the known vulnerabilities should be detected and repaired.
2
百度文库 - 让每个人平等地提升自我
Vulnerability Scan System Based on Network is a type of active security
detection system. It can immatate the way of hackers' attacking to send one or more
specially constructed data packets accourding to the feaures of different vulnerability,
and then capture and record the echoing packets from target host. By this way, the
information of target host is collected, then system compares them with the features
of existing vulnerabilities, thus vulnerabilities of the target host will be found out.
This article firstly introduces the background and significance of the research,
and the definition of vulnerability, the cause of the vulnerability as well as the
analysis of several common type of vulnerabilities. Then some key technologies are
studiedy such as identification of protocol stack, ICMP scaning technology, TCP
scaning technology, etc,based on which a system called "Vulnerability Scan System
Based on Network" is designed and implemented.
The system firstly detect the liveness of the target host, then its operation
system version is detected, and next, the opening service ports is scaned, after the
collection of these information, the system will check the host's vulnerabilities one
by one, find its existing vulnerabilities. After the scaning, a report is given which
allows the administrator to find network sercurity vulnerabilities in time and fix
them, which will rise the security level and the ability to defense network attacking.
Key words: vulnerability; network security; vulnerabilities scan.
目 录
研究背景 ................................................................................................................................... 2
漏洞扫描技术的现状 ............................................................................................................... 2
本文的内容及安排 ................................................................................................................... 3
相关理论介绍 ........................................................................................................................... 5
2.1.1 漏洞概念 ............................................................................................................... 5
2.1.2 漏洞成因 ............................................................................................................... 6
3
百度文库 - 让每个人平等地提升自我
2.1.3 常见漏洞类型 ....................................................................................................... 8
相关技术介绍 ........................................................................................................................... 9
2.2.1 Winsock与原始套接字 ........................................................................................ 9
2.2.2 操作系统嗅探技术 ............................................................................................. 11
2.2.3 ICMP扫描技术 .................................................................................................... 12
2.2.4 TCP扫描技术 ...................................................................................................... 14
开发环境简介 ......................................................................................................................... 18
本章小结 ................................................................................................................................. 18
第三章 系统分析与设计 ............................................................................................................... 19
整体设计 ................................................................................................................................. 19
3.1.1设计目标 .............................................................................................................. 19
3.1.2系统结构 .............................................................................................................. 19
3.1.3数据库设计 .......................................................................................................... 21
功能模块设计 ......................................................................................................................... 22
3.2.1存活主机检测 ...................................................................................................... 22
3.2.2操作系统嗅探 ...................................................................................................... 23
3.2.3端口扫描 .............................................................................................................. 24
3.2.4漏洞扫描 .............................................................................................................. 24
本章小结 ................................................................................................................................. 26
第四章 系统实现 ........................................................................................................................... 27
存活主机检测模块的实现 ..................................................................................................... 27
端口扫描模块实现 ................................................................................................................. 28
本章小结 ................................................................................................................................. 32
演示环境 ................................................................................................................................. 33
演示结果 ................................................................................................................................. 33
5.2.1 主机检测 ............................................................................................................. 34
5.2.2 操作系统嗅探 ..................................................................................................... 34
5.2.3 端口探测 ............................................................................................................. 34
5.2.4 漏洞扫描 ............................................................................................................. 36
本章小结 ................................................................................................................................. 36
第六章 总结与展望 ....................................................................................................................... 37
总结 ......................................................................................................................................... 37
展望 ......................................................................................................................................... 37
4
百度文库 - 让每个人平等地提升自我
Content
研究背景 ................................................................................................................................... 2
漏洞扫描技术的现状 ............................................................................................................... 2
本文的内容及安排 ................................................................................................................... 3
相关理论介绍 ........................................................................................................................... 5
2.1.1 漏洞概念 ............................................................................................................... 5
2.1.2 漏洞成因 ............................................................................................................... 6
2.1.3 常见漏洞类型 ....................................................................................................... 8
相关技术介绍 ........................................................................................................................... 9
2.2.1 Winsock与原始套接字 ........................................................................................ 9
2.2.2 操作系统嗅探技术 ............................................................................................. 11
2.2.3 ICMP扫描技术 .................................................................................................... 12
2.2.4 TCP扫描技术 ...................................................................................................... 14
开发环境简介 ......................................................................................................................... 18
本章小结 ................................................................................................................................. 18
第三章 系统分析与设计 ............................................................................................................... 19
整体设计 ................................................................................................................................. 19
3.1.1设计目标 .............................................................................................................. 19
3.1.2系统结构 .............................................................................................................. 19
3.1.3数据库设计 .......................................................................................................... 21
功能模块设计 ......................................................................................................................... 22
3.2.1存活主机检测 ...................................................................................................... 22
3.2.2操作系统嗅探 ...................................................................................................... 23
3.2.3端口扫描 .............................................................................................................. 24
3.2.4漏洞扫描 .............................................................................................................. 24
本章小结 ................................................................................................................................. 26
第四章 系统实现 ........................................................................................................................... 27
存活主机检测模块的实现 ..................................................................................................... 27
端口扫描模块实现 ................................................................................................................. 28
本章小结 ................................................................................................................................. 32
演示环境 ................................................................................................................................. 33
演示结果 ................................................................................................................................. 33
5.2.1 主机检测 ............................................................................................................. 34
5.2.2 操作系统嗅探 ..................................................................................................... 34
5.2.3 端口探测 ............................................................................................................. 34
5.2.4 漏洞扫描 ............................................................................................................. 36
本章小结 ................................................................................................................................. 36
第六章 总结与展望 ....................................................................................................................... 37
总结 ......................................................................................................................................... 37
展望 ......................................................................................................................................... 37
第一章 引言
1
百度文库 - 让每个人平等地提升自我
研究背景
现代社会中,计算机网络已经成为人们生活中不可缺少的组成部分,但是
网络技术在给我们带来方便的同时也带来了巨大的安全隐患。特别是近些年来,
计算机网络犯罪日益猖獗,从上世纪的蠕虫、CHI到最近几年的灰鸽子、熊猫
烧香以及最近出来的鬼影,安全问题给人们带来一次又一次沉重的教训。据美
国联邦调查局调查显示,全美大约有280万个公司和组织都至少遇到过一次计
算机安全问题,平均每一家遭受到了万美元的损失,如此,一年内的损失总额
可能会达到672亿美元。
[1]
我们网络环境之所以不安全,是因为它存在着漏洞,每一个网络系统都有
已被发掘的或潜在的尚未被发掘的各种安全漏洞,漏洞是无法避免的,不存在
绝对安全的网络系统。对于安全漏洞引起的问题,采用事先检测系统的脆弱点
防患于未然,是减少损失的有效办法。通常黑客进行攻击前,会首先收集目标
网络系统的信息,确定目标网络的状态,如操作系统版本类型、开放端口、运
行服务等,然后再实施具有针对性的攻击。对目标网络系统信息的获取,主要
是通过漏洞扫描完成的。我们可以通过同样的方式来评估网络的安全性能。
漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用
漏洞扫描器,系统管理员能够发现所维护的服务器的各种TCP端口的分配、提
供的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。
从而在计算机网络系统安全防护中做到有的放矢,及时修补漏洞,构筑安全的
网络体系。
[2]
漏洞扫描是一把双刃剑,它作为网络安全评测的重要工具,可以帮助系统
管理员评估主机和网络的安全性能,发现网络中潜在的安全漏洞,提高网络的
抗攻击能力;但是也可能被网络入侵者所利用,作为收集网络主机信息的重要
手段。
[2]
漏洞扫描技术的现状
目前,在网络安全领域,安全扫描技术、入侵检测技术、防火墙技术和病
毒检测技术构成网络安全4种主要技术。后3种技术都是在攻击进行中或者进
行后的被动检侧,而安全扫描技术则是在攻击进行前的主动检测。
[3]
2
百度文库 - 让每个人平等地提升自我
安全扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。
所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以及
其他同安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执
行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中
的漏洞。利用被动式策略扫描称为系统安全扫描,利用主动式策略扫描称为网
络安全扫描。
目前安全漏洞扫描主要使用的检测方案
[4]
:
(1)基于应用的检测技术
它采用被动的、非破坏性的办法检查应用软件包的设置,发现安全漏洞。
(2)基于主机的检测技术
它采用被动的、非破坏性的办法对系统进行检测。通常,它涉及到系统的
内核,文件的属性,操作系统的补丁等问题。这种技术还包括口令解密,把一
些简单的口令剔除。因此,这种技术可以非常准确地定位系统的问题,发现系
统的漏洞。它的缺点是与平台相关,升级复杂。
(3)基于目标的漏洞检测技术
它采用被动的、非破坏性的办法检查系统属性和文件属性,如数据库,注
册号等。通过消息文摘算法,对文件的加密数进行检验。这种技术的实现是运
行在一个闭环上,不断地处理文件,系统目标,系统目标属性,然后产生检验
数,把这些检验数同原来的检验数相比较。一旦发现改变就通知管理员。
(4)基于网络的检测技术
它采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利
用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针
对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。
这种技术可以发现一系列平台的漏洞,也容易安装。但是,它可能会影响网络
的性能。
本文的内容及安排
本文详细介绍了安全漏洞的基本知识,漏洞扫描的核心技术与方法,如存
活主机检测、基于协议栈指纹识别技术的操作系统嗅探,端口扫描及一些常见
漏洞的扫描。在此基础上设计并实现了一个简单的漏洞扫描系统。
3
百度文库 - 让每个人平等地提升自我
全文共六章,章节安排如下:
第一章:引言。介绍课题背景,漏洞扫描技术的现状以及本文的研究内容
和组织结构。
第二章:相关理论及技术概述。介绍了安全漏洞的概念、成因及一些常见
漏洞分析。阐述了Winsock与原始数据包、存活主机检测、操作系统嗅探、ICPM
扫描、TCP扫描等相关技术。另外还介绍了本系统的开发环境。
第三章:系统分析与设计。阐述系统的整体结构,工作原理、各模块的设
计及模块之间的联系,数据库的设计等。
第四章:系统的实现。根据第三章的设计,将本系统各个功能模块的实现
作了详细的介绍。
第五章:系统演示。简单演示了各个模块的功能。
第六章:总结与展望。总结了本文的工作与本系统的特点,并提出了一些
改进措施
。
4
百度文库 - 让每个人平等地提升自我
第二章 相关理论及技术概述
这一章将介绍相关理论及技术,包括漏洞的概念、成因及常见漏洞的分析,
Winsock与原属数据包的相关知识,基于协议栈指纹识别技术的操作系统嗅探
原理和TCP、ICMP扫描等技术。最后简要介绍了一下系统的开发环境。
相关理论介绍
2.1.1 漏洞概念
漏洞(Vulnerability):也称脆弱性,是在硬件、软件、协议的具体实现或系统
安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏
系统。
[5]
具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在Send mail
早期版本中的编程错误,在NFS协议中认证方式上的弱点,在Unix系统管理
员设置匿名Ftp服务时配置不当的问题都可能被攻击者使用,威胁到系统的安
全。因而这些都可以认为是系统中存在的安全漏洞。
[6]
系统安全漏洞是在系统具体实现和具体使用中产生的错误,但并不是系统
中存在的错误都是安全漏洞。只有能威胁到系统安全的错误才是漏洞。许多错
误在通常情况下并不会对系统安全造成危害,只有被人在某些条件下故意使用
时才会影响系统安全。
漏洞会影响到很大范围的软硬件设备,包括作系统本身及其支撑软件,网
络客户和服务器软件,网络路由器和安全防火墙等。换而言之,在这些不同的
软硬件设备中都可能存在不同的安全漏洞问题。在不同种类的软、硬件设备,
同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在
不同的设置条件下,都会存在各自不同的安全漏洞问题。
[6]
漏洞问题是与时间紧密相关的。一个系统从发布的那一天起,随着用户的
深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的漏洞也会
不断被系统供应商发布的补丁软件修补,或在以后发布的新版系统中得以纠正。
而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞和错误。
因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现。漏洞问题
5
百度文库 - 让每个人平等地提升自我
也会长期存在。因而脱离具体的时间和具体的系统环境来讨论漏洞问题是毫无
意义的。只能针对目标系统的作系统版本、其上运行的软件版本以及服务运行
设置等实际环境来具体谈论其中可能存在的漏洞及其可行的解决办法。
2.1.2 漏洞成因
网络的安全符合木桶原理,入侵者只要找到复杂计算机网络中的一个缝隙,
就能轻而易举地闯入系统。所以,了解这些缝隙可能存在的地方以及产生的原
因,对检测及修补他们起着至关重要的意义。通常产生这些缺陷的方面主要表
现在系统设计、口令设置、数据未加密、软件bug等。
[6]
➢
设计上的缺陷:
TCP/IP协议在设计之初首先考虑的是网络互连而不是网络
安全,它是假定工作在可信环境下的,而且由于TCP/IP协议是完全公开的,
入侵者可以随意地伪造或修改数据包而不被发现,从而达到一些不正当的
目的。这使得我们的网络环境变得很不安全、很不可靠。
➢
口令设置过于简单:
(1)口令被猜测:很多人经常使用自己的电话号码,生日等作为登陆口令,
有的人甚至采用像“abc”、“111111”、“123456”等简单的字符串。这些口
令过于简单,很容易被入侵者猜测并加以利用。
(2)字典攻击:入侵者使用一个程序,该程序借助一个包含用户名和口令
的字典数据库,不断地尝试登录系统,直到成功进入。毋庸置疑,这种方
式的关键在于有一个好的字典。
(3)暴力破解:与字典攻击类似,不同的是暴力破解会把所有的字符串组
合都试一遍。例如包含6个数字的口令有一百万种组合,1个包含大小写且
标点符号的7字符口令大约有10万亿种组合。对于后者,一般的计算机要
花费大约几个月的时间才能试验一遍。可见,长口令是保证系统安全的有效
措施。
➢
数据未加密:
抓包程序轻而易举的就能够抓到所有经过该节点的数据流,
若我们的数据未加密,那么它就会完全暴露在入侵者面前,系统就毫无安
全性可言。
(1) 共享介质:传统的以太网结构很便于入侵者在网络上放置一个嗅探器就
可以查看该网段上的通讯数据,但是如果采用交换型以太网结构,嗅探行
6
百度文库 - 让每个人平等地提升自我
为将变得非常困难。
(2) 服务器嗅探:交换型网络也有一个明显的不足,入侵者可以在服务器上
特别是充当路由功能的服务器上安装一个嗅探器软件,然后就可以通过它
收集到的信息闯进客户端机器以及新任的机器。例如,虽然不知道用户的
口令,但当用户使用Telnet软件登录时就可以嗅探到他输入的口令了。
(3) 远程嗅探:许多设备都具有RMON(Remote monitor,远程监控)功能以
便管理者使用公共体字符串(public community strings)进行远程调试。随着
宽带的不断普及,入侵者对这个后门越来越感兴趣了。
➢
编写软件存在bug:
无论是服务器程序、客户端软件还是操作系统,只要是
用代码编写的东西,都会存在不同程度的bug,常见的主要有以下几类:
(1) 缓冲区溢出:指入侵者在程序的有关输入项目中了输入了超过规定长
度的字符串,超过的部分通常就是入侵者想要执行的攻击代码,而程序编
写者又没有进行输入长度的检查,最终导致多出的攻击代码占据了输入缓
冲区后的内存而执行。
(2) 意料外的联合使用问题:一个程序经常由功能不同的多层代码组成,
甚至会涉及到最底层的操作系统级别。入侵者通常会利用这个特点为不同
的层输入不同的内容,以达到窃取信息的目的。例如:对于由Perl编写的
程序,入侵者可以在程序的输入项目中输入类似“mail
字符串,从而使Perl让操作系统调用邮件程序,并发送出重要的密码文件
给入侵者。
(3) 不对输入内容进行预期检查:有些编程人员怕麻烦,对输入内容不进
行预期的匹配检查,使入侵者输送炸弹的工作轻松简单。
(4) Race conditions:多任务多线程的程序越来越多,在提高运行效率的同
时,也要注意Race conditions的问题。比如说:程序A和程序B都按照“读
/改/写”的顺序操作一个文件,当A进行完读和改的工作时,B启动立即
执行完“读/改/写”的全部工作,这时A继续执行写工作,结果是A的操
作没有了表现!入侵者就可能利用这个处理顺序上的漏洞改写某些重要文
件从而达到闯入系统的目的。
7
百度文库 - 让每个人平等地提升自我
2.1.3 常见漏洞类型
漏洞的种类很多,据CVE(通用漏洞披露)的统计资料现在已经有几千种,
其中以CGI漏洞最多,而SMTP漏洞以及缓冲区溢出漏洞的出现频率最高,以
下针对几种比较常见的漏洞加以介绍。
➢ CGI
漏洞:
CGI (Common Gateway Interface) 即公共网关接口,它是一种与
Web服务器通信的标准接口。 CGI 主要有两项功能:1.用于收集从浏览器
发送给Web 服务器的信息,并使这些信息能供其他程序使用; 2.对提出请
求的浏览器回送服务器处理的结果。
[7]
由于CGI程序开发者的疏忽,许多CGI程序存在各种危险程度的漏洞。
例如有的CGI程序允许远程攻击者在WEB服务器上执行任意的命令,可
能对服务器造成破坏;有些CGI程序本身、或者被其调用的函数缺乏对用
户输入数据的合法性检查,未能滤除一些特殊字符,使得入侵者可以通过
构造请求来达到入侵的目的。比如,缺乏对“../”的过滤,可能导致入
侵者读取系统的任意文件;有些CGI程序会向客户端浏览器返回某些敏感
信息,比如脚本所在路径、HTTP根目录所在路径、Perl版本、server_admin、
server_name、PATH环境变量等,这些都为黑客的攻击提供了便利。
[7]
目前,大多数网站都使用免费的公共CGI脚本程序去驱动各自的Web
服务,从而导致有缺陷的CGI脚本在Internet上泛滥开来。因此,对CGI
脚本的安全性应高度重视。
➢ SMTP
漏洞:
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议的
简称。SMTP协议出于TCP/IP协议的应用层包,但事实上它与传输系统和
机制无关,仅要求一个可靠的数据流通道。
尽管SMTP服务已经在RFC中被详细的定义,但在具体实现中各个软
件开发商并没有很好的遵循RFC的规定,因此我们可以通过实现上的细小
差异来进行探测活动。通过发送特定的、非标准的数据包来获得指纹信息,
可以进而判断出目标主机使用的软件版本信息。
➢ FTP
漏洞:
FTP 是File Transfer Protocol(文件传输协议)的英文简称,用
于Internet上的控制文件的双向传输。用户可以通过它把自己的PC机与世
界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。
8
百度文库 - 让每个人平等地提升自我
FTP服务也存在多种漏洞,包括拒绝服务攻击漏洞、缓冲区溢出漏洞等
等,以FTP弱口令为例,因为ftp服务器上可能存在匿名用户或者弱势密码
用户,所以黑客常利用该缺陷进行攻击。例如发现ftp匿名用户后,可以再
借助系统的其他漏洞通过匿名用户提升权限。开放匿名用户经常会给系统
带来一些安全隐患。
➢ DOS
漏洞:
DOS是Denial of Service的简称,即拒绝服务。任何对服务的
干涉如果使得其可用性降低或者失去可用性均成为拒绝服务。如果一个计
算机系统崩溃或其带宽耗尽或其硬盘被填满,导致其不能提供正常的服务,
就构成拒绝服务。
造成DOS的攻击行为被称为DOS攻击,其目的是使计算机或网络无法
提供正常的服务。最常见的DOS攻击有计算机网络带宽攻击和连通性攻击。
带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆
尽,最后导致合法的用户请求就无法通过。连通性攻击指用大量的连接请
求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机
无法再处理合法用户的请求。
➢ Finger
漏洞:
Finger是UNIX系统中用于查询用户情况的实用程序。UNIX
系统保存了每个用户的详细资料,包括E-mail地址、账号,在现实生活中
的真实姓名、登录时间、有没有未阅读的信件,最后一次阅读E-mail的时
间以及外出时的留言等资料。当用Finger命令查询时,系统会将上述资料
一一显示在终端计算机上。
使用Finger可以查询Internet主机内任意用户的某些公开信息,因此,
它为黑客提供了大量有用的信息:如用户名列表、用户登录信息和一些能
够用来猜测密码的信息等。特别要指出的是,79端口是专为Finger服务开
放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢
出等用户的详细信息.
相关技术介绍
2.2.1 Winsock与原始套接字
Windows Sockets简称WinSock,是Windows下的网络编程规范,为应用程序
9
百度文库 - 让每个人平等地提升自我
提供了开放的、支持多种协议的网络编程接口。它定义了如何通过API实现与
internet协议族的连接。应用程序通过调用Windows Sockets的API实现相互之
间的通信,而实际的工作是通过下层的网络通信协议和操作系统实现的。在七
层网络协议中,WinSock主要控制数据的输入和输出,也就是传输层和网络层,
屏蔽了数据链路层和物理层。Winsock API函数有版本和版本。经过不断完善并
在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成
为Windows网络编程的事实上的标准。
[8]
Winsock 为上层应用程序提供的一种标准网络接口,而不是协议,所以它
可以用于发现和使用任意数量的底层传输协议所提供的通信能力。上层应用程
序不用关心Winsock实现的细节,它为上层应用程序提供透明的服务最开始的
Winsock是围绕着TCP/IP协议运行的,但是在Winsock 2. 0中却增加了对更多
传输协议的支持.不仅提供了一个供应用程序访问网络服务的Window socket应
用程序编程接口(API:Application Programming Interface),还包含了由传输服务
提供者和名字解析服务提供者实现的Winsock服务提供者接口(SPI:Service
Provider Interface)和ws2_ 32. d11。
Winsock 2. 0引人的这个新功能(SPI技术)打破了服务提供者的透明,让开发
者可以编写自己的服务提供程序,SPI以动态链接库(DLL)的形式存在,它工作
在应用层,为上层API调用提供接口函数。
在网络安全扫描中要构造各种不同的数据报,如TCP数据包,UDP数据包
及ICMP数据包,可以利用Winsock的原始套接字来实现。并且在分析返回数
据时要捕获网络数据包,此时也可以使用Winsock的原始套接字。
原始套接字能够根据需要生成用户想要的数据报文,包括报头和数据报本
身的内容,而且能够对网络底层的传输制进行控制。对于一般的流套接字或数
据报套接字,开发人员只能处理封装在TCP或 UDP协议中的数据。而原始套
接字则提供了一种直接访问底层IP协议的方法。它主要提供了以下几种TCP
及UDP套接字所不能提供的功能:
[8]
(1) 使用原始套接字可以读写包含在IP包中的其它协议数据报,如ICMP、
IGMP、OSPF等。
(2)利用原始套接字,使用IP_HDRINCL套接字选项可以构造IP包头部。
10
百度文库 - 让每个人平等地提升自我
(3)利用原始套接字,使用I/O控制命令SIO_RCVALL可以捕获网上所有的
IP
在构造数据包的时候,要按照协议规定封装数据,入栈的封装过程如图2-1
所示。
图2-1:数据进入协议栈时的封装过程
要注意的是由于TCP、UDP、ICMP、和IGMP都要向IP传送数据,因此
IP必须在生成的IP首部中加入某种标示,以表明数据属于哪一层。为此,IP
在首部存入一个长度为8bit的数值,称作协议域。1表示ICMP协议,2表示IGMP
协议,6表示TCP协议,17表示UDP协议。
[9]
2.2.2 操作系统嗅探技术
在网络信息安全系统,尤其是安全评估系统中,信息的收集和分析至关重
要,对操作系统进行踩点,识别目标操作系统则是其中不可获取的一个组成部
分。因为各种各样的漏洞依附于不同的操作系统之上,只有精确地识别出目标
主机操作系统的类型,才能更有目的性地发掘漏洞和弱点所在,准确地对目标
主机进行评估。
当前流行的主动操作系统探测方法主要分为TCP/IP栈指纹识别和ICMP栈
指纹识别。在TCP/IP栈指纹识别中,通过设置IP头部和TCP头部标志位的不
同值,观察回复报文标志位的设置等诸多情况,分析操作系统类型;ICMP栈
11
百度文库 - 让每个人平等地提升自我
指纹识别探测主要通过发送ICMP Echo Request、Timestamp Request和
Information Request等报文进行探测,通过分折回复报文的IP头、ICMP头部的
相关标志位的设置情况来区分操作系统类型。
以下举例说明不同系统对ICMP响应的差别
[8]
。
➢
IP 总长度:
一些系统会正常响应该域的值,而某些操作系统(如BSD家族
系列)会在原始IP总长度域上增加20字节(sizeof(ipheader)),这是因为其内
部错误处理数据包的结果。(注意: 同样的数据包如果从SOCK_RAW读取
的话,返回的数据包ip_len字段将会减掉20字节).
➢
IP/UPD 头校验和:
一些操作系统会错误计算这个域,某些系统会填充0
值,而有些系统能正确响应这个值。
➢
DF位响应:
些TCP/IP堆栈会在ICMP错误数据包中响应DF位,其他的(如
Linux)会拷贝全部八位位组,并部分位清零,再有的是会忽略这个位而设置
其自身相关的值。
➢
IP ID字段:
基于Linux 2.4.0 - 内核的Linux机器会在ICMP查询请求和
应答信息中设置IP标识为零值。而在和以上版本中得到改正。
➢
ICMP回显请求code字段:
ICMP回显请求信息(类型8)中ICMP代码段的
值不等于0时,操作系统会使用ICMP回显应答对发送方的查询进行回答,
基于Microsoft的操作系统会发回在ICMP回显应答中ICMP代码类型设置
为0的数据包,而其他操作系统和网络设备则会使用ICMP回显请求中相
同的ICMP代码段值。
以上列举了几种不同系统对发送方区别响应的情况。当我们收集到足够的
信息之后,就可以判断出目标主机所使用的操作系统。信息越详细,探测的结
果就越准确,能够辨别的操作系统也就越多。
2.2.3 ICMP扫描技术
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是
TCP/IP协议族的子协议,用于在IP主机、路由器之间传递控制消息。一般来
说,ICMP报文提供针对网络层的错误诊断、拥塞控制、路径控制和查询服务
四项功能。例如,当一个分组无法到达目的站点或TTL超时后,路由器就会丢
弃此分组,并向源站点返回一个目的不可达的ICMP报文。
[11]
12
百度文库 - 让每个人平等地提升自我
ICMP报文大体上可以分为两种类型,即:ICMP差错报文和ICMP查询报
文。常用的ICMP报文有ICMP回显请求、ICMP地址掩码请求、ICMP时间戳
请求和ICMP端口不可达报文。格式如图2-1所示。
图2-2:ICMP协议报文格式
ICMP回显请求/应答报文是一种双向信息查询报文,用于获取某些有用信
息,以便进行网路故障诊断和网络控制。常用的ping程序就是基于ICMP回显
请求实现的。
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,系统
将广播它的ICMP请求报文。
ICMP端口不可达报文是ICMP目的不可达报文中的一种,可以从ICMP差
错报文中所附加的数据中查看错误信息。
ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是
自午夜开始计算的毫秒数,是协调的统一时间(Coordinated Universal Time,
UTC),它是世界各地通用标准时间,也叫世界时。这种ICMP报文的好处是它
提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级
的分辨率。
13
百度文库 - 让每个人平等地提升自我
最常用的ICMP扫描方法就是利用PING的原理,发送ICMP回显请求报文,
然后监听是否有ICMP回显应答报文返回,如果没有就证明目标主机不存在或
者已经停机,如果能够返回ICMP回显应答报文,就证明主机正在运行
[6]
。其
过程如图2-3所示。
图2-3:ICMP回显请求
2.2.4 TCP扫描技术
利用TCP协议来进行端口扫描是常见的扫描方法,因为现在的很多网络应
用程序都是基于TCP协议来实现的,例如Web服务器就是基于TCP的80号端
口
[6]
。 TCP是一个面向连接的协议,格式如图2-4所示:
图2-4:TCP协议格式
14
百度文库 - 让每个人平等地提升自我
端口号对应服务类型,也是TCP通信与应用程序的接口,每个TCP通信程
序都有一个TCP端口,或者是临时的端口或者是固定的端口。一个四元组(客
户机IP,客户端口,服务器IP,服务器端口)对应一个完整的TCP连接。TCP
协议提供完全可靠的、面向连接的、全双工的、流传输服务。它与IP协议同时
使用,保证了网络上不同主机在通信时数据传输的可靠、高效。TCP的可靠传
输是通过三次握手过程实现的。
TCP中有六个标志位,其中URG 表示紧急指针,ACK 表示确认号,RSH
置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲
区满时才传送。RST 置1时重建连接,如果接收到RST位,通常表明发生了
某些错误。SYN 置1时用来发起一个连接。FIN 置1时表示发送端完成发送任
务,用来释放连接,表明发送方已经没有数据发送了。
TCP正常连接也称为三次握手过程,在这个过程中的第一个报文的代码类
型设置为SYN,序列号为m,表示开始一次握手。接收方接收后,向发送者发
回一个报文。代码类型设置为SYN和ACK,序列号设置为n,确认序列号设置
为m+1。发送者在收到这个报文后,就可以进行TCP数据发送,于是,它又向
接收者发送一个ACK段,表示双方的连接已经建立。在完成握手之后,就开始
正式的数据传输。上面握手段中的序列号都是随机产生的。一个正常的TCP连
接过程如图2-5所示。
[9]
图2-5:TCP建立连接的三次握手
15
百度文库 - 让每个人平等地提升自我
TCP 用三个报文建立一个链接,而终止连接时需要四个报文。原因在于被
动关闭链接一方需要关闭处理时间,因此 ACK 和 FIN 不能同时发给主动关
闭一方
[7]
。如图2-6所以。
图2-6:TCP终止连接的四次握手
TCP扫描技术主要有TCP FIN扫描、TCP ACK扫描、TCP SYN扫描。
➢
TCP FIN扫描:
TCP FIN扫描使用的是FIN标志,如果发送一个FIN标
志的TCP报文到一个关闭的端口,那么应该返回一个RST报文,如果发送
到一个开放的端口,那么端口可能没有任何反应。如果收到ICMP端口不
可达错误数据包,则不能确认是否开放或者关闭,称为状态未知端口。
[8]
TCP FIN扫描的过程如图2-7所示。
图2-7:TCP FIN扫描过程
16
百度文库 - 让每个人平等地提升自我
构造含有FIN标志的TCP数据包到目标主机B的某一个端口,如果返回含
有RST的TCP报文,那么表示端口关闭,如果没有任何反应,则有可能表示
端口打开,如果产生ICMP差错报文,则端口的状态是未知。
由于网络环境的复杂性,或者由于有防火墙或存在其他网络过滤设备,阻
碍了正常的数据流程,TCP FIN扫描将无法明确判断端口是否打开。另外,对
Windows系统而言,TCP FIN扫描是无效的。
➢
TCP ACK扫描:
TCP ACK扫描是利用标志位ACK,而ACK标志在TCP协
议中表示确认序号有效,它表示确认一个正常的TCP连接。但是在TCP ACK
扫描中没有进行正常的TCP连接过程,实际上是没有真正的TCP连接。
使用TCP ACK扫描不能够确定端口的关闭或者开放,因为当发送给对方一
个含有ACK表示的TCP报文的时候,都返回含有RST标志的报文,无论端口
是开放或者关闭。所以,不能使用TCP ACK扫描来确定端口是否开放或者关闭。
但是可以利用它来扫描防火墙的配置,用它来发现防火墙规则,确定它们是有
状态的还是无状态的,哪些端口是被过滤的。
[8]
➢
TCP SYN扫描:
TCP SYN扫描是一个半开放扫描形式,它利用了TCP 三
次握手中的一个步骤,也就是传送SYN标志这个步骤,其他的后续步骤没
有发生。而SYN标志在TCP协议中表示发起一个新的连接,但如果只是发
送了一个SYN标志,后续的三次握手过程没有。
[8]
不同的端口状态会返回不同的响应数据包,如果是开放的端口,那么会返
回一个含有SYN+ACK标志的TCP报文,如果端口是关闭的,那么会反馈一个
含有RST标志的报文。其过程如图2-8所示。
图2-8:TCP SYN扫描过程
17
百度文库 - 让每个人平等地提升自我
主机A扫描主机B,构造一个带有ACK标志的TCP数据包发送给主机B
的一个端口,如果对方返回一个带有SYN和ACK的TCP数据包,那么就表示
端口是开放的,如果返回一个带有RST的TCP数据包,那么就表示端口关闭。
开发环境简介
操作系统:Windows 2000 Professional
开发工具:Microsoft Visual C++ ;
数据库:MySQL 5.0.18
本系统涉及到原始数据包的构造和发送,Windows 2000系统提供了对原始
数据包的有效支持,因此本系统选择了Windows 2000 Professional 操作系统作
为开发平台。本系统后台部分主要使用C语言开发,在Windows平台下,VC++
是最强大的C语言开发工具,而前台部分则是使用java开发的,因此选用了
Eclipse。MySQL是一个小型关系型数据库管理系统,由于其体积小、速度快、
成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站成本而选择
了MySQL作为网站数据库。作为试验性项目,为了降低开发成本,加快开发
灵活性与开发速度,本系统采用MySQL 最新版5.0.18版本。
本章小结
本章第一节介绍了有关漏洞的相关知识,漏洞的概念、形成的原因等,并
详细介绍了CGI漏洞、SMTP漏洞、FTP漏洞、DOS漏洞及Finger漏洞。第二
节分析了漏洞扫描的一系列相关技术。最后在第三节简要介绍了一下系统的开
发环境。
18
百度文库 - 让每个人平等地提升自我
第三章 系统分析与设计
通过前面对漏洞相关概念及技术的讨论,本章设计了一个基于网络的漏洞
扫描系统,明确了设计目标,给出了整体架构和系统流程,并简单介绍了各个
模块的设计及数据库的设计。
整体设计
3.1.1设计目标
此系统作为一个网络安全体系的评估工具,应为网络管理员、普通个人等
不同用户提供友好的操作界面,应具备快速、准确的扫描能力。具体如下:
(1)针对普通非专业用户,提供图形化界面,友好的操作方式。
(2)针对专业用户,如网络管理员,提供命令行操作方式,使之能够方便地使
用各个模块的功能。
(3)接受用户的扫描任务,允许用户设置扫描参数,如IP地址段,端口号等。
(4)在一定时间内完成扫描任务并将生成的报告整理成报告文档提交给用户。
3.1.2系统结构
系统的功能性模块主要有远程主机检测模块、端口扫描模块、操作系统嗅
探模块、漏洞扫描模块。功能性模块将在下文中详细介绍。用户配置模块是系
统为用户提供的操作界面;配置文件是系统运行时需要读取的一些参数,比如
默认的端口列表等。多线程处理则应用于各模块当中。扫描过程中得出的结果
将会被存放在临时文件中,待扫描结束后,系统将会整理这些结果并生成一份
扫描报告提供给用户。如图3-1所示。
远程主机探测模块接收用户设置的IP段参数,该模块将会对该IP段中的远
程主机进行逐一扫描,以确定主机是否处于活跃状态。如果处于活跃状态,则
调用端口扫描模块对目标主机进行端口扫描,否则跳过该IP。端口扫描模块在
接到扫描任务后,立刻读取默认的或者是用户设置的端口扫描参数,然后开辟
端口扫描线程对远程主机端口进行一一扫描。在端口扫描过程中,如果发现开
放的服务端口有对应于该服务的漏洞扫描模块,则调用相应的漏洞扫描模块进
行漏洞扫描。否则跳过该端口。漏洞扫描模块在接到扫描任务后,则开辟漏洞
19
百度文库 - 让每个人平等地提升自我
扫描线程执行漏洞扫描任务。至此,扫描任务完成。如图3-2所示。
图3-1:系统整体模式图
图3-2:系统流程图
20
百度文库 - 让每个人平等地提升自我
3.1.3数据库设计
本系统的数据库用来存放扫描时所用到的数据信息,系统中各模块独立性
较强,因此本数据库中的各表之间的独立性也很高,表与表之间联系很小。系
统中主要使用表有存放操作系统版本特征信息的OSFeature表,存放CGI漏洞
特征字符串信息的CGI表以及FTP弱口令探测用的账户密码信息。
OSFeature表用来记录操作系统版本特征信息,这些信息主要记录了在使用
栈指纹技术检测目标主机时的应答数据特征。比如TTL是目标主机数据包的生
存时间值,IP_Len_Vary是目标主机响应数据包中IP头部长度的变化。见表。
表:OSFeature属性表
字段含义
ID
生存时间
IP长度变化
响应类型
DF位
响应代码
子网掩码
校验值
操作系统
字段名
ID
TTL
IP_Len_Vary;
Echo_Tos
IP_DF
Echo_Code;
Sub_Mask
IP_Checksum
OSType
字段类型
INT
TINYINT
INT
TINYINT
TINYINT
TINYINT
LONG
INT
VARCHAR
长度
128
备注
主键
CGI表记录了CGI漏洞的特征信息,漏洞特征是扫描时所用到的特征字符
串,漏洞描述是对该漏洞的解释信息,漏洞等级是该漏洞的危险指数,分为1~9
共9个级别,级别越高,危险指数越高。见表。
表:CGI属性表
字段含义
漏洞ID
漏洞名称
漏洞特征
漏洞描述
漏洞等级
解决方案
字段名
ID
TITLE
FEATURE
DESCRIPTION
DANGEROUSNESS
SOLUTION
字段类型
INT
VARCHAR
VARCHAR
VARCHAR
TINYINT
VARCHAR
长度
128
512
512
20
512
备注
主键
21
FTP弱口令账户密码表相当于暴力破解密码时用的密码字典,不同的是这
百度文库 - 让每个人平等地提升自我
里只收集了一些网络上最常用的弱口令密码账户。见表。
表:FTP弱口令账户密码属性表
字段含义
用户ID
账户名
账户密码
字段名
ID
USERNAME
PASSWORD
字段类型
INT
VARCHAR
VARCHAR
长度
20
20
备注
主键
功能模块设计
3.2.1存活主机检测
在TCP/IP协议体系中,负责将数据包发送到指定目的地的是IP协议,网
关必须自己处理数据报传输工作,如果目的IP无效,数据包将无法送达目的地,
但是这并不代表远程主机不在线,因为数据传输是不可靠的,很多因素都可以
造成数据包的丢失或出现差错。IP协议自身没有内在的机制来获取并处理这些
差错,为了处理错误信息,ICP/IP设计了ICMP协议,它是一种差错和控制报
文协议,这也正是我们要利用的地方。
[11]
利用ICMP回显请求扫描远程主机的过程如图3-3所示。
图3-3:利用ICMP请求/应答数据报检测主机状态
本系统中存活主机检测主要使用了ICMP回显请求与应答报文。在主机没
有被设置为过滤ICMP数据包的情况下,我们可以向目标IP发送一个ICMP回
22
百度文库 - 让每个人平等地提升自我
显请求数据包,如果目标主机收到该信息,那么它就会发送一个ICMP相应数
据包给发送方主机,发送方拆包并检测接受到的数据,有三个条件可以说明目
标主机是存活的:一是接收到的数据包IP地址是发送方所发送的目标IP地址;
二是type属性为0,也就是说该数据包的确是回显请求应答数据包;三是标识
符与所发送数据包的标识符一致。这样我们就能够确定目标主机在线,其余所
有情况都表明目标主机不在线。
3.2.2操作系统嗅探
系统主要使用ICMP栈指纹识别的方式来探测目标主机操作系统类型及版
本号。其方法是向目标主机发送一组ICMP数据包,根据目标主机对数据包响
应的差异来区分不同的操作系统。利用ICMP探测一个系统的操作系统版本类
型最多需要发送四个ICMP数据包,即:ICMP回显请求数据包、ICMP时间戳
请求数据包、ICMP端口不可达数据包和ICMP地址掩码请求数据包。
图3-4:利用ICMP数据报收集目标主机信息
如图3-4所示,扫描引擎向目标主机发送一系列ICMP数据包进行探测,在
完成响应数据包信息的手机后,将所得到的特征存入一个数据结构中。扫描引
擎会读取数据库中记录的操作系统特征信息与数据库中所记录的各种操作系统
的版本特征信息相匹配,如果匹配成功,则认为该条记录所描述的的操作系统
版本是目标系统所使用的操作系统版本。
23
百度文库 - 让每个人平等地提升自我
3.2.3端口扫描
端口扫描可以有多种方法,本系统主要采用半开放扫描,即TCP SYN扫描。
TCP SYN扫描应用非常广泛,是最好的TCP扫描形式,其速度快,效率高,
而且比较安全隐蔽。该扫描方法的步骤如下:
(1)建立套接字
(2)构造TCP数据报,将TCP首部中的标志位设为SYN,端口设置为想要探
测的端口。
(3)发送步骤2种构造的数据报
(4)接收目标主机响应的数据报,对其拆包,并进行过滤,找到针对所发送数
据报而响应的数据报。
(5)检查并分析该数据,如果返回值是SYN/ACK,则说明目标端口是打开的,
否则该端口关闭。
这样,我们就完成了对目标主机特定端口状态的扫描。
3.2.4漏洞扫描
在收集到目标主机的操作系统、开放端口等信息之后,我们就可以针对端
口服务进行相关的漏洞扫描了。不同的服务所对应的漏洞种类也不尽相同,但
无论何种漏洞,都可以采用模拟攻击的方法进行探测,即向目标主机的目标端
口发送一组精心构造的数据报,检测目标主机的反应情况并分析结果。漏洞扫
描的流程如图3-5所示。
图3-5:漏洞扫描示意图
24
百度文库 - 让每个人平等地提升自我
以下简要分析几种常见的漏洞扫描设计。
➢
CGI漏洞扫描的流程:
[12]
(1)建立套接字,并连接到远程主机。
(2)从数据库中读取CGI字符串并构造数据包发送至远程主机
(3)捕获远程主机的响应数据包
(4) 对捕获到的数据包拆包并检查是否和关键字匹配,如果匹配,则说明存
在漏洞,否则不存在
(5) 返回步骤2,继续扫描下一个CGI漏洞。
➢
FTP弱口令漏洞扫描:
[12] [13]
FTP 弱口令是指FTP服务器是否存在匿名用户或过于简单的用户名和密
码。其扫描策略是首先探测是否存在匿名用户,其次是用常见的用户名和密码
尝试登陆,如果登陆成功,则存在弱口令漏洞。毫无疑问,探测的准确率取决
于探测所用的用户名和密码库,也称为密码字典。本系统收集了网络上使用概
率最高的一部分用户名和密码,并存储到数据库中供扫描程序读取。
系统首先验证是否有匿名账户,具体做法是向服务器发送“USER
anonymousrn”字符串,如果服务器响应代码包含“331”说明需要密码,这说
明不存在匿名账户,否则说明存在。接下来扫描引擎从数据库中加载常用用户
名和密码,逐个对服务器进行尝试登陆,期间如果有登陆成功的,则说明存在
FTP弱口令漏洞。
➢
SMTP漏洞扫描:
SMTP协议的设计缺陷使攻击者可以使用RCPT、VRFY、EXPN等命令获
取到服务器上的用户名列表。
本系统通过发送特定的SMTP命令和接收目标主机SMTP服务器响应的应
答数据来完成的。首先发送HELD命令,表示进入到对方的邮件服务系统,然
后输入向邮件服务系统提供发件人信箱, 服务器返回“250 OK”,这时候用
RCPT命令向服务器提供目标信箱,服务器会检查是否有该用户存在。如果用
户存在,则返回“250 OK”表示通过,否则将提示“550”错误信息。这样攻
击者就可以通过RCPT来猜测服务器上用户名列表
[14]
。
25
百度文库 - 让每个人平等地提升自我
本章小结
本章主要介绍了系统的整体设计方案和各个功能模块的设计。系统共包括
五个模块:用户配置模块,远程主机检测模块,操作系统嗅探模块,端口扫描
模块及漏洞扫描模块。用户配置模块在界面程序中实现,允许用户对IP地址段,
扫描端口及漏洞种类等参数进行设置;远程主机检测模块根据用户设定的IP段
对该段内的主机逐一进行检测,判断主机的在线情况;操作系统嗅探模块则针
对存活的主机进行操作系统版本的检测;端口探测模块允许用户对设定的端口
进行扫描,判断端口的开放情况;漏洞扫描模块则针对用户选中的漏洞类型对
远程主机进行漏洞扫描。
各个模块的功能是相互独立的,但模块间存在着一定的依赖关系。各功能
模块的运行需要来自界面的参数配置,而漏洞扫描又需要得到远程主机的在线
情况,服务端口开放情况和操作系统版本等信息。
26
百度文库 - 让每个人平等地提升自我
第四章 系统实现
根据第三章的设计及各个功能模块的分析,本章将对系统中的各个功能模
块的实现情况作出较为详细的介绍。在每个模块的实现中,本文将给出程序设
计流程及相关解释,比较关键的部分本文将给出部分核心代码。
存活主机检测模块的实现
本模块使用了ICMP的回显请求和应答报文来实现。系统首先初始化
Winsock环境,然后创建套接字并设置超时,接下来构造ICMP回显请求数据
包并发送。在接收到主机返回的数据包时,必须对数据包的内容进行正确分析,
把指针定位到ICMP报文头部,检查类型字段,此字段应该为0,然后检查标
识符,该字段应该与所发送的ICMP数据包中的标识符一致。如果是这样,说
明接收到的数据包的确是远程主机所发回的数据包。否则,说明远程主机不在
线
[13]
。程序流程如图4-1所示。
图4-1:主机检测流程图
27
百度文库 - 让每个人平等地提升自我
该部分核心代码:
. ... ...
pRst->MoveNext();
}
... ... ...
端口扫描模块实现
本模块利用TCP SYN扫描技术,只执行了TCP连接中三次握手的第一个
步骤,也就是只向目标主机发送SYN数据包,表示要建立一个新的连接。在目
标端口闭合和开放两种不同的状态下,会返回不同的响应数据包。如果端口是
开放的,则会返回一个SYN+ACK标志的TCP报文,如果端口是关闭的,则会
返回一个含有RST标志的报文。该部分流程如图4-3所示:
28
百度文库 - 让每个人平等地提升自我
该部分核心代码:
0f
图4-3:端口扫描流程图
29
百度文库 - 让每个人平等地提升自我
. ...
➢
SMTP漏洞:
SMTP扫描中要用到一些常用的SMTP命令,表是常见的SMTP命令列表。
表:常见SMTP命令
SMTP命令
HELLO(HELO)
RECIPIENT
命令说明
用于向接收SMTP确认发送SMTP。
用于开始将邮件发送到一个或多个邮箱中。
用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指
定。
DATA
SEND
接收SMTP将把其后的行为看做邮件数据处理。
此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。
30
百度文库 - 让每个人平等地提升自我
RESET
VERIFY
EXPAND (EXPN)
此命令指示当送邮件操作将被放弃。
此命令要求接收者确认参数是一个用户。
此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个
邮件发送列表,就返回表中的成员。
TURN 此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要
么发送拒绝信息并保持自己的角色。
QUIT 此命令指示接收方必须发送OK应答然后关闭传送信道。
常见的SMTP应答码及其含义
211:系统状态或系统帮助响应
250:要求的邮件操作完成
251:用户非本地,将转发向
550:要求的邮件操作未完成,邮箱不可用
551:用户非本地,请尝试
553:邮箱名不可用,要求的操作未执行
554:操作失败
SMTP服务在RFC中被详细的定义(RFC821,RFC1425和RFC1985),但
是在具体实现中各个软件开发商并没有很好的遵循RFC的规定,因此可以通过
实现上的细小差异来进行探测活动。通过发送特定的、非标准的数据包来获得
指纹信息,可以进而判断出目标主机所使用的软件版本信息。采用错误信息来
进行辨别的方法有如下几种。
(1)发送没有“HELO”命令的邮件:一些服务器允许客户这样做,而且
会发送一个220的错误代码。如果服务器拒绝就会发送一个501或503的错误
代码。
(2)发送一个没有域名的“HELO”信息,在RFC中没有强制需要这个信
息,但是一些服务器会接受,而另一些会拒绝。
(3)使用一个简单的“test”:这通常被本地用户使用。
(4)利用可能再某些服务器上成功实现的命令:如HELP命令、VRFY命
令、EXPN命令、TURN命令、SOML命令、SAML命令、NOOP命令和EHLO
31
百度文库 - 让每个人平等地提升自我
命令。
本章小结
本章给出了系统各个功能模块的实现过程。第一节讲述了利用ICMP回显
请求判断远程主机在线情况的流程和实现;第二节讲述了利用栈指纹识别技术
来探测远程主机所使用操作系统版本的过程;第三节讲述了利用TCP SYN扫描
技术来扫描目标主机TCP端口的流程和实现;第四节则讲述了CGI漏洞、FTP
漏洞和SMTP漏洞三种常见漏洞的扫描实现。
32
百度文库 - 让每个人平等地提升自我
第五章 系统演示
系统为用户提供了可视化模式和命令行模式两种操作模式,本章将以可视
化操作模式为例来演示系统的功能和使用方法。
演示环境
操作系统:Windows 2000 虚拟机
数据库:MySQL 5.0.18;
演示方式:可视化界面操作模式
演示结果
运行程序出现如下欢迎界面,图5-1所示。点击Home按钮后,输出域会显
示本机IP地址,主机名等信息。
图5-1:欢迎界面
33
百度文库 - 让每个人平等地提升自我
5.2.1 主机检测
检测从 到 IP段内存活的主机。在Start IP和End IP栏分别设置起始和结
束IP地址,然后点击按钮“Test Remote”。结果如图5-2所示。
图5-2:存活主机检测示意图
5.2.2 操作系统嗅探
检测从 到 IP段内存活主机所使用的操作系统类型及版本。在Start IP和
End IP栏分别设置起始和结束IP地址,然后点击按钮“Remote System”。 结
果如图5-3所示。
5.2.3 端口探测
探测IP地址为的主机端口开放情况。在界面中设置所需要探测的端口,用
空格隔开。设置目标主机的IP地址。点击按钮“Scan Tcp Ports”结果如图5-4
所示。
34
百度文库 - 让每个人平等地提升自我
图5-3:操作系统嗅探示意图
图5-4:端口扫描示意图
35
百度文库 - 让每个人平等地提升自我
5.2.4 漏洞扫描
扫描IP地址为的FTP漏洞情况。在界面中设置需要检测的漏洞和目标主机
的IP地址。点击按钮“Scan Vulnerabilities”结果如图5-5所示。
图5-5:漏洞扫描示意图
本章小结
系统为用户提供了强大而友好的可视化操作界面,使非专业人员也能轻松
地使用本系统。对于专业人员,使用命令行模式来进行操作,可以大大提高程
序的执行效率。
36
百度文库 - 让每个人平等地提升自我
第六章 总结与展望
总结
本文针对目前网络安全现状,设计并实现了一个基于网络的漏洞扫描器。
该系统的目标是在入侵行为发生前对系统进行安全漏洞扫描,检测网络上主机
安全的缺陷,并提出相应的解决方案,提高系统的安全性,从而增加网络的抗
攻击能力。
本文所设计的漏洞扫描系统的扫描策略为:首先探测网络上远程主机的存
活情况,然后对目标主机进行操作系统嗅探和端口服务扫描,其次再根据以上
信息对目标主机进行漏洞扫描,最后根据扫描结果生成扫描报告。
该扫描系统具有以下优点:
(1)使用方便、灵活。既可以用命令行控制执行各个模块的功能函数,提
高使用者的针对性。也可以通过界面程序设定好参数,然后进行整体扫描。
(2)扫描效率高。采用多线程扫描技术,充分利用了等待远程主机响应的
这段时间。在扫描过程中,每次分析判断都要依据远程主机回应的数据包内容,
由于网络状况不明,远程主机响应的时间可能很短,也可能很长甚至是超时。
采用多线程技术能够很好的解决这一问题,避免了不必要的等待。
展望
本文在详细的探讨了网络漏洞扫描器的原理及方法后,设计并实现了一个
基于网络的漏洞扫描系统。该系统并不是一个十分完善的系统,进一步的工作
可以从以下几个方面着手。
(1)操作系统嗅探模块所用到的协议栈指纹数据库还没有完善,这使得目
前能够探测的操作系统版本很少。可以研究Nmap的指纹库,Nmap的指纹库
中列出了五百多个操作系统的协议栈特征,我们可以在深入了解Nmap源码的
基础上,把该指纹库信息提取出来,转换为我们所需要的数据。
(2)漏洞特征数据库中的记录还不够全面,所检测的漏洞种类也有限。可
以从官方网站上收集漏洞信息,添加到数据库里面,以便对系统进行更全面的
检测。另外,可以建立新的漏洞扫描模块,以扫描更多类型的漏洞。如果可以
37
百度文库 - 让每个人平等地提升自我
的话还可以建立服务器,对数据库进行实时更新。
(3)该系统扫描完成后还没有办法做到自动修补漏洞。可以做一个从官方
网站上自动下载漏洞补丁的程序,在检测出系统漏洞后自动给这些漏洞打上补
丁。
38
百度文库 - 让每个人平等地提升自我
参考文献
[1]FBI调查显示计算机犯罪造成美国约670亿损失
2006-01-21 2010
[2]刘莉.网路漏洞扫描器的设计与实现[A].西安:西安电子科技大学 2007年1月
[3]洪宏,张玉清.网络安全扫描技术研究[j].计算机工程,2004,第30卷,第10期
[4]孙海波,张志,刘静等.网络漏洞扫描器的设计与实现[z].石家庄:冶金自动化 2004
[5]李为.谈系统漏洞扫描[A].天津:天津职业院校联合报 2007
[6] 漏洞. ,2010-05-21.
[7]孙百勇,向剑伟,莫正坤等. Web服务CGI安全漏洞分析与检测[A].武汉:华中科技大
学 2003
[8]刘文涛.《网络安全编程与技术实例》 中国:机械工业出版社 2008
[9] Stevens《TCP/IP详解卷一:协议》[M] 中国:机械工业出版社 2006
[10]Ofir Arkin, Fyodor Yarochkin.《ICMP based remote OS TCP/IP stack fingerprinting
techniques》[A]
[11]杜树杰.基于ICMP协议的Ping主机探测[A].青岛:计算机系统应用 2009
[12]钟书海.基于网路的漏洞分析系统[A].广东:华南理工大学 2003
[13]万琳.基于网络的安全漏洞扫描[J].中国:网络纵横 2008
[14]张鹏,杨文嘉.SMTP、POP3协议解析及实战[J] 中国:科技信息 2008
[15]恐劭.Winsock与ICMP网络编程[A] 河北:唐山计算机中心 2005
[16]李鹏,杨献荣,许丽华.网络漏洞扫描器的设计与实现[A] 2003
39
百度文库 - 让每个人平等地提升自我
致谢
四年的大学生涯转瞬即逝,而我也将带着无比的感激和执著的信念踏上未
来的征程。在此毕业设计完成之际,向所有关心、支持、帮助过我的老师、同
学、朋友、亲人致以最真挚的感谢。
首先感谢我的导师老师!感谢您对我生活上的无私关照、学习上的热情帮
助以及毕业设计阶段的悉心指导和严格要求,帮我一步步扫清障碍,直至最后
成功。在此谨向您表达我最衷心的感谢和敬意!
感谢我本科期间的导师董院长!在我迷茫的阶段为我点燃希望的火把,照
亮我前进的道路;在保研期间对我给予充分的肯定以及为我所做的努力。我会
永远记住您!
感谢曾院长、王备战老师、陈海山老师、林坤辉老师、苏淑文老师、夏侯
老师、杨律青老师、王鸿吉老师、邱明老师、林凡老师、张海英老师、吴清强
老师等曾经教过我的老师!从你们那里我不仅仅学到了知识与技能,还被你们
身上所蕴藏的各种优秀品质所感染,让我更好的成长。
感谢郑艳老师、李贵林老师、张仲楠老师等学院老师!感谢你们对我的栽
培,以及各方面的照顾,和你们相处的日子是快乐、充实、令人难忘的。和你
们的交流与讨论是我学习上和综合能力上提高的重要途径。
感谢我的室友、同学、学姐学长、学弟学妹们。是你们让我感受到如家一
般的温暖,你们的关心和支持让我保持乐观的心态,积极地面对困难和挫折。
最后,深深地感谢我的父母和我的亲人,在我的求学之路上,始终不遗余
力的支持我,你们无微不至的关爱,永远是我前进的动力,我会加倍努力来回
报你们。
40


发布评论