从实践中学习ARP原理
其实网上已经有很多ARP欺骗的资料了,写博客是为了加深自己的对计算机网络基础的理解,刚毕业的时候喜欢捧着数据库系统概论,计算机网络,操作系统这些书籍看,能掌握一些基础的东西,但是其实很枯燥,还是从实践中掌握底层的知识比较生动有趣。这次梳理一下从实践中掌握ARP协议。
1. ARP协议介绍
ARP即Address Resolution Protocol,地址解析协议,用来将ip地址解析成MAC地址。在同一个网络中的主机之间的通讯,必须要知道目标主机的MAC地址,那么如何才能知道目标主机的MAC地址呢?所以就有了ARP协议,该协议将目标主机的ip地址解析成MAC地址。那么ARP是如何解析ip地址的呢?
假设A主机要跟B主机通讯。
第一步: A主机会先查看自己的ARP缓存里面是否有B主机Mac地址记录; 第二步:如果A主机ARP缓存表有B主机的MAC记录,则A主机直接拿这个MAC跟B主机通讯; 第三步:如果A主机ARP缓存表没有B主机的MAC记录,则会向该局域网的所有主机广播一个ARP请求,而A主机的ip地址跟MAC地址,目标主机的ip等信息会在这个请求包里面,本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求; 第四步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中; 第五步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A; 第六步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了
用通俗的例子来讲解上面的解析过程就是:
有一个班级(局域网), 班上有56个学生(主机), 李雷(主机A)是班长, 韩梅梅(主机B)是班上新来的同学(所有人都不认识她)。有一天,老师让李雷帮忙叫一下韩梅梅到他的办公室去,因为李雷不认识韩梅梅,所以他到教室门口大声喊“我是班长李雷,请问谁是韩梅梅?”(广播ARP请求,别计较神经病才会把自己的职称跟姓名也喊出来,这里是为了形象说明ARP) 班上所有人都听到了这句话,但是只有韩梅梅回应“我是韩梅梅”,其他人都当没听到这句话(丢弃请求包),并且韩梅梅记住了这个人事班长李雷,班长李雷也记住了这个人是韩梅梅(ARP缓存)。 下一次老师再次让李雷找韩梅梅的时候,李雷就直接能找到韩梅梅,而不用广播了,除了失忆。
2. ARP欺骗原理
上面简单介绍了ARP的原理之后,那么有什么不太对劲的地方呢?那就是A主机收到B主机的响应之后,直接更新ARP缓存表,并不会去验证这个响应到底是不是B主机响应回来的,可能是C主机冒充B主机响应的,所以下次A主机跟B主机通讯时,从ARP缓存表里面获取的记录其实并不是B主机的,而是C主机的,这就是ARP欺骗。
上面那个通俗例子来讲就是:
李雷在门口大声喊“我是班长李雷,请问谁是韩梅梅?”,然后小明不要脸地回应“我是韩梅梅”,李雷不加思索地就认为他小明是韩梅梅,下次通讯直接找了小明。(这种场景这个例子不是很合适,因为李雷认识小明,并不会认为他是韩梅梅,但是ARP缓存里面可以这样,主机B的ip指向一个MAC,主机C的ip也指向同一个MAC)
3. ARP欺骗实现
知道了ARP欺骗的原理,很容易就能实现ARP欺骗,关键是修改被攻击主机的ARP缓存表。
假设攻击主机A,被攻击主机B,和正常通讯的主机C的信息如下:
主机 | ip | MAC |
---|---|---|
主机A | A_ip | A_MAC |
主机B | B_ip | B_MAC |
主机C | C_ip | C_MAC |
被攻击主机B的arp缓存表如下(被攻击之前):
ip | MAC |
---|---|
A_ip | A_MAC |
C_ip | C_MAC |
现在攻击主机A通过工具给主机B发送arp恶意请求包(伪装成C主机给B主机发ARP请求包),然后致使主机B的ARP缓存表变成以下关系:
ip | MAC |
---|---|
A_ip | A_MAC |
C_ip | A_MAC |
这个时候,如果B主机跟C主机通讯的话,那么B主机根据C主机的ip通过ARP缓存表,找到的主机其实是A的,那么请求会全部发给攻击主机A,那么A可以分析这些包的信息获取个人隐私,同时把这些包转发给主机C,从而不被轻易发现。
局域网里面用的更多的其实是双向欺骗:
攻击主机A欺骗网关说我(A)就是主机B,然后网关把所有发给B主机的请求都发给了主机A;
攻击主机A欺骗主机B说我(A)就是网关,然后主机B把所有发给网关的请求都发给了主机A;
这样的话主机B的所有请求以及响应都会经过主机B。
4. ARP欺骗防范
使用ARP个人防火墙,公共wifi不要轻易输账号密码之类的敏感信息。