《网络信息安全》课件第5章_第1页
《网络信息安全》课件第5章_第2页
《网络信息安全》课件第5章_第3页
《网络信息安全》课件第5章_第4页
《网络信息安全》课件第5章_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章黑客入侵技术5.1一般的常用入侵方法5.2网络攻击的一般步骤5.3扫描技术

5.4拒绝服务攻击技术5.5缓冲区溢出5.6后门技术5.7Sniffer技术习题

5.1一般的常用入侵方法

1.口令入侵所谓口令入侵,就是指用一些软件解开已经得到但被人加密的口令文档,不过许多黑客已大量采用一种可以绕开或屏蔽口令保护的程序来完成这项工作。对于那些可以解开或屏蔽口令保护的程序通常被称为“Crack”。由于这些软件的广为流传,使得入侵电脑网络系统有时变得相当简单,一般不需要很深入地了解系统的内部结构就可侵入。

2.特洛伊木马术特洛伊木马最典型的做法可能就是把一个能帮助黑客完成某一特定动作的程序依附在某一合法用户的正常程序中,这时合法用户的程序代码已被改变。一旦用户触发该程序,那么依附在内的黑客指令代码同时被激活,这些代码往往能完成黑客指定的任务。由于这种入侵法需要黑客有很好的编程经验,且要更改代码,要一定的权限,因此较难掌握。但正因为它的复杂性,一般的系统管理员很难发现。

3.监听法网络监听是主机的一种工作模式,在这种模式下,主机可以接收到本网段在同一条物理通道上传输的所有信息,而不管这些信息的发送方和接收方是谁。此时,如果两台主机进行通信的信息没有加密,只要使用某些网络监听工具,例如NetXrayforWindows95/98/NT,sniffitforlinux、solaries等就可以轻而易举地截取包括口令和账号在内的信息资料。虽然网络监听获得的用户账号和口令具有一定的局限性,但监听者往往能够获得其所在网段的所有用户账号及口令。

4.E-mail技术

电子邮件攻击主要表现为两种方式,一是电子邮件轰炸(电子邮件“滚雪球”),也就是通常所说的邮件炸弹,指的是用伪造的IP地址和电子邮件地址向同一信箱发送数以千计、万计甚至无穷多次的内容相同的垃圾邮件,致使受害人邮箱被“炸”,严重者可能会给电子邮件服务器操作系统带来危险,甚至瘫痪;二是电子邮件欺骗,如攻击者佯称自己为系统管理员(邮件地址和系统管理员完全相同),给用户发送邮件要求用户修改口令(口令可能为指定字符串)或在貌似正常的附件中加载病毒或其他木马程序,这类欺骗只要用户提高警惕,一般危害性不是太大。

5.利用系统漏洞许多系统都有这样或那样的安全漏洞(bugs),其中某些是操作系统或应用软件本身具有的,如sendmail漏洞、Win98中的共享目录密码验证漏洞和IE5浏览器漏洞等,这些漏洞在补丁未被开发出来之前一般很难防御黑客的破坏;还有一些漏洞是由于系统管理员配置错误引起的,如在网络文件系统中,将目录和文件以可写的方式共享,将未加shadow的用户密码文件以明码方式存放在某一目录下,这都会给黑客带来可乘之机,应及时加以修正。

5.2网络攻击的一般步骤

1.攻击的准备阶段

1)确定攻击的目的攻击者在进行一次完整的攻击之前首先要确定攻击要达到什么样的目的,即给对方造成什么样的后果。常见的攻击目的有破坏型和入侵型两种。破坏型攻击指的只是破坏攻击目标,使其不能正常工作,而不能随意控制目标系统的运行。要达到破坏型攻击的目的,主要的手段是拒绝服务攻击DoS(DenialofService)。

另一类常见的攻击目的是入侵攻击目标,这种攻击是要获得一定的权限来达到控制攻击目标的目的。应该说这种攻击比破坏型攻击更为普遍,威胁性也更大。因为黑客一旦获取攻击目标的管理员权限就可以对此服务器做任意动作,包括破坏性的攻击。此类攻击一般也是利用服务器操作系统、应用软件或者网络协议存在的漏洞进行的。当然还有另一种造成此种攻击的原因就是密码泄露,攻击者靠猜测或者穷举法来得到服务器用户的密码,然后就可以用管理员的身份对服务器进行访问。

2)信息收集除了确定攻击目的之外,攻击前的最主要工作就是收集尽量多的关于攻击目标的信息。这些信息主要包括目标的操作系统类型及版本,目标提供哪些服务,各服务器程序的类型与版本以及相关的社会信息。

