论坛: 黑客进阶 标题: 攻击形式 复制本贴地址    
作者: qmdjzgqt [qmdjzgqt]    论坛用户   登录
Internet中各种攻击的形式化描述


作者:不详  来源:不详  加入时间:2002-12-21  阅读次数:
阅读选项:文字 黑色红色白色灰色绿色蓝色青色黄色背景 白色粉红灰色绿色蓝色黑色青色棕色字号 9 pt10 pt12 pt14 pt16 pt18 pt24 pt30 pt字型 正常加粗 自动滚屏[左键停止] 

在这众多的Internet问题中,黑客和网络安全也许是最令人关注的问题。。。本文主要不是谈黑客和网络安全的具体技术,而是对网络中的各种攻击的进行形式化描述。所描述的对象有以下几个方面:

拒绝服务攻击(Denial of Service)包括分布式Ddos攻击

电子邮件攻击 缓冲区溢出*攻击* 网络监听攻击技术

IP欺骗攻击 扫描程序与口令攻击 计算机病毒

Trojan Horse和PGP攻击 路由和防火墙技术引发的攻击等


\*拒绝服务攻击(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 �Cn �Ca tcp命令就可。如果大量的连接线路处于SYN-RECEIVED状态,那么你正在遭受着攻击。。。。。。其实这样的感觉你可以在oicq中发送一个因网络不通的信息就可以体会得到的^*^。

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

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

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

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

分布式拒绝服务(DDos)攻击

1999年7月份左右,[M$]公司的视窗操作系统的一个bug被人发现和利用,并且进行了多次攻击,这种新的攻击方式被称为“分布式拒绝服务攻击”即为“DDos(Distributed Denial Of Service Attacks)攻击”。这也是一种特殊形式的拒绝服务攻击。它是利用多台已经被攻击者所控制的机器对某一台单机发起攻击,在这样的带宽相比之下被攻击的主机很容易失去反应能力的。现在这种方式被认为是最有效的攻击形式,并且很难于防备。但是利用DDos攻击是用一定难度的,没有高超的技术是很难实现的,因为不但要求攻击者熟悉入侵的技术而且还要有足够的时间和脑袋。而现在却因有黑客编写出了傻瓜式的工具来帮助所以也就使DDos攻击相对变的简单了。比较杰出的此类工具目前网上可找到的有Trin00、TFN等。这些源代码包的安装使用过程比较复杂,因为你首先得找到目标机器的漏洞,然后通过一些的远程溢出漏洞攻击程序,获取系统的控制权,再在这些机器上安装并运行的DDos分布端的攻击守护进程。

其实Trin00有点像木马程序,它由三部分构成,三部分分别是客户端、主控端(master)、Broadcast(即分布端攻击守护进程)。客户端是telnet的程序,作用是向目标主制端(master)攻击发送命令。主控端(master)主要是监听两个连接的端口27655和31355。其中27655就是用来接收由客户端发来的命令,这个执行要求密码,如果缺省密码可能是“betaalmostdone”,主控端(master)启动的时候会显示一个提示符号“?”,等待密码输入之后(密码为g0rave)31355这个端口便开始等候分布端的UDP报文。至于Broadcast(即分布端攻击守护进程),在这个时候当然毫无疑问的就是执行攻击的了。这个端是安装在一台已经被你所控制的机器上的,编译分布端之前首先得先植入主控端(master)的真实有效的IP地址,它跟主控端(master)是利用UDP报文通信的,发送至主控端(master)的31355端口,其中包含“*HELLO*”的字节数据,主控端把目标机器的信息通过UDP27444端口发送给Broadcast(即分布端攻击守护进程),这个时候Broadcast(即分布端攻击守护进程)便回开始发起攻击了。这次攻击的流向显而易见为:

发起攻击的机器-à主控端(master)-à Broadcast―>目标机器

从Broadcast(即分布端攻击守护进程)向目标机器发出的都是UDP报文,每个包含4个空字节,这些报文都是从一个端口发出的,但是针对的目标机器的端口则是不同的。目标机器对每个报文都要回复一个ICMP Port Unreachable的信息,大量不同主机发来的这些UDP报文会把目标机器变的慢慢的速度减低。一直到带宽成为0。

关于这个Trin00工具你可以从http://semxa.kstar.com/hacking/Trin00.exe获得。但是需要你再进行编译和移植哦,否则将不可使用。

DDos攻击的主要效果是消耗目标机器的带宽,所以很难防御的。但有很多方法可以检测的到这种攻击。可以通过IDS来防御和检测,分析得到的UDP报文,寻找那些针对本地不同端口的报文而又是从一个源地址的同一个端口发来的UDP报文。或者可以拿出十个以上的UDP报文,分析是否来自同一个地址,相同的地址,相同的端口,不同的只是端口报文,那么这个就必须得注意了。还有一种就是寻找那些相同的源地址和相同的目标地址的ICMP Port Unreachable的信息。这些方法都可以使管理员识别到攻击来自何方。

你还可以从http://semxa.kstar.com/hacking/iiscrash.zip获得IIScrash程序,这个程序可以使IIS服务器拒绝服务,效果就是可以使远程机器禁止多个网络服务。虽然它还不是危害网络安全的主要因素,但是对于防御较薄弱的IIS服务器还是有点伤害的。所以建议小心使用。你还可以从http://semxa.kstar.com/hacking/iis4dos01.exe获得由国人小榕编写的针对IIS4D.o.S 0.1-IIS4的攻击工具,效果会使IIS4服务器当机。但目前来看,效果并非很明显。

\*电子邮件的攻击

电子邮件炸弹是一种让人厌烦的攻击。传统的邮件炸弹大多只是简单的向邮箱内扔去大量的垃圾邮件,从而充满邮箱,大量的占用了系统的可用空间和资源。使机器暂时无法正常工作。如果是拨号上网的用户利用pop来接收的话那么还会增加连网时间,造成费用和时间的浪费。事实上现在这样的工具在网络中随时都可以找到,不单是如此,更另人担心的是这些工具往往会让一些刚刚学会上网的人利用,因为它很简单。同时这些工具有着很好的隐藏性,能保护到发起攻击者的地址。过多的邮件垃圾往往会加剧网络的负载力和消耗大量的空间资源来储存它们,过多的垃圾信件还将导致系统的log文件变得很大,甚至有可能溢出文件系统,这样会给Unix、Windows等系统带来危险。除了系统有崩溃的可能之外,大量的垃圾信件还会占用大量的CPU时间和网络带宽,造成正常用户的访问速度成了问题。例如:同时间内有近百人同时向某国的大型军事站点发去大量的垃圾信件的话,那么这样很有可能会使这个站的邮件服务器崩溃,甚至造成整个网络中断。

其实电子邮件因为它的可实现性比较广泛,所以也使网络面临着很大的安全危害,恶意的针对25(缺省的SMTP端口)进行SYN-Flooding攻击等等都会是很可怕的事情。电子邮件攻击有很多种,主要表现为:

窃取、篡改数据:通过监听数据包或者截取正在传输的信息,可以使攻击者读取或者修改数据。通过网络监听程序,在Winodws系统中可以使用NetXRay来实现。UNIX、Linux系统可以使用Tcpdump、Nfswatch(SGI Irix、HP/US、SunOS)来实现。而著名的Sniffer则是有硬件也有软件,这就更为专业的了。

伪造邮件:通过伪造的电子邮件地址可以用诈骗的方法进行攻击。

拒绝服务:让系统或者网络充斥了大量的垃圾邮件,从而没有余力去处理其它的事情,造成系统邮件服务器或者网络的瘫痪

病毒:在现在生活中,很多病毒的广泛传播是通过电子邮件传播的。I love you就是新千年里最为鲜明的例子。

?电子邮件的发送过程

对于保护电子邮件的安全来说,了解一下电子邮件的发送过程是很有必要的。它的过程是这样的,当有用户将邮件写好之后首先连接到邮件服务器上,当邮件服务器有响应时便会启动邮件工具,调用路由(这里指的是邮件的路由)程序Sendmail进行邮件路由,根据邮件所附的接收地址中指定的接收主机,比如:semxa@yeah.net里的yeah.net,与位于主机yeah.net电子邮件后台守护程序建立25端口的TCP连接,建立后双方按照SMTP协议进行交互第进,从而完成邮件的投递工作,接收方电子邮件接收邮件后,再根据接收用户名称,放置在系统的邮件目录里,如/usr/电子邮件目录的semxa文件中。接收用户同样使用邮件工具获取和阅读这些已投递的邮件。如果投递失败的话,这些邮件将重新返回到发送方。实际上电子邮件的发送过程要比这里所说的更为复杂些,在过程里将会涉及很多的配置文件。在现在的SMTP协议是一个基于文本的协议,理解和实现都相对比较简单些,你可以使用telnet直接登陆到邮件服务器的25端口(由LANA授权分配给SMTP协议)进行交互。

?电子邮件欺骗:

就目前来说,SMTP协议极其缺乏验证能力,所以假冒某一个邮箱进行电子邮件欺骗并非一件难的事情,因为邮件服务器不会对发信者的身份做任何检查的。如果邮件服务器允许和它的25SMTP端口连接的话,那么任何一个人都可以连接到这个端口发一些假冒或乌有用户的邮件,这样邮件就会很难找到跟发信者有关的真实信息,唯一能检查到的就是查看系统的log文件。找到这个信件是从哪里发出的。但事实上很难找到伪造地址的人的。一个SMTP会话的文本是这样的:在使用helo表明本方标识以后,邮件发送方应该通过电子邮件from和rcpt to命令指出这个邮件的发送方和接收方,然后再调用data命令输入邮件正文的数据,并且以“.”为首的行表示数据的结束,最后通过quit命令退出SMTP会话并且结束与25端口的连接。这样你可以自己测试一下伪造的秘密所在了。当然了,这应该是为安全而测的。

?保护电子信箱

保护电子信箱邮件的信息安全最有效的办法就是使用加密的签名技术,像PGP来验证邮件,通过验证可以保护到信息是从正确的地方发来的,而且在传送过程中不被修改。但是这就不是个人用户所能达到的了。因为PGP比较复杂。

就电子邮件炸弹,保护还是可以做得很好的。因为它的复杂性不是很高,多的仅仅是垃圾邮件而已。你可以到
http://semxa.kstar.com/hacking/echom201.zip获得一个E-mail Chomper(砍信机)来保护自己。但是目前就国内用户而言,大多用户所使用的都是免费的邮箱,像yeah.net、163.net、263.net等,即便是有人炸顶多也是留在邮件服务器上了,危害基本上是没有的。如果是用pop3接的话,可以用Outlook或Foxmail等pop的收信工具来接收的mail,大多用户使用的是windows的Outlook Express,可以在“工具à收件箱助理”中设置过滤。对于各种利用电子邮件而传播的Email蠕虫病毒和对未知的Emai蠕虫病毒你可以在http://semxa.kstar.com/hacking/KiloveU.exe获得一个由天网安全实验室开发的Email病毒免疫模块来保护。

附:一个在UNIX下用Perl编写的邮件炸弹实例

#!/bin/perl(perl所在目录)

$ mailprop=’/user/lib/sendmail’;(sendmail所在目录)

$recipient=’xxx@xxx.com.jp’(攻击目标)

$variable_initialized_to_0=0;(设定变量)

while ($ variable_initialized_to_0=0)<1000){

open (MAIL,$ mailprog$ recipient”) | | die”Can’t open$ mailprog! \ n

print MAIL” YOU Sunk!”

close (MAIL);

Sleep 3;

$ variable_initialized_to_0+ +;(自己增)

}

