《网络漏洞扫描器》由会员分享,可在线阅读,更多相关《网络漏洞扫描器(20页珍藏版)》请在金锄头文库上搜索。
1、目录简介2二设计目的2三设计原理1 网络漏洞扫描器的设计2 网络漏洞扫描器的扫描原理和工作原理三设计过程31 网络漏洞扫描器的实现2 端口扫描子模块的实现3 扫描模块的流程4 漏洞库的建立5 漏洞库的实现四设计代码7五设计实现15六设计任务分配15七设计总结16八参考文献 16.简介网络漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序, 通过使用扫描器可以丝毫不留痕迹的发现远程服务器的各种 TCP 端口的 分配及提供的服务。这就能让我们间接的或直观的了解到远程主机所存在 的安全问题。这是最基本的TCP扫描。用系统提供的connect()方法探测, 用来与每一个感兴趣的目标计算机的端口进行
2、连接。如果端口处于侦听状 态,那么connect()就能成功。否则,这个端口是不能用的,即没有提供服 务。这个技术的一个最大的优点是,你不需要任何权限。系统中的任何用 户都有权利使用这个调用。另一个好处就是速度。如果对每个目标端口以 线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,可 以通过动态数组动态调节,从而加速扫描。二. 设计目的随着互连网的日趋普及,在互连网上的犯罪活动也越来越多,特别是 Internet 大范围的开放以及金融领域网络的接入,使得越来越多的系统遭 到入侵攻击的威胁。但是,不管入侵者是从外部还是从内部攻击某一网络 系统,攻击机会都是通过挖掘操作系统
3、和应用服务程序的弱点或者缺陷来 实现的。目前,对付破坏系统企图的理想方法是建立一个完全安全的没有 漏洞的系统。但从实际上看,这根本是不可能的。因此,一个实用的方法 是,建立比较容易实现的安全系统,同时按照一定的安全策略建立相应的 安全辅助系统,漏洞扫描器就是这样一类系统。就目前系统的安全状况而 言,系统中存在着一定的漏洞,也就存在着潜在的安全威胁,但是,如果 我们能够根据具体的应用环境,尽可能地早地通过网络扫描来发现这些漏 洞,并及时采取适当的处理措施进行修补,就可以有效地阻止入侵事件的 发生。所以,网络扫描非常重要和必要。三. 设计内容1网络漏洞扫描器的设计网络扫描器的总体结构我们设计的漏洞
4、扫描器基于浏览器/服务器(B/S)结构,整个扫描器实 现于一个Linux、UNIX和Windows操作系统相混合的TCP/IP网络环境中, 其总体结构如图1所示,其中运行Linux的工作站作为发起扫描的主机(称 为扫描主机),在其上运行扫描模块和控制平台,并建有漏洞库。扫描模 块直接从扫描主机上通过网络以其他机器为对象(称为目标主机,其上运 行的操作系统可以是UNIX、Linux、Windows)进行扫描。而控制平台则 提供一个人机交互的界面。2 网络漏洞扫描器的扫描原理和工作原理 网络漏洞扫描器通过远程检测目标主机 TCP/IP 不同端口的服务,记 录目标给予的回答。通过这种方法,可以搜集到
5、很多目标主机的各种信息。 在获得目标主机 TCP/IP 端口和其对应的网络访问服务的相关信息后,与 网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏 洞存在。此外,通过模拟黑客的进攻手法,对目标主机系统进行攻击性的 安全漏洞扫描,如测试弱势口令等,也是扫描模块的实现方法之一。如果 模拟攻击成功,则视为漏洞存在。在匹配原理上,该网络漏洞扫描器采用的是基于规则的匹配技术,即 根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员关 于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后再在 此基础之上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工 作。四. 设
6、计过程1网络漏洞扫描器的实现整个网络漏洞扫描器的核心部分是扫描模块,它是由很多子模块组成 的,其结构如图2 所示。在设计时加入该模块的目的是在调用扫描主模块之前探测主机是否 在线,以避免不必要的空扫描。该模块的实现原理和常用的 ping 命令相 似,方法是向目标主机发送 ICMP 回显报文请求,根据返回值来分析判断 主机是否在线。所有安装了 TCP/IP 协议的在线网络主机,都会对这样的 ICMP回显报文请求给与答复。虽然现在有些主机装了个人防火墙,可以屏 蔽掉这样的 ICMP 回显报文请求,但是我们这个扫描系统的对象是提供网 络服务的网络主机,而这样的主机是不应该屏蔽掉ICMP回显报文请求的
7、, 因为这样会让一些用户误认为该主机不在线,从而丧失了作为网络服务器 的意义。为了降低网络拥塞导致丢包的可能性,在实现中重复四次向目标 主机发送ICMP回显请求包。该模块不只探测主机是否在线,而且能根据ICMP回显应答报文的TTL (TTL是位于IP首部中的生存时间字段)值来粗略分辨出目标主机操作系 统,为下一步的扫描提供依据,特别是在扫描模块的调用和漏洞库的选择 上。该模块在实现中和其他模块不同的一个最大特点是:其他扫描模块是 针对应用层的,用一般的套接字即能完成网络连接;而该模块是针对于网 络层的,使用一种叫原始套接字的技术来实现。原始套接字(raw socket) 提供了一些使用TCP和
8、UDP套接字不能实现的功能:可以访问ICMP和IGMP 等协议的数据包,可以读写内核不处理的 IP 数据包,可以创建自定义的 IP数据首部。使用原始套接字可以编写基于IP协议的高层网络协议。 2端口扫描子模块的实现当基本信息探测子模块得知目标主机在线时,端口扫描子模块即被调 用。该模块将根据传来的参数相应的扫描TCP的11024或者165535端 口。扫描方式是利用TCP的完全连接方式,即利用TCP connect扫描技术 来设计扫描模块,这是最基本的TCP扫描。通常通过调用套接口函数 connec t()连接到目标计算机上,完成一次完整的三次握手过程。如果端 口处于侦听状态,那么connec
9、t()就能成功返回。否则,这个端口不可用, 即没有提供服务。这个技术的一个最大的优点是不需要任何权限。系统中 的任何用户都有权利使用这个调用。另外的一个优点就是比其他扫描方式 (如 SYN 扫描和 FIN 扫描等等)更稳定可靠。但这种方法的一个缺陷是: 扫描方式不隐蔽。通常作为一个扫描器软件的应用,TCP的connect会重 复且大量地被集中使用,在被扫描的一端则会很容易发现这种扫描行为, 目标计算机的 log 文件会显示一连串的连接和连接是否出错的服务消息, 并且能很快地使它关闭;而且大多数防火墙也能屏蔽这种扫描,随着防火 墙技术的快速发展,其他的一些曾经被认为是很隐蔽的扫描方式也可能被 防
10、火墙发现并屏蔽掉。所以相对而言,TCP connect扫描方式的这个缺陷 已经被淡化了。而且,我们开发的扫描系统是从系统管理员的角度出发, 因此上述的问题都是不存在的,除非他/她非法扫描他人网站主机。FT卩 弟谒掘碍缺卿関息驟谢孑膜地0E忑密塢IP暑址、眾圧克舞扫臓卑迟说枫欤g(s?近荷黯 渥列 弓欖 坟!费陋irA?a?a翻阵扌彌他魁曲斬倔晶商何 刖良曲口诳子鹹曲、靈妙CP3HU*后FP滞S扫J219曲扫扫块T子子子块慣卫诰再站图 2 扫描模块的结构而我们在设计实现该漏洞扫描系统时则从另一个角度出发,保证在达 到同等目的的前提下,尽量少占用网络、主机以及时间资源,提高资源的 利用率和扫描系统
11、的效率。基本思想是:避免不必要的模块调用,根据不 同的实际情况来调用相应的扫描子模块。3扫描模块的流程扫描模块在工作时,首先进行初始化,在初始化阶段,主要是读取所 需的参数。比如从基本信息探测子模块得到操作系统类型,由此来决定在 扫描中需要使用的漏洞库;还有一些用户自己配置的参数。除了读取参数 外,还要建立一些文件以供以后使用。初始化后,建立非阻塞 socket 并连接,然后根据得到的相关端口及 对应的服务,来调用相应的漏洞扫描子模块(包括 CGI 漏洞扫描子模块、 POP漏洞扫描子模块、FTP漏洞扫描子模块、SSH漏洞扫描子模块、HTTP 漏洞扫描子模块、SMTP漏洞扫描子模块和IMAP漏洞
12、扫描子模块以及三种 类型的入侵扫描子模块),当所有的端口都已经扫描完以后,调用后门扫 描子模块和其他漏洞扫描子模块。由于这两个扫描子模块并不是针对某一 个端口或网络服务的,所以没有像其他的漏洞扫描子模块一样在端口扫描 过程中被调用。但有一点是和其他子模块是一致的,即这两个子模块的调 用形式也是通过创建子进程来完成的。4 漏洞库的建立一个网络漏洞扫描系统的灵魂就是它所使用的系统漏洞库,漏洞库信 息的完整性和有效性决定了扫描系统的功能,漏洞库的编制方式决定了匹 配原则,以及漏洞库的修订、更新的性能,同时影响扫描系统的运行时间。 5 漏洞库的实现通过大量的多方收集,主要是对 www.cert.org
13、、 及中国绿色联盟等反黑权威网站漏洞信息进行分类 整理,我们对存在漏洞的主要的网络服务逐一建立了三级漏洞描述文件, 作为各个漏洞扫描子模块的访问库体。在每个漏洞库文件中,每条漏洞信息占一行,行首用!标示漏洞级 别,叹号的个数代表漏洞危险级别。A级危害以!标示,B级以! 标示, C 级以!标示。接下来是漏洞的特征字符串,当特征字符串不止 一个时,用一个不容易引起混淆的()字符加以隔离。漏洞形成的原因形形色色、不一而足,在我们设计开发的漏洞库中, 主要包含以下类型的漏洞:CGI脚本漏洞、POP3漏洞、FTP漏洞、SSH漏 洞、HTTP漏洞、SMTP漏洞、IMAP漏洞、后门漏洞、RPC漏洞、DNS漏
14、洞等。 下面我们将以CGI脚本漏洞和SMTP漏洞为例来简单说明漏洞库的编制。(1)CGI 脚本漏洞CGI脚本是实现Web交互功能的重要手段。Shell脚本、Perl程序和 C 可执行程序是 CGI 脚本最常采用的形式。由于程序编写上的疏忽,很多 CGI 脚本都存在漏洞,根据我们所收集的漏洞信息, CGI 漏洞的危害主要 有三种:缓冲区溢出攻击这种攻击实质是不遵守规则、歪曲或违反页面中建立的某个限制或约 束。大部分 CGI 脚本是作为 HTML 表单的后台运行的,负责处理由用户输 入的信息并提供某种定制的输出。因为在这种情况下,大部分CGI脚本编 写时都等待某种特定格式的数据。然而,黑客可以有许
15、多方法绕过这些预 定义的格式而给脚本发送一些看起来是随机的数据。此时,由于 CGI 脚本 可能在对输入数据的有效性的判定上存在不足,缺少全面的输入验证和净 化,导致攻击者能够将特殊的字符和本地系统命令结合起来,作为参数输 入,从而使得Web服务器执行该命令。(2)SMTP 漏洞SMTP (Simple Mail Transfer Protocol,简单邮件传输协议)是用 来发送邮件的协议,其服务守护程序是 Sendmail。 Sendmail 因为大而复 杂,配置又十分麻烦,所以一度曾是 Unix 上的漏洞最多的程序,著名的 蠕虫病毒就是利用Sendmail旧版本上的一个DEBUG命令的漏洞而从一个 系统传播到另一个系统的。又如:利用ETRN命令可使Sendmail停止响应 (即拒绝服务)。当Sendmail接收到ETRN命令时,它将调用fork()。此 时子进程将代替父进程发送响应