网络漏洞扫描器的设计与实现

网络漏洞扫描器的设计与实现,第一部分

李志强 ( lizq_99@163.com)

XML error: Please enter a value for the author element's jobtitle attribute, or the company-name element, or both.


简介: 漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用漏洞扫描器,系统管理员能够发现所维护的Web服务器的各种TCP端口的分配、提供的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。从而在计算机网络系统安全保卫战中做到“有的放矢”,及时修补漏洞,构筑坚固的安全长城。

发布日期: 2002 年 11 月 01 日
级别: 初级
访问情况 : 1380 次浏览
评论: 0 (查看 | 添加评论 - 登录)

平均分 2 星 共 3 个评分 平均分 (3个评分)
为本文评分

引言

随着科学技术的飞速发展,21世纪的地球人已经生活在信息时代。20世纪人类两大科学技术成果--计算机技术和网络技术,均已深入到人类社会的各个领域,Internet把"地球村"的居民紧密联系在一起,"天涯若比邻"已然成为现实。互联网之所以能这样迅速蔓延,被世人接受,是因为它具备特有的信息资源。无论对商人、学者,还是对社会生活中的普通老百姓,只要你进入网络的世界,就能找到其隐藏的奥妙,就能得到你所需要的价值,而这其中种种的人类社会活动,它们的影响又是相互的。近年来Internet的迅速发展,给人们的日常生活带来了全新的感受,"网络生存"已经成为时尚,同时人类社会诸如政治、科研、经济、军事等各种活动对信息网络的依赖程度已经越来越强,"网络经济"时代已初露端倪。

然而,网络技术的发展在给我们带来便利的同时也带来了巨大的安全隐患,尤其是Internet和Intranet的飞速发展对网络安全提出了前所未有的挑战。技术是一把双刃剑,不法分子试图不断利用新的技术伺机攻入他人的网络系统,而肩负保护网络安全重任的系统管理员则要利用最新的网络技术来防范各种各样的非法网络入侵行为。事实已经表明,随着互连网的日趋普及,在互连网上的犯罪活动也越来越多,特别是Internet大范围的开放以及金融领域网络的接入,使得越来越多的系统遭到入侵攻击的威胁。但是,不管入侵者是从外部还是从内部攻击某一网络系统,攻击机会都是通过挖掘操作系统和应用服务程序的弱点或者缺陷来实现的,1988年的"蠕虫事件" 就是一个很好的实例。目前,对付破坏系统企图的理想方法是建立一个完全安全的没有漏洞的系统。但从实际上看,这根本是不可能的。美国Wisconsin大学的Miller给出一份有关现今流行操作系统和应用程序的研究报告,指出软件中不可能没有漏洞和缺陷。因此,一个实用的方法是,建立比较容易实现的安全系统,同时按照一定的安全策略建立相应的安全辅助系统,漏洞扫描器就是这样一类系统。就目前系统的安全状况而言,系统中存在着一定的漏洞,因此也就存在着潜在的安全威胁,但是,如果我们能够根据具体的应用环境,尽可能地早地通过网络扫描来发现这些漏洞,并及时采取适当的处理措施进行修补,就可以有效地阻止入侵事件的发生。因此,网络扫描非常重要和必要。

漏洞扫描器概述

漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。通过使用漏洞扫描器,系统管理员能够发现所维护的Web服务器的各种TCP端口的分配、提供的服务、Web服务软件版本和这些服务及软件呈现在Internet上的安全漏洞。从而在计算机网络系统安全保卫战中做到"有的放矢",及时修补漏洞,构筑坚固的安全长城。

按常规标准,可以将漏洞扫描器分为两种类型:主机漏洞扫描器(Host Scanner)和网络漏洞扫描器(Network Scanner)。主机漏洞扫描器是指在系统本地运行检测系统漏洞的程序,如著名的COPS、tripewire、tiger等自由软件。网络漏洞扫描器是指基于Internet远程检测目标网络和主机系统漏洞的程序,如Satan、ISS Internet Scanner等。