上面的代码将一个变量variable_initialized_to_0初始化为0然后指定只要该变量小于1000,就将邮件发送给目标接收者。程序经过while循环一次,变量variable_initialized_to_0的值加1。邮件将被传送999次。如果叫一个攻击者手工去输入一大群目标的话,我想攻击者应该都不会做了,但是他们往往会利用邮件列表来完成,所以当你在一些Web看到诸如“请你留您的E-mail,我们如果更新之时可以及时的通知您”的时候还是谨慎为好。

如果你仅仅是为了研究的话可以从http://semxa.kstar.com/hacking/Kaboom!3.zip获得一个最为经典的邮箱炸弹Kaboom!3。

十年来攻击和防卫的弱点”――缓冲区溢出*攻击*

大凡上网久点的网人对缓冲区溢出应该是知道的,因为它的确是一个众人皆知、非常危险的漏洞,它是个不分什么系统、什么程序,都广泛存在的一个漏洞。以缓冲区溢出为类型的安全漏洞是最为常见,也是被黑客最多使用的攻击漏洞。所以了解缓冲区溢出方面的知识对于黑客也好或者管理员也好也或者是一般的网人也好都相对是有必要的。


?缓冲区溢出的概念和原理

缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,然后植入到缓冲区,而再向一个有限空间的缓冲区中植入超长的字符串可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另有一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。大多造成缓冲区溢出的原因是程序中没有仔细检查用户输入参数而造成的。

缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。这样想下去的话,如果说要给程序在动态分配缓冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方,这就不是什么好现象了。仅仅就单个的缓冲区溢出惹眼,它并不是最大的问题根本所在。但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。


?缓冲区溢出漏洞攻击方式

缓冲区溢出漏洞可以使任何一个有黑客技术的人取得机器的控制权甚至是最高权限。一般利用缓冲区溢出漏洞攻击root程序,大都通过执行类似“exec(sh)”的执行代码来获得root 的shell。黑客要达到目的通常要完成两个任务,就是在程序的地址空间里安排适当的代码和通过适当的初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。


●在程序的地址空间里安排适当的代码:

其实在程序的地址空间里安排适当的代码往往是相对简单的,但也同时要看运气如何。如果说要攻击的代码在所攻击程序中已经存在了,那么就简单的对代码传递一些参数,然后使程序跳转到目标中就可以完成了。攻击代码要求执行“exec(‘/bin/sh’)”,而在libc库中的代码执行“exec(arg)”,当中的“arg”是个指向字符串的指针参数,只要把传入的参数指针修改指向“/bin/sh”,然后再跳转到libc库中的响应指令序列就OK了。当然了,很多时候这个可能性是很小的,那么就得用一种叫“植入法”的方式来完成了。当向要攻击的程序里输入一个字符串的话,程序就会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个所攻击的目标的硬件平台上运行的指令序列。缓冲区可以设在像:堆栈(自动变量)、堆(动态分配的)和静态数据区(初始化或者未初始化的数据)等的任何地方。也可以不必为达到这个目的而溢出任何缓冲区,只要找到足够的空间来放置这些攻击代码就够了。


