安全漏洞简介
定义
所谓的漏洞,指的是硬件、软件或策略上的缺陷,被不法者利用,通过网络植入木马、病毒等方式来攻击或控制整个电脑,窃取您电脑中的重要资料和信息,甚至破坏您的系统。在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。漏洞会影响到的范围很大,包括系统本身及其支撑软件,网络客户和服务器软件,网络路由器和安全防火墙等。换而言之,在这些不同的软硬件设备中都可能存在不同的安全漏洞问题。在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。
按照漏洞的形成原因,漏洞大体上可以分为程序逻辑结构漏洞、程序设计错误漏洞、开放式协议造成的漏洞和人为因素造成的漏洞。按照漏洞被人掌握的情况,漏洞又可以分为已知漏洞、未知漏洞和0day等几种类型。
程序逻辑结构漏洞
这种类型的漏洞有可能是编程人员在编写程序时,因为程序的逻辑设计不合理或者错误而造成的程序逻辑漏洞。这种类型的漏洞最典型的要数微软的Windows 2000用户登录的中文输入法漏洞。非授权人员可以通过登录界面的输入法的帮助文件绕过Windows的用户名和密码验证而取的计算机的最高权限。这种类型的漏洞也有可能是合法的程序用途被黑客利用去做不正当的用途。这种类型的漏洞最典型的就是后面案例中提到的Winrar的自解压功能,程序设计者的本意是为了方便用户的使用,使得没有安装Winrar的用户也可以解压经过这种方式压缩的文件。但是这种功能被黑客用到了不正当的用途上。这种漏洞用一个比喻可能更容易理解。打一个比方来说,你开了一扇门,在门上开了一个狗洞,专门为了狗方便出入。正常情况下,人应该用钥匙打开锁才能进来。可是有个家伙他发现利用某个窍门人也可以从狗洞进出,那么这个从狗洞进出的方法就可以看着是一个安全漏洞。
程序设计错误漏洞
还有一种类型的漏洞是编程人员在编写程序时由于技术上的疏忽造成的漏洞。这种类型的漏洞最典型的是缓冲区溢出漏洞,它也是被黑客利用得最多的一种类型的漏洞。下面的章节我们会详细介绍这种缓冲区溢出漏洞。
开放式协议造成的漏洞
目前,国际互联网的通信采用的是具有开放性的TCP/IP协议。因为TCP/IP协议的最初设计者在设计该通信协议时,只考虑到了协议的实用性,而没有考虑到协议的安全性,所以在TCP/IP协议中存在着很多漏洞。比如说,利用TCP/IP协议的开放和透明性嗅探网络数据包,窃取数据包里面的用户口令和密码信息;TCP协议三次握手的潜在缺陷所导致的拒绝服务攻击等。在下面的章节中会介绍一些利用TCP/IP协议的漏洞进行攻击的一些案例。
人为因素造成的漏洞一个系统如果本身设计得很完善,安全性也很高,但管理人员安全意识淡薄,同样的会给系统留下漏洞。譬如说,系统本身非常完备安全,但系统登录所需要的管理员帐户或口令,可是因为设置过于得简单而被黑客猜解出来了,那么其他的环节再安全也没有丝毫意义;再或者虽然管理员设置了很复杂的密码,可是他把密码写在一张纸上,并随手扔到废纸篓里,那么也同样有可能造成密码泄露而导致系统被黑客入侵。
已知漏洞
已知漏洞是指已经被人们发现,并被人们广为传播的公开漏洞。这种类型的特点是漏洞形成的原因和利用方法已经被众多的安全组织、黑客和黑客组织所掌握。安全组织或厂商按照公布的漏洞形成原因和利用方法,在他们的安全防护产品中或安全服务项目加入针对相应类型漏洞的防护方法。黑客和黑客组织利用公布的漏洞形成原因,写出专门的具有针对性的漏洞利用程序文件,并能绕过安全防护软件。比如说针对某个IE浏览器版本的IE漏洞利用文件,或者他们干脆利用一些漏洞公布站点上提供的漏洞利用程序文件并不加任何修改地去攻击互联网上的计算机。产生漏洞的软件的开发商则会针对被公开的漏洞的信息,修补他们开发的程序以供他们的用户修补已经存在漏洞的软件。
未知漏洞
未知的漏洞则是指那些已经存在但还没有被人发现的漏洞,这种类型漏洞的特征是虽然它们没有被发现,但它们在客观上已经存在了,它们带给计算机网络安全的是隐蔽的威胁。如果它们哪一天被黑客有意或无意的找出来后就会对计算机网络安全构成巨大的威胁。所以软件开发商、安全组织、黑客和黑客组织都在努力的发现漏洞,可以说谁先发现了漏洞,谁就可以掌握主动权。如果是软件开发商和安全组织先发现了漏洞,他们就可以在安全防护上取得主动权;如果是黑客或黑客组织先发现了漏洞,他们就可以在攻击上取得主动权。
0day漏洞
所谓0day漏洞是指已经被发掘出来,但还没有大范围传播开的漏洞,也就是说,这种类型的漏洞有可能掌握在极少数人的手里。黑客有可能在这种类型的漏洞的信息还没有大范围的传播开的时候,利用这段时间差攻击他们想要攻击的目标机器,因为绝大多数用户还没有获取到相关的漏洞信息,也无从防御,黑客要想得手还是很容易的。
漏洞扫描,就是自动检测远程或本地主机安全性弱点的过程。它采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。漏洞扫描技术是一类重要的网络安全技术。它和防火墙、入侵检测系统互相配合,能够有效提高网络的安全性。通过对网络的扫描,网络管理员能了解网络的安全设置和运行的应用服务,及时发现安全漏洞,客观评估网络风险等级。网络管理员能根据扫描的结果更正网络安全漏洞和系统中的错误设置,在黑客攻击前进行防范。如果说防火墙和网络监视系统是被动的防御手段,那么安全扫描就是一种主动的防范措施,能有效避免黑客攻击行为,做到防患于未然。漏洞扫描具有以下功能:
定期的网络安全自我检测、评估。
配备漏洞扫描系统,网络管理人员可以定期的进行网络安全检测服务,安全检测可帮助客户最大可能的消除安全隐患,尽可能早地发现安全漏洞并进行修补,有效的利用已有系统,优化资源,提高网络的运行效率。
安装新软件、启动新服务后的检查。
由于漏洞和安全隐患的形式多种多样,安装新软件和启动新服务都有可能使原来隐藏的漏洞暴露出来,因此进行这些操作之后应该重新扫描系统,才能是安全得到保障。
网络建设和网络改造前后的安全规划评估和成效检验。
网络建设者必须建立整体安全规划,以统领全局,高屋建瓴。在可以容忍的风险级别和可以接受的成本之间,取得恰当的平衡,在多种多样的安全产品和技术之间做出取舍。配备网络漏洞扫描/网络评估系统可以让您很方便的进行安全规划评估和成效检验。
网络的安全系统建设方案和建设成效评估。
网络承担重要任务前的安全性测试。
网络承担重要任务前应该多采取主动防止出现事故的安全措施,从技术上和管理上加强对网络安全和信息安全的重视,形成立体防护,由被动修补变成主动的防范,最终把出现事故的概率降到最低。配备网络漏洞扫描/网络评估系统可以让您很方便的进行安全性测试。
网络安全事故后的分析调查。
网络安全事故后可以通过网络漏洞扫描/网络评估系统分析确定网络被攻击的漏洞所在,帮助弥补漏洞,尽可能多得提供资料方便调查攻击的来源。
重大网络安全事件前的准备。
重大网络安全事件前网络漏洞扫描/网络评估系统能够帮助用户及时的找出网络中存在的隐患和漏洞,帮助用户及时的弥补漏洞。
公安、保密部门组织的安全性检查。
互联网的安全主要分为网络运行安全和信息安全两部分。网络运行的安全主要包括以ChinaNet、ChinaGBN、CNCnet等10大计算机信息系统的运行安全和其它专网的运行安全;信息安全包括接入Internet的计算机、服务器、工作站等用来进行采集、加工、存储、传输、检索处理的人机系统的安全。网络漏洞扫描/网络评估系统能够积极的配合公安、保密部门组织的安全性检查。
漏洞扫描机制
在端口扫描的基础上,判断系统正在运行的服务,针对不同的服务,结合漏洞知识,发送不同的定制数据包,分析返回的数据包,确定系统是否存在该漏洞。对于不同的系统、不同的服务,漏洞扫描使用的工具不同。
一次完整的网络安全扫描分为以下三个阶段。
第一阶段:发现目标主机或网络。
第二阶段:发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等。如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及主机信息。
第三阶段:根据搜集到的信息判断或进一步测试系统是否存在安全漏洞。
漏洞扫描的种类
(1)系统漏洞
(2)特定服务的漏洞
a.WEB服务
b.数据库服务
c.FTP服务
d.Mail服务
(3)网络及管理设备漏洞
a.路由器、交换机
b.SNMP设备
(4)信息泄漏漏洞
a.用户信息
b.共享信息
(5)人为管理漏洞
a.弱口令
b.错误配置
漏洞扫描的发展趋势
(1)插件(plugin,或者叫做功能模块)技术
每个插件都封装一个或者多个漏洞的测试手段,主扫描程序通过调用插件的方法来执行扫描,主扫描程序通过调用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多漏洞。在插件编写规范公布的情况下,用户或者第三方公司甚至可以自己编写插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对简单,并具有非常强的扩展性。
(2)使用专用脚本语言
其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。这其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。这些脚本语言语法通常比较简单易学,往往用十几行代码就可以定制一个简单的测试,为软件添加新的测试项。脚本语言的使用,简化了编写新插件的编程工作,使扩充软件功能的工作变得更加容易,也更加有趣。
(3)由安全扫描程序到安全评估专家系统
最早的漏洞扫描程序只是简单地把各个扫描测试项的执行结果罗列出来,直接提供给测试者而不对信息进行任何分析处理。而当前较成熟的扫描系统都能够将对单个主机的扫描结果整理,形成报表,能够并对具体漏洞提出一些解决方法。不足之处是对网络的状况缺乏一个整体的评估,对网络安全没有系统的解决方案。未来的安全扫描系统,应该不但能够扫描安全漏洞,还能够智能化地协助网络信息系统管理人员评估本网络的安全状况,给出安全建议,成为一个安全评估专家系统。
网络漏洞发布机制
漏洞发布机制是一种向公众或用户公开漏洞信息的一套方法。将漏洞信息公布给用户,帮助人们采取措施及时堵住漏洞,不让攻击者有机可乘,从而提高系统的安全性,减少漏洞带来的危害和损失。漏洞发布一般由软、硬件开发商、安全组织、黑客或用户来进行。漏洞发布方式主要有三种形式:网站、电子邮件以及安全论坛。网络管理员通过访问漏洞发布网站和安全论坛或订阅漏洞发布电子邮件就能及时获取漏洞信息。漏洞信息公布内容一般包括:漏洞编号、发布日期、安全危害级别、漏洞名称、漏洞影响平台、漏洞解决建议等。
漏洞扫描原理
漏洞扫描技术是建立在端口扫描技术的基础之上的。从对黑客攻击行为的分析和收集的漏洞来看,绝大多数都是针对某一个网络服务,也就是针对某一个特定的端口的。所以漏洞扫描技术也是以与端口扫描技术同样的思路来开展扫描的。漏洞扫描技术的原理是主要通过以下两种方法来检查目标主机是否存在漏洞:在端口扫描后得知目标主机开启的端口以及端口上的网络服务,将这些相关信息与网络漏洞扫描系统提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在;通过模拟黑客的攻击手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等。若模拟攻击成功,则表明目标主机系统存在安全漏洞。
下面列出两种漏洞扫描实现的方法。
(1)漏洞库的特征匹配方法
基于网络系统漏洞库的漏洞扫描的关键部分就是它所使用的漏洞库。通过采用基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员对网络系统安全配置的实际经验,可以形成一套标准的网络系统漏洞库,然后再在此基础之上构成相应的匹配规则,由扫描程序自动地进行漏洞扫描的工作。若没有被匹配的规则,系统的网络连接是禁止的。
基于网络系统漏洞库的漏洞扫描的工作原理是:扫描客户端提供良好的界面,对扫描的目标、范围、方法等进行设置,向扫描引擎(服务器端)发出扫描命令。服务器端根据客户端的选项进行安全检查,并调用规则匹配库检测主机,在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的系统漏洞库进行匹配,如果满足条件,则视为存在漏洞。服务器的检测完成后将结果返回到客户端,并生成直观的报告。在服务器端的规则匹配库是许多共享程序的集合,存储各种扫描攻击方法。漏洞数据从扫描代码中分离,使用户能自行对扫描引擎进行更新。
因此,漏洞库信息的完整性和有效性决定了漏洞扫描的性能,漏洞库的修订和更新的性能也会影响漏洞扫描系统运行的时间。
(2)功能模块(插件)技术
插件是由脚本语言编写的子程序,扫描程序可以通过调用它来执行漏洞扫描,检测出系统中存在的一个或多个漏洞。添加新的插件就可以使漏洞扫描软件增加新的功能,扫描出更多的漏洞。插件编写规范化后,甚至用户自己都可以用Perl、C或自行设计的脚本语言编写的插件来扩充漏洞扫描软件的功能。这种技术使漏洞扫描软件的升级维护变得相对简单,而专用脚本语言的使用也简化了编写新插件的编程工作,使漏洞扫描软件具有很强的扩展性。
基于插件技术的漏洞扫描工作原理是:它的前端工作原理基本和基于网络系统漏洞库的漏洞扫描工作原理相同,不同的就是将系统漏洞库和规则匹配库换成了扫描插件库和脆弱性数据库。扫描插件库包含各种脆弱性扫描插件,每个插件对一个或多个脆弱点进行检查和测试。插件间相对独立,这部分应该随着新脆弱性的发现而及时更新。脆弱性数据库收集了国际上公开发布的脆弱性数据,用于检查检测的完备性。它与扫描插件库之间是一对一或者多对一的关系,即一个插件可以进行一个或多个脆弱点的探测。因此,扫描插件库和脆弱性数据库可以及时更新,具有很强的扩展性。
漏洞扫描器组成结构
用户界面:
用户界面部分主要完成以下的功能:
(1) 接受并处理用户输入、定制扫描策略、开始和终止扫描操作、分析扫描结果报告等。
(2) 显示系统扫描器工作状态。
扫描引擎
扫描引擎部分主要完成以下的功能:
(1) 响应界面指令。
(2) 读取扫描策略数据库,并依此制定执行方案。
(3) 执行扫描方案,启动扫描进程和线程,并进行调度管理。
(4) 将扫描结果存档保存。
内容
1. 介绍安全漏洞及安全漏洞扫描的基本原理
2. 使用Fluxay进行本地及远程主机漏洞的扫描
3. 使用Nessus进行本地及远程主机漏洞的扫描
使用Fluxay进行漏洞扫描
打开Fluxay漏洞扫描工具,出现如下界面
网络漏洞扫描器对目标系统进行漏洞检测时,首先探测目标系统的存活主机,对存活主机进行端口扫描,确定系统开放的端口,同时根据协议指纹技术识别出主机的操作系统类型。然后扫描器对开放的端口进行网络服务类型的识别,确定其提供的网络服务。漏洞扫描器根据目标系统的操作系统平台和提供的网络服务,调用漏洞资料库中已知的各种漏洞进行逐一检测,通过对探测响应数据包的分析判断是否存在漏洞。现有的网络漏洞扫描器主要是利用特征匹配的原理来识别各种已知的漏洞。扫描器发送含有某一漏洞特征探测码的数据包,根据返回数据包中是否含有该漏洞的响应特征码来判断是否存在漏洞。
点击“文件”选择“安全扫描导向”或者按快捷键“Ctrl+W”打开“设置”进行扫描设置,可以对扫描目标、目标系统、检测项目等进行设置,如图2。(这里指定起始地址和结束地址均为172.16.1.112,也可指定172.16.1.111至172.16.1.115的所有机器)
在“选项”中,可以设置猜测用户名字典、猜测密码字典及保存扫描报告的路径,以下显示为系统默认结果,可以根据实际要求修改,如图3。然后点击下一步、下一步直至密码字典选项,中间步骤可以进行设置,一般选择默认设置即可。
密码字典,主要是配合解密软件使用的,密码字典里包括许多人们习惯性设置的密码,这样可以提高解密软件的密码破解命中率,缩短解密时间,当然,如果一个人密码设置没有规律或很复杂,未包含在密码字典里,这个字典就没有用了,甚至会延长解密时间。
可以对每一项检测项目进行设置,这里仅以PORTS为例,其余检测项目可以点击“下一步”进行设置,直到点击“完成”。
设置PORTS。选择标准端口扫描或者自定义端口扫描范围后,点击“下一步”
选择流光主机,设置主机、端口、用户名等
点击开始后,进行探测
查看扫描报告(仅显示某个IP的探测信息),如图,在此报告中学员可以看到选择的检测项目的检测结果(只显示有检测到信息的检测项目)。
打开Nessus漏洞扫描工具,(实验系统中已经预装),可以通过浏览器打开https://localhost:8834/访问Nessus,(若该页面无法打开请检查服务项中Tenable Nessus服务是否已经启动,如果没有启动请将其启动起来;Nessus工具默认用户名密码分别为admin与password)。
点击“Policies”可以查看当前有哪些策略,系统默认提供一些策略Web App Tests等
也可以进行新建扫描策略,即对扫描过程进行设置,新建策略页面如下图所示:
其中,General选项卡中的选项为扫描的基本配置(这里除Name、Description字段外,均可以使用默认选项)。
Credentials中的Credentials Type选项卡中配置Nesuss扫描器所使用的证书,通过配置证书,保证Nessus执行更多种类的扫描,确保扫描的准确性,包括Windows Credentials、SSH Settings、Kerberos configuration、cleartext protocols settings四个方面。
Plugins选项卡中包含使得用户能够通过插件族或者个人检查选择特定的安全检查。点击插件组前面的绿色圆圈启用或者禁用整个族,选择一个族会在右侧窗口中列出插件列表,也可以选择单个插件是否启动。
Preference选项卡中包括在扫描设置之上精确控制方法,包括一系列高级的配置选项,极大地丰富了Nessus的个性化扫描。
设置好自己的策略以后就可以利用这些策略进行扫描了,点击主菜单里面的“Scans”选项卡,单击“Add Scan”,填写本次扫描任务的名称、选择扫描事件类型(Run Now)、把上一步设置好的Policy加进去(这里我们选择一个web app tests策略进行扫描),填入扫描范围(Scan Targets,172.17.135.12),点击“Launch Scan”。
扫描过程中可以对扫描进行暂停或停止控制,双击扫描名称可以对扫描过程进行查看
扫描完成后可以对扫描结果进行查看,点击主菜单的Vulnerabilities可以对系统下所有扫描结果进行查看