MAC地址与IP地址绑定策略的破解.docx
《MAC地址与IP地址绑定策略的破解.docx》由会员分享,可在线阅读,更多相关《MAC地址与IP地址绑定策略的破解.docx(14页珍藏版)》请在冰豆网上搜索。
![MAC地址与IP地址绑定策略的破解.docx](https://file1.bdocx.com/fileroot1/2023-2/22/ac30fa92-17c0-4f49-a859-5d1647234318/ac30fa92-17c0-4f49-a859-5d16472343181.gif)
MAC地址与IP地址绑定策略的破解
MAC地址与IP地址绑定策略的破解
1引言
对“IP地址盗用”的解决方案绝大多数都是采取MAC与IP地址绑定策略,这种做法是十分危险的,本文将就这个问题进行探讨。
在这里需要声明的是,本文是处于对对MAC与IP地址绑定策略安全的忧虑,不带有任何黑客性质。
1.1为什么要绑定MAC与IP地址
影响网络安全的因素很多,IP地址盗用或地址欺骗就是其中一个常见且危害极大的因素。
现实中,许多网络应用是基于IP的,比如流量统计、账号控制等都将IP地址作为标志用户的一个重要的参数。
如果有人盗用了合法地址并伪装成合法用户,网络上传输的数据就可能被破坏、窃听,甚至盗用,造成无法弥补的损失。
盗用外部网络的IP地址比较困难,因为路由器等网络互连设备一般都会设置通过各个端口的IP地址范围,不属于该IP地址范围的报文将无法通过这些互连设备。
但如果盗用的是Ethernet内部合法用户的IP地址,这种网络互连设备显然无能为力了。
“道高一尺,魔高一丈”,对于Ethernet内部的IP地址被盗用,当然也有相应的解决办法。
绑定MAC地址与IP地址就是防止内部IP盗用的一个常用的、简单的、有效的措施。
1.2MAC与IP地址绑定原理
IP地址的修改非常容易,而MAC地址存储在网卡的EEPROM中,而且网卡的MAC地址是唯一确定的。
因此,为了防止内部人员进行非法IP盗用(例如盗用权限更高人员的IP地址,以获得权限外的信息),可以将内部网络的IP地址与MAC地址绑定,盗用者即使修改了IP地址,也因MAC地址不匹配而盗用失败:
而且由于网卡MAC地址的唯一确定性,可以根据MAC地址查出使用该MAC地址的网卡,进而查出非法盗用者。
目前,很多单位的内部网络,尤其是学校校园网都采用了MAC地址与IP地址的绑定技术。
许多防火墙(硬件防火墙和软件防火墙)为了防止网络内部的IP地址被盗用,也都内置了MAC地址与IP地址的绑定功能。
从表面上看来,绑定MAC地址和IP地址可以防止内部IP地址被盗用,但实际上由于各层协议以及网卡驱动等实现技术,MAC地址与IP地址的绑定存在很大的缺陷,并不能真正防止内部IP地址被盗用。
2破解MAC与IP地址绑定策略
2.1IP地址和MAC地址简介
现行的TCP/IP网络是一个四层协议结构,从下往上依次为链路层、网络层、传输层和应用层。
Ethernet协议是链路层协议,使用的地址是MAC地址。
MAC地址是Ethernet网卡在Ethernet中的硬件标志,网卡生产时将其存于网卡的EEPROM中。
网卡的MAC地址各不相同,MAC地址可以唯一标志一块网卡。
在Ethernet上传输的每个报文都含有发送该报文的网卡的MAC地址。
Ethernet根据Ethernet报文头中的源MAC地址和目的MAC来识别报文的发送端和接收端。
IP协议应用于网络层,使用的地址为IP地址。
使用IP协议进行通讯,每个IP报文头中必须含有源IP和目的IP地址,用以标志该IP报文的发送端和接收端。
在Ethernet上使用IP协议传输报文时,IP报文作为Ethernet报文的数据。
IP地址对于Ethernet交换机或处理器是透明的。
用户可以根据实际网络的需要为网卡配置一个或多个IP地址。
MAC地址和IP地址之间并不存在一一对应的关系。
MAC地址存储在网卡的EEPROM中并且唯一确定,但网卡驱动在发送Ethernet报文时,并不从EEPROM中读取MAC地址,而是在内存中来建立一块缓存区,Ethernet报文从中读取源MAC地址。
而且,用户可以通过操作系统修改实际发送的Ethernet报文中的源MAC地址。
既然MAC地址可以修改,那么MAC地址与IP地址的绑定也就失去了它原有的意义。
2.2破解方案
下图是破解试验的结构示意图。
其内部服务器和外部服务器都提供Web服务,防火墙中实现了MAC地址和IP地址的绑定。
报文中的源MAC地址与1P地址对如果无法与防火墙中设置的MAC地址与1P地址对匹配,将无法通过防火墙。
主机2和内部服务器都是内部网络中的合法机器;主机1是为了做实验而新加入的机器。
安装的操作系统是W2000企业版,网卡是3Com的。
试验需要修改主机1中网卡的MAC和IP地址为被盗用设备的MAC和IP地址。
首先,在控制面板中选择“网络和拨号连接”,选中对应的网卡并点击鼠标右键,选择属性,在属性页的“常规”页中点击“配置”按钮。
在配置属性页中选择“高级”,再在“属性”栏中选择“NetworkAddress”,在“值”栏中选中输人框,然后在输人框中输人被盗用设备的MAC地址,MAC地址就修改成功了。
然后再将IP地址配置成被盗用设备的IP地址。
盗用内部客户机IP地址:
将主机1的MAC地址和IP地址分别修改为主机2的MAC地址和IP地址。
主机1可以访问外部服务器,能够顺利地通过防火墙,访问权限与主机2没有分别。
而且,与此同时主机2也可以正常地访问外部服务器,完全不受主机1的影响。
无论是主机2还是防火墙都察觉不到主机1的存在。
主机1如果访问内部服务器,根本无需通过防火墙,更是畅通无阻了。
盗用内部服务器IP地址:
将主机1的MAC地址和U地址修改为内部服务器的MAC地址和IP地址。
主机1也提供Web服务。
为了使效果更明显,主机1上提供的Web服务内容与内部服务器提供的内容不同。
因为在实际的实验中主机1与主机2连在同一个HUB上,主机2的访问请求总是先被主机1响应,主机2期望访问的是内部服务器,得到的却总是主机1提供的内容。
更一般地,主机2如果试图访问内部服务器,获得的到底是主机1提供的内容还是内部服务器提供的内容具有随机性,要看它的访问请求首先被谁响应,在后面的分析中我们将进一步对此进行阐述。
盗用服务器的MAC和IP危害可能更大,如果主机1提供的Web内容和内部服务器中的内容一样,那么主机2将无法识别它访问的到底是哪个机器;如果Web内容中要求输人账号、密码等信息,那么这些信息对于主机1来说则是一览无遗了。
3破解成功的原因
上面的实验验证了绑定MAC地址与IP地址的确存在很大的缺陷,无法有效地防止内部IP地址被盗用。
接下来,将从理论上对该缺陷进行详细的分析。
缺陷存在的前提是网卡的混杂接收模式,所谓混杂接收模式是指网卡可以接收网络上传输的所有报文,无论其目的MAC地址是否为该网卡的MAC地址。
正是由于网卡支持混杂模式,才使网卡驱动程序支持MAC地址的修改成为可能;否则,就算修改了MAC地址,但是网卡根本无法接收相应地址的报文,该网卡就变得只能发送,无法接收,通信也就无法正常进行了。
MAC地址可以被盗用的直接原因是网卡驱动程序发送Ethernet报文的实现机制。
Ethernet报文中的源MAC地址是驱动程序负责填写的,但驱动程序并不从网卡的EEPROM中读取MAC,而是在内存中建立一个MAC地址缓存区。
网卡初始化的时候将EEPROM中的内容读入到该缓存区。
如果将该缓存区中的内容修改为用户设置的MAC地址,以后发出去的Ethernet报文的源地址就是修改后的MAC地址了。
如果仅仅是修改MAC地址,地址盗用并不见得能够得逞。
Ethernet是基于广播的,Ethernet网卡都能监听到局域网中传输的所有报文,但是网卡只接收那些目的地址与自己的MAC地址相匹配的Ethernet报文。
如果有两台具有相同MAC地址的主机分别发出访问请求,而这两个访问请求的响应报文对于这两台主机都是匹配的,那么这两台主机就不只接收到自己需要的内容,而且还会接收到目的为另外一台同MAC主机的内容。
按理说,两台主机因为接收了多余的报文后,都应该无法正常工作,盗用马上就会被察觉,盗用也就无法继续了;但是,在实验中地址被盗用之后,各台实验设备都可以互不干扰的正常工作。
这又是什么原因呢?
答案应该归结于上层使用的协议。
目前,网络中最常用的协议是TCP/IP协议,网络应用程序一般都是运行在TCP或者UDP之上。
例如,实验中Web服务器采用的HTTP协议就是基于TCP的。
在TCP或者UDP中,标志通信双方的不仅仅是IP地址,还包括端口号。
在一般的应用中,用户端的端口号并不是预先设置的,而是协议根据一定的规则生成的,具有随机性。
像上面利用IE来访问Web服务器就是这样。
UDP或者TCP的端口号为16位二进制数,两个16位的随机数字相等的几率非常小,恰好相等又谈何容易?
两台主机虽然MAC地址和IP地址相同,但是应用端口号不同,接收到的多余数据由于在TCP/UDP层找不到匹配的端口号,被当成无用的数据简单地丢弃了,而TCP/UDP层的处理对于用户层来说是透明的;所以用户可以“正确无误”地正常使用相应的服务,而不受地址盗用的干扰。
当然,某些应用程序的用户端口号可能是用户或者应用程序自己设置的,而不是交给协议来随机的生成。
那么,结果又会如何呢?
例如,在两台MAC地址和IP地址都相同的主机上,启动了两个端口相同的应用程序,这两个应用是不是就无法正常工作了呢?
其实不尽然。
如果下层使用的是UDP协议,两个应用将互相干扰无法正常工作。
如果使用的是TCP协议,结果就不一样了。
因为TCP是面向连接的,为了实现重发机制,保证数据的正确传输,TCP引入了报文序列号和接收窗口的概念。
在上述的端口号匹配的报文中,只有那些序列号的偏差属于接收窗口之内的报文才会被接收,否则,会被认为是过期报文而丢弃。
TCP协议中的报文的序列号有32位,每个应用程序发送的第一个报文的序列号是严格按照随机的原则产生的,以后每个报文的序列号依次加1。
窗口的大小有16位,也就是说窗口最大可以是216,而序列号的范围是232,主机期望接收的TCP数据的序列号正好也处于对方的接收范围之内的概率为1/216,可谓小之又小。
TCP的序列号本来是为了实现报文的正确传输,现在却成了地址盗用的帮凶。
4解决MAC与IP地址绑定被破解的方法
解决MAC与IP地址绑定被破解的方法很多,主要以下几种。
交换机端口、MAC地址和IP地址三者绑定的方法;代理服务与防火墙相结合的方法;用PPPoE协议进行用户认证的方法;基于目录服务策略的方法;统一身份认证与计费软件相结合的方法等(这些方法的实现原理和过程可以参考拙作《校园网IP地址盗用解决方案》)。
在这里笔者尤其推荐最后一种方法,这种方法是将校园网办公自动化系统和网络计费软件结合在一起而实现的,这在校园网信息化建设的今天具有很强的实践性。
解决路由器故障的八个范例
这两天我们的国际专线极不稳定,为了确认线路不稳定的故障点分析原因,引发了我对路由器故障的强烈兴趣,摘录部分文章如下。
cisco2610,使用eraseflash命令。
重起后变为rommon1>怎样可以恢复。
我下载了一个c2600-i-mz.121-3.T的文件,怎么传到路由器里去呀!
(我现在用console口连接)pc机需要一个tftpserver的软件。
恢复ios的方法:
在rommon状态下输入:
(注意大小写)
rommon1>IP_ADDRESS=192.168.0.1(路由器的ip地址)
rommon2>IP_SUBNET_MASK=255.255.255.0(路由器的掩码)
rommon3>DEFAULT_GATEWAY=192.168.0.2(网关,是pc机的ip地址)
rommon4>TFTP_SERVER=192.168.0.2(是pc机的ip地址)
rommon5>TFTP_FILE=c2600-i-mz.120-7.T.bin(上传文件的名称)
rommon6>sync(保存)
rommon7>set(查看)
rommon8>tftpdnld(传送文件)出现提示选择y
pc机的设置:
ip地址192.168.0.2
掩码255.255.255.0
网关192.168.0.1(是路由器的ip地址)
最近升级ios出问题的兄弟比较多,这里给出一个升级IOS的注意事项出来
1、升级前工作:
确认当前系统资源,包括mem,FLASH。
2、确认当前运行版本的IOS的版本号,特性集,需要特别注意的是带不带T,ciscoIOS中的T系列一般都带有很多新特性、新硬件的支持。
一般情况下11.3T的支持的新特性要到12.0才会合并到主发布版去。
12.0T的要到12.1的某个版本才会合并,以此类推,这一点是需要特别注意的。
3、待升级的IOS的需求(主要是mem/flash),确认当前的资源满足新版本的要求。
确认特性集满足要求。
4、备份原有的IOS与配置文件。
确认备份过程中没有错误出现。
5、升级IOS。
6、确认新的IOS已写入FLASH中。
7、用bootsystem(IOS)或setbootsystem(catos)修改启动文件名,不同的平台稍有差别(如果以前配置有,需要no掉或clear掉)
8、保存配置,并最后一次确认启动参数配置正确。
9、reload.
CISCO路由器端口状态
CSU──channelserverunit,DSU──dataserverunit
1、Serial*isdown,lineprotocolisdown(DTE)
故障:
[1]路由器未加电.
[2]LINE未与CSU/DSU联接.
[3]硬件错误.
解决方法:
[1]检查电源.
[2]确认所用电缆及串口是否正确.
[3]换到别的串口上.
2、Serial*isup,lineprotocolisdown(DTE)
故障:
[1]本地或远程路由器配置丢失.
[2]远程路由器未加电.
[3]线路故障,开关故障.
[4]串口的发送时钟在CSU/DSU上未设置.
[5]CSU/DSU故障.
[6]本地或远程路由器硬件故障.
解决方法:
[1]将MODEM、CSU或DSU设置为“LOOPBACK”状态,用“SHOWINTS*”命令确认LINEPROTOCOL是否UP,如果UP,证明是邮电局故障或远程路由器已经SHUTDOWN。
[2]如果远程路由器也出现上述故障,重复步骤[1]。
[3]检查电缆所连接的串口是否正确,用“SHOWCONTROLLERS”确认哪根电缆连接哪个串口。
[4]键入“DEBUGSERIALINTERFACE”,如果LINEPROTOCOL还没有COMEUP,或键入的命令显示激活的端口数没有增加,证明路由器硬件错误,更换路由器端口;如果LINEPROTOCOLUP,并且激活的端口数增加,证明故障不在本地的路由器上。
[5]更换路由器端口。
3、Serial*isup,lineprotocolisdown(DCE)
故障:
[1]路由器端口配置中的CLOCKRATE丢失。
[2]DTE设备未启动。
[3]远程的CSU/DSU有故障。
[4]电缆连接错误或有故障。
[5]路由器硬件错误。
解决方法:
[1]将CLOCKRATE加到路由器端口配置中。
[2]将DTE设备设置为SCTE模式。
[3]确认所用电缆是否正确。
[4]如果LINEPROTOCOL仍然DOWN,请更换路由器端口。
4、Serial*isup,lineprotocolisup(looped)
故障:
LOOP存在线路中,在激活的软件包中的顺序号,当LOOP初始时变成随机的号码,如果相同的随机号码回到环线上,就产生了一个LOOP。
解决方法:
[1]用“SHRUN”命令寻找LOOPBACK。
[2]用“NOLOOPBACK”去掉LOOP。
[3]如果PROTOCOL仍然DOWN,请与邮电局联系。
5、Serial*isup,lineprotocolisdown(disabled)
故障:
[1]邮电局故障。
[2]CSU/DSU硬件故障。
[3]路由器硬件故障。
解决方法:
[1]寻找CTS或DSR的双态元件信号。
[2]将CSU/DSU做LOOP(DTELOOP),如果故障继续,可能是硬件故障;如果故障停止,证明是邮电局故障。
[3]更换坏掉的硬件故障。
6、Serial*isadministrativelydown,lineprotocolisdown
故障:
[1]PORT可能被SHUTDOWN。
[2]IP地址重复。
解决方法:
[1]用“NOSHUTDOWN”命令去掉SHUTDOWN。
[2]将重复的IP地址中的一个更改
菜鸟学堂:
什么是Internet路由
路由概述
路由的过程可以概述为一个节点找到通往每个可能目的地的路径。
路由出现在从第一层到第七层的每一层中。
人们所熟悉的路由是出现在第三层(网络层)的,因此我们也只讨论第三层的IP路由。
交换路由信息的协议联接世界上的许多路由器,尽管这些路由器并不同类,通过路由表还是可以提供它们共同的网络视图。
路由表为路由器存储了到达网络上任一目的地所需要的一切必要的信息。
路由协议
各种各样的路由协议被用来填写网络中的路由表。
象BGP,OSPF,RIP和ISIS这样的协议可以传输给所有的路由器一个正确和一致的网络视图。
路由协议想要实现目标
你能够想象如果每个路由器都存储从它的节点所能到达的每个目标点所需的信息,很可能该路由器会积累一张庞大的路由表。
由于物理上(cpu,内存)的限制路由器很难有时就根本不可能处理一个庞大的路由表。
因此在不影响到达每个目的地的能力的情况下,我们要使路由表最小化。
例如,一个路由器通过连接到另一个路由器一个DS1链路连接到Internet,那么这个路由器可以将Internet上所有节点的信息都存储,或者它也可以将所有DS1串行链路外的非本地的信息都不存储。
也就是说路由器没有在它的路由表中存储任何有关数据“包”要寻找的非本地网络目的地的信息,而是将这些“包”发送到串行链路另一端的路由器,由这个路由器来提供必要的信息。
我们常把像本例中我们所说的在串行DS1链路另一端的路由器称为“GatewayofLastResort”。
这种简单的小把戏可以替路由表节省30个数量级的条目。
路由信息没有必要被过于频繁地在路由器之间交换。
通常路由表中的搅拌器给任何路由器所能提供的贫乏的内存和CPU施加了许多不必要的压力。
信息的复制不应该影响路由器的转发操作。
尽管没有必要每毫秒都刷新路由表,当然也不能每隔一个星期才刷新一次路由表。
路由的一重要的目标就是为主机提供能够准确反映当前网络状态的一张路由表。
路由器最重要的操作是将接收的包发送到正确的路径。
未经路由的包可能会导致数据丢失。
而路由表的不一致将会导致路由环路并使某个数据包在两个相邻的界面之间被循环发送。
人们十分希望所有的路由器都能有快速的收敛性。
收敛性可以被非正式地定义为计量所有路由器获得一致的网络视图的速度的单位。
人们希望有极小的收敛时间,因为如此网络上的每个路由器即使在网络拓扑(即网络视图)被严重改变的情况下也能准确地反映当前的网络拓扑。
当网络拓扑被改变时,每个路由器必须传输数据以帮助其它路由器来收敛出正确的网络视图。
但是在刷新路由表时快速收敛也存在着它的问题。
如果一个链路在迅速地振动(一会儿断开,一会儿合上),它会产生大量的安装和撤销的请求。
这个链路最终将会耗尽网络上每个路由器的资源,因为其它路由器被强迫快速安装或撤消这个路由。
因此,即使快速收敛是路由协议的目标,它也不是所有网络难题的万能药。
距离矢量路由
距离矢量路由协议向路由器的所有邻居分发一张记录形式为<目标,开销>的列表。
这些记录为网络中的每个非本节点的其它节点赋上了开销这个值。
值得注意的是这些信息只分发给源路由器的邻路由器。
这里的邻路由器常常是物理上的,但在eBGP中也有适用于逻辑上的情况。
开销的意思是从源路由器到目标节点的链路开销的总和。
源路由器定期地刷新它的距离矢量记录并把记录分发给它的邻路由器。
邻路由器将过去接收到的记录与现在的比较,如果过去的开销较小路由器将沿过去接收的距离矢量记录所指的路径发送输出。
许多距离矢量在实际使用时将会碰到无穷大的问题。
例如,我们假设所有的链路都有一个开销单元并且每一对相邻节点之间的链路对应一个单元。
如果路由器X连接到路由器Y并且路由器Y连接到路由器Z如图1,我们将会发现无穷大的问题。
Y知道到Z要有1个单元的开销并且X知道到Z要2个单元的开销。
假设链路YZ关闭,这条链路的开销就成为无穷大(如图2)。
现在Y知道到达Z的开销是无穷大,它就将这个距离矢量路由发送给X。
假设X这时发送给Y一个距离矢量路由声称它到达Z要2个单元的开销。
现在Y就会认为它能通过X到达Z,它就发送给X一个刷新的距离矢量路由声称它到达Z的开销是3个单元(如图3)。
请注意X没有想到Y发给它的这个距离矢量路由是由它发送给Y的那个距离矢量路由推算来的。
这就是距离矢量路由的严重缺陷,在它们未改进的结构中不包含路由障碍的信息。
正如图例所示路由器将会不断改变到Z的路径信息。
X和Y这两个路由器将会永远交换这个有关Z路由器的路径信息或者直到开销单元的值到达某一个事先约定的无穷大的值(例如,在RIP中是15)。
X--------------------Y--------------------Z
Y:
1 X:
1 X:
2
Z:
2 Z:
1 Y:
1
[图一]
X--------------------Y--------**---------Z
Y:
1&nbs
p;<------------- Z:
无穷大
Z:
2 -------------> X:
1
[图二]
X--------------------Y--------**---------Z
Z:
无穷大(从Y)->X:
1
Y:
1 <------------- Z:
3
[图三]
使用路径矢量路由就可以解决无穷大的问题。
每个距离矢量也包括他所通过的路径(如图4)。
路由器如果接收到一个路径矢量中包含自己的刷新记录,路由器将不会刷新该记录(如图5)。
边界网关协议(TheBorderGatewayProtocol)就使用了上述的方法以解决无穷大的问题。
很明显如果你想使路由表包含路由器所传输的AS(AutonomousSystemsontheinternet)路径信息,你将必须要向路由表中添入更多的信息。
因此BGP的设计者决定牺牲一点路由器能够承受的起的存储空间和处理能力。
X--------------------Y--------------------Z
Y:
1(Y) X:
1(X) X:
2(YX)
Z:
2(YZ) Z:
1(Z) Y:
1(Y)
[图四]
X--------------