当前位置:Linux教程 - Linux - 拒绝服务攻击的形式化描述

拒绝服务攻击的形式化描述



         █拒绝服务攻击(Denial of Service)

    拒绝服务算是新兴攻击中最另人厌恶的攻击方式之一。因为目前网络中几乎所有的机器都在使用着TCP/IP协议。这种攻击主要是用来攻击域名服务器、路由器以及其它网络操作服务,攻击之后造成被攻击者无法正常运行和工作,严重的可以使网络一度瘫痪。拒绝服务攻击是指一个用户占据了大量的共享资源,使系统没剩余的资源给其它用户再提供服务的一种攻击方式。拒绝服务攻击的结果可以降低系统资源的可用性,这些资源可以是CPU、CPU时间、磁盘空间、Mode、打印机、甚至是系统管理员的时间,往往是减少或者失去服务。 拒绝服务攻击是针对IP实现的核心进行的,它可以出现在任何一个平台之上。在UNIX系统面临的一些拒绝服务的攻击方式,完全可能也可以用相同的方式出现在Windows NT和其它系统中,他们的攻击方式和原理都大同小异。在大多版本的UNIX系统中一般会有管理员限制一个用户可以打开的最大文件数或者可以使用的进程数,其它的一些版本的UNIX也允许针对单个帐户设置可以使用的字盘存储量。但跟其它平台比较UNIX在防止拒绝服务攻击面前还是相对老套的。拒绝服务攻击的方式很多,有将连接局域网的电缆接地、向域名服务器发送大量垃圾请求数据包,使其无法完成来自其他主机的解析请求、制造大量的信息包,占据网络的带宽,减慢网络的传输速率,从而造成不能正常服务等,下面题解的是拒绝服务的详细内容。

    ►拒绝服务的类型

    一般的拒绝服务类型大多有两种,第一种就是试图破坏资源,使目标无人可以使用这个资源。第二就是过载一些系统服务或者消耗一些资源,但这个有时候是攻击者攻击所造成的,也有时候是因为系统错误造成的。但是通过这样的方式可以造成其它用户不能使用这个服务(你可以填满一个磁盘的分区,让用户和系统程序无法识别和再生成新的文件来实现。)

    这两种情况大半是因用户错误或程序错误造成的,并非针对性的攻击。(例如:一个经典的情况是程序出错,在递归条件中本来是用x!=0,结果写错了成x= =0。)

    ►针对网络中的几种方式的拒绝服务攻击:

    信息数据包流量式:此类方式经常发生在Internet中某一台主机向另一台机器发送大量的大尺寸的数据包,用来减慢这台机器处理数据的速度,从而破坏其正常处理服务的请求情况。这样的数据包往往可能是要求登陆、文件服务或者是简单的PWG。不管是什么样子,这样大量的数据包就会加重影响目标机器CPU的负载能力,使其消耗大量的资源来响应这些垃圾请求。严重之下可以造成机器没有内存来做任何缓冲存放其它的新的请求,结果就可能会因错误而死机,很多服务器被如此攻击的事实屡见不鲜。在98年,美国人Victory针对加拿大的一台服务器做出了一次这样的攻击,他先写了个程序,这个程序每秒可以发送近千个echo请求到加的服务器请求echo服务,来炸这个NIS服务器,结果使加的这个服务器在一段时间内根本无法再响应网络中的任何请求,同时Victory登陆到一台跳板的特权用户,这个跳板向加的NIS服务器询问NIS口令,但是因加的NIS服务器遇到了echo数据包的袭击根本不能做出这个响应,这个时候Victory所用的主机便可以伪装成为一个服务器用来响应跳板的请求,向跳板发出一个用户口令错误的信息,然后Victory再利用这个时间编写了一个程序,专门用来回答那些本来应由加的NIS服务器回答的请求,这样以来,Victory轻而易举的拿到了这个主机的用户口令和权限。对于此类攻击的一般防御是通过一个监视程序,将网络分割成若干小的子网,可以有效的防止,但完全防止是不可能的。

    SYN-Flooding攻击:其实这样的攻击也就是所谓的IP欺骗。就是用一个伪装的地址向目标机器发送一个SYN的请求,多发便可占用目标机器足够的资源,从而造成服务拒绝。它的原理就是向目标机器发出这样的请求之后,就会使用一些资源来为新的连接提供服务,接着回复请求一个SYN-ACK的答复。由于这个回复是返回到一个伪装的地址上了,所以它没有任何响应,目标机器便会无休止的继续发送这个回复直到“对方”反应为止,但事实上“对方”根本上不会做出任何反应的。在一些系统中都有缺省的回复次数和超时时间,只有回复一定的次数或者超时的时候占用资源才会释放。NT3.5x和4.0中缺省设置为可重复发送SYN-ACK答复5次,每次重发后等待时间翻一翻,第一次等待时间为3秒钟,到5次重发之时机器将等待48秒才能得到响应,如果仍是无法收到响应的时候系统将仍要等待96秒才取消分配给连接的资源,在这些资源得到释放之前已经是189秒之后了。其实这样的攻击不会得到任何系统的访问权限的,但对于大多数的TCP/IP协议栈,处于SYN-RECEIVED状态的连接数量非常有限,当达到端口极限的时候目标机器通常作出个响应,重新设置所有的额外连接请求,直到分配的资源释放出来为止。一般情况下你可以使用网络netstat命令来查看自己的连接情况来确认是否正处于或者受到SYN-Flood攻击。你可用netstat –n –a tcp命令就可。如果大量的连接线路处于SYN-RECEIVED状态,那么你正在遭受着攻击。。。。。。其实这样的感觉你可以在oicq中发送一个因网络不通的信息就可以体会得到的^*^。

    “Paste”式攻击:在很多UNIX系统的TCP/IP协议实现程序中,往往存在着被滥用的可能性,那么这样就会被别人利用从而使用TCP的半连接来消耗系统资源造成服务拒绝。TCP连接是通过三次握手来建立一个连接和设置参数的,我想这个对你来说不会陌生的,因为这属于上网的常识性问题。如果向一个目标机器发出很多个连接的请求,这样就可以建立初步的连接,但并非是个完全的连接,因为它没有完成所有的连接步骤,这就是所谓的半连接,当目标机器收到这样的半连接之后便会将其保留,并占有限的资源。但大多时候这样的连接所使用的是伪造的源地址,表明了连接来自一台不存在的机器或者一台根本无法访问的机器,这样就不可能去跟踪这个连接,唯一能做的只能是等待这个连接因为超时而释放。

    服务过载式:当大量的服务请求发送到一台目标机器中的守护进程,这样就使目标机器忙于处理这样的请求,造成无法处理其它的常规任务,同时一些其它的连接也将被丢弃,因为已经没有余力和空间来存放这些请求,这时候就会发生服务过载。如果攻击所针对的是TCP协议的服务,那么这些请求还将会被重发,结果更加会造成网络的负担。类似如此的攻击多半是源于想隐藏自己,防止所被攻击的机器将自己记录,这样的攻击还可以阻止系统提供的其它一些特定的服务。此外当被攻击的服务有inetd进程的话,使用nowait选项启动时,缺省的inetd有个“strangle”的功能在里面。在很短时间内,针对它所监视的那些服务带来了过多的请求时它将开始拒绝那些请求了,并且用Syslog记录下那些错误的服务请求。在这样的情况之下服务进程本身不会运行失败的,同时也留下了记录,可以追踪到问题的根本所在。。。

    ►过载攻击:过载攻击可有进程过载攻击、系统过载攻击、磁盘过载攻击等。

    进程过载攻击是最简单的拒绝服务攻击。它攻击的效果就是拒绝与你同时间内连接目标机器的其它用户,这样往往表现在发生共享的机器上,如果没人跟你争那么这样将毫无必要。这样的攻击对于现在的UNIX系统不会有太大的效果的,现在的Unix限制任何UID(除了0)使用的进程数目。这个限制叫做“MAXUPROC”,当系统构筑时,在内核进行设置,一些系统允许在启动的时候设置这个值。比如Solaris允许在/etc/system文件中设置这个值。Set MAXUPROC=100

    在Unix系统中,可以通过发送sigterm信号来消除一些垃圾进程。命令如:

    #kill-TERM-1

    #

    或者是(如果你当前的Unix没有上述的话)

    #kill-TERM1

    #

    (当然了,你必须有root的权限)Unix会自动kill掉一些的垃圾进程,然后进入单机模式,再者可以执行sync重新启动系统即可。但如果没有root权限在手的话,你可以使用exec来运行su,因为这个不需要生成新的进程,

    % exec/bin/su

    password:

    #

    这里值得注意的是你不要打错了口令或者直接运行exec ps,因为程序会执行,完毕后将自动退出系统^*^,不过我建议如果你是在本地的话还是在机箱上按RESET的好,虽然有点破坏磁盘的文件但是却很管用。哈哈。

    系统过载攻击:流行的一种基于进程的攻击,原因是一个用户产生了许多进程,消耗了大量的CPU的时间,这样就减少了其它用户可用的CPU处理时间。比如说当你使用了近十多个find命令,并使用了gerp在一些目录里查找文件,这些都可以使系统变的很慢。建议多用户使用nice从而降低后台运行进程的优先级,或使用at和batch命令将一些长的任务安排在系统较清闲的时候使用。不过如果是有意式攻击的话没人理会这个的哦。你还得通过root登陆,再将自己的优先级设置高点,通过ps查看然后针对垃圾进程kill掉就OK了。



    其实在网络中,系统对拒绝服务攻击的抵抗能力很差的,今年的雅虎、亚马逊、CNN、ebay等国际著名站点都是被拒绝服务攻击所瘫痪。而在这些攻击中所用的工具从去年就开始流行于网络中了,这就是udpflood。

    你可以从http://semxa.kstar.com/hacking/udpflood.exe获得它,这个是经过我汉化之后的。但是它的效果并非传说中的那么厉害。单一的使用udpflood根本不会造成什么大的结果的。除非你有相对的技术,有针对性的去进行攻击。

    附:两种破坏性的拒绝服务的攻击以及措施

    **重新格式化磁盘分区或运行newfs/mkfs命令

    防备:防止任何用户在单用户状态下访问机器,保护系统管理员的帐号,对那些只读的磁盘进行保护。

    **删除关键文件,比如像/dev/下的文件或者是ect/passwd文件

    防备:使用正确的模式字(像755或711)保护系统文件,保护好root权限,将NFS的文件设置为root所有,并且以只读的方式调出。

    本文出自:寒路 转载请注明出处并保证文章完整
    发布人:闻君 来自:网络安全最高指南