●将控制程序转移到攻击代码的形式:

所有的这些方法都是在寻求改变程序的执行流程,使它跳转到攻击代码,最为基本就是溢出一个没有检查或者其它漏洞的缓冲区,这样做就会扰乱程序的正常执行次序。通过溢出某缓冲区,可以改写相近程序的空间而直接跳转过系统对身份的验证。原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就带出了多种转移方式。

1、 unction Pointers(函数指针)

在程序中,“void (* foo) ( )”声明了个返回值为“void” Function Pointers的变量“foo”。Function Pointers可以用来定位任意地址空间,攻击时只需要在任意空间里的Function Pointers邻近处找到一个能够溢出的缓冲区,然后用溢出来改变Function Pointers。当程序通过Function Pointers调用函数,程序的流程就会实现。这个你可调用Linux下的superprobe程序体验一下。

2、 ctivation Records(激活记录)

当一个函数调用发生时,堆栈中会留驻一个Activation Records,它包含了函数结束

时返回的地址。执行溢出这些自动变量,使这个返回的地址指向攻击代码,再通过改变程序的返回地址。当函数调用结束时,程序就会跳转到事先所设定的地址,而不是原来的地址。这样的溢出方式也是较常见的。你在使用漏洞扫描(Unix下的SATAN或者NT下的Retina)器时,最好是多注意“stack smashing attack”的字样。呵呵。

3、 Longjmp buffers(长跳转缓冲区)

在C语言中包含了一个简单的检验/恢复系统,称为“setjmp/longjmp”,意思是在

检验点设定“setjmp(buffer)”,用longjmp(buffer)“来恢复检验点。如果攻击时能够进入缓冲区的空间,感觉“longjmp(buffer)”实际上是跳转到攻击的代码。像Function Pointers一样,longjmp缓冲区能够指向任何地方,所以找到一个可供溢出的缓冲区是最先应该做的事情。


●植入综合代码和流程控制

常见的溢出缓冲区攻击类是在一个字符串里综合了代码植入和ctivation Records。攻击时定位在一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出改变ctivation Records的同时植入代码(权因C在习惯上只为用户和参数开辟很小的缓冲区)。植入代码和缓冲区溢出不一定要一次性完成,可以在一个缓冲区内放置代码(这个时候并不能溢出缓冲区),然后通过溢出另一个缓冲区来转移程序的指针。这样的方法一般用于可供溢出的缓冲区不能放入全部代码时的。如果想使用已经驻留的代码不需要再外部植入的时候,通常必须先把代码做为参数。在libc(熟悉C的朋友应该知道,现在几乎所有的C程序连接都是利用它来连接的)中的一部分代码段会执行“exec(something)”,当中的something就是参数,使用缓冲区溢出改变程序的参数然后利用另一个缓冲区溢出使程序指针指向libc中的特定的代码段。

