1.2 怎样实施脆弱性扫描
1.2.1 脆弱性(漏洞)概述
从1.1节可以知道,脆弱性(Vulnerability)就是指可能被威胁所利用的资产或若干资产的薄弱环节。而安全漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。漏洞在某些方面就是脆弱性,但是脆弱性可以包括相关设计的缺陷/漏洞。例如,数据库有一个漏洞,可能造成拒绝服务,那么引发这种拒绝服务的攻击工具所体现的攻击威胁就是利用了这样的漏洞,因此对于这个攻击威胁来说,这个漏洞就是脆弱性。因此,脆弱性和漏洞是从不同角度阐述的同一个问题,基本上两个概念是一样的,对于威胁来说漏洞是脆弱性,对于网络信息系统自身来说就是漏洞。本文以下叙述中,如果没有特别表明使用风险评估概念,脆弱性和漏洞指的是同一个概念。
以下将对脆弱性(漏洞)产生原因、实现分类、扫描实现等原理内容进行简要的介绍,为阐述脆弱性扫描的实施方法提供基础。
1. 漏洞起因分类
网络系统安全漏洞形成的原因有很多,包括网络所使用的协议设计问题,也包括协议和应用的软件实现问题,当然还包括了人为的因素以及系统管理失误等网络安全问题。表1-1说明了引起网络系统安全漏洞的网络安全问题。
表1-1 引起网络系统安全漏洞的常见安全问题
以上种种网络安全问题最终造就了形形色色、复杂而又多变的网络安全漏洞。就产生的安全问题类型,可以大致将漏洞分为三种类型(具体对应关系见表1-2)。
(1)设计类型漏洞:攻击者使用的另一类漏洞来源于设计阶段,这一类漏洞更难发现,同时也更能弥补,因为漏洞来源于设计,软硬件实现完全围绕设计实现。这种漏洞是固有的,只有依靠重新设计和实现,或增加保护机制才可以解决。例如,针对TCP的三次握手机制,可以通过只产生大量第一次握手信息,造成对方软硬件系统耗用大量资源保持TCP初始连接,而无法响应真实TCP连接,从而实现拒绝服务攻击。
(2)实现类型漏洞:所有的软硬件设备的实现都不可能没有漏洞,尽管设计可以是无懈可击的。但是软件总会存在“BUG”,这些“BUG”就可能产生安全漏洞。例如,著名的SendMail程序的漏洞被经常用来获得操作系统的非授权访问。实现类型漏洞在操作系统、数据库系统中是不可避免的,并且这些漏洞还无法预测,往往只能依靠大量的使用来发现,依靠开发商的升级和补丁,依靠安全公告或安全专家的警告才能进行补救。
(3)配置类型漏洞:这是攻击者最喜欢的漏洞,也是最常见的漏洞。配置漏洞来源于管理员(或用户)的错误设置或疏于管理。许多产品开发商在产品出厂时往往为用户设置了许多默认的参数,这些设置一般都是基于对用户环境的充分信任为基础的,以方便新用户使用为目的。但这些出厂设置却可能会带来严重的安全漏洞。例如,继续使用账号的出厂默认口令,使用默认的文件访问权限设置,以及默认开放有漏洞的网络服务等。
表1-2 按照产生的安全问题进行漏洞分类
2. 漏洞攻击方法分类
脆弱性扫描能够模拟黑客的行为,基于网络设备的漏洞进行攻击测试,以帮助使用者在被黑客攻击之前,找出所存在的脆弱性漏洞。按照攻击方法,可以分为如下三种类型(攻击对应的危害性情况,见表1-3)。
(1)间接攻击:黑客可以利用从这个漏洞搜集到的信息,间接执行攻击或入侵。这种攻击以信息采集和攻击前踩点为目的,对被攻击系统的危害性小。
(2)渗透攻击:黑客可以借助这个漏洞直接渗透入侵系统。这种攻击目标和方法较为明确,技术水平要求较高,因此对系统的伤害能够进行一定的控制,对被攻击系统的危害性较大。
(3)直接攻击:黑客可以借助这个漏洞直接执行攻击。这种攻击主要是通过软硬件系统对攻击的反应来判断该系统是否具备这种漏洞,由于系统可能反应强烈(如造成拒绝服务攻击),对被攻击系统可用性的危害性大。
表1-3 漏洞攻击方法分类
3. 漏洞危险程度分类
按照漏洞受攻击后,对系统构成的危险程度,可以分为三种危险程度。
(1)高等危险漏洞:允许恶意用户访问并可能破坏整个目标系统的漏洞。这种漏洞是威胁最大的漏洞,广泛存在于各种设计、实现、配置类型漏洞中。例如,在配置类型漏洞中,一些网站的数据库超级用户的密码为空。入侵者轻易地就可以获得超级用户权限进行破坏活动。
(2)中等危险漏洞:允许本地用户提高访问权限,并可能允许其获得系统控制的漏洞。这类漏洞在各种平台的很多应用程序中都有发现,主要是由应用程序中的一些缺陷或者代码错误引起的。
(3)低等危险漏洞:不允许恶意用户访问或进入目标系统,但可以得到某些关于目标系统的信息甚至机密信息,如操作系统类型、版本、开放的端口、运行的服务等。
注意:对于这种分类,每个生产厂商都有可能有不同的量化指标,如结合漏洞CVE分类进行权值的分级实现等,本文只给出最普通的理解。
4. 漏洞扫描方式分类
为了能够有效地对漏洞进行扫描检测,通常会使用以下扫描方式进行实现(漏洞扫描方式分类见表1-4)。
(1)本地扫描方式,检测本地系统所出现的漏洞,其中包括操作系统、应用系统等主机运行对象上存在漏洞。本方式由于一般都是以本地管理员身份进行扫描,因此能够检测出大量详细的漏洞,特别是配置类漏洞。其不足是由于进行本地部署,采用本地扫描方式的脆弱性扫描产品必须安装到操作系统上,很有可能会对本身部署的系统带来漏洞攻击的风险。另外,鉴于现在信息系统的管理,多服务器多软件的管理本身就比较困难,附加安装了脆弱性扫描产品的管理就更添乱了。此外,也是由于采用本地扫描方式的产品必须安装到操作系统上,为了全面支持脆弱性扫描,厂商必须能够根据不同的操作系统开发支持不同操作系统版本的产品,本地扫描方式产品这种对操作系统的依赖性,也带来了花费和难度巨大的问题。同时,由于本地扫描产品对本地操作系统具有较高的访问权限,相比网络扫描方式,在系统网络漏洞的检测方面可能出现偏差。
(2)网络扫描方式,通过网络来检测远程系统。本方式是以远程用户的身份进行扫描,扫描的详细程度同此用户身份权限高低有关。由于一般情况下都没有特别高的身份权限,所以网络扫描方式扫描到的信息要比本地扫描方式少。但是网络扫描方式可以通过系统中存在的各种等级漏洞来进行提权,继而获得进一步的攻击可能,如渗透性攻击。由于网络扫描方式比本地扫描方式更容易部署实现,且现有系统中通常还是存在大量漏洞,反而使得运用网络扫描方式实现的产品比本地扫描方式的产品多得多。这也是市场上的脆弱性扫描产品主要以网络扫描方式为主的原因。当然,这种实现的特点,也成为了这种方式的不足之处,如果使用不当或对攻击估计不足,可能会对系统产生严重影响。此外,由于没有本地高权限又怕对系统产生严重影响,所以有些漏洞的判断不是通过实际攻击得到的,而是通过估计产生的,于是扫描的误报率可能会特别高,有时甚至会影响网络安全管理员对系统风险的判断。
表1-4 漏洞扫描方式分类
5. 漏洞产品分类
漏洞扫描方式,直接区分了脆弱性扫描产品中最通常定义的两类产品。
(1)主机型脆弱性扫描产品:能够进行本地部署的、主要采用本地扫描方式实现的脆弱性扫描产品(产品部署架构如图1-1所示)。
图1-1 主机型脆弱性扫描产品架构
(2)网络型脆弱性扫描产品:只能通过网络远程扫描的脆弱性扫描产品(产品部署架构如图1-2所示)。
图1-2 网络型脆弱性扫描产品架构
1.2.2 脆弱性扫描产品的部署
以上对脆弱性的描述,可以为部署实现脆弱性扫描产品的用户提供一个基本的概念。同选用其他信息安全产品一样,实现之前首先需要确定自己的需求。例如,需要知道信息系统较为详细的脆弱性资料,可以采用本地扫描方式的产品,或者使用能够采用本地授权管理员权限进行脆弱性扫描的网络扫描方式产品;如果需要最大限度地模拟网络黑客渗透效果的,可以采用具有渗透攻击能力的产品;如果明确知道所处信息系统所采用的特殊操作系统、特殊协议或者特殊服务等附加信息,则可以部署实现具备针对这些特点设计的脆弱性扫描产品;如果经常需要一次性地扫描几千台机器,那么就要考虑脆弱性扫描效率较高的产品。这些用户需求都会对部署实现何种脆弱性扫描产品产生影响。当然,各种脆弱性扫描产品也都有其共有的特性。通常来说,在部署实现脆弱性扫描产品时一般需要考虑以下一些因素。
1. 脆弱性扫描的误报率
脆弱性扫描产品必须要有一个好的脆弱性扫描策略库和知识库。在进行扫描时能够根据好的策略库精确识别脆弱性,并能够通过好的知识库对脆弱性问题进行正确而又详细的描述。防止在扫描过程中,由于扫描策略库不好,首次造成大量误报(例如,脆弱性扫描产品简单地采用旗标识别策略来识别各种服务版本,则可能对使用非标端口实现通用服务的系统产生误报);由于知识库支持不好,使得用户产生理解歧义,二次造成使用误报。如果误报较少,对这种脆弱性扫描产品使用的影响还是可以忽略的。但是如果误报过多,将严重影响用户对脆弱性识别的效率。这种高误报率、扫了还不如不扫的脆弱性扫描产品,不能在信息系统中部署。
由前述内容可以知道,采用不同的扫描方式,特别是使用网络扫描方式误报率可能会特别高。这是事实,但是在实际使用部署中,可以采用根据实际环境优化脆弱性扫描产品的扫描策略的方法,尽可能降低误报率的产生。就像在本节开始时说到的,如果需要知道信息系统较为详细的脆弱性资料,可以采用本地扫描方式的产品,或者使用能够采用本地授权管理员权限进行脆弱性扫描的网络扫描方式产品;如果明确知道所处信息系统所采用的特殊操作系统、特殊协议或者特殊服务等附加信息,则可以部署实现具备针对这些特点设计的脆弱性扫描产品。这些方法都能够使得脆弱性扫描产品的扫描精度大大提高,在加快扫描速度的同时,能够大大降低脆弱性扫描的误报率。因此,在部署脆弱性扫描产品时,根据实际情况进行优化是最重要的。
2. 脆弱性扫描的漏报率
由于采用本地扫描方式的产品可能会对本身部署的系统带来攻击的风险,且对操作系统的依赖性较强,现在业界中大多部署基于远程网络脆弱性扫描技术的网络型脆弱性扫描产品。虽然网络型脆弱性扫描产品也可能开发类似主机型脆弱性扫描产品部署方式的漏洞扫描代理,但也是考虑到这些代理也存在同主机型脆弱性扫描产品一样的部署风险。网络型脆弱性扫描产品还是以实现网络扫描方式为主。因此,网络扫描方式的不足造成了存在大量通过远程扫描无法扫描到的远程部署系统本身所存在的脆弱性问题,产生漏报率;由于考虑到网络扫描方式可能会对系统产生严重影响,网络扫描方式一般谨慎采用具有攻击企图的扫描,这也会带来一定的漏报情况。另外,同误报率一样,不同产品具备的脆弱性扫描策略库好坏参差不齐。如果脆弱性扫描策略库质量差或者覆盖范围较窄,也会产生大量漏报。如果漏报率高,也将大大降低用户脆弱性识别的效率。同误报率一样,这种高漏报率、扫了就好像没有扫过的脆弱性扫描产品,也不能在信息系统中部署。
3. 脆弱性扫描产品的售后服务
采用具有较好技术储备和技术支持服务厂商的脆弱性扫描产品。尽管脆弱性扫描产品的更新都是在漏洞发现之后才进行的,但这种更新必须及时才行。特别像近期出现的类似0day漏洞,选择能够及时提供产品更新支持产品就显得尤为重要了。另外,在选取部署脆弱性扫描产品的时候,用户有时会存在认为脆弱性策略条数高,产品就好的理解误区。这就需要综合考虑策略质量的好坏,才能够下最终的结论。例如,哪怕策略条数再高,如果误报率和漏报率高,还是属于差的产品。然而,如果这个产品的开发厂商具有较好的技术储备和技术支持服务,它就能够在日后不断补充高质量的扫描策略,或者通过技术支持服务,为你优化策略和进行脆弱性专家分析,减少误报率和漏报率。特别是对于技术较为薄弱的使用用户,查找漏洞很重要,但正确地为这些用户描述漏洞以及如何修复它们也同样重要。因此,脆弱性扫描产品的售后服务也应该优先考虑。
4. 脆弱性扫描的代价
现在一般产品都通过许可证(License)对产品进行控制,这些控制也体现在了产品价格上。通常产品会针对安装产品结点数、脆弱性扫描结点数或者脆弱性扫描IP地址段发放许可证。往往有些产品的许可申请很容易,而有些产品许可申请过程很复杂。由于各供应商销售策略不同,这些产品的价格体系比较混乱,所以在部署实施之前一定要调查清楚相关的许可证问题。正确的方式应该是:用户在部署实施时根据实际情况,考虑扫描每个结点所需花费,原则上择廉录取,当然也要根据前面说到的脆弱性扫描产品售后等附加服务的情况而定。当然,如果用户具有一定技术能力,完全可以使用免费的脆弱性扫描工具。不过在部署实施时,误报和漏报的分析就要靠自己了。