1、1本 科 毕 业 论 文基于网络的漏洞扫描系统Vulnerability Scan System Based on Network姓 名:学 号:学 院:软件学院系:软件工程专 业:软件工程年 级: 指导教师: 年 月2摘 要随着互联网的日益普及,网络的安全问题越来越成为人们关注的焦点之一。而在所有安全事件中,99%的网络入侵都是基于已知的漏洞而产生的,因此检测并修补已知的安全漏洞对保证网络的安全起着非常重要的意义。基于网络的漏洞扫描系统是一种主动式的安全检测系统。它能够根据漏洞库中不同漏洞的特征,模拟黑客攻击的方式,向本地或远程主机发送一个或多个经过特殊构造的数据包,捕获并记录目标主机发回的
2、应答数据包。通过这种方法,收集到目标主机的各种信息,并将这些信息与已有漏洞的特征进行匹配,从而发现目标主机上的各种安全漏洞。本文首先介绍了课题研究的背景和意义,以及安全漏洞的概念、产生的原因,并对几种常见的漏洞进行了分析。接下来研究了安全漏洞扫描中使用的一些关键技术,例如协议栈指纹识别技术、ICMP 扫描技术、TCP 扫描技术等,并在此基础上设计和实现了一个基于网络的漏洞扫描系统。该系统首先检测目标主机的存活状况,然后对远程主机操作系统版本进行识别,紧接着扫描该主机所开放的服务端口,在得到这些信息的基础上对目标可能存在的已知安全漏洞进行逐项检测,发现目标系统中存在的漏洞。在扫描结束时,给出扫描
3、报告,从而让管理员及时发现当前网络中的安全隐患,修补系统中的漏洞,提高网络的安全性与抵御攻击的能力。关键词:漏洞;网络安全;漏洞扫描3AbstractWith the increasing popularity of the Internet, network security is drawing more and more peoples attention. For all the security incidents, 99% of the network instrusions are based on the known vulnerabilities, so it is sign
4、ificant for network security that the known vulnerabilities should be detected and repaired.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
5、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 arti
6、cle 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 scanin
7、g 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, a
8、fter the collection of these information, the system will check the hosts 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 le
9、vel and the ability to defense network attacking.Key words: vulnerability; network security; vulnerabilities scan.4目 录第一章 引言 .11.1 研究背景 11.2 漏洞扫描技术的现状 .11.3 本文的内容及安排 2第二章 相关理论及技术概述 42.1 相关理论介绍 .42.1.1 漏洞概念 .42.1.2 漏洞成因 .72.1.3 常见漏洞类型 82.2 相关技术介绍 .82.2.1 Winsock 与原始套接字 82.2.2 操作系统嗅探技术 .102.2.3 ICMP 扫
10、描技术 112.2.4 TCP 扫描技术 .132.3 开发环境简介 172.4 本章小结 .17第三章 系统分析与设计 .183.1 整体设计 183.1.1 设计目标 183.1.2 系统结构 183.1.3 数据库设计 .203.2 功能模块设计 213.2.1 存活主机检测 .213.2.2 操作系统嗅探 .223.2.3 端口扫描 .233.2.4 漏洞扫描 .243.3 本章小结 .25第四章 系统的实现 .264.1 存活主机检测模块的实现 .264.2 操作系统嗅探模块实现 274.3 端口扫描模块实现 .294.4 漏洞扫描模块实现 .304.5 本章小结 .34第五章 系统
11、演示 355.1 演示环境 355.2 演示结果 355.2.1 主机检测 .3655.2.2 操作系统嗅探 365.2.3 端口探测 .365.2.4 漏洞扫描 .385.3 本章小结 38第六章 总结与展望 .396.1 总结 396.2 展望 39参考文献 .41致谢 .426ContentChapter 1 Intrudoction .11.1 Background .11.2 Status of Current Vulnerabilities Techniques 11.3 Content and Structure of This Paper 2Chapter 2 Related
12、Conceptions and Technologies.42.1 Introduction of Related Conceptions.42.1.1 Concept of Vulnerability .42.1.2 Course of Vulnerability .72.1.3 Common Vulnerabilities .82.2 Related Technologies 82.2.1 Winsock and Raw Socket82.2.2 Operation System Detection102.2.3 ICMP Scan Technology.112.2.4 TCP Scan
13、Technology .132.3 Development Environment .172.4 Chapter Summary.17Chapter 3 System Analysis and Design.183.1 General Design .183.1.1 Goal of Design.183.1.2 System Structure183.1.3 Database Design 203.2 Functional Module Design 213.2.1 Living Hosts Detection213.2.2 Operation System Detection223.2.3
14、Ports Scan 233.2.4 Vulnerabilities Scan.243.3 Chapter Summary.25Chapter 4 System Realizations.264.1 Realization of Host Detection.264.2 Realization of Operation System Detection .274.3 Realization of Port Scan 294.4 Realization of Vulnerabilities Scan 304.5 Chapter Summary.34Chapter 5 System Demonst
15、rations.355.1 Demonstration Environment355.2 Demonstration Result.3575.2.1 Host Detection .365.2.2 Operation System Detection365.2.3 Ports Scan 365.2.4 Vulnerabilities Scan.385.3 Chapter Summary.38Chapter 6 Conclusions and Further Works.396.1 Summary 396.2 Future Works39References .41Acknowledgement
16、s 42第一章 引言1第一章 引言1.1 研究背景现代社会中,计算机网络已经成为人们生活中不可缺少的组成部分,但是网络技术在给我们带来方便的同时也带来了巨大的安全隐患。特别是近些年来,计算机网络犯罪日益猖獗,从上世纪的蠕虫、CHI 到最近几年的灰鸽子、熊猫烧香以及最近出来的鬼影,安全问题给人们带来一次又一次沉重的教训。据美国联邦调查局调查显示,全美大约有 280 万个公司和组织都至少遇到过一次计算机安全问题,平均每一家遭受到了 2.4 万美元的损失,如此,一年内的损失总额可能会达到 672 亿美元。 1我们网络环境之所以不安全,是因为它存在着漏洞,每一个网络系统都有已被发掘的或潜在的尚未被发掘
17、的各种安全漏洞,漏洞是无法避免的,不存在绝对安全的网络系统。对于安全漏洞引起的问题,采用事先检测系统的脆弱点防患于未然,是减少损失的有效办法。通常黑客进行攻击前,会首先收集目标网络系统的信息,确定目标网络的状态,如操作系统版本类型、开放端口、运行服务等,然后再实施具有针对性的攻击。对目标网络系统信息的获取,主要是通过漏洞扫描完成的。我们可以通过同样的方式来评估网络的安全性能。漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用漏洞扫描器,系统管理员能够发现所维护的服务器的各种 TCP 端口的分配、提供的服务、Web 服务软件版本和这些服务及软件呈现在 Internet 上的安全漏洞
18、。从而在计算机网络系统安全防护中做到有的放矢,及时修补漏洞,构筑安全的网络体系。 2漏洞扫描是一把双刃剑,它作为网络安全评测的重要工具,可以帮助系统管理员评估主机和网络的安全性能,发现网络中潜在的安全漏洞,提高网络的抗攻击能力;但是也可能被网络入侵者所利用,作为收集网络主机信息的重要手段。 21.2 漏洞扫描技术的现状目前,在网络安全领域,安全扫描技术、入侵检测技术、防火墙技术和病基于网络的漏洞扫描系统2毒检测技术构成网络安全 4 种主要技术。后 3 种技术都是在攻击进行中或者进行后的被动检侧,而安全扫描技术则是在攻击进行前的主动检测。 3安全扫描通常采用两种策略,第一种是被动式策略,第二种是
19、主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以及其他同安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。利用被动式策略扫描称为系统安全扫描,利用主动式策略扫描称为网络安全扫描。 目前安全漏洞扫描主要使用的检测方案 4:(1)基于应用的检测技术它采用被动的、非破坏性的办法检查应用软件包的设置,发现安全漏洞。(2)基于主机的检测技术它采用被动的、非破坏性的办法对系统进行检测。通常,它涉及到系统的内核,文件的属性,操作系统的补丁等问题。这种技术还包括口令解密,把一些简单的口令剔除。
20、因此,这种技术可以非常准确地定位系统的问题,发现系统的漏洞。它的缺点是与平台相关,升级复杂。(3)基于目标的漏洞检测技术它采用被动的、非破坏性的办法检查系统属性和文件属性,如数据库,注册号等。通过消息文摘算法,对文件的加密数进行检验。这种技术的实现是运行在一个闭环上,不断地处理文件,系统目标,系统目标属性,然后产生检验数,把这些检验数同原来的检验数相比较。一旦发现改变就通知管理员。(4)基于网络的检测技术它采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和
21、安全审记。这种技术可以发现一系列平台的漏洞,也容易安装。但是,它可能会影响网络的性能。1.3 本文的内容及安排本文详细介绍了安全漏洞的基本知识,漏洞扫描的核心技术与方法,如存第一章 引言3活主机检测、基于协议栈指纹识别技术的操作系统嗅探,端口扫描及一些常见漏洞的扫描。在此基础上设计并实现了一个简单的漏洞扫描系统。全文共六章,章节安排如下:第一章:引言。介绍课题背景,漏洞扫描技术的现状以及本文的研究内容和组织结构。第二章:相关理论及技术概述。介绍了安全漏洞的概念、成因及一些常见漏洞分析。阐述了 Winsock 与原始数据包、存活主机检测、操作系统嗅探、ICPM 扫描、TCP 扫描等相关技术。另外
22、还介绍了本系统的开发环境。第三章:系统分析与设计。阐述系统的整体结构,工作原理、各模块的设计及模块之间的联系,数据库的设计等。第四章:系统的实现。根据第三章的设计,将本系统各个功能模块的实现作了详细的介绍。第五章:系统演示。简单演示了各个模块的功能。第六章:总结与展望。总结了本文的工作与本系统的特点,并提出了一些改进措施。基于网络的漏洞扫描系统4第二章 相关理论及技术概述这一章将介绍相关理论及技术,包括漏洞的概念、成因及常见漏洞的分析,Winsock 与原属数据包的相关知识,基于协议栈指纹识别技术的操作系统嗅探原理和 TCP、 ICMP 扫描等技术。最后简要介绍了一下系统的开发环境。2.1 相
23、关理论介绍2.1.1 漏洞概念漏洞(Vulnerability):也称脆弱性,是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。 5具体举例来说,比如在 Intel Pentium 芯片中存在的逻辑错误,在 Send mail早期版本中的编程错误,在 NFS 协议中认证方式上的弱点,在 Unix 系统管理员设置匿名 Ftp 服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。因而这些都可以认为是系统中存在的安全漏洞。 6系统安全漏洞是在系统具体实现和具体使用中产生的错误,但并不是系统中存在的错误都是安全漏洞。只有能威胁到系统安全
24、的错误才是漏洞。许多错误在通常情况下并不会对系统安全造成危害,只有被人在某些条件下故意使用时才会影响系统安全。漏洞会影响到很大范围的软硬件设备,包括作系统本身及其支撑软件,网络客户和服务器软件,网络路由器和安全防火墙等。换而言之,在这些不同的软硬件设备中都可能存在不同的安全漏洞问题。在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。 6漏洞问题是与时间紧密相关的。一个系统从发布的那一天起,随着用户的深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的漏洞也会不断被系统供应商发布的补丁软件修补,
25、或在以后发布的新版系统中得以纠正。而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞和错误。因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现。漏洞问题第二章 相关理论及技术概述5也会长期存在。因而脱离具体的时间和具体的系统环境来讨论漏洞问题是毫无意义的。只能针对目标系统的作系统版本、其上运行的软件版本以及服务运行设置等实际环境来具体谈论其中可能存在的漏洞及其可行的解决办法。2.1.2 漏洞成因网络的安全符合木桶原理,入侵者只要找到复杂计算机网络中的一个缝隙,就能轻而易举地闯入系统。所以,了解这些缝隙可能存在的地方以及产生的原因,对检测及修补他们起着至关重要的意义。通常产生
26、这些缺陷的方面主要表现在系统设计、口令设置、数据未加密、软件 bug 等。 6 设计上的缺陷: TCP/IP 协议在设计之初首先考虑的是网络互连而不是网络安全,它是假定工作在可信环境下的,而且由于 TCP/IP 协议是完全公开的,入侵者可以随意地伪造或修改数据包而不被发现,从而达到一些不正当的目的。这使得我们的网络环境变得很不安全、很不可靠。 口令设置过于简单:(1)口令被猜测:很多人经常使用自己的电话号码,生日等作为登陆口令,有的人甚至采用像“abc” 、 “111111”、 “123456”等简单的字符串。这些口令过于简单,很容易被入侵者猜测并加以利用。(2)字典攻击:入侵者使用一个程序,
27、该程序借助一个包含用户名和口令的字典数据库,不断地尝试登录系统,直到成功进入。毋庸置疑,这种方式的关键在于有一个好的字典。(3)暴力破解:与字典攻击类似,不同的是暴力破解会把所有的字符串组合都试一遍。例如包含 6 个数字的口令有一百万种组合,1 个包含大小写且标点符号的 7 字符口令大约有 10 万亿种组合。对于后者,一般的计算机要花费大约几个月的时间才能试验一遍。可见,长口令是保证系统安全的有效措施。 数据未加密: 抓包程序轻而易举的就能够抓到所有经过该节点的数据流,若我们的数据未加密,那么它就会完全暴露在入侵者面前,系统就毫无安全性可言。(1) 共享介质:传统的以太网结构很便于入侵者在网络
28、上放置一个嗅探器就可以查看该网段上的通讯数据,但是如果采用交换型以太网结构,嗅探行基于网络的漏洞扫描系统6为将变得非常困难。(2) 服务器嗅探:交换型网络也有一个明显的不足,入侵者可以在服务器上特别是充当路由功能的服务器上安装一个嗅探器软件,然后就可以通过它收集到的信息闯进客户端机器以及新任的机器。例如,虽然不知道用户的口令,但当用户使用 Telnet 软件登录时就可以嗅探到他输入的口令了。(3) 远程嗅探:许多设备都具有 RMON(Remote monitor,远程监控)功能以便管理者使用公共体字符串(public community strings)进行远程调试。随着宽带的不断普及,入侵者
29、对这个后门越来越感兴趣了。 编写软件存在 bug: 无论是服务器程序、客户端软件还是操作系统,只要是用代码编写的东西,都会存在不同程度的 bug,常见的主要有以下几类:(1) 缓冲区溢出:指入侵者在程序的有关输入项目中了输入了超过规定长度的字符串,超过的部分通常就是入侵者想要执行的攻击代码,而程序编写者又没有进行输入长度的检查,最终导致多出的攻击代码占据了输入缓冲区后的内存而执行。(2) 意料外的联合使用问题:一个程序经常由功能不同的多层代码组成,甚至会涉及到最底层的操作系统级别。入侵者通常会利用这个特点为不同的层输入不同的内容,以达到窃取信息的目的。例如:对于由 Perl 编写的程序,入侵者
30、可以在程序的输入项目中输入类似“mail/etc/password”的字符串,从而使 Perl 让操作系统调用邮件程序,并发送出重要的密码文件给入侵者。(3) 不对输入内容进行预期检查:有些编程人员怕麻烦,对输入内容不进行预期的匹配检查,使入侵者输送炸弹的工作轻松简单。(4) Race conditions:多任务多线程的程序越来越多,在提高运行效率的同时,也要注意 Race conditions 的问题。比如说:程序 A 和程序 B 都按照“读/改/写”的顺序操作一个文件,当 A 进行完读和改的工作时, B 启动立即执行完“读/改/写”的全部工作,这时 A 继续执行写工作,结果是 A的操作没
31、有了表现!入侵者就可能利用这个处理顺序上的漏洞改写某些重要文件从而达到闯入系统的目的。第二章 相关理论及技术概述72.1.3 常见漏洞类型漏洞的种类很多,据 CVE(通用漏洞披露)的统计资料现在已经有几千种,其中以 CGI 漏洞最多,而 SMTP 漏洞以及缓冲区溢出漏洞的出现频率最高,以下针对几种比较常见的漏洞加以介绍。 CGI 漏洞: CGI (Common Gateway Interface) 即公共网关接口,它是一种与Web 服务器通信的标准接口。 CGI 主要有两项功能:1.用于收集从浏览器发送给 Web 服务器的信息 ,并使这些信息能供其他程序使用; 2.对提出请求的浏览器回送服务器
32、处理的结果。 7由于 CGI 程序开发者的疏忽,许多 CGI 程序存在各种危险程度的漏洞。例如有的 CGI 程序允许远程攻击者在 WEB 服务器上执行任意的命令,可能对服务器造成破坏;有些 CGI 程序本身、或者被其调用的函数缺乏对用户输入数据的合法性检查,未能滤除一些特殊字符,使得入侵者可以通过构造请求来达到入侵的目的。比如,缺乏对“ ”的过滤,可能导致入侵者读取系统的任意文件;有些 CGI 程序会向客户端浏览器返回某些敏感信息,比如脚本所在路径、HTTP 根目录所在路径、Perl 版本、server_admin、server_name、PATH 环境变量等,这些都为黑客的攻击提供了便利。
33、7目前,大多数网站都使用免费的公共 CGI 脚本程序去驱动各自的 Web服务,从而导致有缺陷的 CGI 脚本在 Internet 上泛滥开来。因此,对 CGI 脚本的安全性应高度重视。 SMTP 漏洞: SMTP( Simple Mail Transfer Protocol)是简单邮件传输协议的简称。SMTP 协议出于 TCP/IP 协议的应用层包,但事实上它与传输系统和机制无关,仅要求一个可靠的数据流通道。尽管 SMTP 服务已经在 RFC 中被详细的定义,但在具体实现中各个软件开发商并没有很好的遵循 RFC 的规定,因此我们可以通过实现上的细小差异来进行探测活动。通过发送特定的、非标准的数
34、据包来获得指纹信息,可以进而判断出目标主机使用的软件版本信息。 FTP 漏洞: FTP 是 File Transfer Protocol(文件传输协议)的英文简称,用于 Internet 上的控制文件的双向传输。用户可以通过它把自己的 PC 机与世基于网络的漏洞扫描系统8界各地所有运行 FTP 协议的服务器相连,访问服务器上的大量程序和信息。FTP 服务也存在多种漏洞,包括拒绝服务攻击漏洞、缓冲区溢出漏洞等等,以 FTP 弱口令为例,因为 ftp 服务器上可能存在匿名用户或者弱势密码用户,所以黑客常利用该缺陷进行攻击。例如发现 ftp 匿名用户后,可以再借助系统的其他漏洞通过匿名用户提升权限。
35、开放匿名用户经常会给系统带来一些安全隐患。 DOS 漏洞: DOS 是 Denial of Service 的简称,即拒绝服务。任何对服务的干涉如果使得其可用性降低或者失去可用性均成为拒绝服务。如果一个计算机系统崩溃或其带宽耗尽或其硬盘被填满,导致其不能提供正常的服务,就构成拒绝服务。造成 DOS 的攻击行为被称为 DOS 攻击,其目的是使计算机或网络无法提供正常的服务。最常见的 DOS 攻击有计算机网络带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求就无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都
36、被消耗殆尽,最终计算机无法再处理合法用户的请求。 Finger 漏洞: Finger 是 UNIX 系统中用于查询用户情况的实用程序。UNIX 系统保存了每个用户的详细资料,包括 E-mail 地址、账号,在现实生活中的真实姓名、登录时间、有没有未阅读的信件,最后一次阅读 E-mail 的时间以及外出时的留言等资料。当用 Finger 命令查询时,系统会将上述资料一一显示在终端计算机上。使用 Finger 可以查询 Internet 主机内任意用户的某些公开信息,因此,它为黑客提供了大量有用的信息:如用户名列表、用户登录信息和一些能够用来猜测密码的信息等。特别要指出的是,79 端口是专为 Fi
37、nger 服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息 第二章 相关理论及技术概述92.2 相关技术介绍2.2.1 Winsock 与原始套接字Windows Sockets 简称 WinSock,是 Windows 下的网络编程规范,为应用程序提供了开放的、支持多种协议的网络编程接口。它定义了如何通过 API 实现与 internet 协议族的连接。应用程序通过调用 Windows Sockets 的 API 实现相互之间的通信,而实际的工作是通过下层的网络通信协议和操作系统实现的。在七层网络协议中,WinSock 主要控制数据的输入和输出,也就是
38、传输层和网络层,屏蔽了数据链路层和物理层。Winsock API 函数有 1.1 版本和 2.0 版本。经过不断完善并在 Intel、Microsoft、Sun 、SGI、Informix、Novell 等公司的全力支持下,已成为 Windows 网络编程的事实上的标准。 8Winsock 2.0 为上层应用程序提供的一种标准网络接口,而不是协议,所以它可以用于发现和使用任意数量的底层传输协议所提供的通信能力。上层应用程序不用关心 Winsock 实现的细节,它为上层应用程序提供透明的服务最开始的 Winsock 是围绕着 TCP/IP 协议运行的,但是在 Winsock 2. 0 中却增加了
39、对更多传输协议的支持.Winsock2.0 不仅提供了一个供应用程序访问网络服务的Window socket 应用程序编程接口(API :Application Programming Interface),还包含了由传输服务提供者和名字解析服务提供者实现的 Winsock 服务提供者接口(SPI:Service Provider Interface)和 ws2_ 32. d11。Winsock 2. 0 引人的这个新功能(SPI 技术)打破了服务提供者的透明,让开发者可以编写自己的服务提供程序,SPI 以动态链接库(DLL)的形式存在,它工作在应用层,为上层 API 调用提供接口函数。在网络
40、安全扫描中要构造各种不同的数据报,如 TCP 数据包,UDP 数据包及 ICMP 数据包,可以利用 Winsock 的原始套接字来实现。并且在分析返回数据时要捕获网络数据包,此时也可以使用 Winsock 的原始套接字。原始套接字能够根据需要生成用户想要的数据报文,包括报头和数据报本身的内容,而且能够对网络底层的传输制进行控制。对于一般的流套接字或数据报套接字,开发人员只能处理封装在 TCP 或 UDP 协议中的数据。而原始套接字则提供了一种直接访问底层 IP 协议的方法。它主要提供了以下几种 TCP及 UDP 套接字所不能提供的功能: 8基于网络的漏洞扫描系统10(1) 使用原始套接字可以读
41、写包含在 IP 包中的其它协议数据报,如ICMP、IGMP 、OSPF 等。(2)利用原始套接字,使用 IP_HDRINCL 套接字选项可以构造 IP 包头部。(3)利用原始套接字,使用 I/O 控制命令 SIO_RCVALL 可以捕获网上所有的IP在构造数据包的时候,要按照协议规定封装数据,入栈的封装过程如图 2-1所示。图2-1:数据进入协议栈时的封装过程要注意的是由于 TCP、UDP、ICMP、和 IGMP 都要向 IP 传送数据,因此IP 必须在生成的 IP 首部中加入某种标示,以表明数据属于哪一层。为此,IP在首部存入一个长度为 8bit 的数值,称作协议域。1 表示 ICMP 协议
42、,2 表示IGMP 协议, 6 表示 TCP 协议,17 表示 UDP 协议。 92.2.2 操作系统嗅探技术在网络信息安全系统,尤其是安全评估系统中,信息的收集和分析至关重要,对操作系统进行踩点,识别目标操作系统则是其中不可获取的一个组成部分。因为各种各样的漏洞依附于不同的操作系统之上,只有精确地识别出目标主机操作系统的类型,才能更有目的性地发掘漏洞和弱点所在,准确地对目标主机进行评估。第二章 相关理论及技术概述11当前流行的主动操作系统探测方法主要分为 TCP/IP 栈指纹识别和 ICMP 栈指纹识别。在 TCP/IP 栈指纹识别中,通过设置 IP 头部和 TCP 头部标志位的不同值,观察
43、回复报文标志位的设置等诸多情况,分析操作系统类型;ICMP 栈指纹识别探测主要通过发送 ICMP Echo Request、Timestamp Request 和Information Request 等报文进行探测,通过分折回复报文的 IP 头、ICMP 头部的相关标志位的设置情况来区分操作系统类型。以下举例说明不同系统对 ICMP 响应的差别 8。 IP 总长度: 一些系统会正常响应该域的值,而某些操作系统(如 BSD 家族系列) 会在原始 IP 总长度域上增加 20 字节(sizeof(ipheader),这是因为其内部错误处理数据包的结果。(注意: 同样的数据包如果从 SOCK_RAW
44、 读取的话,返回的数据包 ip_len 字段将会减掉 20 字节 ). IP/UPD 头校验和: 一些操作系统会错误计算这个域,某些系统会填充 0值,而有些系统能正确响应这个值。 DF 位响应: 些 TCP/IP 堆栈会在 ICMP 错误数据包中响应 DF 位,其他的(如 Linux)会拷贝全部八位位组,并部分位清零,再有的是会忽略这个位而设置其自身相关的值。 IP ID 字段: 基于 Linux 2.4.0 - 2.4.4 内核的 Linux 机器会在 ICMP 查询请求和应答信息中设置 IP 标识为零值。而在 Linux2.4.5 和以上版本中得到改正。 ICMP 回显请求 code 字段
45、: ICMP 回显请求信息(类型 8)中 ICMP 代码段的值不等于 0 时,操作系统会使用 ICMP 回显应答对发送方的查询进行回答,基于 Microsoft 的操作系统会发回在 ICMP 回显应答中 ICMP 代码类型设置为 0 的数据包,而其他操作系统和网络设备则会使用 ICMP 回显请求中相同的 ICMP 代码段值。以上列举了几种不同系统对发送方区别响应的情况。当我们收集到足够的信息之后,就可以判断出目标主机所使用的操作系统。信息越详细,探测的结果就越准确,能够辨别的操作系统也就越多。2.2.3 ICMP 扫描技术ICMP 是(Internet Control Message Prot
46、ocol)Internet 控制报文协议。它是基于网络的漏洞扫描系统12TCP/IP 协议族的子协议,用于在 IP 主机、路由器之间传递控制消息。一般来说,ICMP 报文提供针对网络层的错误诊断、拥塞控制、路径控制和查询服务四项功能。例如,当一个分组无法到达目的站点或 TTL 超时后,路由器就会丢弃此分组,并向源站点返回一个目的不可达的 ICMP 报文。 11ICMP 报文大体上可以分为两种类型,即:ICMP 差错报文和 ICMP 查询报文。常用的 ICMP 报文有 ICMP 回显请求、ICMP 地址掩码请求、ICMP 时间戳请求和 ICMP 端口不可达报文。格式如图 2-1 所示。图2-2
47、:ICMP协议报文格式ICMP 回显请求/应答报文是一种双向信息查询报文,用于获取某些有用信息,以便进行网路故障诊断和网络控制。常用的 ping 程序就是基于 ICMP 回显请求实现的。ICMP 地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码,系统将广播它的 ICMP 请求报文。ICMP 端口不可达报文是 ICMP 目的不可达报文中的一种,可以从 ICMP 差错报文中所附加的数据中查看错误信息。ICMP 时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是第二章 相关理论及技术概述13自午夜开始计算的毫秒数,是协调的统一时间(Coordinated Universal Time
48、, UTC) ,它是世界各地通用标准时间,也叫世界时。这种 ICMP 报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级的分辨率。最常用的 ICMP 扫描方法就是利用 PING 的原理,发送 ICMP 回显请求报文,然后监听是否有 ICMP 回显应答报文返回,如果没有就证明目标主机不存在或者已经停机,如果能够返回 ICMP 回显应答报文,就证明主机正在运行 6。其过程如图 2-3 所示。图2-3 :ICMP回显请求2.2.4 TCP 扫描技术利用 TCP 协议来进行端口扫描是常见的扫描方法,因为现在的很多网络应用程序都是基于 TCP 协议来实现的,例如 Web
49、服务器就是基于 TCP 的 80 号端口 6。 TCP 是一个面向连接的协议,格式如图 2-4 所示:基于网络的漏洞扫描系统14图2-4:TCP协议格式端口号对应服务类型,也是 TCP 通信与应用程序的接口,每个 TCP 通信程序都有一个 TCP 端口,或者是临时的端口或者是固定的端口。一个四元组(客户机 IP,客户端口,服务器 IP,服务器端口)对应一个完整的 TCP 连接。TCP协议提供完全可靠的、面向连接的、全双工的、流传输服务。它与 IP 协议同时使用,保证了网络上不同主机在通信时数据传输的可靠、高效。TCP 的可靠传输是通过三次握手过程实现的。TCP 中有六个标志位,其中 URG 表示紧急指针,ACK 表示确认号,RSH 置 1 时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。RST 置 1 时重建连接,如果接收到 RST 位,通常表明发生了某些错误。SYN 置 1 时用来发起一个连接。FIN 置 1 时表示发送端完成发送任务,用来释放连接,表明发送方已经没有数据发送了。TCP 正常连接也称为三次握手过程,在这个过程中的第一个报文的代码类型设置为 SYN,序列号为 m,表示开始一次握手。接收方接收后,向发送者发回一个报