对缓冲区溢出有兴趣的朋友,有必要找找eEye公司开发的Retina发现IIS4.0的那个缓冲区溢出漏洞引起的很多黑客攻击实例来看看。你可以在http://www.safefan.com(傲气雄鹰网络安全小组)找到关于它们的资料,做为网络管理人员最因该熟悉它们。

程序编写的错误造成网络的不安全性也当受到重视,因为它的不安全性已被缓冲区溢出表现的淋漓尽致了。


\*缓冲区溢出的防患

缓冲区溢出的漏洞被发现到利用以来一直都是网络安全领域的最大隐患,很多安全人士均对这些漏洞做了仔细的研究,但是缓冲区溢出的完全防止往往因为这样那样的人为或者其它的因素仍显得有点力不从心。在这篇文章里,就目前缓冲区溢出漏洞的几种保护方法做个简单的描述。

?正确的编写代码

我想在编写代码的时候一般不会有人故意想要发生错误的,但是丝毫的错误往往会造成严重后果(C语言多是字符串因0收尾,往往就是一个很不安全例子)。所以正确的编写代码是很关键的。

在编写时以免错误发生最原始的方法就是用gerp来找出源代码中较容易产生的漏洞的库的调用。像对sprintf和strcpy的调用,这两个函数都不会检查参数输入的长度。有的在编写的时候采用了sprintf和strcpy的替代函数来防止,但是还是会有问题发生的。因为这些错误的隐蔽性,所以就出现了查错工具faultin-jection。faultin-jection可以通过人为随时产生一些缓冲区溢出来找到代码的安全漏洞。只能说faultin-jection等类似的工具可以让编写时缓冲区溢出的漏洞更少一点,而完全的没有则是不现实的。因为它们确实不可能找到所有的溢出缓冲区的漏洞。编写时重复的检查代码的漏洞可以使程序更加完美和安全。

?非执行的缓冲区

在老版的UNIX系统中,程序的数据段地址空间是不可执行的,这样就使得黑客在利用缓冲区植入代码时不能执行。但是现在的UNIX和Windows系统考虑到性能和功能的速率和使用合理化,大多在数据段中动态形式的放入了可执行的代码,为了保证程序的兼容性不可能使用所有程序的数据段不可执行间。但可以通过只设定堆栈数据段不可执行,这样就很大程度上保证了程序的兼容性能。UNIX、Linux、Windows、Solaris都已经发布了这方面的补丁。

?检查数组边界

数组边界检查完全没有缓冲区溢出的产生,所以只要保证数组不溢出,那么缓冲区溢出攻击也就只能是望梅止渴了。实现数组边界检查,所有的对数组的读写操作都应该被检查,这样可以保证对数组的操作在正确的范围之内。检查数组是一件叫人头大的事情,所以利用一些优化技术来检查就减少了负重。可以使用Compaq公司专门为Alpha CPU开发的Compaq C编译器、Jones&Kelly的C的数组边界检查、Purify存储器存取检查等等来检查。

所有的缓冲区溢出漏洞都归于C语言的“功劳”。如果只有类型-安全的操作才可以被允许执行,这样就不会出现对变量的强制操作。类型-安全的语言被认定为Java和ML等,但作为Java执行平台的Java虚拟机是C程序,所以攻击JVM的途径就是使JVM的缓冲区溢出。。。。。。。

?程序指针完整性检查

程序指针完整性检查在程序指针被引用之前检测到它的改变,这个时候即便是有人改变了程序的指针,也辉因为系统早先已经检测到了指针的改变而不会造成指针对利用的。但程序指针完整性检查不能解决所有的缓冲区溢出问题;如果有人使用了其它的缓冲区溢出,那么程序指针完整性检查就不可能检测到了。可话又说回来了,程序指针完整性检查在性能上却有着很大的优势,并且有良好的兼容性。


网络监听攻击技术

