SPAM换了新形式

关注我Blog的朋友可能注意到了,最近留言和评论中频繁出现广告的身影,通过对后台日志的分析,我发现SPAM骚扰的形式显示出了多样化的趋势,那就是最近的SPAM无一例外地都躲过了我的机器人陷阱、成功地进入了相对薄弱的后期审查流程。

简单归纳一下最近的SPAM的特征:

  • 能够躲过机器人陷阱:可能有多个原因。其一是这个机器人比较高级,能够自动忽略HTML tag中标记了style=”display:none”的元素。其二就是根本就是人肉SPAM,不过这点可能性不大,具体容后分析。
  • 来自同一个IP:近期的SPAM大多都来自“91.214.44.182”的IP,这说明该SPAM发送者并未刻意伪装自己的IP。经查这个IP属于洪都拉斯一家名叫AltusHost Inc.的IDC。这也就很大程度上否定了上面所说的人肉SPAM的可能性,因为这些SPAM很可能来自该IDC机房中托管的一台服务器。
  • 内容相似:均为附带HTML形式超级链接的药品广告。有减肥药、抗狂躁症药、抗抑郁药、抗ED药、安定、止痛药、止咳药、伟哥等等等等,林林总总不一而足。
  • 会自动变换自己的User Agent模拟真实用户。相比以前冒充Google Bot这种弱智的方法来说的确聪明了不少,有点脑子的人就能知道Google机器人是不可能给某个网站留言的。日志记录下这些SPAM采用了IE6、Opera 8/7/6等等浏览器的User Agent来发送留言。甚至还有声称自己是“Mozilla/4.7 (compatible; OffByOne; Windows 2000) Webster Pro V3.4”这种稀有浏览器的。

所以近期我准备采取以下方法来应对:

  1. 更改机器人陷阱的方式,用css和js来进行隐藏。除非机器人能聪明到了解析css和js的地步,否则应该能继续抵御一阵子。
  2. 在过滤器中引入Akismet。不过我打算将Akismet作为一种完善其他SPAM判定之前的临时性质的措施,因为它在山雀有过数次将正常的中文留言识别成SPAM的不良记录。
  3. IP黑名单。这是最行之有效的方法了,既然91.214.44.182童鞋不想伪装自己,那我也很自然地把它扔进了黑名单里。

WakiAAS反垃圾回应系统运行5个月技术统计

WakiAAS,全称Waki Advanced Anti-SPAM System,是我写的一个基于PHP的反垃圾回应系统。可以提供基于各种垃圾回应特征的过滤功能。这个系统自开发到测试断断续续持续了半年多,自7月份开始正式上线负责我的Blog的反垃圾回应功能以来已经经过了5个月零4天,这期间共捕捉垃圾回应176条,漏捕5条,错捕0条。今天简要统计了一下WakiAAS这小半年的工作情况。

七月:51条(漏判5条)
八月:6条
九月:20条
十月:1条
十一月:81条
十二月:17条(截至12月4日)

除了八月份因为运动会关闭回应系统和十月份因为系统bug导致回应无法提交之外,垃圾回应的数量是逐月增长的。十二月估计有超过100条的可能性吧。
被拦截的176条回应99%为简单的英文广告,含有一至数条网址。
其余还有部分中文广告,中文广告采用人工发送。

发送目的分析
1.英文广告均含有网址,针对搜索引擎的可能性更高。
2.中文广告不含网址,但含有电话号码,针对访客的可能性更高。

发送方式分析
1.绝大部分发送都是通过机器人完成的。这点通过机器人陷阱和秒表计数器可以看出来。
2.有极少数英文广告通过人工的方式发送,这种SPAM的特点是机器人陷阱没有反应、秒表计数器时间较长。

反过滤特征
从日志观察,绝大部分垃圾回应在发送时有意识地采取了反过滤措施。反过滤手段主要有以下几种:
1.随机的虚假IP地址。
很多垃圾回应拥有完全相同的特征,但IP地址却显然是通过随机生成的。
2.在文本中加入随机字符串。
为了躲避相似性比较过滤器,稀释垃圾回应之间的相似性,几乎全部垃圾回应都在文本中加入了随机字符串。
3.模拟正常回应。
很多垃圾回应在回应中加入“comment”等有实际意义的单词、表情符号来干扰过滤系统,企图让过滤系统误认为这是一条正常的回应。
4.回避真实网址。
鉴于不少常发送SPAM的厂商的域名已经被列入反垃圾黑名单,目前的SPAM广告通常使用Blog、SNS网站、短网址服务、文件共享服务来诱导访客转到自己的真实地址。广告过滤者不可能完全屏蔽常见的BSP、SNS、网址缩短服务、文件共享服务的域名,这样会对正常用户造成不便。因此利用以上黑名单制度本身的缺陷,避免自己的域名因为黑名单被阻挡。

过滤手段与共同特征
由于目前尚未接到含有中文的垃圾回应,这里暂时只分析英文垃圾回应的过滤。
1.不含有汉字的回应嫌疑更大。
2.垃圾回应绝大部分采用机器人或人工大量发送,从页面载入到表单提交之间的时间差很小。发送越快的回应嫌疑越大。
3.垃圾回应中含有大量网址。
4.垃圾回应中含有大量相似的垃圾词,如“cialis”、“buy”、“online”、“viagra”、“levitra”等等。

新的反SPAM系统功能

根据SPAM的如下特性,想出来的方法:
1.SPAM里面必然包含链接(网址)。
2.SPAM是大量的、连续的(不然达不到吸引搜索引擎注意的目的)。

根据这样的特性,基本原理如下:
1.首先用正则表达式来匹配收到的评论/TB,如果包含链接(网址),则继续下面步骤。
2.从数据库里面选出最近N条(我想10条应该够用了吧)留言/TB。
3.从上面10条最新评论/TB中同样用正则匹配出网址,逐条与收到的评论/TB进行相似度计算(php内置函数similar_text()即可),相似度大于70%的一般就可以被判断为垃圾了(重复的网址)。

以上是基本方法,下面谈谈比较灵活的方法:
1.匹配的时候,只匹配域名。比如http://www.dgwxx.com/blog/index.php这样一个网址,只匹配www.dgwxx.com出来。防止利用路径进行欺骗。
2.触发垃圾的条件可以更为灵活,降低误判的概率,比如10条最近评论/TB中,要有3条包含疑似重复的网址才能被判定为SPAM等,相似度也可以适当调高(现在Waki-Blog的做法是只要有任意一条的相似度大于70%就算SPAM)。
3.可以让管理员选择被判定为SPAM的消息的处理方式,审核还是直接丢弃。
4.结合自动删除未审核评论/TB功能,就能做到“铁打的Blog,流水的SPAM”。SPAM就像流水一样,不在Blog里留下痕迹,一段时间后被自动删除。

这种方式的好处:
1.针对性强,只针对网址,而且是重复的网址。最大限度地防止误判、漏判。最大限度地减轻了管理员审核评论/TB的工作量。
2.只比较网址,而不比较整篇留言,一来提高效率,二来可以防止利用随机字符、随机文章来稀释相似度的行为。

此外,从今天开始征集SPAM,我在论坛开了一个SPAM专区,专门用于发广告,发的广告将被用于反广告系统的研究。欢迎广大机器人为我们提供素材。如果您收到了SPAM,不妨也提供给我们,为反SPAM事业做出贡献。本版发帖无需注册,游客也可以发帖!
地址是:http://www.dgwxx.com/nmmbbs/forumdisplay.php?fid=26
继续阅读新的反SPAM系统功能