网络安全笔记:漏洞扫描
该部分为本科期间网络安全课程笔记备份。
计算机漏洞
计算机漏洞概念
“漏洞”是指计算机系统具有的某种可能被入侵者恶意利用的属性。在计算机安全领域,安全漏洞通常称作脆弱性。
从范畴上讲,漏洞是包括一切导致威胁、损坏计算机系统安全性(可靠性、可用性、保密性、完整性、可控性、不可抵赖性)的所有因素。
1966年Matt Bishop和Dave Bailey给出“计算机脆弱性”(Computer Vulnerability) (Computer Vulnerability)的定义如下:
"计算机系统由一系列描述构成计算机系统的实体的当前配置状态(state)组成,系统通过应用状态变换(State Transition)(即改变系统状态)实现计算。
使用一组状态变换,从给定的初始状态可以到达的所有状态最终分为由安全策略定义的两类状态:已授权的 已授权的(authorized) (authorized)和未授权的 和未授权的(unauthorized) (unauthorized)。"
三种状态
脆弱(vulnerable)状态:是指能够使用已授权的状态变换到达未授权状态的已授权状态。
受损(compromised)状态:是指通过上述方法到达
的状态。
攻击(attack):是指以受损状态结束的已授权状态
变换的顺序。由定义可知,攻击开始于脆弱。
狭义与广义
“脆弱性是指脆弱状态区别于非脆弱状态的特征。广义地讲,脆弱性可以是很多脆弱状态的特征;狭义地讲,脆弱性可以只是一个脆弱状态的特征。”
简单地说,计算机漏洞是系统的一组特性,恶意的主体(攻击者或者攻击程序)能够利用这组特性,通过已授权的手段和方式获取对资源的未授权访问,或者对系统造成损害。这里的漏洞既包括单个计算机系统的脆弱性,也包括计算机网络系统的漏洞。
当系统的某个漏洞被入侵者渗透(exploit)而造
成泄密时,其结果就称为一次安全事件(Security Incident)。
存在漏洞的原因
“漏洞”是一个抽象概念,是和计算机安全相对而言的。安全是阻止未授权进入计算机系统的支撑结构。漏洞是计算机系统安全方面的缺陷。
- 现在仍然在Internet上使用的基础协议中,有很多早期协议在最初设计时并没有考虑安全方面的需求。另外,无论从物理的拓扑连接还是应用于其上的技术来看,Internet都是一个变化相当迅速的动态环境。要在一个基础并不安全的、动态的、分布的环境保证安全变得困难。
- Internet的开放性和Internet协议的原始设计
- 在Internet上实施普通的电子攻击可以是快速、容易、低成本的,甚至有些攻击很难被检测或者跟踪到。
- 攻击者无需与被攻击的目标有物理上的接触,他可以通过无所不在的网线将他实施攻击的电子信号传递到四面八方,而他自己却可以隐藏在世界上任何一个不为人知额地点。他甚至可以“攻破”某个站点作为其据点
- Internet的开放性和Internet协议的原始设计
- 很多站点仍然在Internet上使用没有安全保证的信任策略。也有很多站点甚至连他们在Internet上使用的是什么信任策略都不清楚。这些站点可能认为攻击者不会将自己作为目标,或者认为自己已经对可能的攻击做好足够的预防。
- Internet上应用的技术可以说是瞬息万变的,攻击者的技术和工具也在不断发展,任何一种安全的解决方案都必须不断更新才能够适应这样的变化
- 在Internet上传送的很多数据都是没有加密的明文
- 这不仅威胁到使用明文传输的各种应用,也威胁到某些认证和授权的方式
- 因为明文传输使得嗅探(sniffer)网络数据成为可能。如果某一个站点被安装了网络嗅探软件,且这个站点允许入侵者嗅探其他区域的网络数据,它就很可能威胁到其他站点的安全性。
- Internet上高速膨胀的应用类型:
- 各种各样崭新的、复杂的网络服务软件层出不穷,通常这些服务在设计、部署和维护阶段都会出现安全问题
- 在将新产品快速推入市场的过程中,程序员不能保证他们不犯以前犯过的错误,也不能保证不引入新的错误,这都可能造成服务软件本身的漏洞。
- 一方面,一些商业操作系统通常宣称自己为迎合用户的需求而设计,为了提供易用性、易维护性而牺牲一些安全性。
- 快速增加的复杂应用需要大量经过培训的系统管理员或者专家用户,而实际的情况是很多没有经验的管理员被委以安全管理的任务。这些情况都增加了系统被攻击的机
从技术角度而言,漏洞的来源主要有以下几个方面:
- 软件或协议设计时的瑕疵
- 协议定义了网络上计算机会话和通信的规则,如果在协议设计时存在瑕疵,那么无论实现该协议的方法多么完美,它都存在漏洞。
- 例子:网络文件系统(NFS)
- 功能是在网络上共享文件,这个协议本身不包括认证机制。
- 无法确定登录到服务器的用户确实是某一个用户,所以NFS经常成为攻击者的目标。
- 在软件设计之初,通常不会存在不安全的因素。然而当各种组件不断添加进来的时候,软件可能就不会像当初期望的那样工作,从而可能引入不可知的漏洞。
- 软件或协议实现中的弱点
- 即使协议设计得很完美,实现协议的方式仍然可能引入漏洞。
- 这样的漏洞使攻击者不需要访问主机的凭证就能够从远端攻击服务器
- 例子:和E-mail有关的某个协议的某种实现方式能够让攻击者通过与受害主机的邮件端口建立连接,达到欺骗受害主机执行意想不到的任务的目的。
- 软件本身的瑕疵
- 没有进行数据内容和大小检查;没有进行成功/失败检查;不能正常处理资源耗尽的情况;对运行环境没有做完整检查;不正确地使用系统调用;或者重用某个组件时没有考虑到它的应用条件...
- 攻击者通过渗透这些漏洞,即使不具有特权账号,也可能获得额外的、未授权的访问
- 系统和网络的错误配置
- 是由服务和软件的不正确部署和配置造成的
- 软件安装时都会有一个默认配置,如果管理员不更改这些配置,服务器仍然能够提供正常的服务,但是入侵者就能够利用这些配置对服务器造成威胁。
- SQL Server的默认安装就具有用户名为sa、密码为空的管理员账号;FTP服务器的匿名账号...
公开的计算机漏洞信息
漏洞的公开,受益最大的还是系统管理员。
漏洞的存在,只为入侵者入侵系统提供了可能。
早期是隐瞒起来,但是事实上却是入侵者总能有办法找到各种渠道获取各种漏洞信息,用各种方法找到网络上存在漏洞的系统。
公开漏洞可以促使提供软件或硬件的厂商更快 地解决问题,也可以让系统管理员更有针对性地对 自己管理的系统进行配置和管理。
多年的实践也使人们逐渐认识到,建立在漏洞 公开基础之上的安全才是更可靠的安全。Internet上已经有许多关于各种漏洞的描述和与此相关的数据库。
通用漏洞和曝光
通用漏洞和曝光(CVE)是一个公共安全漏洞和曝光信息的标准化名字列表。它致力于为所有
通用漏洞和曝光公开的漏洞和安全曝光名称标准化的工作。
CVE是一个字典而不是数据库,它的目标是使不同的漏洞数据库共享数据和搜索信息变得更加
容易。
BugTraq漏洞数据库
一个关于计算机安全漏洞详细信息讨论的邮件列表,讨论内容包括漏洞的描述、漏洞的渗透方法以及漏洞的修补方法等。与这个邮件列表相关的漏洞数据库是一个CVE兼容的数据库,提供了包括以上讨论内容在内的非常详细的漏洞信息。
任何人都可以从Internet上检索这个数据库,而且该数据库提供了5种检索方式:软件提供商、标题、关键字、BugTrag ID、CVE ID。另外需要提及的是,BugTraq漏洞数据库包括的
某些漏洞并没有CVE ID。
ICAT漏洞数据库
提供了非常灵活的检索方式,任何人都可以从 Web页面进行检索,同时ICAT也提供可以下载的 Microsoft Access格式的数据库文件。
每条漏洞记录的信息包括漏洞的CVE名字、发布时间、描述、危险等级、漏洞类型、实施范围、受影响系统、参考链接等。
CERT/CC漏洞信息数据库
一个CVE兼容的数据库。可以通过名字、ID号、CVE名字、公布日期、更新日期、严重性等方法检索漏洞信息。漏洞记录包括漏洞描述、影响、解决方案、受影响系统、参考链接等信息
X-Force数据库
是一个比较全面的漏洞信息数据库。可以在Web页面上使用关键字对数据库进行检索,检索到的漏洞记录包括漏洞描述、受影响平台、补救措施、风险等级、影响结果、报告时间 报告时间、参考链接等信息。与上面几个数据 与上面几个数据一样,他也是兼容CVE的。
实施网络扫描
真正入侵前:踩点、扫描、查点
一次完整的网络扫描分三个阶段:
- 发现目标主机或网络
- 发现目标后进一步搜集目标信息(OS类型、服务软件版本等)。如果目标是一个网络,则进一步发现网络拖布结构、路由设备以及主机信息。
- 根据搜集到的信息判断或者进一步检测系统是否存在安全漏洞。
发现目标
这一阶段通过发送不同类型ICMP或者TCP、UDP请求,从多个方面检测目标主机是否存活。
使用技术:ping扫射(包括ICMP扫射、广播ICMP、非回显ICMP、TCP扫射、UDP扫射)。
攫取信息
广义上:入侵前一切工作成为信息攫(jue 2)取,包括踩点扫描查点。
用到的技术:端口扫描、服务识别、操作系统探测
目的:获取目标主机操作系统信息和开放服务信息
漏洞检测
目的:获取主机存在哪些漏洞
检测方法:直接测试、推断、带凭证的测试
直接测试
直接测试:指利用漏洞特点发现系统漏洞的方法。要找出系统中的常见漏洞,最显而易见的方法就是试图渗透漏洞。
渗透测试是指使用针对漏洞特点设计的脚本或者程序检测漏洞。
测试代码通常和渗透攻击代码类似,不同的是测试代码返回与“风险等级”对应的提示,而渗透攻击代码则直接向入侵者返回具有超级权限的执行环境。另外也有一些渗透攻击不返回任何东西,只是让系统处于易被攻击的状态,用户必须另外采取动作来判断是否有漏洞被渗透了。
根据这一点,测试方法可以分为两种不同的类型:可以直接观察到的测试和只能间接观察到的测试。
例子:
IIS5.0具有一个Unicode解码漏洞,该漏洞的CVE名字为CVE-2000-0884。该漏洞允许使用扩展Unicode代码取代“\”和“/”字符,从而利用“../”遍历目录,这样用户可以这样用户可以通过构造特殊的URL远程执行系统上的任意命令。
对于对于IIS IIS而言而言,,未经授权的用户可能利用 未经授权的用户可能利用IUSR
IUSR-machi hine name账号的上下文空间访问任何已知的文件。该账号在默认情况下属于 该账号在默认情况下属于Everyone Everyone和和UseUsers rsUsers Users组的成员,因此任何与Web根目录在同一逻辑驱动器上的、能被这些用户组访问的文件都能被删除、修改或执行,就如同一个用户成功登录所能完成的一样。
没有安装SP3的Windows 2000系统都存在这个漏洞,当然,前提是它同时也正在提IIS的WWW服务。
如果已知某主机正在提供WWW服务,为了检测该主机是否存在上述漏洞,可以直接利用渗透代码进行测试。这个漏洞的渗透代码也很简单:http://target/scripts/..�../path/file.ext
于是可以使用Web浏览器直接向目标主机发送一个请求:http://target/scripts/..�../winnt/system32/cmd.ext?/c+dir+c:\
如果IIS返回了C:\下的文件列表,则说明目标存在这个漏洞 在这个漏洞;;如果返回的是 如果返回的是"404”,则说明没有问题。这里使用了dir命令,这对目标系统是无害的,但是入侵者可以使用任何命令,包括net、format等命令,可以破坏硬盘数据或者添加用户
对于拒绝服务(DoS)漏洞也可以直接使用渗透代码进行测试,所不同的只是测试DoS漏洞的渗透代码通常是经过编译的二进制代码。
特点:
- 通常用于对Web服务器漏洞、拒绝服务(DoS)漏洞进行检测;
- 能够准确地判断系统是否存在特定漏洞;
- 对于渗透所需步骤较多的漏洞速度较慢;
- 攻击性较强,可能对存在漏洞的系统造成破坏;
- 对于对于DoS漏洞,测试方法会造成系统崩溃;
- 不是所有漏洞的信息都能通过测试方法获得。
推断
推断是指不利用系统漏洞而判断漏洞是否存在的方法。它并不直接渗透漏洞,只是间接寻找漏洞存在的证据。
采用推断方法的检测手段主要有版本检查(Ver sion Check sion Check)、)、程序行为分析、操作系统堆栈指纹分析、时序分析等。
其中,版本检查是推断方法中最简单的一个应用。它依赖于服务器对请求响应的旗标获取系统的有关信息,然后将获得的版本号与已知信息比较,以判断目标系统是否是受漏洞影响的系统。
如要检测IIS的Unicode解码漏洞,除了使用上面的直接测试方法,也可以使用版本检查的方法,如果检查到目标用的IIS版本是5.1或者更高,就可以推断目标不具有Unicode解码漏洞。
行为分析在需要推翻某个“风险假设”的时候非常有用。
在这种情况下,它分析目标程序的行为,如果发现该程序的行为和具有漏洞的版本的程序行为不一致,认为目标程序不存在漏洞。
这种方法不如渗透测试方法可靠,但是攻击性更小。这种方法在推断没有公开细节的新漏洞时也很有用。
另外,它也可以用于检查DoS漏洞,因为它基本没有攻击性,所以可以在检查很多DoS漏洞以后再重新启动系统。
推断方法有时也和测试方法结合使用,如首先推断出目标采用的系统类型,然后进行针对该系统的测试。推断的方法在快速检查大量目标时很有用,因为这种方法对计算机和网络的要求都很低。而它最主要的缺点就是可靠性较低。
带凭证的测试
凭证是指访问服务所需要的用户名或者密码,包括UNIX的登录权限和从网络调用Windows NT的API的能力。
除了目标主机IP地址以外,直接测试和推断两种方法都不需要其他任何信息。然而,很多攻击都是由拥有UNIX shell访问权限或者NT资源访问权限的用户发起的,他们的目标在于将自己的权限提升成为超级用户,从而可以执行某个命令。
对于这样的漏洞,前面两种方法很难检查出来。因此,如果赋予测试进程目标系统的角色,将能够检查出更多的漏洞。这种方法就是带凭证的测试。
由于拥有了目标主机的证书,一些原来只能由本地扫描发现的漏洞就能够通过网络安全扫描
发现了。
然而需要注意的是,由于拥有了目标主机的证书,检测系统本身的安全就更加值得注意,因为入侵者可能从检测系统上得到目标系统的访问权限。
所以一个好的检测系统应该集成对自己进行扫描的功能,否则,漏洞扫描有可能变得很危险。
常用的网络扫描工具
Netcat
网络工具箱中的“瑞士军刀“
网络映射程序Nmap
Nmap实现了前面提到的绝大部分的扫描技巧和操作系统探测技巧,可以用来发现网络上存活的主机、这些主机开放了哪些TCP和UDP端口、这些主机运行、什么样的操作系统以及操作系统的版本、正在使用什么样的防火墙和过滤设备等信息。
SATAN
SATAN即网络分析的安全管理工具。它提供一整套安全管理、测试和报告的功能,可以用
来搜集网络上主机的许多信息,可以识别并且自动报告与网络相关的安全问题。
nessus
nessus是一个功能强大而又易于使用的网络漏洞扫描工具,运行于POSIX系统)。它不仅免费而且更新很快。该系统被设计为客户/服务器模式,服务器端负责进行安全扫描,客户端用来配置、管理服务器端,客户端和服务器端之间的通信使用SSL加密。
X-scan
一个免费的漏洞扫描工具,运行于Windows操作系统。采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,持插件功能,提供了图形界面和命令行两种操作方式。
不同的扫描策略
基于网络和基于主机两种策略
基于网络
基于网络的安全评估工具从入侵者的角度评估系统,这类工具叫做远程扫描器或者网络扫描器。基于网络的脆弱性评估通过执行一些插件或者脚本模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。
扫描项目主要包括目标的开放端口、系统网络服务、系统信息、系统漏洞、远程服务漏洞、拒绝服务攻击等。
基于网络的安全评估工具特点:
- 运行于单个或多个主机,扫描目标为本地主机或者单/多个远程主机;
- 扫描器的设计和实现与目标主机的操作系统无关;
- 通常的网络安全扫描不能访问目标主机的本地文件(具有目标主机访问权限的扫描除外)。
基于主机
基于主机的安全评估工具从本地系统管理员的角度评估系统,这类工具叫做本地扫描器或者系统扫描器。基于主机的脆弱性评估分析文件内容,对系统中不合适的设置、脆弱的口令以及其他同安全规则抵触的对象进行检查。
两者主要目的都是发现系统或网络潜在的安全漏洞。
基于主机的安全评估工具特点:
- 运行于单个主机,扫描目标为本地主机;
- 扫描器的设计和实现与目标主机的操作系统相关;
- 可以在系统上任意创建进程;
- 扫描项目主要包括用户账号文件、组文件、系统权限、系统配置文件、关键文件、日志文件、用户口令、网络接口状态、系统服务、软件脆弱性等
脆弱性分析
基于主机的脆弱性评估可以更准确地定位系统的问题,发现系统的漏洞;然而缺点是平台相关、升级复杂,而且扫描效率较低(一次只能扫描一台主机)。
基于网络的脆弱性评估从入侵者的角度进行检测,能够发现系统中最危险、最可能被入侵者渗透的漏洞,扫描效率更高,而且由于与目标平台无关,通用性强,安装简单;缺点是不能检查不恰当的本地安全策略,另外也可能影响网络性能。

浙公网安备 33010602011771号