快捷搜索:   nginx

杜绝ARP欺骗----利用LnS防范ARP欺骗

为了便于说明,我们先假设一个子网环境:
    网关 : 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缓存,欺骗失败。

LnS 设置

    LnS 可以拦截所有的 ARP 数据包(默认规则中的倒数第二条,将它禁用或拦截),这样安全倒是安全了,但我们的机器也就成孤儿了,不能与任何人通讯了。所以必须对信任的主机设置放行规则,而网关就是必须放行了,否则外网也不能上了。

    对于我们假设的子网环境,设置如下:
    ① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF   (允许本机广播出站)
    ② FF:FF:FF:FF:FF:FF <= 11:11:11:11:11:11   (允许网关广播入站)
    ③ 22:22:22:22:22:22 == 11:11:11:11:11:11   (允许本机与网关相互应答)
    (三条规则的图解见后面的附件)

    需要局域网共享,则对每台要共享的主机增加如②③的两条规则,将网关的MAC改为信任主机的MAC。
    有点麻烦,每台主机需要加两条规则,而防火墙的规则是越少越好,且 LnS 的规则数很容易达到上限,所我们对设置稍微进行一下妥协:对入站的所有广播放行,不要对每台信任的主机添加规则。有人会觉得这样不安全,因为任何非信任的主机都可以向本机发送查询广播,实际上不必担心,因为没有相应的放行应答出站的规则。(你要就要吧,我就不给你钱,你能咋地?)

    优化后的规则如下:
    ① 22:22:22:22:22:22 => FF:FF:FF:FF:FF:FF   (允许本机广播出站)
    ② FF:FF:FF:FF:FF:FF <= 全部                (允许所有查询广播入站)
    ③ 22:22:22:22:22:22 == 11:11:11:11:11:11   (允许本机与网关相互应答)
    ④ 22:22:22:22:22:22 == 信任主机1                
    ⑤ 22:22:22:22:22:22 == 信任主机2
       ……

    ※ 最后,将倒数第二条规则改为拦截(第二列红杠)或禁用(取消前面的勾)。
    不必担心禁用,最后一条规则会拦截所有未匹配的数据包(前提是没有修改该规则)

LnS 过滤方式

    论坛出现了几种ARP设置方式,其实从原理上说,要实现的目的是相同的,拦截该拦截的,放行该放行的。但其中有某方法是错误的,有些看起来不一样,实际上与Z老大的置方法是相同的。

    防火墙可以用黑名单过滤方式(禁止非信任的,其它允许),也可以用白名单过滤方式(允许信任的,其它禁止),也可以混合运用。过滤目标的选择方式又分直接选择和补集选择。
    我上面的规则说明使用的是白名单方式,也就是上面列出的规则是要放行的,然后需要一条拦截所有的规则(就是倒数第二第规则,拦截或取消)。

    是黑名单方式好还是白名单方式好呢?普遍性的原则应该是优先选择目标少的。假如有10种数据包要过滤(将数据包用1到10编号),1、3 号是应该放行的,其它是应该过滤的。

    则们可以选择白名单方式:
        放行1(白名单)
        放行3(白名单)
        拦截所有
    也可以选择黑名单方式:
        拦截2(黑名单)
        拦截4(黑名单)
        拦截5(黑名单)
        …… (黑名单) 
        拦截10(黑名单)
        允许所有
     对比之下当然应该选择白名单方式。

    变种一:
        允许1或3 (白名单的一种选择方式)
        拦截所有
    变种二:
        拦截 非1且非3 (黑名单的一种选择方式)
        允许所有
    注意两个变种方式,它的选择目标用到了组合,如果防火墙能实现这种规则,当然效果是一样的,但 LnS 的 Arp 规则中只能填入一条 MAC 地址。特别变种二方式,相加的组合是不能拆分成多条规则达到相同的拦截目的的。

    变种二就是那个禁止非本机到非网关的双向规则,倒数第二条改成允许的方法。此方法等效于前面“LnS 设置”部分针对网关的三条规则中的最后一条,其它的都被拦截了。应该说这是一种错误的方法,该方法仅允许本机与网关的应答数据包通过,倒数第二条规则只能匹配本机与网关间的应答。但光有应答不行,还得允许广播,才进正常进行ARP查询。

    那么为什么使用变种二方法的网友实际中“可行”了?说可行是因为过滤太严格,能防止绝大数大ARP欺骗,加引号是因为可行是暂时的,连续的长时间测试,很可能会断网的。
    这跟具体的网络环境有关系,可能的原因比较多。一种可能的原因是LnS有BUG,过滤起作用在本机与网关建立连接之后,或者使用了静态MAC、指定IP避免DHCP租约失效之类,具体的我也分析不清楚。但从原理上说,这方法是错误的。

安全是相对的
    防止ARP欺骗最好的办法在网关和各子机上均采用静态MAC绑定。防火墙只能增加安全系数,不能保证绝对完全,一是因为防火墙可能有BUG或者功能本身不完善又或者设置不善,二是现实中的妥协可能存在漏洞。比如本机为了上网信任了网关,同时为了共享信任了主机B,但主机B是没有任何安全防护,攻击者可以从主机B下手,迫使主机B当机后将自己伪造主机B的IP与MAC,获得与本机通讯的能力后再用其它办法攻击,更严重的情况是如果网关本身不安全,那么在本机上如何防护都不能取得较好的效果。

Look n Stop 使用指南

Look n Stop V2.05 p3 简体中文注册版下载
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论