要攻击一台机器,首先要确定它上面正在运行的操作系统是什么,因为对于不同类型的操作系统,其上的系统漏洞有很大区别,所以攻击的方法也完全不同,甚至同一种操作系统的不同版本的系统漏洞也是不一样的。要确定一台服务器的操作系统一般是靠经验,有些服务器的某些服务显示信息会泄露其操作系统。例如当我们通过TELNET连上一台机器时,如果显示

Unix(r)SystemVRelease4.0

login:那么根据经验就可以确定这个机器上运行的操作系统为SUNOS5.5或5.5.l。但这样确定操作系统类型是不准确的,因为有些网站管理员为了迷惑攻击者会故意更改显示信息,造成假象。

还有一种不是很有效的方法,诸如查询DNS的主机信息(不是很可靠)来看登记域名时的申请机器类型和操作系统类型,或者使用社会工程学的方法来获得,以及利用某些主机开放的SNMP公共组来查询。另外一种相对比较准确的方法是利用网络操作系统里的TCP/IP堆栈作为特殊的“指纹”来确定系统的真正身份。因为不同的操作系统在网络底层协议的各种实现细节上略有不同。可以通过远程向目标发送特殊的包,然后通过返回的包来确定操作系统类型。例如通过向目标机发送一个FIN的包(或者是任何没有ACK或SYN标记的包)到目标主机的一个开放的端口然后等待回应。

许多系统如Windows、BSD、CISCO、HP/UX和IRIX会返回一个RESET。通过发送一个SYN包,它含没有定义的TCP标记的TCP头。那么在Linux系统的回应包就会包含这个没有定义的标记,而在一些别的系统则会在收到SYN+BOGU包之后关闭连接。或是利用寻找初始化序列长度模板与特定的操作系统相匹配的方法。利用它可以对许多系统分类,例如较早的UNIX系统是长度为64KB,一些新的UNIX系统的长度则是随机的。还有就是检查返回包里包含的窗口长度,这项技术根据各个操作系统的不同的初始化窗口大小来惟一确定它们。利用这种技术实现的工具很多,比较著名的有NMAP、CHECKOS、QUESO等。

获知目标提供哪些服务及各种服务的类型、版本同样非常重要,因为已知的漏洞一般都是针对特定的服务、类型和版本的。这里说的提供服务就是指通常我们提到的端口,例如一般TELNET在23端口,FTP在21端口,WWW在80端口或8080端口。这只是一般情况,网站管理完全可以按自己的意愿修改服务所监听的端口号。在不同服务器上提供同一种服务的软件也可以是不同的,我们管这种软件叫做daemon,例如同样是提供FTP服务,可以使用wuftp、proftp、ncftp等许多不同种类的daemon。确定daemon的类型版本也有助于黑客利用系统漏洞攻破网站。

另外需要获得的关于系统的信息就是一些与计算机本身没有关系的社会信息,例如网站所属公司的名称、规模,网络管理员的生活习惯、电话号码等。这些信息看起来与攻击一个网站没有关系,实际上很多黑客都是利用了这类信息攻破网站的。例如有些网站管理员用自己的电话号码作为系统密码,如果掌握了该电话号码,就等于掌握了管理员权限。进行信息收集可以用手工进行,也可以利用工具来完成,完成信息收集的工具叫做扫描器。用扫描器收集信息的优点是速度快,可以一次对多个目标进行扫描。

2.攻击的实施阶段

1)获得权限当收集到足够的信息之后,攻击者就要开始实施攻击行动了。作为破坏性攻击,只需利用工具发动攻击即可,而作为入侵性攻击,往往要利用收集到的信息,找到其系统漏洞,然后利用该漏洞获取一定的权限。有时获得了一般用户的权限就足以达到修改主页等目的了,但作为一次完整的攻击是要获得系统最高权限的。能够被攻击者所利用的漏洞不仅包括系统软件设计上的安全漏洞,也包括由于管理配置不当而造成的漏洞。

当然大多数攻击成功的范例还是利用了系统软件本身的漏洞。造成软件漏洞的主要原因在于编制该软件的程序员缺乏安全意识。当攻击者对软件进行非正常的调用请求时会造成缓冲区溢出或者对文件的非法访问。其中利用缓冲区溢出进行的攻击最为普遍,据统计80%以上成功的攻击都是利用了缓冲区溢出漏洞来获得非法权限的。关于缓冲区溢出在后面要用专门的章节来作详细解释。无论作为一个黑客还是一个网络管理员,都需要掌握尽量多的系统漏洞。黑客需要用它来完成攻击,而管理员则需要根据不同的漏洞来进行不同的防御措施。

