使用Lns防范Arp欺骗
发表时间:2023-07-16 来源:明辉站整理相关软件相关文章人气:
[摘要]为了便于说明, 我们先假设一个子网环境: 网关 : IP = IP-1, MAC = 11:11:11:11:11:11 本机 : IP = IP-2, MAC = 22:22:22:22:22...
为了便于说明, 我们先假设一个子网环境:
网关 : IP = IP-1, MAC = 11:11:11:11:11:11
本机 : IP = IP-2, MAC = 22:22:22:22:22:22
主机A: IP = IP-A, MAC = AA:AA:AA:AA:AA:AA
主机B: IP = IP-B, MAC = BB:BB:BB:BB:BB:BB
主机C: IP = IP-C, MAC = CC:CC:CC:CC:CC:CC
子网内的任意两台主机(网关也可看作一台主机)要正常通讯, 需要互相知道对方的网卡地址MAC。 如果一方不知道对方的MAC, 就要进行ARP查询。
ARP 查询过程
在一个正常的子网内, 一次完整的 ARP 查询需要一次查询广播和一次点对点的应答。 查询广播中包含了要查询主机的IP, 此广播可以被子网内的每一台主机的网卡收到, 网卡会检查要查询的IP是否与自己的IP相等, 不等则直接丢弃, 相等则将此数据包提交给系统内核(一个中断), 内核调用网卡驱动解析收到的数据包, 然后构建一个应答数据包回送到查询的主机, 查询主机收到应答后更新自己的ARP缓存表。
对应 LnS 的设置, 此通讯过程需要两条规则,以本机查询主机B的MAC为例
① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF (允许本机广播出站)
② 22:22:22:22:22:22 <= BB:BB:BB:BB:BB:BB (允许主机B应答本机入站)
规则说明方式:=> 表示传出, <= 表示传入, == 表示双向。
注意按此设置 LnS 规则时, 有方向规定的始终要将源放在左边, 目标放在右边, 对方向为双向的始终将本机放在左边, 远端放在右边。
只要将此查询过程中的任何一步掐断, 则该查询过程就会失败。 比如有人找你公司的讨债, 总经理秘书可以想各种理由使债主见不到总经理, 即使见到了, 总经理也可以找财务不在或目前实在没钱为由不付钱, 讨债就失败了。 这两个方法就好比拦截广播和拦截应答。
子网内的两台主机要能够完整的通讯(双方都可收发数据)必须互知对方的MAC地址, 比如本机要跟主机B完整通讯, 还必须让主机B也能查询到自己的 MAC。
① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF (允许本机广播出站)
② 22:22:22:22:22:22 <= BB:BB:BB:BB:BB:BB (允许主机B应答本机入站)
③ FF:FF:FF:FF:FF:FF <= BB:BB:BB:BB:BB:BB (允许主机B广播入站)
④ 22:22:22:22:22:22 => BB:BB:BB:BB:BB:BB (允许本机应答主机B出站)
显然规则②④在LnS中是可以合并的, 则两台机器完整通讯只须 3 条规则:
① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF (允许本机广播出站)
② FF:FF:FF:FF:FF:FF <= BB:BB:BB:BB:BB:BB (允许主机B广播入站)
③ 22:22:22:22:22:22 == BB:BB:BB:BB:BB:BB (允许本机与主机B相互应答)
简单的 ARP 欺骗
前面说了, 一次查询过程需要一次广播和一次应答, 但 ARP 协议中并不要求广播与应答成对出现, 也就是可以没有广播, 任何一台主机都可以主动发送应答数据包, 如果目标主机没有使用静态MAC, 则只要收到应答广播就会更新自己的ARP缓存表。 因此, 我们可以人为的构建一个错误的应答数据包让目标主机更新自己的ARP缓存。
比如从本机控制, 不让主机A与主机B通讯:
本机向主机A发送应答数据包, 告诉它 IP-B 的 MAC 是 XX:XX:XX:XX:XX:XX
本机向主机B发送应答数据包, 告诉它 IP-A 的 MAC 是 YY:YY:YY:YY:YY:YY
此时主机A和主机B的 ARP 缓存中关于对方的MAC都错误的, 他们互发数据时就会发到一个错误或都根本不存在(取决于伪造的MAC)的网卡, A、B 间的通讯自然失败。 (其实只要其中一台的ARP缓存错误, A、B 间的通讯就会表现不正常)
想想, 如果伪造的应答数据包是告诉主机B:IP-1 的 MAC 是 ZZ:ZZ:ZZ:ZZ:ZZ:ZZ 会怎么样?则主机B与网关通讯会不正常, 就会表现为断网。 如果同时对网关欺骗, 告诉它主机B的MAC为一个错误值, 且这种欺骗一直持续, 则主机B无法上网了。
大家常说的网络执法官就是利用ARP欺骗来踢人的。 执法官运行时首先会大量发送广播, 获得所有主机的MAC地址, 然后, 想欺骗谁, 就向谁发送伪造的应答数据包。
当然, ARP欺骗决不仅止于此, 比如还可以使目标主机断线后将自己的MAC伪造成被欺骗主机的MAC达到特殊目的, 或者同时欺骗网关与目标主机, 但是用自己的MAC代替伪造应答数据包中的随机MAC并开启本机的数据转发功能, 插入到网关与目标主机通讯中充当代理, 达到监听目标主机的目的。 但本文的目是要说明LnS中的ARP规则如何设置, ARP欺骗不是重点。
ARP 防范
说到这样, 大家肯定已经发现一个问题:欺骗者必须能与被欺骗者通讯, 以便发送伪造的应答数据包, 否则欺骗过程就不能完成。 基于这点, 我们可以从几个地方来防止 ARP 欺骗:
一、不让非信任的主机查询自己的MAC, 欺骗者不能与本机通讯, 自然无从欺骗了
可以拦截它的查询广播(要钱的一律不许进门)
可以拦截本机对它的应答(都来要吧, 我就一句话, 没钱, 死猪不怕开水烫)
二、使用静态MAC, 拒绝更新ARP缓存。
即使有仿造应答到达本机, 但本机不使用该包更新自己的ARP缓存, 欺骗失败。 那么为什么使用变种二方法的网友实际中“可行”了?说可行是因为过滤太严格, 能防止绝大数大ARP欺骗, 加引号是因为可行是暂时的, 连续的长时间测试, 很可能会断网的。
这跟具体的网络环境有关系, 可能的原因比较多。 一种可能的原因是LnS有BUG, 过滤起作用在本机与网关建立连接之后, 或者使用了静态MAC、指定IP避免DHCP租约失效之类, 具体的我也分析不清楚。 但从原理上说, 这方法是错误的。
安全是相对的
防止ARP欺骗最好的办法在网关和各子机上均采用静态MAC绑定。 防火墙只能增加安全系数, 不能保证绝对完全, 一是因为防火墙可能有BUG或者功能本身不完善又或者设置不善, 二是现实中的妥协可能存在漏洞。 比如本机为了上网信任了网关, 同时为了共享信任了主机B, 但主机B是没有任何安全防护, 攻击者可以从主机B下手, 迫使主机B当机后将自己伪造主机B的IP与MAC, 获得与本机通讯的能力后再用其它办法攻击, 更严重的情况是如果网关本身不安全, 那么在本机上如何防护都不能取得较好的效果。
上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。