Nov 282007
 

这两天出了个很有意思的新闻,是关于瑞星的。

此事源自吉林大学网络中心发布了一则通知《关于谨慎使用瑞星2008防火墙软件的紧急通知》,指明瑞星防火墙的其中ARP防护功能会导致网络充斥大量的ARP广播,从而干扰网络正常运行,并可能导致上层网关设备负载加重从而影响正常工作。

因为此声明直指瑞星产品设计有缺陷,瑞星官方的人当然坐不住了,很快官方就发表了声明“瑞星关于《吉林大学公告慎用瑞星2008防火墙》的声明”,首先否认了其有设计缺陷,其次鼓吹其ARP防护的“强大”功效,以及拿仅有吉林大学一家使用出现问题作为案例说事,最后将问题归结于吉林大学网络本身不健壮。具体解说可谓精彩,摘录如下:

   我们认为,瑞星个人防火墙2008的ARP功能不存在设计缺陷,具体解释如下:

    第一、ARP欺骗攻击是目前较为流行的一种欺骗手段,黑客可以利用ARP攻击进行病毒传播、信息监听、内容篡改、盗取网游、网银帐号等恶意攻击。为了解决这一问题,瑞星个人防火墙2008版新增加了ARP欺骗攻击防护功能。该功能可以有效地阻止因ARP攻击造成的上述各种问题,特别对网游、炒股软件等帐号的保护非常有效,因此受到广大用户的热烈追捧,并被部分用户认为是瑞星2008新品中最喜爱的功能之一。

    第二、目前,全球安全业界公认的最有效的ARP防护技术,是通过向网内发送ARP广播获取真实的IP-MAC对应关系来实现的,瑞星所采用的就是这种技术。在一个管理完善的网络中,不会存在如此频繁的ARP攻击,只有在局域网中存在大量的ARP攻击源,或者用户对ARP防火墙设置不当,才会导致此种情况发生。目前,有且仅有吉林大学称使用瑞星个人防火墙2008会造成严重问题

    第三、瑞星个人防火墙2008版缺省设置不会开启ARP防护功能,数千万用户都可以作证。事实上,即使用户开启了ARP防护功能,默认情况下也只保护用户指定的IP,除非用户自行添加其它地址。因此吉林大学公告中所说的“采用其缺省设置就会导致网络线不畅”的情况完全不属实。


(图一 该功能默认是不开启的) 


(图二,若开启此功能,默认状态只会保护特定IP地址,除非用户自行添加其它地址)

    第四、随着黑客和病毒技术的不断发展,安全产品势必不断精进技术,增加更底层更强大更复杂的功能才能保护用户,如何处理好技术的复杂性和操作的简易性之间的矛盾,是全球所有安全厂商所面临的共同课题。正因为如此,瑞星2008新品才进行了史无前例的大规模公开测试和长达半年多时间的后期产品完善工作。目前数千万用户的使用证明,瑞星2008新品在大量应用创新的底层核心技术的同时,其适用性和易用性也是最好的。

    第五、为了避免此类事件再次发生,瑞星公司建议:

    1、瑞星杀毒软件2008版及瑞星个人防火墙2008主要针对个人用户设计,对于校园网、企业网络等局域网环境,应该采用瑞星杀毒软件网络版等企业级安全产品进行防护,至少局域网本身应该拥有完善、可靠的安全管理机制,对接入局域网的用户行为进行有效的安全控制。

    2、瑞星杀毒软件2008版及瑞星个人防火墙2008新增了主动防御、ARP欺骗防护等功能。对于电脑初级用户,建议采用产品缺省设置即可。对于新产品中提供的高级设置等功能,如果用户不了解相关知识,建议不要随便修改设置。

然而事情还没算完,昨天,好事的CNBeta又放出了一则新闻《[证据]中科大、中山大学、四川大学关于瑞星ARP产品问题的说明》,证明有更多的苦主由于瑞星的这个东西导致了网络不正常。这下看瑞星怎么应对了。

对于我个人来说,新闻本身并没有什么值得关注的,我更关心导致问题的技术层面的原因以及为什么要这样做。这里先简单分析一下所谓的ARP和ARP病毒,以及瑞星的反毒措施,如果对此已经有了结的兄弟们可以跳过。

ARP,全称地址解析协议,作用于ISO七层协议的数据链路层。具体作用是将网络层的IP地址翻译为链路层的MAC地址,来使得IP数据报在链路层可以找到相对应的链路桢,从而传输到正确的目的地。假定要传输数据的双方分别为pcA和pcB,pcA要发送数据到pcB,其ip地址和mac地址分别为ipA,macA和ipB,macB,ARP工作的流程简述如下:

1,pcA发出一个arp request,这个request包含有源mac地址,为macA,还有目的地址,为FF:FF:FF:FF:FF,也就是全局域网内广播,request内容翻译成白话就是who has ipB please tell ipA。

2,局域网内所有机器都会接受此广播,同时检查request内容,发现是找ipB,则对照自己机器的ip,如果没有ipB,忽略此包,如果有,进入下一步。

3,其他机器都已经停止,唯有pcB,发现此广播的request是找自己,所以pcB发出一个回应,具体为一个arp echo,源地址为自身macB,目的地址为macA(从前面request包里拿到的),内容为ipB is at macB。

4,pcA收到这个echo,在自己协议栈内建立一个arp缓存表,表项加入ipB-macB,并往macB发送数据,这样数据就能准确到达pcB。并且在ipB-macB这个表项存在的时期,都无需再进行arp request,直接根据缓存表发送数据即可。缓存表项都有一个时间限制,到达限制后系统自动删除此项,删除后如果pcA和pcB再有通讯,就会重复步骤1。

从这几步骤来看,ARP是能够通过一个广播的request和一个单播的echo准确完成地址解析的过程的。然而这里存在一个小问题:如果pcA还没有发出request,而pcB直接发送了echo呢?按照设计应当不存在此类情况,但计算机只会按照程序办事,有不按设计来的程序,就有不按设计来的行为。在这种情况下,直接进入第4步,pcA会根据收到的echo更新自己的缓存表,因为ipB-macB这个表项原来就可能存在,此次更新其实并没有造成什么影响,因此这种情况不会出现什么异常。

然而不按设计的行为不只如此,假如有人捣乱呢?比如,有另外一台pcC直接发送了一个arp echo给pcA,内容是ipB is at macC。这时,pcA收到了echo,所以将表项无条件换成ipB-macC,这样,发往ipB的数据都将会转向macC,也就是到了pcC那里去。这时问题就严重了。本来A是要和B通讯,却把给B的数据发到了C那里,如果此数据很重要,而C看到了,那么…….那么C就有无限可能的坏事可以做了。例如现在已经有很多坏蛋在扮演C这个角色:

  • 记录这个数据,完事后装作没事一样把数据转回B,这样A-B通讯变成了A-C-B,A和B感觉不到异常,而发送的数据可能包含密码等敏感信息,此时C就可以获得这些信息了—-此为ARP中间人式嗅探,很多黑客工具盗密码就是这么干的。
  • 记录这个数据,同时加一点篡改,篡改部分内容为病毒代码,再转回B,此时B接到这个数据后就会因这段代码而中毒—-此为ARP病毒,所以为什么一台机器出问题导致整个网络都染毒,就是因为这个C欺骗了所有的B们,将所有数据都篡改过了。
  • 记录并保留这个数据,但延迟发送到B,这样A-B之间的通讯感觉变慢了,或者干脆不发给B,这样A-B的通讯直接就断了 —-想起是什么了吗?对了,局域网执法官,p2p终结者之类的限速或者所谓的“管理”工具!

所以我们看到,ARP当初设计时,互联网还是一个很友好的世界,任何人都会按规矩办事,然而现在的世界大多是恶意的,总有一些捣蛋分子在乱搞,然而我们的ARP协议还在广泛应用着,难道就没有办法管制这些捣蛋分子了吗?

办法是有的,例如做ip-mac的静态绑定,避开ARP协议,或者在协议栈内加入更强化的监测机制,但总不完美,因为要人力来维护。没有更傻瓜的办法吗?于是瑞星们想出了一个歪招,让pcA不停地发arp request,这样即使有C在灌输假的arp echo,pcB因为会收到广播,也必定会返回正确的arp echo,这样只要瑞星实现一个目标:他发送request的频率总比C发送echo的频率快,则B返回正确echo的频率也必定快,那我们的正确echo就盖过了恶意echo,使得网络在大部分情况下都是正常的。

很傻的办法,不是吗?但却基本有效!只要有效,对于瑞星们,这就是技术领先,这就是商业卖点!反正用户永远是无知的!

瑞星的算盘打得好,然而,他却忘记了存在一种大型网络环境,在这环境内一个网段存在很多机器,如果在这种环境内高速率发送广播,会产生非常多的回应,多到广播本身占据的流量可能阻塞网络,多到ARP包的横行使得交换机为了不断更新自己的mac-port对应表而疲于奔命,于是…..就出问题了…..