2)权限的扩大系统漏洞分为远程漏洞和本地漏洞两种,远程漏洞是指黑客可以在别的机器上直接利用该漏洞进行攻击并获取一定的权限。这种漏洞的威胁相当大,黑客的攻击一般都是从远程漏洞开始的。但是利用远程漏洞获取的不一定是最高权限,而往往只是一个普通用户的权限,这样很难使黑客们得逞。这时就需要配合本地漏洞来把获得的权限进行扩大,通常是扩大至系统管理员权限。

只有获得了最高的管理员权限之后,才可以做诸如网络监听、打扫痕迹之类的事情。要完成权限的扩大,不但可以利用已获得的权限在系统上执行利用本地漏洞的程序,还可以放置一些木马之类的欺骗程序来套取管理员密码。这种木马是放在本地来套取最高权限用的,而不能进行远程控制。例如一个黑客已经在一台机器上获得了一个普通用户的账号和登录权限,那么他就可以在这台机器上放置一个假的su程序。一旦黑客放置了假su程序,当真正的合法用户登录时,运行了su,并输入了密码,这时root密码就会被记录下来,下次黑客再登录时就可以使su变成root了。

3.攻击的善后工作

1)日志系统简介如果攻击者完成攻击后就立刻离开系统而不做任何善后工作,那么他的行踪将很快被系统管理员发现,因为所有的网络操作系统一般都提供日志记录功能,会把系统上发生的动作记录下来。所以,为了自身的隐蔽性,黑客一般都会抹掉自己在日志中留下的痕迹。想要了解黑客抹掉痕迹的方法,首先要了解常见的操作系统的日志结构以及工作方式。UNIX的日志文件通常放在下面这几个位置(根据操作系统的不同略有变化):

/usr/adm——早期版本的UNIX。

/var/log——新一点的版本使用这个位置。

/varflor——有些版本的Solaris、LinuxBSD、FreeBSD使用这个位置。

/etc——大多数UNIX版本把Utmp放在此处,一些UNIX版本也把wtmp放在这里,这也是syslog.conf的位置。下面的文件可能会根据用户所在的目录不同而不同:

acct或pacct——记录每个用户使用的命令记录。

Accesslog——主要用于NCSAHTTP服务器,这个记录文件会记录有什么站点连接过用户的服务器。

Aculo——保存拨出去的Modems记录。

Lastlog——记录了最近的Login记录和每个用户的最初目的地,有时是最后不成功的Login记录。

loginlog——记录一些不正常的Login记录。

messages——记录输出到系统控制台的记录,另外的信息由syslog来生成。

security——记录一些使用UUCP系统企图进入限制范围的事例。

sulog——记录使用su命令的记录。

utmp——记录当前登录到系统中的所有用户,这个文件伴随着用户进入和离开系统而不断变化。

utmpx——记录utmp的扩展。

wtmp——记录用户登录和退出事件。

syslog——记录最重要的日志文件,使用syslogd程序来获得。

2)隐藏踪迹攻击者在获得系统最高管理员权限之后就可以随意修改系统上的文件了(只对常规

UNIX系统而言),包括日志文件,所以一般黑客想要隐藏自己踪迹的话,就会对日志进行修改。最简单的方法当然就是删除日志文件了,但这样做虽然避免了系统管理员根据IP追踪到自己,但也明确无误地告诉了管理员,系统已经被入侵了。一般最常用的办法是只对日志文件中有关自己的那一部分进行修改。关于修改方法的具体细节根据不同的操作系统有所区别,网络上有许多此类功能的程序,例如zap、wipe等,其主要做法就是清除utmp、wtmp、lastlog和pacct等日志文件中某一用户的信息,使得当使用w、who、last等命令查看日志文件时,隐藏掉此用户的信息。

管理员想要避免日志系统被黑客修改,应该采取一定的措施,例如用打印机实时记录网络日志信息。但这样做也有弊端,黑客一旦了解到你的做法就会不停地向日志里写入无用的信息,使得打印机不停地打印日志,直到所有的纸用光为止。所以比较好的避免日志被修改的办法是把所有日志文件发送到一台比较安全的主机上,即使用loghost。即使是这样也不能完全避免日志被修改的可能性,因为黑客既然能攻入这台主机,也很有可能攻入loghost。仅修改日志是不够的,因为百密必有一漏,即使自认为修改了所有的日志,仍然会留下一些蛛丝马迹的。例如安装了某些后门程序,运行后也可能被管理员发现。所以,黑客高手可以通过替换一些系统程序的方法来进一步隐藏踪迹。这种用来替换正常系统程序的黑客程序叫做rootkit,这类程序在一些黑客网站可以找到,比较常见的有LinuxRootKit。它可以替换系统的ls、ps、netstat、inetd等等一系列重要的系统程序,当替换了ls后,就可以隐藏指定的文件,使得管理员在使用ls命令时无法看到这些文件,从而达到隐藏自己的目的。