本文针对目前TCP/IP网络和各种网络主机的安全现状,设计并实现了一个网络漏洞扫描器,在实际使用中取得了很好的效果。

网络漏洞扫描器的设计

网络漏洞扫描器的总体结构

我们设计的漏洞扫描器基于浏览器/服务器(B/S)结构,整个扫描器实现于一个Linux、UNIX和Windows操作系统相混合的TCP/IP网络环境中,其总体结构如图1所示,其中运行Linux的工作站作为发起扫描的主机(称为扫描主机),在其上运行扫描模块和控制平台,并建有漏洞库。扫描模块直接从扫描主机上通过网络以其他机器为对象(称为目标主机,其上运行的操作系统可以是UNIX、Linux、Windows 2000/NT等)进行扫描。而控制平台则提供一个人机交互的界面。


图1 网络漏洞扫描器的总体结构

网络漏洞扫描器的扫描原理和工作原理

网络漏洞扫描器通过远程检测目标主机TCP/IP不同端口的服务,记录目标给予的回答。通过这种方法,可以搜集到很多目标主机的各种信息(例如:是否能用匿名登陆,是否有可写的FTP目录,是否能用Telnet,httpd是否是用root在运行)。在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。此外,通过模拟黑客的进攻手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等,也是扫描模块的实现方法之一。如果模拟攻击成功,则视为漏洞存在。

在匹配原理上,该网络漏洞扫描器采用的是基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员关于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后再在此基础之上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工作。

所谓基于规则是基于一套由专家经验事先定义的规则的匹配系统。例如,在对TCP 80端口的扫描中,如果发现/cgi-bin/phf或/cgi-bin/Count.cgi,根据专家经验以及CGI程序的共享性和标准化,可以推知该WWW服务存在两个CGI漏洞。同时应当说明的是,基于规则的匹配系统也有其局限性,因为作为这类系统的基础的推理规则一般都是根据已知的安全漏洞进行安排和策划的,而对网络系统的很多危险的威胁是来自未知的安全漏洞,这一点和PC杀毒很相似。

实现一个基于规则的匹配系统本质上是一个知识工程问题,而且其功能应当能够随着经验的积累而利用,其自学习能力能够进行规则的扩充和修正,即是系统漏洞库的扩充和修正。当然这样的能力目前还需要在专家的指导和参与下才能实现。但是,也应该看到,受漏洞库覆盖范围的限制,部分系统漏洞也可能不会触发任何一个规则,从而不被检测到。

整个网络扫描器的工作原理是:当用户通过控制平台发出了扫描命令之后,控制平台即向扫描模块发出相应的扫描请求,扫描模块在接到请求之后立即启动相应的子功能模块,对被扫描主机进行扫描。通过对从被扫描主机返回的信息进行分析判断,扫描模块将扫描结果返回给控制平台,再由控制平台最终呈现给用户。

CGI的应用

整个漏洞扫描系统利用了浏览器/服务器(B/S)架构,目的是为了消除由于操作系统平台的不同而给程序的运行带来的差异,还为了能利用HTML提供的一系列功能,如超文本功能、灵活的版面编辑功能来构建一个美观灵活的人机接口。在该网络漏洞扫描器的实现中,我们通过CGI技术来连接前台的浏览器和后台的扫描程序。

CGI是通用网关接口,作为一种规范,它允许Web服务器执行其他程序并将它们的输出以相应的方式储存在发给浏览器的文本、图形和音频中。CGI程序能够提供从简单的表单处理到复杂的数据库查询等各种功能,这大大增强了Web的动态处理能力和交互能力。服务器和CGI程序相结合能够扩充和自定义World Wide Web的能力。

CGI过程的主要步骤如下:

  • 浏览器将URL的第一部分解码并联系服务器;
  • 浏览器将URL的其余部分提供给服务器;
  • 服务器将URL转换成路径和文件名;
  • 服务器意识到URL指向一个程序,而非一个静态的文件;
  • 服务器准备环境变量,执行CGI程序;
  • 程序执行,读取环境变量和STDIN;
  • 程序为将来的内容向STDOUT发送正确的MIME头信息;
  • 程序向STDOUT发送其输出的其余部分,然后终止;
  • 服务器发现程序终止,关闭与浏览器的连接;
  • 浏览器从程序中显示输出。

