重谈IP欺骗技术
阅读这篇文章之前请先了解一TCP/IP的基本结构和工作原理,最好在复习一下ip spoof常见技术,这将有助于你更容易的理解本文。
还是先简单回顾一下吧, IP spoof即IP 电子欺骗,我们可以说是一台主机设备冒充另外一台主机的IP地址,与其它设备通信,从而达到某种目的技术。那么该如何实现呢?很多的扫描器支持伪造源IP地址进行端口扫描,这种方法是非常容易进行的,只需要构造单一的SYN包探测就完成了。难的是如何整个会话中进行IP地址伪造,
例如如何让自己成为被信任的主机去登录一台终端服务器,甚至接管已经有的会话关系。为了解决这个问题我们可以按照由易到难的思路去实现,既然已经可以构造单一的SYN包那仍然可以构造第二个ACK包,AP包….等所有的应用包。理论上完全可行,但是这可是非常大的工作量。相当于用pcap完全自己实现IP/TCP/应用层协议,即使实现了网络层的通用模块,也需要根据不同的应用来继续实现高层协议。
到这里我们又可以将高级的IP欺骗分成两种方式,方式一是接管已经建立连接的会话,第二种是创建新的会话。
对于方式一,也是互联网上曾经盛传的IP欺骗方法,其中都涉及到猜解TCP序列号和DOS攻击,这里有篇文章讲的比较详细
http://www.20cn.net/ns/hk/hacker/data/20020804015903.htm
是关于1994年凯文米特尼克的IP欺骗记录,我摘录了里面的大致过程:
1. 首先使被信任主机的网络暂时瘫痪,以免对攻击造成干扰。
2. 然后连接到目标机的某个端口来猜测ISN基值和增加规律!!!(重点!难点!)
3. 接下来把源址址伪装成被信任主机,发送带有SYN标志的数据段请求连接。
4. 然后等待目标机发送SYN+ACK包给已经瘫痪的主机,因为你现在看不到这个包。
5. 最后再次伪装成被信任主机向目标机发送的ACK,此时发送的数据段带有预测的目标机的ISN+1。
6. 连接建立,发送命令请求。
7. 擦屁股、开后门、下网、关机、睡觉。~~~zzzZZZzzz~~~
这个场景中有一个的条件是rlogin的地址信任关系,也就是说符合信任关系的IP地址进行登录是不需要密码验证的。
这个过程现在我们看起来难免会问4和5中目标机返回的数据包是如何到达攻击者机器的?因为在我们现在的网络中攻击者伪造成信任者发送给被攻击者后,被攻击者返回的响应包IP是指向信任者的,即使信任者已经被DOS宕机,那么这个响应包也不会发送给攻击者。
为此我们就需要考察当时的网络环境了。结论是,当时的网络拓扑和如今有着巨大差异,最大差异就是共享环境以太网和交换环境以太网的工作方式不同。很可能当时还是其它的token ring等拓扑关系,我们在翻一下以太网的发展历史。
1990年,Kalpana EtherSwitch EPS-700面世,网络开关(Switch)是一种提供同时多条数据传输路径的体系结构,和电话交换机很相似,使整体吞吐量显著提高。
1993年, Kalpana创造了另一项突破--全双工以太网。
1994年,大半年时间里,IEEE802.3组都忙于其它部分的100Mbps以太网标准,如100BASE-T4、MII、中继器和全双工等标准。
1995年3月,IEEE802.3u规范被它的成员和执委会所通过,快速以太网的时代宣布来临!
1995年 Cisco Systems公司兼并GrandJunction Networks公司,提供了第一台10Mbps工作组交换器。通过这段历史可以了解到交换设备的工业化进程是在1995年才开始的,所以前面这个故事基本可以断定发生在共享环境中。
那么交换环境里如何实现呢?知道共享环境和交换环境的差异之后这个问题就不难解决了,通过ARP/CAM/STP等等方法想办法获取4 ,5步骤中返回的数据就可以了。当然这些都是理论的东西,目前并没有见到很实用的工具出现。(我也纠结在如何实现一个通用的Hijacking an Authorized Session tool)。
谈谈方式二,我们有新的方法来快速实现,就是基于代理的IP欺骗方法,快速创建伪IP会话。
云舒曾在http://icylife.net/yunshu/show.php?id=732重提到特殊环境的IP欺骗,方法好但是实现相对繁琐,原因还是相当于完全自己实现IP/TCP/应用层协议。下面我们就展开讨论基于代理的IP欺骗方法。这种方法仍然需要ARP/CAM或者其他欺骗方式的支持,原因稍后会提到,且只能在同一个子网内(严格来说是同一个广播域)。通过一个实例来讲解一次IP欺骗流程,场景中有攻击者A,受信任者B,服务器C。
第一步
A中的IE访问一个不存在的IP地址 http://1.1.1.1/ip.asp,正常情况下将不会有任何回应。
A中我们抓取并修改刚才这个发往1.1.1.1数据包的目标IP为C, 源IP为B,目标MAC为C后重发。
A 中启动一个ARP线程刷告诉C,B的ip地址对应的MAC是A。
第二步
C 收到原IP为B的数据包后做出响应,目标IP为B,目标MAC为A。
第三步
A 收到C发往B的响应包,修改此包目标IP为A, 原IP为1.1.1.1 后重发给A
A 收到重发的数据, 对于A中IE来说,发送给1.1.1.1请求并得到了来自1.1.1.1的回应,IE会接受并处理这个数据包。
至此IP欺骗完成,上面的流程使攻击者可以伪装成任意的子网IP地址取得服务器C的信任。
如何伪装成外网的IP地址呢?很简单,用第一步中的ARP 线程刷C的IP-MAC关系为a.ip=gate.mac,这样就可以实现在同一内网伪造任意的IP地址。
通过上面两步中可以看到我们无需关心TCP序列号,无需关心信任者的存活状态,无需关心上层协议,可应用于RDP,FTP,SSH,HTTP等任何IP协议。通过测试我们也证实了本文的可行性。
而达到这个效果只需要几句关键的代码就可以实现:
以下是代码片段: int strindex = 0; string Desmac = Function.GetMACAddress(s, ref strindex); int Index = 26; string Srcip = Function.GetIpAddress(s, ref Index); string Desip = Function.GetIpAddress(s, ref Index); //基本解析 if (Srcip == MyLocalHost.ip[0] && Desip==tagip)//如果是要转发的数据包,例如发往1.1.1.1 { //修改原IP为受信任人IP和目的IP和目的MAC为真实目标后转发 Index = 26; Function.Setipaddres(ref s, psrcip, ref Index); Function.Setipaddres(ref s,tagetip, ref Index); modifydesmac(s, tagetmac); CnCerT.Net.Packet.DoCheck.CheckIP(ref s); CnCerT.Net.Packet.DoCheck.CheckTCP(ref s); mypcap.SendPacket(s); } else if (Srcip==textBox_targetip.Text && Desip==textBox_srcip.Text)//如果是目标返回的数据包 { //修改原IP为受信任IP,目的IP为本机后重发 Index = 26; Function.Setipaddres(ref s, tagip, ref Index); Function.Setipaddres(ref s, MyLocalHost.ip[0], ref Index); CnCerT.Net.Packet.DoCheck.CheckIP(ref s); CnCerT.Net.Packet.DoCheck.CheckTCP(ref s); mypcap.SendPacket(s); |
在不能进行ARP欺骗的环境中可以结合CAM欺骗方式进行IP欺骗,具体的细节读者可以参考《无ARP欺骗的嗅探技术》继续进行研究,本文探讨到此。
通过杜绝ARP/CAM/STP欺骗可有效防护本文提到的攻击方法和工具。
References:
http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_10-4/104_ip-spoofing.html
http://www.securityfocus.com/infocus/1674
http://staff.washington.edu/dittrich/papers/IP-spoof-1.txt
http://blog.csdn.net/ecrown/archive/2005/01/12/249740.aspx
建议继续学习:
- 使用python来抓取新浪的IP数据 (阅读:7320)
- 获取指定(访客)IP的所有信息,地址、邮政编码、国家、经纬度等的API (阅读:5330)
- 命令行获取主机外网IP,相当于ip138的功能 (阅读:4971)
- 计算机网络协议包头赏析-IP (阅读:4771)
- 当网站使用CDN后获取客户端真实IP的方法 (阅读:4586)
- nginx在fastcgi模块中转发真实的后端IP (阅读:4002)
- 获取客户端真实IP方法 (阅读:3776)
- nginx.conf控制指定的代理ip和ip访问的设置手记 (阅读:3460)
- ip地址中的网络号,主机号 (阅读:3377)
- 验证IP属于国内还是国外的PHP类,可限制国内IP用户 (阅读:3154)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:鬼仔 来源: 鬼仔's Blog
- 标签: IP spoof
- 发布时间:2010-01-04 13:01:55
- [67] Oracle MTS模式下 进程地址与会话信
- [67] Go Reflect 性能
- [67] 如何拿下简短的域名
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [59] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [59] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 读书笔记-壹百度:百度十年千倍的29条法则