攻击者的监视之下了,攻击者可以任意窃听甚至修改数据流里的数据,收集到大量的信息
(3)URL重写
在URL重写中,就像在攻击中一样,攻击者把自己插入到通信流中,唯一不同的是,在攻击中,当流量通过互联网时,攻击者必须在物理上能够截取它。有时这非常难于执行,因此攻击者使用URL重写。在URL重写中,攻击者能够把网络流量转到攻击者控制的另一个站点上。
利用URL地址,使地址都向攻击者的Web服务器,即攻击者可以将自已的Web地址加在所有URL地址的前面。这样,当用户与站点进行安全链接时,就会毫不防备地进入攻击者的服务器,于是用记的所有信息便处于攻击者的监视之中。但由于浏览器材一般均设有地址栏和状态栏,当浏览器与某个站点边接时,可以在地址栏和状态样中获得连接中的Web站点地址及其相关的传输信息,用户由此可以发现问题,所以攻击者往往在URL地址重写的同时,利用相关信息排盖技术,即一般
用JavaScript程序来重写地址栏和状态栏,以达到其掩盖欺骗的目的。
※ 非技术类欺骗
通常把基于非计算机的技术叫做社交工程(也有叫社会工程的)。社交工程中,攻击者设法设计让人相信它是其他人。这就像攻击者在给人打电话时说自己时某人一样的简单。因为他说了一些大概只有那个人知道的信息,所以受害人相信他。
社交工程的核心是,攻击者设法伪装自己的身份并设计让受害人泄密私人信息。这些攻击的目标是搜集信息来侵入计算机系统的,通常通过欺骗某人使之泄露出口令或者在系统中建立个新帐号。其他目标使侦察环境,找出安装了什么硬件和软件,服务器上装载了什么补丁等等。通过社会工程得到的信息是无限的。
会话劫持攻击
※ 攻击原理
会话劫持(Session Hijack)是一种结合了嗅探以及欺骗技术在内的攻击手段。广义上说,会话劫持就是在一次正常的通信过程中,黑客作为第三方参与到其中,或者是在数据流(例如基于TCP的会话)里注射额外的信息,或者是将双方的通信模式暗中改变,即从直接联系变成有黑客联系。
会话劫持利用了TCP/IP工作原理来设计攻击。TCP使用端到端的连接,即TCP用(源IP,源TCP端口号,目的IP,目的TCP端号)来唯一标识每一条已经建立连接的TCP链路。另外,TCP在进行数据传输时,TCP报文首部的两个字段序号(seq)和确认序号(ackseq)非常重要。序号(seq)和确认序号(ackseq)是与所携带TCP数据净荷(payload)的多少有数值上的关系:序号字段(seq)指出了本报文中传送的数据在发送主机所要传送的整个数据流中的顺序号,而确认序号字段(ackseq)指出了发送本报文的主机希望接收的对方主机中下一个八位组的顺序号。因此,对于一台主机来说,其收发的两个相临TCP报文之间的序号和确认序号的关系为:它所要发出的报文中的seq值应等于它所刚收到的报文中的ackseq的值,而它所要发送报文中ackseq的值应为它所收到报文中seq的值加上该报文中所发送的TCP净荷的长度。图-2是两台主机进行TCP数据传输时序号(seq)、确认序号(ackseq)以及所携带TCP数据净荷(payload)之间的数值关系的一个例子(以八位组octet为单位)。
TCP会话劫持的攻击方式可以对基于TCP的任何应用发起攻击,如HTTP、FTP、Telnet等。对于攻击者来说,所必须要做的就是窥探到正在进行TCP通信的两台主机之间传送的报文,这样攻击者就可以得知该报文的源IP、源TCP端口号、目的IP、目的TCP端号,从而可以得知其中一台主机对将要收到的下一个TCP报文段中seq和ackseq值的要求。这样,在该合法主机收到另一台合法主机发送的TCP报文前,攻击者根据所截获的信息向该主机发出一个带有净荷的TCP报文,如果该主机先收到攻击报文,就可以把合法的TCP会话建立在攻击主机与被攻击主机之间。带有净荷的攻击报文能够使被攻击主机对下一个要收到的TCP报文中的确认序号(ackseq)的值的要求发生变化,从而使另一台合法的主机向被攻击主机发出的报文被被攻击主机拒绝。TCP会话劫持攻击方式的好处在于使攻击者避开了被攻击主机对访问者的身份验证和安全认证,从而使攻击者直接进入对被攻击主机的的访问状态,因此对系统安全构成的威胁比较严重。
当黑客劫持会话时有可能带来负面的影响,其中之一就被成为ACK风暴。
※ 会话劫持攻击程序
Juggernaut
Juggernaut是一个可以被用来进行TCP会话攻击的网络sniffer程序。可以运行于LINUX*作系统的终端机上,安装和运行都很简单。可以设置值、暗号或标志这三种不同的方式来通知Juggernaut程序是否对所有的网络流量进行观察。例如,一个典型的标记就是登录暗号。无论何时Juggernaut发现这个暗号,就会捕获会话,这意味着黑客可以利用捕获到的用户密码再次进入系统。
Hunt
是一个用来听取、截取和劫持网络上的活动会话的程序。
TTY Watcher
是一个免费的程序,允许人们监视并且劫持一台单一主机上的连接。
IP Watcher
IP Watcher是一个商用的会话劫持工具,它允许监视会话并且获得积极的反会话劫持方法。它基于TTY Watcher此外还提供一些额外的功能,IPWatcher可以监视整个网络。
缓冲区溢出攻击
※ 攻击原理
几十年来,缓冲区溢出一直引起许多严重的安全性问题。其中最著名的例子是:1988 年,因特网蠕虫程序在 finger 中利用缓冲区溢出感染了因特网中的数万台机器。但是,缓冲区溢出问题并非已成古老的历史,缓冲区溢出(又称堆栈溢出)攻击已成为最常用的黑客技术之一。据统计,仅去年缓冲区溢出就占使CERT/CC 提出建议的所有重大安全性错误的百分之五十以上。
引起缓冲区溢出问题的根本原因是 C(与其后代 C++)本质就是不安全的,没有边界来检查数组和指针的引用,也就是开发人员必须检查边界(而这一行为往往会被忽视),否则会冒遇到问题的风险。标准C 库中还存在许多非安全字符串*作,包括:strcpy() 、sprintf() 、gets() 等。
缓冲区溢出源于每个程序运行的需要:放置数据的空间。多数计算机程序都在内存中创建多个地址用于信息存储。C 编程语言允许程序员在运行时在内存的两个不同部分(堆栈和堆)中创建存储器。通常,分配到堆的数据是那些malloc() 或新建时获得的数据。而分配到堆栈的数据一般包括非静态的局部变量和所有按值传递的参数。大部分其它信息存储在全局静态存储器中。在分配同一数据类型的相邻块时,这块内存区域称为缓冲区。
在写入缓冲区时,C 程序员必须注意存储在缓冲区中的数据不能超过它所能容纳的量。缓冲区只能容纳一定数量的位,就象一个杯子只能盛一定量的水。如果放到杯子中的水太多,多余的水就会溢出到别的地方。相似地,如果试图放入缓冲区的数据比它能装入的要多,额外的数据就会溢出到别处。
当程序写入超过缓冲区的边界时,这就是所谓的\缓冲区溢出\。发生缓冲区溢出时,会覆盖下一个相邻的内存块。由于C 语言本质上的不安全性,所以它允许程序随意(或者更准确地说是完全出于偶然)溢出缓冲区。没有运行时检查来这一防止写入超过缓冲区末尾,所以程序员必须在其自己的代码中执行这一检查,否则继续下去会出现问题。
读取或写入超过缓冲区的末尾时,会导致许多不同(并且通常是不可预料的)行为:1) 程序的执行很奇怪,2) 程序完全失败,或者
3) 程序可以继续,而且在执行中没有任何明显不同。缓冲区溢出的副作用取决于:
写入的数据中有多少超过缓冲区边界
当缓冲区已满并且溢出时,覆盖了哪些数据(如果有的话)
程序是否试图读取溢出期间被覆盖的数据
哪些数据最终替换被覆盖的内存
存在缓冲区溢出的程序的不确定行为使得对它们的调试异常棘手。最坏的情况是:程序可能正发生缓冲区溢出,但根本没有任何副作用的迹象。因此,缓冲区溢出问题常常在标准测试期间是发现不了的。认识缓冲区溢出的重要一点是:在发生溢出时,会潜在地修改碰巧分配在缓冲区附近的任何数据。
一般情况下,覆盖其他数据区的数据是没有意义的,最多造成应用程序错误,但是,如果输入的数据是经过\黑客\精心设计的,覆盖缓冲区的数据恰恰是黑客的入侵程序代码,黑客就获取了程序的控制权。
最简单的情况就是考虑直接在缓冲区后面的内存中分配一个布尔标志。这个标志决定运行程序的用户是否可以访问专用文件。如果有不怀好意的用户覆盖缓冲区,则会更改标志的值,从而指出攻击者是非法访问专用文件。
缓冲区溢出导致安全性问题的另一个方法是通过摧毁堆栈。摧毁堆栈的目的是导致一个特定的编程故障:不仔细使用分配在程序运行时堆栈上的数据缓冲区,即局部变量和函数自变量。有效的摧毁堆栈所造成的后果比上一示例中提到的改变布尔访问控制标志的后果更为严重。有创造力的攻击者会通过摧毁堆栈利用缓冲区溢出的弱点,然后运行任何代码。这种想法是相当直接的:在某处插入一些攻击代码(例如,调用shell 的代码)并以将控制传递给攻击代码的方式来覆盖堆栈。
此外,攻击者利用缓冲区溢出得到机器上的交互式会话 (shell)。如果被利用的程序以较高的优先权在运行(如 root用户或管理员),则攻击者就会在交互式会话中得到该优先权。最惊人的缓冲区溢出是堆栈的摧毁,它会在超级用户或 root、shell中造成后果。许多可以利用脚本都能在网络上找到,它们对特定体系结构上的堆栈进行摧毁。
保留访问权限
在大多数情况下, 攻击者入侵一个系统后,他可能还想在适当的时候再次进入系统。比如说,如果攻击者入侵了一个站点,将它作为一个对其他系统进行攻击的平台或者是跳板,他就会想在适当的时候登录到这个站点取回他以前存放在系统里面的工具进行新的攻击。很容易想到的方法就是在这个已经被入侵的系统中留一个后门。但是,非常关键的是,不但要留下下次进入的通道,而且还要对自己所做的一切加以隐藏,如果建立起的后门马上就被管理员发现就没有任何用处了。
※ 后门和特洛伊木马
简单地说,后门(backdoor)就是攻击者再次进入网络或者是系统而不被发现的隐蔽通道。最简单的方法就是打开一个被端口监听代理所监听的代理,有很多软件可以做到这一点。
如果用户使用端口扫描器对网络内部所有计算机从端口1到端口1023进行扫描的话,如果攻击者打开的端口是5050,那么就永远也不会被发现。这也是我们在扫描时必须对所有的计算机从端口1到端口65535进行扫描的原因。而且不是一次就可以了,需要两次,一次为TCP,一次为UDP。(由于越来越多的公司已经渐渐地加强了对TCP端口的管理而忽视了UDP端口的管理,所以很多攻击者将开放的端口都选择在UDP端口了。)
当获得了系统的存储权时,建立后门时相当容易的,但是在没有完全获得对系统的存取权限时,一般可以通过使用特洛伊木马来实现。特洛伊木马程序包括两个部分:一个外壳程序和一个内核程序。外壳程序就是每个人都可以看得到的部分。这部分必须时非常有趣或者是让人激动的,以至于当人们看到它的是时候都会不加考虑的运行。内核部分就是能够对系统造成危害的部分。单外壳程序重新运行时,内核程序隐蔽地隐藏在显示屏后做着各种各样可能对系统造成破坏的事情。内核程序的功能非常强大,几乎可以做任何事情,比如进行攻击、删除硬件设备、建立后门等。对于大多数特洛伊木马程序来说,内核程序的功能就是在受攻击的系统中建立后门。
(1) QAZ
QAZ是一个典型的通过电子邮件传送的特洛伊木马程序。它通常隐藏在
notepad.exe程序中。在进入系统时它将notpad.exe改名为note.com而将自己的名字改成notpad.exe。当用户执行notpad.exe时,它并不启动自己的程序,而是调用notpad.exe,因为notpad.exe已经被内置于note.com之中。所以从用户的角度来看,一切正常。QAZ在端口7597打开了一个后门,并且将被攻击者的IP发送给攻击者。(当然这个发送的目的地址不会是攻击者真正的地址,而是一个已经被他攻破的地址。)
QAZ同时也会在系统中自动繁殖自己。它不断地寻找网络共享的出口,当找到后,将自己通过同样的方式复制给远程的计算机。所以,QAZ不但在系统中建立了一个后门,而且通过网络不断地复制自己。