ARP(地址解析协议)简介及安全问题

禁止转载,欢迎交流,如有错误请务必指正。

背景

局域网通信除了需要IP地址还需要用到全球每个联网设备都唯一的MAC地址,过程简单来说大概是这样的:局域网中数据包传播的过程中,根据TCP/IP协议,应用层数据封装上传输层包头,IP包头后来到数据链路层加上帧头和帧尾,才能发送出去。这里的帧头包含三个信息,分别是目标MAC地址,源MAC地址,协议类型。其中目标MAC地址就要用到ARP协议来获得。

简介

ARP(Address Resolustion Protocol)地址解析协议作用是在局域网中根据IP地址获得MAC地址。每台联网设备中都会存有ARP表,它记录了已知的IP地址和MAC地址的对应关系。这个表通过不断地和其他人通信来完善,这样一来就不用每次通信都先询问对方的MAC地址。

工作流程

在未知对方MAC地址的情况下,首先设备会发送一个ARP请求报文,向局域网广播,请求目标主机回应,其中也包含了自己的IP地址和MAC地址。目标主机收到后确认是询问自己的MAC地址,便会发出单播应答告知对方。

如在192.168.0/24的网段中,192.168.0.1想与192.168.0.2通信时,192.168.0.1会像整个192.168.0网段所有设备发送ARP请求,每一台设备收到数据包后会检查这个报文中目标IP地址这一项和自己的IP地址是否一致,如果是便会回应对方,由于请求报文中已经包含了对方的MAC和IP,这个数据包就不再需要广播了。

安全相关问题

ARP协议并不是个安全的协议,ARP协议没有校验机制,也就是说收到的信息真伪并不能确定,错误的信息也会被记录,结果轻则无法上网,重则导致信息泄露,被监听,或者篡改。如果局域网中有恶意攻击者,那可能会发生下面的情况:

ARP欺骗:用户A想与用户B通信时会先广播发送ARP请求报文,那么坏人C也能收到这个报文,C并没有丢弃这个请求报文,而是以B的身份回给了A一条消息,把一个错误的MAC地址告诉A,由于ARP的保存机制是收到新的应答就会更新信息,所以只要C在B正常回答了A之后再伪装成B发送回复,A就保存下了错误信息。那么A发给B的数据B就不会收到了。

利用ARP欺骗的中间人攻击:还是上面三个人的情景,如果C回答给A的不是一个不存在的地址,而是C自己的MAC地址,那么A以后想发给B的数据都会给到C手上。如果C再同样的欺骗B,那么A和B的相互通信都会经过C,只要C收到之后再把数据转发给真正的接收方,A和B就能正常通信而且表面上并无异常。除了看到他们的通信数据,C还可以选择性的转发,或者篡改数据后再转发。

关于DHCP服务

禁止转载,欢迎交流,如有错误请务必指正。

DHCP(Dynamic Host Configuration Protocol) 服务是局域网中为用户动态分配ip地址的服务。端口号67/68。

为什么要有DHCP服务?

如果没有为用户动态分配ip地址这样一项服务,那意味着每一台上网设备需要自己设置ip地址,这个ip地址不能有冲突,也要与局域网网段一致。那当这个设备到了另一个局域网,物理上位置移动了,这个ip必然又需要重新手动设置,非常不现实。所以我们需要一项为用户动态分配ip,管理局域网中的ip地址池的服务。并且DHCP的租期参数能保证ip不被长时间占用,根据不同地方的网络需求作出合适的配置。

DHCP做了什么

DHCP存有所在局域网中能用的代码池,设备的ip分配情况。当把ip分配给主机时,DHCP把ip地址,子网掩码,网关,DNS和租期一起发送给主机,有了这些参数主机就可以上网了,DHCP还会纪录此时的时间,以便租期到后回收这个ip地址。

租期是服务启用时设置好的时间参数,代表了这个ip地址将会分配给这个主机的时长,在租期之内即使主机下线,这个ip地址也不会被回收。

用户与DHCP的交互过程

用户连接到局域网的时候并不知道上网所需要的参数,这个时候用户会发出第一个数据包,广播寻找DHCP服务器(discover)。

收到discover包的DHCP服务器会从地址池中为用户提供一个可用的ip地址,连同其他信息发送给用户(offer)。这个过程(似乎)大多是广播,windows系统的服务器中可以设置为单播。

用户收到offer包后,广播一个数据包,表示正式请求使用这个ip(request)。如果收到的offer包多于一个,则采用第一个。

最后DHCP服务器回复一个确认数据包(ack),告知用户是否成功分配。

这个过程中如果用户没有找到DHCP服务器或者DHCP服务器地址池没有可用的ip,同时用户又没有填写静态ip,用户的ip就会自动设置为169.254.xxx.xxx,当然也无法上网。

相关安全问题

上面提到用户可能会收到多个offer包,说明DHCP服务器不止一个,那么其中可能有伪装的DHCP服务器,提供的ip也无法另用户正常上网。而由于客户端只会采取第一个收到的包,所以如果有伪装的DHCP服务器,而它发送的offer又恰好是客户端收到的第一个,客户端也会采用,并没有办法分辨。但是这种情况我们可以分辨,因为这时的ip地址不是169.254开头。

除了可能有伪装的DHCP服务器,正常的DHCP服务器也可以遭受攻击,只要被恶意请求获取完地址池所有ip,正常用户再连接就无法上网。