STDIN和STDOUT是标准输入和标准输出的助记符。对Web服务器,STDOUT送至CGI程序的STDIN,程序的STDOUT反馈回服务器的STDIN。在激活具有POST方法的CGI程序时,服务器使用它的STDOUT;对于GET方法,服务器不使用STDOUT。两种情况下,服务器都要求CGI程序通过STDOUT返回信息。在我们的程序中选择了POST方法。


关于作者

李志强,计算机应用硕士学位,目前主要从事网络安全技术(漏洞扫描技术和入侵检测技术)的研究与开发工作,可以通过E_mail: lizq_99@163.com与他联系。


网络扫描设计实现 运行环境 操作系统:Windows XP及以上。 开发工具:Microsoft Visual C++6.0,Notepad++。 开发语言:C/C++, MFC。 主要功能模块测试 主机扫描功能模块测试 在主机扫描功能模块中,管理员输入起始 IP 为 192.168.0.100,结束 IP 为 192.168.0.103,在这个 IP 段的范围内进行测试,结果显示有两台主机处在存活状态,分别是 192.168.0.100 和 192.168.0.102,其扫描结果如图所示: HostScan 端口扫描功能模块测试 在端口扫描功能模块中,管理员输入起始 IP 为 192.168.0.100,结束 IP 为 192.168.0.102,在这个 IP 段的范围内进行测试,端口范围设置为 1~1024,结果显示,主机 192.168.0.100 开放了 80 端口,192.168.0.102 开放了 135、139 和 445 端口,其扫描结果如图所示: PortScan NetBIOS 扫描功能模块测试 在网上基本输入输出系统 NetBIOS 扫描模块中,管理员选择 192.168.0.102 主机作为当前的目标主机,该主机为当前的主机 IP,显示出的结果与实际相符,其扫描结果如图所示: NetBIOSScan SNMP 扫描功能模块测试 在简单网络管理协议 SNMP 扫描功能模块中,管理员选择 192.168.0.102 主机作为当前的目标主机,该主机为当前的主机 IP,显示出的结果与实际相符,其扫描结果如图所示: SNMPScan 弱密码扫描功能模块测试 在弱密码扫描功能模块中,管理员选择 192.168.0.102 主机作为当前的目标主机,该主机为当前的主机 IP,用户名设置为 test,密码采用字典文件的方式去枚举,通过扫描出来的结果进行验证,可以确定该结果与实际相符,其扫描结果如图所示: WeakKeyScan 嗅探扫描功能模块测试 在嗅探扫描功能模块中,管理员添加 Pass、Password、pwd 三个关键字对本机进行监听,然后通过由服务器搭建的一个登陆提交表单的页面去提交用户名和密码,结果成功拦截到了响应的数据包,根据数据包内容,管理员可以判断该结果与实际相符合,其扫描结果如图所示: SnifferScan DOS 攻击功能模块测试 在DOS攻击功能模块中,管理员启动 2048 个线程对目标 IP 为 39.99.157.58 的 80 端口进行连接,然后再尝试访问网站,结果发现网站宕机,管理员可以判断该结果与预期相符合,其扫描结果如图所示: DosScan 注入检测功能模块测试 在注入检测功能模块中,为了测试结果,我尝试在服务器上搭建了一个简易的测试 Demo,网站由两部分构成,一个是登录页面 login.html,一个是验证是否登录成功的页面 respone.php,登录页面如图所示: login_input 如果以 welcome+ 用户名的形式返回则说明登录成功,登录成功的页面如图所示: login_succeed 如果登陆失败会返回“The username or password is wrong!”,登录失败的页面如图所示: login_failed login.html 源代码如图所示: login respone.php 源代码如图所示: respone 管理员根据以上测试分析可以得出结论,如果管理员把 welcome 一词当做注入漏洞的标志,若登录成功出现 welcome 一词,则说明网站存在注入漏洞,其结果如图所示: SQLScan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值