在网络中,当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击。网络监听在网络中的任何一个位置模式下都可实施进行。而黑客一般都是利用网络监听来截取用户口令。比如当有人占领了一台主机之后,那么他要再想将战果扩大到这个主机所在的整个局域网话,监听往往是他们选择的捷径。很多时候我在各类安全论坛上看到一些初学的爱好者,在他们认为如果占领了某主机之后那么想进入它的内部网应该是很简单的。其实非也,进入了某主机再想转入它的内部网络里的其它机器也都不是一件容易的事情。因为你除了要拿到他们的口令之外还有就是他们共享的绝对路径,当然了,这个路径的尽头必须是有写的权限了。在这个时候,运行已经被控制的主机上的监听程序就会有大收效。不过却是一件费神的事情,而且还需要当事者有足够的耐心和应变能力。

\*网络监听的原理

Ethernet(以太网,它是由施乐公司发明的一种比较流行的局域网技术,它包含一条所有计算机都连接到其上的一条电缆,每台计算机需要一种叫接口板的硬件才能连接到以太网)协议的工作方式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到信息包,但是当主机工作在监听模式下的话不管数据包中的目标物理地址是什么,主机都将可以接收到。许多局域网内有十几台甚至上百台主机是通过一个电缆、一个集线器连接在一起的,在协议的高层或者用户来看,当同一网络中的两台主机通信的时候,源主机将写有目的的主机地址的数据包直接发向目的主机,或者当网络中的一台主机同外界的主机通信时,源主机将写有目的的主机IP地址的数据包发向网关。但这种数据包并不能在协议栈的高层直接发送出去,要发送的数据包必须从TCP/IP协议的IP层交给网络接口,也就是所说的数据链路层。网络接口不会识别IP地址的。在网络接口由IP层来的带有IP地址的数据包又增加了一部分以太祯的祯头的信息。在祯头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址这是一个48位的地址,这个48位的地址是与IP地址相对应的,换句话说就是一个IP地址也会对应一个物理地址。对于作为网关的主机,由于它连接了多个网络,它也就同时具备有很多个IP地址,在每个网络中它都有一个。而发向网络外的祯中继携带的就是网关的物理地址。

Ethernet中填写了物理地址的祯从网络接口中,也就是从网卡中发送出去传送到物理的线路上。如果局域网是由一条粗网或细网连接成的,那么数字信号在电缆上传输信号就能够到达线路上的每一台主机。再当使用集线器的时候,发送出去的信号到达集线器,由集线器再发向连接在集线器上的每一条线路。这样在物理线路上传输的数字信号也就能到达连接在集线器上的每个主机了。当数字信号到达一台主机的网络接口时,正常状态下网络接口对读入数据祯进行检查,如果数据祯中携带的物理地址是自己的或者物理地址是广播地址,那么就会将数据祯交给IP层软件。对于每个到达网络接口的数据祯都要进行这个过程的。但是当主机工作在监听模式下的话,所有的数据祯都将被交给上层协议软件处理。

当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网的时候,那么要是有一台主机处于监听模式,它还将可以接收到发向与自己不在同一个子网(使用了不同的掩码、IP地址和网关)的主机的数据包,在同一个物理信道上传输的所有信息都可以被接收到。

在UNIX系统上,当拥有超级权限的用户要想使自己所控制的主机进入监听模式,只需要向Interface(网络接口)发送I/O控制命令,就可以使主机设置成监听模式了。而在Windows9x的系统中则不论用户是否有权限都将可以通过直接运行监听工具就可以实现了。

在网络监听时,常常要保存大量的信息(也包含很多的垃圾信息),并将对收集的信息进行大量的整理,这样就会使正在监听的机器对其它用户的请求响应变的很慢。同时监听程序在运行的时候需要消耗大量的处理器时间,如果在这个时候就详细的分析包中的内容,许多包就会来不及接收而被漏走。所以监听程序很多时候就会将监听得到的包存放在文件中等待以后分析。分析监听到的数据包是很头疼的事情。因为网络中的数据包都非常之复杂。两台主机之间连续发送和接收数据包,在监听到的结果中必然会加一些别的主机交互的数据包。监听程序将同一TCP会话的包整理到一起就相当不容易了,如果你还期望将用户详细信息整理出来就需要根据协议对包进行大量的分析。Internet上那么多的协议,运行进起的话这个监听程序将会十分的大哦。

