您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 目标主机系统弱点方案
第二篇网络攻击篇第5章目标主机的系统弱点挖掘技术第5章目标主机的系统弱点挖掘技术系统弱点指的是系统难以克服的错误或缺陷和安全漏洞。漏洞则是指任意的允许非法用户未经授权获得访问或提高其访问层次的硬件或软件特征。网络攻防都是通过搜集目标系统信息并从中挖掘系统和应用服务程序的弱点来实现的,网络攻击主要利用了系统提供网络服务中的脆弱性。第5章目标主机的系统弱点挖掘技术5.1系统弱点可造成的危害5.2系统弱点的分类5.3系统的主要漏洞分类5.4几种常见漏洞的分析5.5漏洞库及其使用5.6弱点挖掘的过程与方法5.7获取系统弱点的工具5.8实验:漏洞扫描5.1系统弱点可造成的危害1、系统的完整性(integrity)攻击者可以利用系统弱点入侵系统,对系统数据进行非法篡改,达到破坏数据完整性的目的。5.1系统弱点可造成的危害2、系统的可用性(availability)攻击者利用系统弱点破坏系统或者网络的正常运行,导致信息或网络服务不可用,合法用户的正常服务要求得不到满足。5.1系统弱点可造成的危害3、系统的机密性(confidentiality)攻击者利用系统弱点给非授权的个人和实体泄漏受保护信息。有些时候,机密性和完整性是交叠的。5.1系统弱点可造成的危害4、系统的可控性(controllability)攻击者利用系统弱点对授权机构控制信息的完整控制权造成危害。5.1系统弱点可造成的危害5、系统的可靠性(reliability)攻击者利用系统弱点对用户认可的质量特性(信息传递的迅速性、准确性以及连续地转移等)造成危害。5.2系统弱点的分类5.2.1设计上的缺陷5.2.2操作系统的弱点5.2.3软件的错误、缺陷和漏洞5.2.4数据库的弱点5.2.5网络安全产品的弱点5.2.6用户的管理的疏忽5.2.1设计上的缺陷在进行软硬件及协议、安全策略设计时,难免会有考虑不周的地方,这就使得软硬件和协议在结构、功能等方面存在缺陷和疏漏;即使有些软硬件和协议在设计时没有漏洞,随着新的需求不断增加,使用场合不断变化,也很可能会出现不能适应新环境、新需求的缺陷和漏洞。比如,TCP/IP在设计时就没有太多地考虑安全问题,使得现在它显得越来越脆弱。再比如加密算法的设计等等。5.2.2操作系统的弱点现在的操作系统,无论是Windows,还是Unix、Linux,都存在着漏洞。这些漏洞,有的是因为设计时考虑不周,有的是因为代码的编写有Bug,还有的是因为在权限管理和系统保密等方面不够完善。无论是哪一种,都对系统的安全构成很大威胁。5.2.3软件的错误、缺陷和漏洞软件在编写过程中,总难免有Bug。比如在内存分配、变量赋值、出错处理等方面,在正常使用情况下,不会出问题,但若随意分配内存、任意赋值,系统就可能因资源耗尽、缓冲区溢出等原因瘫痪或崩溃。5.2.3软件的错误、缺陷和漏洞软件的弱点例如:操作系统弱点缓冲区溢出漏洞、轻易泄露操作系统信息、默认的用户名和口令或使用简单的口令、隐蔽通道,特洛伊木马;系统服务弱点服务弱点、RPC(远程过程调用)漏洞、ftp服务漏洞、TCP/IP通信协议弱点、软件老化。5.2.4数据库的弱点数据库作为数据的存储和管理系统,在进行数据库设计时,在数据库系统进行代码实现时,在用户对数据库进行配置和使用时,都有可能出现疏漏和错误.而数据库系统存放的数据往往比计算机系统本身的价值大得多,因此,数据库的安全问题不容忽视。5.2.4数据库的弱点数据库弱点举例现在多数数据库将原始数据以明文形式存储于数据库中,这是不够安全的,如果是重要数据,应该考虑使用密文的形式存储。一些数据库缺乏这方面的考虑,没有相应的安全机制。5.2.5网络安全产品的弱点网络安全产品在很大程度上提高了网络系统的安全性,但不可否认这些安全产品中同样存在着弱点。如果网络安全产品本身存在安全漏洞,那么不仅不能保障网络安全,反而给人以安全的假象。系统管理员要了解网络安全产品的弱点,并针对其特点进行合理选择、正确配置才能发挥安全产品的有效作用。5.2.6用户的管理的疏忽这是一种常见的情况。虽然这种情况的发生往往是由于人为的原因,但这种疏漏却非常普遍。管理人员疏忽,安全防范意识不强,或管理人员能力低下,都可能成为管理上的漏洞。比如因管理人员疏忽大意,造成口令的泄漏、重要的资料被偷窃,或因管理人员水平较低,造成系统配置错误等。大量攻击事件表明,一个网络系统被攻破,不是由于技术原因,而是因为管理上存在着弱点。比如用户的安全理念不强,或是员工蓄意破坏等。5.3系统的主要漏洞分类5.3.1根据漏洞被攻击者利用的方式分类5.3.2根据漏洞所指目标分类5.3.3根据漏洞导致的直接威胁分类5.3.4根据漏洞对系统安全性造成的损害分类5.3系统的主要漏洞分类漏洞是指系统硬件、操作系统、软件、网络协议、数据库等在设计上、实现上出现的可以被攻击者利用的错误、缺陷和疏漏。通俗一点说,漏洞就是可以被攻击者利用的系统弱点。没有漏洞就不会有成功的入侵和攻击,但没有漏洞的系统是不存在的。至少到现在为止,没有哪个操作系统和软件的生产者敢说自己的产品没有漏洞,事实上,主要的操作系统和软件都发现有漏洞,有的还很严重。5.3系统的主要漏洞分类漏洞形成的主要原因分类:输入验证错误、缓冲区溢出、设计错误、意外情况处置错误、访问验证错误、配置错误、竞争条件、环境错误、其他等。5.3.1根据漏洞被攻击者利用的方式分类本地(local)攻击漏洞:要想利用此类漏洞,攻击者必须是系统的本地合法用户或已经通过其他攻击方法获得了本地权限的非法用户。远程(remote)攻击漏洞:利用此类漏洞,攻击者可通过网络,对连接在网络上的远程主机进行攻击。5.3.2根据漏洞所指目标分类漏洞所指目标或者说是漏洞存在的位置,比如是硬件本身存在问题,还是操作系统或者某个应用服务存在问题。从这个角度可以分成:操作系统、网络协议栈、非服务器程序、服务器程序、硬件、通信协议、口令恢复和其他。5.3.3根据漏洞导致的直接威胁分类漏洞导致的最直接的威胁是指攻击者利用此类漏洞可以获得的最直接的非法权限或者攻击效果。据此,系统安全漏洞可以归为以下几类。5.3.3根据漏洞导致的直接威胁分类普通用户访问权限:攻击者可以获得系统的普通用户存取权限,通常是利用服务器的某些漏洞。本地管理员权限:已有本地用户权限的攻击者通过攻击本地某些有缺陷的SUID程序,得到系统管理员权限。远程管理员权限:攻击者不需要本地用户权限可直接获得远程系统的管理员权限,通常是通过以root身份执行有缺陷的系统守护进程而获得。5.3.3根据漏洞导致的直接威胁分类权限提升:攻击者在本地通过攻击某些有缺陷的程序,把自己的普通权限提升为管理员权限。本地拒绝服务:攻击者使系统本身或应用程序不能正常运转或者正常提供服务。远程拒绝服务:攻击者利用此类漏洞对远程系统发起拒绝服务攻击,使系统或相关的应用程序崩溃或失去响应能力。5.3.3根据漏洞导致的直接威胁分类读取受限文件:攻击者通过利用某些漏洞,读取系统中自己没有权限读取的文件。远程非授权文件存取:攻击者可以不经授权地从远程存取系统的某些文件。口令恢复:攻击者很容易分析出口令的加密方法,从而通过某种方法得到密码,然后通过密码还原出明文。5.3.3根据漏洞导致的直接威胁分类欺骗:攻击者对目标系统实施某种形式的欺骗。信息泄露:攻击者收集有利于进一步攻击的目标系统信息。其他5.3.4根据漏洞对系统安全性造成的损害分类根据漏洞对系统的安全性造成的危害可分为有效性、隐密性、完整性、安全保护。其中安全保护还可分为:获得超级用户权限、获得普通用户权限、获得其他用户权限。5.3.4根据漏洞对系统安全性造成的损害分类系统安全漏洞根据其对系统造成的潜在威胁以及被利用的可能性可将各种系统安全漏洞进行分级。高级别:大部分远程和本地管理员权限漏洞属于“高”级别;中级别:大部分普通用户权限、权限提升、读取受限文件、远程和本地拒绝服务漏洞属于“中”级别;低级别:大部分远程非授权文件存取、口令恢复、欺骗、信息泄露漏洞属于“低”级别。但这只是一般情况,具体情况还需要具体分析。5.4几种常见漏洞的分析1.缓冲区溢出2.拒绝服务攻击漏洞3.权限提升漏洞4.远程命令执行漏洞5.文件泄漏、信息泄漏漏洞6.其他类型的漏洞1.缓冲区溢出缓冲区溢出漏洞是很典型的一类漏洞,现有的漏洞很多都可以归为此类。对于存在此漏洞的系统,攻击者通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。如NSFOCUS安全小组发现微软FrontPage2000服务器扩展软件包中的一个程序存在一个缓冲区溢出漏洞。远程攻击者可能利用这个漏洞执行任意代码。缓冲区溢出在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。缓冲区溢出如果把一加仑的水注入容量为一品脱的容量中,水会四处冒出,这时你就会充分理解溢出的含义。同样的道理,在计算机内部,如果你向一个容量有限的内存空间里存储过量数据,这时数据也会溢出存储空间。输入数据通常被存放在一个临时空间内,这个临时存放空间被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。缓冲区溢出缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量。溢出的数据覆盖在合法数据上。理想情况是,程序检查数据长度并且不允许输入超过缓冲区长度的字符串。但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为堆栈,在各个操作进程之间,指令被临时存储在堆栈当中,堆栈也会出现缓冲区溢出。缓冲区溢出当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区,其他缓冲区存放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被覆盖或者破坏掉。可见一小部分数据或者一套指令的溢出就可能导致一个程序或者操作系统崩溃。缓冲区溢出是由编程错误引起的。如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生。缓冲区边界检查被认为是不会有收益的管理支出,计算机资源不够或者内存不足是编程者不编写缓冲区边界检查语句的理由。缓冲区溢出缓冲区溢出之所以泛滥,是由于开放源代码程序的本质决定的。一些编程语言对于缓冲区溢出是具有免疫力的,例如Perl能够自动调节字节排列的大小,Ada95能够检查和阻止缓冲区溢出。但是被广泛使用的C语言却没有建立检测机制。标准C语言具有许多复制和添加字符串的函数,这使得标准C语言很难进行边界检查。C++略微好一些,但是仍然存在缓冲区溢出。一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过“黑客”或者病毒精心设计的,覆盖缓冲区的数据恰恰是“黑客”或者病毒的入侵程序代码,一旦多余字节被编译执行,“黑客”或者病毒就有可能为所欲为,获取系统的控制权。缓冲区溢出尽管缓冲区溢出也会发生在非C/C++语言上,但考虑到各种语言的运用程度,我们可以在某种程度上说,缓冲区溢出是C/C++的专利。如果你在一个用VB写的程序里面找溢出漏洞,你将会很出名。在C/C++这两种使用非常广泛的语言里面,并没有边界来检查数组和指针的引用,这样做的目的是为了提高效率,而不幸的是,这也留下了严重的安全问题。先看下面一段简单的代码:缓冲区溢出#includestdio.hvoidmain(){charbuf[8];gets(buf);}程序运行的时候,如果你输入“Hello”,或者“Kitty”,那
本文标题:目标主机系统弱点方案
链接地址:https://www.777doc.com/doc-4655333 .html