在Internet上计算机之间相互进行的交流建立在两个前提之下:认证、信任。
认证是网络上的计算机用于相互间进行识别的一种鉴别过程,经过认证的过程,获准相互交流的计算机之间就会建立起相互信任的关系。信任和认证具有逆反关系,即如果计算机之间存在高度的信任关系,则交流时就不会要求严格的认证。而反之,如果计算机之间没有很好的信任关系,则会进行严格的认证。
欺骗实质上就是一种冒充身份通过认证骗取信任的攻击方式。攻击者针对认证机制的缺陷,将自己伪装成可信任方,从而与受害者进行交流,最终攫取信息或是展开进一步攻击。
本文介绍一下比较流行的4种欺骗攻击:IP欺骗、ARP欺骗、DNS欺骗、Web欺骗。
IP欺骗
最基本的IP欺骗有3种:简单的IP地址变化、源路由攻击、利用Unix系统的信任关系。这三种IP欺骗技术都是早期使用的,原理比较简单,因此效果也十分有限。
本文主要讲一下IP欺骗的高级应用:TCP会话劫持。
会话劫持就是接管一个现存动态会话的过程,换句话说,攻击者通过会话劫持可以替代原来的合法用户,同时能够监视并掌握会话内容。此时,攻击者可以对受害者的回复进行记录,并在接下来的时间里对其进行响应,展开进一步的欺骗和攻击。会话劫持结合了嗅探及欺骗技术。
在一般的欺骗攻击中攻击者并不是积极主动地使一个用户下线来实现他针对受害目标的攻击,而是仅仅装作是合法用户。此时,被冒充的用户可能并不在线上,而且它在整个攻击中不扮演任何角色,因此攻击者不会对它发动进攻。但是在会话劫持中,为了接管整个会话过程,攻击者需要积极攻击使被冒充用户下线。
这里补充一下知识点:TCP的序列号机制。简单地说,序列号用来说明接收方下一步将要接收的数据包的顺序。也就是说,序列号设置了数据包放入数据流的顺序,接收方就可以利用序列号告诉发送方哪些数据包已经收到,哪些数据包还未收到,于是发送方就能够依此重发丢失的数据包。
数据传输过程中序列号和应答号之间的关系是:第二个数据包(B->A)的SEQ = 第一个数据包(A-> B)的ACK;第二个数据包(B->A)的ACK = 第一个数据包(A-> B)的SEQ +第一个数据包(A-> B)的传输数据长度。
因此序列号和应答号是完全有可能预测的,只需要获取最近的会话数据包,就可以猜测下一次通话中的SEQ和ACK。这一局面是TCP协议固有缺陷造成的,由此带来的安全威胁也是无法回避的。
TCP会话劫持的过程:
step1:发现攻击目标
首先,通常攻击者希望这个目标是一个准予TCP会话连接(例如Telnet和FTP等)的服务器。其次,能否检测数据流也是一个比较重要的问题,因为在攻击的时候需要猜测序列号。这就需要嗅探之前通信的数据包,对于交换网络环境,可能还需要使用ARP欺骗(后文会讲)。
step2:寻找动态会话
与大多数攻击不同,会话劫持攻击适合在网络流通量达到高峰时才会发生的。首先,他有很多供选择的会话;其次,网络流通量越大则被发现的可能就越小。如果只有一个用户进行连接并数次掉线,那么就很有可能引起那个用户的怀疑。但是,如果网络流通量很大并且有很多的用户进行连接,那么用户们很有可能忽略掉线后面隐藏的问题,也许只是认为这是由于网络流通过大而引起的。
step3:猜测序列号
TCP区分正确数据包和错误数据包仅通过它们的SEQ/ACK序列号。序列号却是随着时间的变化而改变的。因此,攻击者必须成功猜测出序列号。通过嗅探或者ARP欺骗,先发现目标机正在使用的序列号,再根据序列号机制,可以猜测出下一对SEQ/ACK序列号。
同时,攻击者若以某种方法扰乱客户主机的SEQ/ACK,服务器将不再相信客户主机正确的数据包,从而可以伪装为客户主机,使用正确的SEQ/ACK序列号,现在攻击主机就可以与服务器进行连接,这样就可以劫持一个会话连接。
step4:使客户主机下线
攻击者获得了序列号后,为了彻底接管这个会话,他就必须使客户主机下线。使客户主机下线最简单的方式就是对其进行拒绝服务攻击,从而使其不再继续响应。服务器会继续发送响应给客户主机,但是因为攻击者已经掌握了客户主机,所以该机器就不再继续响应。
step5:接管会话
既然攻击者已经获得了他所需要的一切信息,那么他就可以持续向服务器发送数据包并且接管整个会话了。在会话劫持攻击中,攻击者通常会发送数据包在受害服务器上建立一个账户,甚至留下某些后门。通过这种方式,攻击者就可以在任何时候轻松进入系统了。
TCP会话劫持的危害:就其实现原理而言,任何使用Internet进行通信的主机都有可能受到这种攻击。 会话劫持在理论上是非常复杂的, 但是利用简单适用的会话劫持攻击软件,技术门槛的降低导致了很多“少年攻击者”的诞生。
IP地址欺骗的防御:
防范地址变化欺骗:1 限制用户修改网络配置;2 进行入口过滤,不允许任何从外面进入网络的数据包使用单位的内部网络地址作为源地址;3 进行出口过滤,离开本单位的任何合法数据包须有一个源地址,并且它的网络部分与本单位的内部网络相匹配。防范源路由欺骗:设置路由器禁止使用源路由防范信任关系欺骗:不使用信任关系或不允许通过外部网络使用信任关系防范会话劫持攻击:1 进行加密,如果攻击者不能读取传输数据,那么进行会话劫持攻击也是十分困难的;2 使用安全协议,像SSH(Secure Shell)这样的协议或是安全的Telnet都可以使系统免受会话劫持攻击;3 限制保护措施,允许从网络上传输到用户单位内部网络的信息越少,那么用户将会越安全,这是个最小化会话劫持攻击的方法。
ARP欺骗
首先说背景知识,ARP(Address Resolution Protocol):地址解析协议,用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826]。属于网络层的协议。
在以太网中,数据帧从一个主机到达局域网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。
ARP协议有两种数据包,一种是ARP请求包,一种是ARP应答包。ARP请求包通过发送一个目的IP来获取该IP对应的MAC地址,ARP应答包是对应IP收到请求包后把自己的MAC地址发送给需求者。同时,每台主机、网关都有一个ARP缓存表,ARP缓存表用于存储其它主机或网关的IP地址与MAC地址的对应关系。
ARP欺骗攻击就是利用ARP协议本身的缺陷进行的一种非法攻击,目的是为了在全交换环境下实现数据监听。当主机收到一个ARP应答包后,它并不会去验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。ARP欺骗正是利用了这一点。
如上图所示,主机A和网关C在正常通信,此时主机B想进行ARP欺骗攻击,它首先给主机A发送ARP reply数据包,说C的IP对应的MAC地址是自己的MAC地址,这样A想发给C的数据包就会发给自己;同样,给网关C发送ARP reply数据包,说A的IP对应的MAC地址是自己的MAC地址,这样C回复给A的数据包也会发给自己。这样主机B就成为了A和C之间的中间人,通过ARP欺骗实现了中间人攻击。
ARP欺骗攻击在局域网内非常奏效,其危害有:致使同网段的其他用户无法正常上网(频繁断网或者网速慢);使用ARP欺骗可以嗅探到交换式局域网内所有数据包,从而得到敏感信息;ARP欺骗攻击可以对信息进行篡改,例如,可以在你访问的所有网页中加入广告;利用ARP欺骗攻击可以控制局域网内任何主机,起到“网管”的作用,例如,让某台主机不能上网。
ARP欺骗的防范:
MAC地址绑定,使网络中每一台计算机的IP地址与硬件地址一一对应,不可更改。使用静态ARP缓存,用手工方法更新缓存中的记录,使ARP欺骗无法进行。使用ARP服务器,通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。使用ARP欺骗防护软件,如ARP防火墙。及时发现正在进行ARP欺骗的主机并将其隔离。
DNS欺骗
DNS的全称是Domain Name Server即域名服务器,当一台主机发送一个请求要求解析某个域名时,它会首先把解析请求发到自己的DNS服务器上。DNS的功能是提供主机名字和IP地址之间的转换信息。DNS服务器里有一个“DNS缓存表”,里面存储了此DNS服务器所管辖域内主机的域名和IP地址的对应关系。
首先我们要知道DNS的工作原理:
上图中有三台主机:客户主机、域DNS服务器和域DNS服务器。其中域DNS服务器直接为客户主机提供DNS服务。下面对这四个过程进行解释。
1)客户主机软件(例如Web浏览器)需要对进行解析,它向本地DNS服务器(域)发送域名解析请求,要求回复的IP地址;
2) 由于本地DNS服务器的数据库中没有的记录,同时缓存中也没有记录,所以,它会依据DNS协议机器配置向网络中的其他DNS服务器提交请求。这个查询请求逐级递交,直到域的真正权威DNS服务器收到请求(这里省略了寻找域DNS服务器的迭代过程,假定本地DNS服务器最终找到了所需要的信息);
3)域DNS服务器将向域DNS服务器返回IP查询结果(假定为1.2.3.4);
4)域的本地DNS服务器最终将查询结果返回给客户主机浏览器,并将这一结果存储到其DNS缓存当中,以便以后使用。在一段时间里,客户主机再次访问时,就可以不需要再次转发查询请求,而直接从缓存中提取记录向客户端返回IP地址了。
经过上面几步,客户主机获得了它所期待的网站的IP地址,这样整个域名解析过程就结束了。
当客户主机向本地DNS服务器查询域名的时候,如果服务器的缓存中已经有相应记录,DNS服务器就不会再向其他服务器进行查询,而是直接将这条记录返回给用户。而入侵者欲实现DNS欺骗,关键的一个条件就是在DNS服务器的本地Cache中缓存一条伪造的解析记录。
回到上面那个例子,假如域DNS服务器返回的是经过攻击者篡改的信息,比如将指向另一个IP地址5.6.7.8,域DNS服务器将会接受这个结果,并将错误的信息存储在本地Cache中。在这条缓存记录的生存期内,再向域DNS服务器发送的对的域名解析请求,所得到的IP地址都将是被篡改过的。
一般来讲,攻击者无法直接控制DNS服务器,但他可以控制该服务所在网络的某台主机,并可以监听该网络中的通信情况。这时候,黑客要对远程的某个DNS服务器进行欺骗攻击,所采用的手段很像IP欺骗攻击:
首先,黑客要冒充某个域名服务器的IP地址;其次,黑客要能预测目标域名服务器所发送DNS数据包的ID号。DNS数据是通过UDP协议传递的,在DNS服务器之间进行域名解析通信时,请求方和应答方都使用UDP 53端口,因此需要确定DNS报文格式头部的ID域,来确定对应的会话过程。
在一段时期内,DNS服务器一般都采用一种有章可循的ID生成机制,例如,对于每次发送的域名解析请求,依次将数据包中的ID加1。如此一来,攻击者如果可以在某个DNS服务器的网络中进行嗅探,他只要向远程的DNS服务器发送一个对本地某域名的解析请求,通过嗅探得到的来自目标DNS服务器的请求数据包(因为远程DNS服务器肯定会转而请求本地的DNS服务器),攻击者就可以得到想要的ID号了。
还是看上面的例子,域的DNS服务器向域的DNS服务器请求解析,如果攻击者所伪造的DNS应答包中含有正确的ID号,并且抢在域的DNS服务器之前向域的DNS服务器返回伪造信息,欺骗攻击就将获得成功。下图为一次DNS攻击完整过程的图示。
DNS欺骗的防范:
使用最新版本DNS服务器软件并及时安装补丁。关闭DNS服务器的递归功能:DNS服务器利用缓存中的记录信息回答查询请求或是DNS服务器通过查询其它服务器获得查询信息并将它发送给客户机,这两种查询方式称为递归查询,这种查询方式容易导致DNS欺骗。限制区域传输范围:限制域名服务器做出响应的地址、限制域名服务器做出响应的递归请求地址、限制发出请求的地址。限制动态更新。采用分层的DNS体系结构。
Web欺骗
Web站点给用户提供了丰富多彩的信息,Web页面上的文字、图画与声音可以给人深刻的印象。在计算机世界中,我们往往都习惯各类图标、图形,代表各类不同的含义。人们往往还会在事件的时间先后顺序中得到某种暗示。如果在单击银行的网页时username对话框同时出现了,用户自然会认为应该输入在该银行的账户与口令。如果你在单击了一个文档链接后,立即开始了下载,那么你很自然地会认为该文件正从该站点下载。然而,以上的想法不一定总是正确的。
Web欺骗是一种电子信息欺骗,攻击者创造了一个完整的令人信服的Web世界,但实际上它却是一个虚假的复制。虚假的Web看起来十分逼真,它拥有相同的网页和链接。然而攻击者控制着这个虚假的Web站点,这样受害者的浏览器和Web之间的所有网络通信就完全被攻击者截获。
攻击者能够监视被攻击者的网络信息,记录他们访问的网页和内容。当被攻击者填完一个表单并发送后,这些数据将被传送到Web服务器,Web服务器将返回必要的信息,但不幸的是,攻击者完全可以截获并使用这些信息。在得到必要的数据后,攻击者可以通过修改受害者和Web服务器两方任何一方数据,来进行破坏活动。攻击者可以修改受害者的确认数据,攻击者还可以修改Web服务器返回的数据。
Web欺骗能够成功的关键是在受害者和真实Web服务器之间插入攻击者的Web服务器,这种攻击常被称为“中间人攻击“。攻击者改写Web页中的所有URL地址,使它们指向攻击者的Web服务器不是真正的Web服务器。
工作流程如下:
用户访问伪造过的/;/向/请求文档;/向/返回文档;/改写文档中的所有URL;/向用户返回改写后的文档
防范Web欺骗的方法:
配置网络浏览器使它总能显示目的URL,并且习惯查看它。检查源代码,如果发生了URL重定向,就一定会发现。不过,检查用户连接的每一个页面的源代码对普通用户来说是不切实际的想法。使用反网络钓鱼软件。禁用JavaScript、ActiveX或者任何其他在本地执行的脚本语言。确保应用有效和能适当地跟踪用户。无论是使用cookie还是会话ID,都应该确保要尽可能的长和随机。培养用户注意浏览器地址线上显示的URL的好习惯。培养用户的安全意识和对开发人员的安全教育。