3)后门一般黑客都会在攻入系统后不只一次地进入该系统。为了下次再进入系统时方便一点,黑客会留下后门,特洛伊木马就是后门的最好范例。

5.3扫

1.扫描技术简介网络安全扫描技术是一种基于网络的远程发现和检测目标网络或主机安全性脆弱点的技术。通过网络安全扫描,系统管理员能够发现所维护的网络应用服务器的各种TCP/IP端口的分配、开放的服务、网络应用服务软件版本和这些服务及软件呈现在网络上的安全漏洞。网络安全扫描技术也是采用积极的、非破坏性的办法来检验系统是否有可能被攻击和入侵。它利用了一系列的脚本模拟对系统进行攻击的行为,并对结果进行分析。这种技术通常被用来进行模拟攻击实验和安全审计。网络安全扫描技术与防火墙、安全监控系统互相配合就能够为网络提供很高的安全性。

一次完整的网络安全扫描分为三个阶段:第一阶段:发现目标主机或网络。第二阶段:发现目标后进一步搜集目标信息,包括操作系统类型、运行的服务以及服务软件的版本等。如果目标是一个网络,还可以进一步发现该网络的拓扑结构、路由设备以及各主机的信息。第三阶段:根据搜集到的信息判断或者进一步测试系统是否存在安全漏洞。

2.端口扫描技术一个端口就是一个潜在的通信通道,也就可能是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息,并发现系统的安全漏洞。它使系统用户了解系统目前向外界提供了哪些服务,从而为系统用户管理网络提供了一种手段。端口扫描向目标主机的TCP/IP服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。端口扫描也可以通过捕获本地主机或服务器的流入流出IP数据包来监视本地主机的运行情况,它仅能对接收到的数据进行分析,帮助我们发现目标主机的某些内在的弱点,而不会提供进入一个系统的详细步骤。

端口扫描主要有经典的扫描器(全连接)以及所谓的SYN(半连接)扫描器。此外还有间接扫描和秘密扫描等。全连接扫描是TCP端口扫描的基础,现有的全连接扫描有TCPconnect()扫描和TCP反向ident扫描等。其中TCPconnect()扫描的实现原理如下:扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect开始。如果端口开放,则连接将建立成功;否则,返回-1则表示端口关闭。建立连接成功:响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。

若端口扫描没有完成一个完整的TCP连接,则在扫描主机和目标主机的指定端口建立连接时只会完成前两次握手,在第三步时,扫描主机中断了本次连接,使得连接没有完全建立起来,这样的端口扫描称为半连接扫描,也称为间接扫描。现有的半连接扫描有TCPSYN扫描和IPID头dumb扫描等。SYN扫描的优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用。

3.漏洞扫描技术

1)漏洞扫描技术的原理漏洞扫描主要通过以下两种方法来检查目标主机是否存在漏洞:在端口扫描后得知目标主机开启的端口以及端口上的网络服务,将这些相关信息与网络漏洞扫描系统提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在;通过模拟黑客的攻击手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等。若模拟攻击成功,则表明目标主机系统存在安全漏洞。

2)漏洞扫描技术的分类和实现方法基于网络系统漏洞库,漏洞扫描大体包括CGI漏洞扫描、POP3漏洞扫描、FTP漏洞扫描、SSH漏洞扫描、HTTP漏洞扫描等。这些漏洞扫描是基于漏洞库,将扫描结果与漏洞库相关数据匹配比较得到漏洞信息;漏洞扫描还包括没有相应漏洞库的各种扫描,比如Unicode遍历目录漏洞探测、FTP弱密码探测、OPENRelay邮件转发漏洞探测等,这些扫描通过模拟攻击,测试出目标主机的漏洞信息。下面就这两种扫描的实现方法进行讨论。

(1)漏洞库的匹配方法:基于网络系统漏洞库的漏洞扫描的关键部分就是它所使用的漏洞库。通过采用基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员对网络系统安全配置的实际经验,可以形成一套标准的网络系统漏洞库,然后再在此基础之上构成相应的匹配规则,由扫描程序自动进行漏洞扫描的工作。这样,漏洞库信息的完整性和有效性决定了漏洞扫描系统的性能,漏洞库的修订和更新的性能也会影响漏洞扫描系统运行的时间。因此,漏洞库的编制不仅要对每个存在安全隐患的网络服务建立对应的漏洞库文件,而且应当能满足前面所提出的性能要求。

