基于ARP欺骗的网络监听技术研究
扫描二维码
随时随地手机看文章
引言
当前局域网大部分属于以太网,其主要连接方式主要是通过交换机进行连接。交换机在外型上类似于集线器,但在内部采用了电路交换的原理,将一个端口的输入交换到另一指定的端口。交换式以太网弥补了共享式以太网(用集线器连接的网络)的缺陷,但也从一定程度上增加了网络监听的难度。交换机在工作时维护着一张ARP的数据库表,在这个库中记录着交换机每个端口绑定的MAC地址,当有数据包发送到交换机上时,交换机会将数据包的目的MAC地址与自己维护的数据库内的端口对照,然后将数据包发送到相应的端口上。交换机与集线器最大的不同是通信数据包不再复制到其他所有端口,而是精确地发往目标机器所在的那个端口,所以,其它机器就无法监听这种目的性较强的通信,当然也就无法实现数据包的抓取了。因此我们需要在交换式以太网中寻求一种简单方便的监控部署软件,以实现对现在广泛存在的交换式以太网进行有效的监听。
1 ARP协议及欺骗技术
1.1 ARP协议
IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包的。因此,IP 驱动器必须把IP目的地址转换成以太网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。ARP地址解析协议 (Address Resolution Protocol)就是负责把网络层的IP地址转变成数据链路层的MAC地址, 建立IP地址和MAC地址之间的一一映射。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
1.2 ARP欺骗技术
ARP 协议虽然是一个高效的数据链路层协议,但是作为一个局域网协议,它是建立在各主机之间相互信任的基础上的,因此也存在一些安全问题。根据ARP 协议存在的这些安全问题,可以使用以下几种手段来进行ARP欺骗:
(1) 攻击者也就可以在接收到该ARP请求包之后进行应答,进行假冒。
(2) 由于被假冒的机器所发送的ARP应答包有可能比攻击者的应答包晚到达,为了确保被攻击者机器上的缓存中绝大部分时间存放的是攻击者的MAC地址,可以在收到ARP请求广播后稍微延迟一段时间再发送一遍ARP应答。
(3) 由于各种操作系统对于ARP缓存处理实现的不同,一些操作系统(例如Linux)会用向缓存地址发非广播的ARP请求来要求更新缓存。在交换网络环境下,别的机器是不能捕获到这种缓存更新的,这就需要尽量阻止主机发送更新缓存消息。
ARP欺骗技术可以实现全交换环境下的数据监听。因此,我们可以利用该技术对交换式以太网进行监控。
2 采用ARP欺骗技术捕获交换式以太网数据
通过前面的叙述,我们知道,交换式以太网可以利用ARP欺骗技术进行监控。下面说明如何采用ARP欺骗技术捕获交换式以太网数据。
2.1 ARP协议实现
在以太网上解析IP地址时,ARP请求和应答分组的格式如图2所示
以太网目的地址 | 以太网源地址 | 帧类型 | 数据类型 | 协议类型 | 硬件地址长度 | 协议地址长度 | 操作类型 | 发送端以太网地址 | 发送端IP地址 | 接收端以太网地址 | 接收端IP地址 |
6 6 2 2 2 1 1 2 6 4 6 4
以太网报头中的前两个字段是以太网的目的地址和源地址。目的地址为全1的特殊地址是广播地址。同一局域网上的所有以太网接口都要接收广播数据帧。接着是以太网帧类型,2字节长,表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。硬件类型字段表示硬件地址的类型。值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。值为0x0800即表示IP地址。硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。操作字段指出操作类型,可以为ARP请求(值为1)、ARP应答(值为2)。其余的四个字段是发送端的硬件地址(以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。
对于ARP请求来说,除目的端硬件地址外的所有其它的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。[!--empirenews.page--]
由以上的分析可知,ARP数据包用C语言表示如下:
typedef struct _ARP_RHDR
{
UCHAR HardwareType[2];//数据类型,以太网为OX0001
UCHAR ProtocolType[2];//协议类型
UCHAR LengthOfHardware;//硬件地址长度
UCHAR LengthOfProtocol;//协议地址长度
UCHAR OpCode[2];//操作类型
UCHAR SrcMAC[6];// 发送端以太网地址
UCHAR SrcIP[4];// 发送端IP地址
UCHAR DesMAC[6];// 接收端以太网地址
UCHAR DesIP[4];// 接收端IP地址
}
ARP_RHDR,*PARP_RHDR;
2.2利用ARP欺骗在交换网络下捕包
由以上对 ARP 协议的分析和对其原理的介绍可知,利用 ARP 欺骗已经可以使子网内的别的机器的网络流量都会流到攻击者机器来,为了使他们还能够“正常”地使用网络,攻击者就必须将他们的数据包转发到他们真正应该到达的主机去,这就需要进行数据转发,因此,要实现交换式以太网正常的网络监控,就要使用ARP欺骗结合IP转发的发式来进行捕包,可以使用两个线程:一个进行数据包的获取、分析和转发,一个定时发送ARP应答包。
在网络监控系统中,实现对 HTTP 访问则是基于目标地址的过滤,通过对 IP 首部的各个数据域的分析判断 Destination IP Address 是否属于规则库中设定限制访问集合,如果是,系统可以采用一定的手段阻止用户的继续访问,采用的方法是切断或关闭TCP连接。我们可以人为的构造一个FIN报文发送给用户,从而关闭用户与Web服务器间的TCP连接,禁止用户对该URL地址的访问。Winpcap库的核心函数pcap_sendpacket提供了绕过操作系统正常网络 Socket编程而直接读写网卡的能力,在完成该TCP连接的重要信息分析后,即可完成对其的强制中断。在构造中断TCP报文时,需要将源、目的IP进行交换,源、目的端口交换,然后将标志位置为RST,然后使用 pcap_sendpacket 直接将报文发送即可实现目的。核心实现函数:
Void SendData(PIP_RHDR IpData)
{
PTCP_RHDR ptcpheader=(PTCP_RHDR)IpData->Data;
int iRstFlag = ptcpheader->Flags & 0x04;
if(iRstFlag = 0x04)
return;
……
SetMACToEther(MACADDR_SRC,&EtherFrame,0);//源为发到本机的 mac
SetMACToEther(MACCADDR_GATEWAY,&EtherFrame,1);//目标为默认网关的 mac
……
}
3 软件的实现和结论
基于ARP欺骗的网络监听软件采用了虚拟路由技术,以实现报文的收发。软件经过测试,基本上达到了预期的目的。这样的系统,可以用来对现在正在使用的,用于各种功能的交换式以太网(如校园网、企业网等)进行监听,从而解决在网络管理上的诸多不便,进而实现网络管理的最终目标——资源的合理、充分利用和提供可靠的通信服务。