诚然,从技术上讲,瑞星没有错,它的行为没有违反RFC关于ARP协议的规定,仅仅是对于一些建议值(arp 广播频率)作了修改,于是瑞星坚持自己是对的,然而问题确实存在,不然也不会有这么多高校出台规定,于是就有了前面的丑剧,于是就有人将其上升到商业竞争或者娱乐大众的高度去了。

技术讲完,进入第二阶段–怎样看待瑞星这次事件?

还是个人意见:这牵扯到一个软件行为的道德问题!此类行为,虽无法责令其停止,但我有权力厌恶!

道德本身的含义无需再述,而软件,也应具有道德,干正事的软件叫好软件,干坏事的软件叫病毒,然而为了干自己认为的“正事”而造成了其他方面的坏影响的,绝不能称之为好软件。

举个不是很恰当的类比例子:某女生坐公交车,嫌地面太脏,于是把自己的行李箱放在旁边座位上,过一会有人过来要求其拿掉行李箱,因为这人要坐这座位,此女生说:这个座位我多付钱要了,我就是要放行李箱。此人怒曰:有你这么坐公交的吗?总共30多座位,我付30块钱我还包车了呢!女生虽看来有理,然而从周围乘客到公交司机和售票员都无任何人站在她一边,于是只能拿掉行李箱。

再举个软件的例子:假如同样完成某功能的2个软件,一个占用很多cpu资源,另一个不多,那自然是选择后者,前者虽然没问题,但我们至少有抵制它的权力。

也就是说,软件为达成目的,肯定要有某些行为,这些行为看似合法,然而由于太霸道而影响了其他方面运行时,造成的问题就绝对应该由此软件负责而不能置身事外。所以瑞星此事,无论其怎么有道理,至少我还是厌恶其行为。

其实对于软件来说,类似的例子还是有不少的,正面的:

Windows XP和Vista的半开连接数限制,为什么要限制,就是为了不让一个桌面操作系统有对网络造成巨大影响的可能,尤其是一个面向不懂计算机知识只会使用的用户群的时候。或许很多人会不认同,我也不想阻止你破解它,但请你在占用巨大带宽与你在同一网络内的同学喊慢的时候汗颜一下。

某些下载软件的线程数限制。并非不能开高,而是开太高并无意义,徒增负担,还影响他人,TCP/IP的滑动窗口和拥塞控制本身就比较完善,开多线程本身就有抢占资源打压其他使用者的嫌疑,开得无节制的多那就是占着高速公路开拖拉机,占着茅坑不拉屎。

反面的:

XX执法官,XX终结者,XX监视岗等类软件,这类软件的行为本身就太不道德,违反RFC,虽能达成功能,但其害远大其利,以暴制暴本身就不提倡,何况以暴欺压平民,对于此类软件,借用某神人的话语:谁用谁应该被吊起来打!

迅雷,这个软件更容易惹人非议,且不论其盗链下载的行为是否有问题,光是其想尽一切办法提速,无视带来的网络负载,就不是一个好软件应有的行为。同时TCP,UDP皆上,任意使用端口,无视拥塞和并发控制,都导致了网络行为和QOS管理方面的困难,尤其是无状态UDP的大量使用使得很多底端家用路由设备经常在第一时间被打死,且无法通过软件自身控制。所以此软件虽有很强的下载能力,但不到万不得已,我个人是尽量不用的态度。

作为软件开发商,总有责任对自己软件造成的一切问题负责,这是最起码的态度问题。如果没有这种态度,我们绝对有权力BS这个厂商。

最后回到技术,吉林大学最初始发布的公告“该软件(瑞星2008防火墙)对网络的干扰和破坏力甚至大于很多计算机病毒”的结论基本正确无误,网友请自行判断使用其与否。

  6 Responses to “瑞星ARP防火墙导致网络问题,兼谈软件是否应具有道德准则”

  1. 博主好文章!
    受教了~

  2. 高 厉害 佩服 好文章 这是什么博客 很不错呀

  3. 写得很不错!!

  4. 写的好,我就是受害者,而且买的是正版的,瑞星减缓了我的网速,而且连QQ空间的打开对哦不完整的,许多网页打开了,有些图片都不能显示,关了瑞星就全部显示出来了

  5. 囧,楼上的这些难道是中文版的spam bot吗?4楼的说了一通好像跟我写的除了是同一个产品外没有一点关系

  6. XD 纯有感而发 给博主造成困扰很抱歉

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>