(2)插件(功能模块技术)技术:插件是由脚本语言编写的子程序,扫描程序可以通过调用它来执行漏洞扫描,检测出系统中存在的一个或多个漏洞。添加新的插件就可以使漏洞扫描软件增加新的功能,扫描出更多的漏洞。插件编写规范化后,用户自己可以用perl、C或自行设计的脚本语言编写的插件来扩充漏洞扫描软件的功能。这种技术使漏洞扫描软件的升级维护变得相对简单,而专用脚本语言的使用也简化了编写新插件的编程工作,使漏洞扫描软件具有很强的扩展性。

3)漏洞扫描中的问题及完善建议现有的安全隐患扫描系统基本上是采用上述两种方法来完成对漏洞的扫描,但是这两种方法在不同程度上也各有不足之处。下面将说明这两种方法中存在的问题,并针对这些问题给出相应的完善建议。

(1)系统配置规则库问题。网络系统漏洞库是基于漏洞库的漏洞扫描的灵魂所在,而系统漏洞的确认是以系统配置规则库为基础的。但是,这样的系统配置规则库存在其局限性:*如果规则库设计的不准确,预报的准确度就无从谈起;*它是根据已知的安全漏洞进行安排和策划的,而对网络系统的很多危险的威胁却是来自未知的漏洞,这样,如果规则库更新不及时,预报准确度也会逐渐降低;*受漏洞库覆盖范围的限制,部分系统漏洞也可能不会触发任何一个规则,从而不被检测到。由此可见,系统配置规则库应能不断地被扩充和修正。

(2)漏洞库信息要求。漏洞库信息是基于网络系统漏洞库的漏洞扫描的主要判断依据。如果漏洞库信息不全面或得不到及时的更新,不但不能发挥漏洞扫描的作用,还会给系统管理员以错误的引导,从而对系统的安全隐患不能采取有效措施并及时消除。因此,漏洞库信息不但应具备完整性和有效性,也应具有简易性的特点,这样即使是用户自己也易于对漏洞库进行添加配置,从而实现对漏洞库的及时更新。比如漏洞库在设计时可以基于某种标准(如CVE标准)来建立,这样便于扫描者的理解和信息交互,使漏洞库具有比较强的扩充性,更有利于以后对漏洞库的更新升级。

5.4拒绝服务攻击技术

1.拒绝服务攻击拒绝服务攻击的英文意思是DenialofService,简称DoS。拒绝服务攻击技术是一种破坏网络服务的技术方式,其根本目的是使受害主机或网络无法及时处理外界请求,或无法及时回应外界请求。拒绝服务攻击的具体表现方式主要有以下几种:

(1)制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通信。

(2)利用受害主机提供的服务或传输协议上的缺陷,反复高速地发出特定的服务请求,使受害主机无法及时处理所有正常请求。

(3)利用受害主机所提供服务中处理数据上的缺陷,反复发送畸形数据引发服务程序错误,这样可以大量占用系统资源,使主机处于假死状态甚至死机。

在这些拒绝服务攻击方法中,又可以分为下列几种:*TCPSynFlood是当前流行的拒绝服务攻击与分布式拒绝服务攻击的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。由于TCP协议连接三次握手的需要,在每个TCP建立连接时,都要发送一个带syn标记的数据包,如果在服务器端发送应答包后,客户端不发出确认,服务器会等待到数据超时,如果大量的带syn标记的数据包发到服务器端后都没有应答,这样会使服务器端的TCP资源迅速枯竭,导致正常的连接不能进入,甚至会导致服务器的系统崩溃。

*Smurf是指黑客采用ICMP技术进行攻击。常用的ICMP包由PING命令产生。首先黑客找出网络上有哪些路由器会回应ICMP请求,然后用一个虚假的IP源地址向路由器的广播地址发出信息,路由器会把这些信息广播到网络上所连接的每一台设备。这些设备又马上回应,这样会产生大量信息流量,从而占用所有设备的资源及网络带宽,而回应的地址就是受攻击的目标。ICMPSmurf的袭击加深了ICMP的泛滥程度,导致了一个数据包产生成千的ICMP数据包发送到一个根本不需要它们的主机中去,传输多重信息包的服务器成了Smurf的放大器。*Fraggle的基本概念及方法与Smurf类似,但它采用的是UDPecho信息。