现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好的,通信的双方充分信任的基础。在通常的网络环境之下,用户的信息包括口令都是以明文的方式在网上传输的,因此进行网络监听从而获得用户信息并不是一件难点事情,只要掌握有初步的TCP/IP协议知识就可以轻松的监听到你想要的信息的。前些时间美籍华人China-babble曾提出将望路监听从局域网延伸到广域网中,但这个想法很快就被否定了。如果真是这样的话我想网络必将天下大乱了。而事实上现在在广域网里也可以监听和截获到一些用户信息。只是还不够明显而已。在整个Internet中就更显得微不足道了。

下面是一些系统中的著名的监听程序,你可以自己尝试一下的。

Windows9x/NT NetXRay http://semxa.kstar.com/hacking/netxray.zip

DEC Unix/Linux Tcpdump http://semxa.kstar.com/hacking/management.zip

Solaris Nfswatch http://semxa.kstar.com/hacking/nfswatch.zip

SunOS Etherfind http://semxa.kstar.com/hacking/etherfind012.zip


\*检测网络监听的方法

网络监听在上述中已经说明了。它是为了系统管理员管理网络,监视网络状态和数据流动而设计的。但是由于它有着截获网络数据的功能所以也是黑客所惯用的伎俩之一。

一般检测网络监听的方法通过以下来进行:

?网络监听说真的,是很难被发现的。当运行监听程序的主机在进听的过程中只是被动的接收在以太网中传输的信息,它不会跟其它的主机交换信息的,也不能修改在网络中传输的信息包。这就说明了网络监听的检测是比较麻烦的事情。

一般情况下可以通过ps-ef或者ps-aux来检测。但大多实施监听程序的人都会通过修改ps的命令来防止被ps-ef的。修改ps只需要几个shell把监听程序的名称过滤掉就OK了。一能做到启动监听程序的人也绝对不是个菜的连这个都不懂的人了,除非是他懒。

上边提到过。当运行监听程序的时候主机响应一般会受到影响变的会慢,所以也就有人提出来通过响应的速率来判断是否受到监听。如果真是这样判断的话我想世界真的会大乱了,说不准一个时间段内会发现无数个监听程序在运行呢。呵呵。

如果说当你怀疑网内某太机器正在实施监听程序的话(怎么个怀疑?那要看你自己了),可以用正确的IP地址和错误的物理地址去ping它,这样正在运行的监听程序就会做出响应的。这是因为正常的机器一般不接收错误的物理地址的ping信息的。但正在进听的机器就可以接收,要是它的IP stack不再次反向检查的话就会响应的。不过这种方法对很多系统是没效果的,因为它依赖于系统的IP stack。

另一种就是向网上发大量不存在的物理地址的包,而监听程序往往就会将这些包进行处理,这样就会导致机器性能下降,你可以用icmp echo delay来判断和比较它。还可以通过搜索网内所有主机上运行的程序,但这样做其的难度可想而知,因为这样不但是大的工作量,而且还不能完全同时检查所有主机上的进程。可是如果管理员这样做也会有很大的必要性,那就是可以确定是否有一个进程是从管理员机器上启动的。

在Unix中可以通过ps �Caun或ps �Caugx命令产生一个包括所有进程的清单:进程的属主和这些进程占用的处理器时间和内存等。这些以标准表的形式输出在STDOUT上。如果某一个进程正在运行,那么它将会列在这张清单之中。但很多黑客在运行监听程序的时候会毫不客气的把ps或其它运行中的程序修改成Trojan Horse程序,因为他完全可以做到这一点的。如果真是这样那么上述办法就不会有结果的。但这样做在一定程度上还是有所作为的。在Unix和Windows NT上很容易就能得到当前进程的清单了。但DOS、Windows9x好象很难做到哦,具体是不是我没测试过不得而知。

还有一种方式,这种方式要靠足够的运气。因为往往黑客所用的监听程序大都是免费在网上得到的,他并非专业监听。所以做为管理员用来搜索监听程序也可以检测。使用Unix可以写这么一个搜索的小工具了,不然的话要累死人的。呵呵。

有个叫Ifstatus的运行在Unix下的工具,它可以识别出网络接口是否正处于调试状态下或者是在进听装下。要是网络接口运行这样的模式之下,那么很有可能正在受到监听程序的攻击。Ifstatus一般情况下不会产生任何输出的,当它检测到网络的接口处于监听模式下的时候才回输出。管理员可以将系统的cron参数设置成定期运行Ifstatus,如果有好的cron进程的话可以将它产生的输出用mail发送给正在执行cron任务的人,要实现可以在crontab目录下加****/usr/local/etc/ifstatus一行参数。这样不行的话还可以用一个脚本程序在crontab下00****/usr/local/etc/run-ifstatus。