2.分布式拒绝服务攻击

DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式。单一的DoS攻击一般是采用一对一方式的,当攻击目标CPU速度低、内存小或者网络带宽小等各项性能指标不高时它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得DoS攻击的困难程度加大了。至今为止,攻击者最常使用的分布式拒绝服务攻击程序包括4种:Trinoo、TFN、TFN2K和Stacheldraht。为了提高分布式拒绝服务攻击的成功率,攻击者需要控制成百上千的被入侵主机。这些攻击工具入侵主机和安装程序的过程都是自动化的。这个过程可分为以下几个步骤:

(1)探测扫描大量主机以寻找可入侵主机目标。

(2)入侵有安全漏洞的主机并获取控制权。

(3)在每台入侵主机中安装攻击程序。

(4)利用已入侵主机继续进行扫描和入侵。由于整个过程是自动化的,因此攻击者能够在几秒钟内入侵一台主机并安装攻击工具。也就是说,在短短的一小时内可以入侵数千台主机。

3.对DoS攻击的防御方法

1)防御方法的总原则要对拒绝服务攻击进行防御,只有知道防御目标时防御才有意义。由于不可能使所有的系统不受拒绝服务的攻击,因此在构筑防护时,做出有关使用有限的资源的决定要格外慎重。首先,在考虑应对攻击中所做出的诸如要做什么,何时做以及如何去做之类的信息安全方面的决定的同时,要仔细分析、鉴别所要保护的关键服务和信息的策略和目的。将关键服务从一般服务中区分出来是这一分析的目的。这一目的可以用于在受到攻击时建立系统必须进行的应对性通信的优先权。其次,由于一般很难将拒绝服务攻击与一般合法过多请求相区分,因此在构建可升级系统的同时,使用各种防护拒绝服务攻击的方法都是有用的。一般来说,系统和网络对拒绝服务攻击的应对反应有吸收攻击、降低网络服务和停止服务。

2)防御三个主题对拒绝服务攻击的反应很大程度上取决于在攻击到来之前的准备工作。一旦攻击到来,再建构、安装附加的网络处理能力和进行检测都已经太晚了,这就需要事先做好准备。拒绝服务攻击的防御应围绕以下三个主题:

(1)从生存性角度,设计好网络和系统,做好防护工作。

(2)检测在线操作,要清楚地掌握对于网络来说一些“正常”的操作的状况,以便检测其变化。

(3)做好非技术工作来人为有效地应对攻击。

5.5缓

1.缓冲溢出原理缓冲区溢出的根本原因是编程语言(如C\C++语言)对缓冲区缺乏严格的边界检查。缓冲区溢出的问题是目前软件普遍存在的一个现象,虽然开发人员在开发新的系统时为了不重蹈覆辙倍加小心,但由于C语言对缓冲区缺乏严格的语法检查,因此一个编程上的粗心往往会导致严重的隐患。目前的系统软件大部分是用C语言开发的,C语言对数据的类型检查较弱,编程风格比较自由。C语言编译系统在编译源程序时不对数组的越界进行检测,一些常用的C库函数也不对数组越界进行检测。例如,gets()、strcpy(),这些函数被称为不安全函数。

假设一个粗心的程序员设计用一个字符数组接收用户输入,而在程序中未对数组越界作任何限制,那么当用户输入一个超长的字符串时,缓冲区溢出就发生了。如果被一个恶意的攻击者利用,则看似安全的系统就可能被非法人员控制。攻击者最常用的一个方法是通过输入大量的数据,并且输入的数据中实际上含有一个二进制机器语言代码的小程序,以此造成系统内部输入缓冲区溢出。而在C语言中,静态变量是分配在数据段中的,动态变量是分配在堆栈段中的。为了不占用太多的内存,一个含有动态变量的程序,在运行时才决定给它们分配内存。

因此,溢出的数据可能会改变堆栈中保存的数值,如果改变的数据是系统调用的某个函数的返回地址,并让改变以后的函数返回地址指向溢出数据的一部分,而实际上这部分数据就是攻击者用于控制系统的恶意程序。这样,当函数返回时,系统就会执行攻击者的恶意程序,如图5-1所示。其中攻击代码一般是类似exec(“sh”)这样能获得系统控制权的程序。即使系统存在缓冲区溢出的错误,如果只是简单地利用以上方法,黑客能攻击成功的可能性还是非常小的,因为要正好改变堆栈中函数返回地址并正好指向恶意代码的概率似乎非常微小。但黑客只要采用如下办法就可以使成功的概率大幅度上升:

(1)揣测堆栈中函数返回地址的位置,然后在该位置前后重复若干次所期望的返回地址。

(2)在溢出数据中恶意代码的前面增加多个NOP指令,这样只要更改后的函数返回地址能落在一堆NOP指令的中间,则恶意程序就可顺利被系统执行。

图5-1缓冲溢出攻击时的堆栈结构

2.缓冲溢出的关键技术点

1)进程的内存组织形式为了理解什么是堆栈缓冲区,我们必须首先理解一个进程是以什么组织形式在内存中存在的。进程被分成三个区域:文本、数据和堆栈(如图5-2所示)。文本区域是由程序确定的,包括代码(指令)和只读数据。该区域相当于可执行文件的文本段。这个区域通常被标记为只读,任何对其写入的操作都会导致段错误(segmentationviolation)。数据区域包含了已初始化和未初始化的数据。静态变量储存在这个区域中。数据区域对应可执行文件中的data-bss段。它的大小可以用系统调用brk(2)来改变。如果bss数据的扩展或用户堆栈能把可用内存消耗光,则进程就会被阻塞住,等待有了一块更大的内存空间之后再运行。新内存加入到数据和堆栈段的中间。

图5-2进程内存区域

堆栈是一个经常使用的抽象数据类型。堆栈中的数据具有一个特性:最后一个放入堆栈中的总是被最先拿出来,这个特性通常称为后进先出(LIFO)队列。堆栈中定义了一些操作,其中两个最重要的是PUSH和POP。PUSH操作在堆栈的顶部加入一个元素,而POP操作相反,在堆栈顶部移去一个元素,并将堆栈的大小减一。现代计算机编程语言被设计成能被人容易理解的高级语言。在使用高级语言构造程序时,最重要的技术是过程(procedure)和函数(function)。从这一点来看,一个过程调用或函数可以像跳转(jump)命令那样改变程序的控制流程,但是与跳转不同的是,当工作完成时,函数把控制权返回给调用之后的语句或指令。这种高级抽象实现起来要靠堆栈的帮助。堆栈也用于给函数中使用的局部变量动态分配空间,同样给函数传递参数和函数返回值也要用到堆栈

2)堆栈区域堆栈是一块保存数据的连续内存。一个名为堆栈指针(SP)的寄存器指向堆栈的顶部,堆栈的底部在一个固定的地址,堆栈的大小在运行时由内核动态地调整。CPU实现指令PUSH和POP,向堆栈中添加元素和移去元素。堆栈由逻辑堆栈帧组成。当调用函数时逻辑堆栈帧被压入栈中,当函数返回时逻辑堆栈帧被从栈中弹出。堆栈帧包括函数的参数、函数的局部变量以及恢复前一个堆栈帧所需要的数据,其中包括在函数调用时指令指针(IP)的值。

堆栈既可以向下增长(向内存低地址),也可以向上增长,这依赖于具体的实现。很多计算机的实现方式堆栈是向下增长的,包括Intel、Motorola、SPARC和MIPS处理器。堆栈指针(SP)也是依赖于具体实现的。它可以指向堆栈的最后地址,或者指向堆栈之后的下一个空闲可用地址。在我们的讨论当中,SP指向堆栈的最后地址。

除了堆栈指针之外,为了使用方便还有指向帧内固定地址的指针叫做帧指针(FP),也称为局部基指针(LB,LocalBasepointer)。从理论上来说,局部变量可以用SP加偏移量来引用。然而,当有字被压栈和出栈后,这些偏移量就变了。尽管在某些情况下编译器能够跟踪栈中的字操作,由此可以修正偏移量,但是在某些情况下不能,而且在所有情况下,要引入可观的管理开销。而且在有些机器上,比如Intel处理器,由SP加偏移量访问一个变量需要多条指令才能实现。因此,许多编译器使用第二个寄存器FP,对于局部变量和函数参数都可以引用,因为它们到FP的距离不会受到PUSH和POP操作的影响。在IntelCPU中,BP(EBP)用于这个目的。在MotorolaCPU中,除了A7(堆栈指针SP)之外的任何地址寄存器都可以做FP。考虑到堆栈的增长方向,从FP的位置开始计算,函数参数的偏移量是正值,而局部变量的偏移量是负值。

当一个例程被调用时,第一件必须做的事是保存前一个FP(这样当例程退出时就可以恢复)。然后它把SP复制到FP,创建新的FP,把SP向前移动为局部变量保留空间。这称为例程的序幕(prolog)工作。当例程退出时,堆栈必须被清除干净,这称为例程的收尾(epilog)工作。Intel的ENTER和LEAVE指令,Motorola的LINK和UNLINK指令,都可以用于有效的序幕和收尾工作。下面我们用一个简单的例子来展示堆栈的模样(见图5-3)。example1.c:----------------------------------------------------voidfunction(inta,intb,intc){charbuffer1[5];

charbuffer2[10];}voidmain(){function(1,2,3);}图5-3调用Function时的堆栈结构

3)ShellCode现在我们可以修改返回地址即可以改变程序执行的流程,我们想要执行什么程序呢?在大多数情况下,我们只是希望程序派生出一个shell。从这个shell中,可以执行任何我们所希望的命令。但是如果我们试图破解的程序里并没有这样的代码可怎么办呢?我们怎么样才能把指令放到程序的地址空间中去呢?答案就是把想要执行的代码放到我们想使其溢出的缓冲区里,并且覆盖函数的返回地址,使其指向这个缓冲区。

3.缓冲溢出的防范作为编程人员可以使用具有类型安全的Java语言以避免C语言的缺陷,如果在C开发环境下应避免使用gets、sprintf等未限定边境溢出的危险函数。另外一个有效的办法是采用非执行堆栈和堆栈保护的方法,最后在产品发布前仍需要仔细检查程序溢出情况,将威胁降至最低。作为普通用户或系统管理员,首先确保及时为自己的操作系统和应用程序更新Patch,以修补公开的漏洞,其次应减少不必要的开放服务端口。

5.6后

1.后门技术原理大多数入侵者安装的后门能实现以下目的:

(1)即使管理员通过改变所有密码的方法来提高安全性,仍然能再次侵入。

(2)使再次侵入被发现的可能性减至最低。

(3)大多数安装的后门能躲过日志,大多数情况下即使入侵者正在使用系统也无法显示他已在线。一些情况下,如果入侵者认为管理员可能会检测到已安装的后门,入侵者会以系统的脆弱性作为惟一的后门,反复攻破机器,这也不会引起管理员的注意。所以在这样的情况下,一台机器的脆弱性是它惟一未被注意的后门。

2.后门技术防范

1)评估首先要做的是积极准确地评估网络的脆弱性,从而判定漏洞的存在且修复之。许多工具可以用来帮助扫描和查核网络及系统的漏洞。

2)MD5基准线一个系统(安全)扫描的重要依据是MD5校验和基准线。MD5基准线是在黑客入侵前由干净系统建立。一旦黑客入侵并建立了后门再建立基准线,那么后门也被合并进去了。一些公司被黑客入侵且系统被安置后门长达好几个月,使得所有的系统备份包含了后门,当公司发现有黑客并求助备份去掉后门时,一切努力都是徒劳的,实际上应该在入侵发生前做好基准线的建立。

3)入侵检测随着各种组织的上网和允许对自己某些机器的连接,入侵检测正在变得越来越重要。以前多数入侵检测技术是基于日志型的。最新的入侵检测系统技术(IDS)是基于实时侦听网络进行安全分析的。最新的IDS技术可以浏览DNS的UDP报文,并判断是否符合DNS协议请求。如果数据不符合协议,就发出警告信号并抓取数据进行进一步分析。同样的原则可以运用到TCP包,检查数据是否符合协议要求,或者是否装载加密shell会话。

4)从CD-ROM启动一些网络管理员考虑从CD-ROM启动来消除入侵者在CD-ROM上做后门的可能性。由于安全领域变化很快,每天都有新的漏洞被公布,而入侵者正在不断设计新的攻击和安置后门技术,因此高枕无忧的安全技术是没有的。

5.7Sniffer技术

1.Sniffer技术

Sniffer是利用计算机的网络接口截获目的地来为其他计算机的数据报文传送的一种工具。在合理的网络中,Sniffer的存在对系统管理员是非常重要的,系统管理员通过Sniffer可以诊断出大量的不可见模糊问题,这些问题涉及两台乃至多台计算机之间的异常通信,有些甚至牵涉到各种协议。借助于Sniffer系统管理员可以方便地确定出多少的通信量属于哪个网络协议?占主要通信协议的主机是哪一台?大多数通信目的地是哪台主机?报文发送占用多少时间?或者相互主机的报文传送间隔时间等等。这些信息为管理员判断网络问题、管理网络区域提供了非常宝贵的信息。但同时,非系统管理员使用了Sniffer,那么,他同样也可以获得和管理员一样多的信息,同样也可以对整个的网络做出判断。

通常在同一个网段的所有网络接口都有访问在物理媒体上传输所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址(代表所有的接口地址)。在正常情况下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论