抵御监听其实要看哪个方面了。一般情况下监听只是对用户口令信息比较敏感一点(没有无聊的黑客去监听两台机器间的聊天信息的那是个浪费时间的事情)。所以对用户信息和口令信息进行加密是完全有必要的。防止以明文传输而被监听到。现代网络中,SSH(一种在应用环境中提供保密通信的协议)通信协议一直都被沿用,SSH所使用的端口是22,它排除了在不安全信道上通信的信息,被监听的可能性使用到了RAS算法,在授权过程结束后,所有的传输都用IDEA技术加密。但SSH并不就是完全安全的。至少现在我们可以这么大胆评论了。

\*著名的Sniffer监听工具

Sniffer之所以著名,权因它在很多方面都做的很好,它可以监听到(甚至是听、看到)网上传输的所有信息。Sniffer可以是硬件也可以是软件。主要用来接收在网络上传输的信息。网络是可以运行在各种协议之下的,包括以太网Ethernet、TCP/IP、ZPX等等,也可以是集中协议的联合体系。

Sniffer是个非常之危险的东西,它可以截获口令,可以截获到本来是秘密的或者专用信道内的信息,截获到信用卡号,经济数据,E-mail等等。更加可以用来攻击与己相临的网络。

Sniffer可以使用在任何一种平台之中。而现在使用Sniffer也不可能别发现,这个足够是对网络安全的最严重的挑战。

在Sniffer中,还有“热心人”编写了它的Plugin,称为TOD杀手,可以将TCP的连接完全切断。总之Sniffer应该引起人们的重视,否则安全永远做不到最好。

如果你只是想用来研究的话可以在这里http://semxa.kstar.com/hacking/sniffer260.zip找到一个经过我汉化的Sniffer程序工具。



地主 发表时间: 04-12-17 21:46

回复: qmdjzgqt [qmdjzgqt]   论坛用户   登录


B1层 发表时间: 04-12-17 22:38

回复: wyq980 [wyq980]   论坛用户   登录
我说 哥们 5星了阿


B2层 发表时间: 04-12-17 22:52

回复: qmdjzgqt [qmdjzgqt]   论坛用户   登录
帖出来的 !

B3层 发表时间: 04-12-18 20:12

回复: ymck [ymck]   论坛用户   登录
好长好长~~

B4层 发表时间: 04-12-22 00:35

回复: wyq980 [wyq980]   论坛用户   登录
楼下的好多你发的铁子都被宜除了 哦  恭喜哈哈

B5层 发表时间: 04-12-22 04:22

回复: qmdjzgqt [qmdjzgqt]   论坛用户   登录
同喜同喜!呵呵.....
没什么!俺有钱!不怕罚!

B6层 发表时间: 04-12-23 19:10

回复: mhxueshan [mhxueshan]   论坛用户   登录
    哥们儿,好专业哦,看来我还得学几年了。

B7层 发表时间: 05-01-03 22:49

回复: qmdjzgqt [qmdjzgqt]   论坛用户   登录
我也看不懂,贴出来,进颗金星先

B8层 发表时间: 05-01-04 23:46

回复: Nebulae [xingyun]   论坛用户   登录
虽然有些不懂
也要顶

B9层 发表时间: 05-01-08 08:38

回复: luozaixin [luozaixin]   论坛用户   登录
你说了 我也不知道怎么用啊 我还不懂怎么进别人的电脑啊  你还不如教我两招算了

B10层 发表时间: 05-01-12 17:05

回复: Domain [aomin]   论坛用户   登录
就你觉得有啥意思!~?

B11层 发表时间: 05-01-14 01:30

回复: qmdjzgqt [qmdjzgqt]   论坛用户   登录
想进电脑还不容易?

开个门,往里钻呀!

呵呵............

B12层 发表时间: 05-01-14 22:20

回复: hongliubo1 [hongliubo1]   论坛用户   登录
这么长?

B13层 发表时间: 05-01-15 15:31

回复: ruying [ruying]   论坛用户   登录
请问 在那里copy 来的!

B14层 发表时间: 05-01-15 17:39

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号