邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 6060|回复: 3
打印 上一主题 下一主题

[转帖] 图片垃圾邮件识别之我见

[复制链接]
跳转到指定楼层
顶楼
发表于 2007-2-27 15:24:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现转贴一个,引出各位DX一点玉出来,下面是基本规律.在linux下可以用fuzzyocr,下了个回来,不知道在MDAEMON中怎么用,各位高手有时间的话研究一下,偶最近被图版垃圾烦死了,里面文件如下:
Utils
Utils\README
Utils\fuzzy-stats
Utils\fuzzy-cleantmp
Utils\fuzzy-find
FuzzyOcr.preps
INSTALL
samples
samples\README
samples\ocr-multi.eml
samples\ocr-jpg.eml
samples\ocr-obfuscated.eml
samples\ocr-gif.eml
samples\ocr-animated.eml
samples\ocr-png.eml
samples\ocr-wrongext.eml
CHANGES
FuzzyOcr.words
FuzzyOcr
FuzzyOcr\Preprocessor.pm
FuzzyOcr\Deanimate.pm
FuzzyOcr\Scoring.pm
FuzzyOcr\Scanset.pm
FuzzyOcr\Hashing.pm
FuzzyOcr\Logging.pm
FuzzyOcr\Misc.pm
FuzzyOcr\Config.pm
FuzzyOcr.mysql
FuzzyOcr.pm
FuzzyOcr.scansets
FuzzyOcr.cf

相信诸位邮件系统管理员一定为最近广为泛滥的图片垃圾邮件感到头疼吧,我仔细浏览了一下相关的帖子,好像针对图片垃圾邮件的一些想法挺多的,有人觉得可以直接把带有图片的邮件干掉,也有人觉得可以使用OCR软件,还有人觉得可以匹配MIME的Content-ID。但是这些做法要么很容易引起误判,要么就很耗费系统资源。其实完全有更好的解决方案,下面我阐述一下我的一些经验吧。
我首先列举一个图片垃圾邮件的范例:
Received: from dhcp-net-0aae-k1-03de-0151qt4d.local ([10.101.91.115])
        by 204.11.102.73.cpchosting.net () with ESMTP id 9B8F373952
        for <heye@2911.net>;Thu, 15 Jun 2006 22:40:21 -0500
From: Jasmine <elizabeth@wickedromama.com>
To: heye <heye@2911.net>
Subject: RE[3]: yo ho
Date: Thu, 15 Jun 2006 22:40:21 -0500
Message-ID: <1881759094.20060615224021@wickedromama.com>
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2479.0006
MIME-Version: 1.0
Content-Type: multipart/related;
        boundary="----=_NextPart_000_0032_549CF554.9B0A49E5"
------=_NextPart_000_0032_549CF554.9B0A49E5
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html><body>
<font size=3d0><a href="/blog/3d""http://www=2emrtparadise=2ecom/"><img src="/blog/3d""ci=
d:canned=2egif" width=3d350 height=3d350 border=3d0></a><br><br>
********************************<br><br>
<a href="/blog/3d""http://www=2ewickedromama=2ecom/=3ff=3daA0QDyteVF9eXh8XBwhERkR=
PTQZMTkwCTLS5sP-1tL62sb-_urm6jog"><img src="/blog/3d""cid:itemize=2egif" width=3d=
350 height=3d62 border=3d0></a><br><br><br><br><br></font>
Astra imitates fluffy purine Kevyn reaccustoms damaged movableness<br>
Salomo nabs uninterested cerebrum Kobe drawls average seating<br>
Jenn pinks cuddly cubist Kevyn prefocuss relieved micrometeorite<br>
Lizbeth circumvolves long slipper Smith revarnishs splendid newline<br>
Astra underloads sticky gumbo Bridget smatters purring gill<br>
<br><br>
Greenfield messs helpless conviviality Neill vinifys fierce goo<br>
Iraq dehisces boiling disputer Petra snaffles defeated hexagon<br>
Triton leans numerous landlady Estel arrives salty safflower<br>
Bacchanalia accompanys deafening reservist Greenfield compels stupid accl=
imatization<br>
Vicente straight-arms bewildered accelerator Gwenore outthieves embarrass=
ed rattletrap<br>
<br><br>
Salomo constitutes bitter flanker Bacchanalia retraces sour surcingle<br>=
Salomo motions eager puma Chiquita lithifys dead eradication<br>
Walt etchs fresh hothead Susan prehandicaps anxious air<br>
Gleda overhonors ood payee Rhodia emigrates funny candidness<br>
Caruso reraises enthusiastic reflectivity Lucina pilfers spotless cabstan=
d<br>
</body></html>
------=_NextPart_000_0032_549CF554.9B0A49E5
Content-Type: image/gif;
        name="itemize.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
        filename="itemize.gif"
Content-ID: <itemize.gif>
R0lGODlhXgE+AIAAAAAAAP///yH5BAAAAAAALAAAAABeAT4AAAL/hI+py+0Po5y02ouz3rz7
AIbiSJbmiabqyrbuC8fyTNf2XRv4zvf+DwwKh8SSrohMKpfMpjMHeEqn1Kr1qjpit8hDKCry
frXgQBl0BifQYjOCCwdq43ReWU1Kf9H8kd6ctwdYR7gzV4gIcyYYxti42NcHeReZaPlyeKl5
AjnYWDlmosBG1va2iSramZraOem45/r5+sdqG7Z6q0np6ciL5zcb6Jmre5lpvGn61ubG29ur
dvp7mrxbbJ2tvS2HzY3lER7xXYhMfo6enmKu3u5+zv4d7+INakcEjDtVT8XP6W8MYBYW+Qzh
AyWwB7CEwYLkqjcPVisbz9ZZlIGNYcNF/6s0Ylzir2LDdRDFZIoibQzKNL9CbXQ5iCXKmHd0
HGI252QkL9XYqMQ1yabJmq5a/sTDTBLNPEL1KaUp8+esnEKPlJJm8yk0VQQFcVz4FGxMrWHL
TjVbkJhZrwg5oR25c+1LaGKNWm07VljeuvbeftKbT+xWI/yMMprmd2GzvXLzMnYcFyrHnSJJ
+XWq9jFQso/tqpzs2GRiysMCVxQdWmvJrpxF8iVWGeZrtqP/Cp5LG3Dj3LMvXxbcsfbrtKCJ
R55dU1HIlHBRm8bszAj0xQXJcHYT+qYkqn7uwv7K0qdlpre/u0Q9njbR2tHb63aPvf3zWoOZ
TnznwyMq/feU3//H3186ESXB0IAAHohgIgYmyGCD4PDnYIQSCrHghBZe6BCEGG7IYQsV3mAV
cyGKN2J8JZ4oYookqmgiiyiuCGOLMb4oY4003uhijjPqaCNzBGrYYZBCdjdkkUbO8OGRSg6Z
5JJObtjkMTgA+aRE7UQJxwJ0fYSkKEpSec029NGQEJgAvnIglnRERVlQm2UXS1LjYfXmUeFJ
5R5VyY20Z3p4XkUKm5ppo2Ycf5RXmnCB4dVbZ6156egjW9ZX3G7DyWNmFYeSRl5i6D1jXaTq
BQpTfHNup91M6SFzVaOiYirme7Ag59phczXqKqO+BWNYX5ANqlpsAWXaz3uLrVrKm+H/0bkW
dcEyC98y6/Gq7El6BltnZGISW6V0SnDrkDqFdpsFuIQpI6655K5LqLrsvqvLuCC5G+5/XNCL
QoX6AjQiTjD2BNo/JInn4bEgnnteUUTaV2dEMhn87V/1kQTxwgTxi7GpOBJM8DweaxSqQZ0m
rJBiF1n8xFdWFrzCvvRgzJ1PTXEc3VAp8cSsltUArPJKN/scHK93hvhzzUNN1xNcsvW7EiA2
EwWt0s4xberS0xJNatYXv6yyzE3T3DR3OGM3M9VNxWwn2WF/LfF2QDVzdtxqd9entwyHEvey
a1etk9BO7z3z0nyzPbfcLBeMts2l/t1i2U+rKLfYjhe+d9uBrSbbeOWRK1y10pj5Gzjomjtb
WlWbI/105pR3PjDLmMcItj6GG07y6bUXbfvKHJs9+upe+TgMwqfzvnrgfSV3E/CDyw5486zn
m7HamLcqMdFfO97q6MmPjazpnqOM4uzOZ3tsMdQ7w7boWQ
...

正如大家看到的,一般来说这些图片垃圾邮件都是通过僵尸电脑发送的,而僵尸电脑一定是Windows的操作系统 一般来说僵尸程序都喜欢直接使用windows自带的微软的OCX控件来生成邮件,或者模仿微软风格的邮件,所以绝大部分的图片垃圾邮件要么就在邮件头中带有X-MimeOLE这个字段名,要么就模仿微软的Boundary分隔符----=_NextPart_000_0032_549CF554.9B0A49E5,或者其它的诸如Mozilla Thunderbird风格的分隔符,例如:------------000607050802080007030801,另外还会有一些其它的特性,比如说邮件头中包含X-MID字段名...
通过查找上面所述的一些特性,我们可以完成第一阶段的识别工作。接下来就要在text/html段中查找src="cid: 这个就表示了这个HTML需要内嵌资源,这个资源由邮件的其它段提供,基本上所有的图片垃圾邮件都是外文的,因此编码方式一般都是7bit,quoted-printable,字符集基本上都是Windows-125*, us-ascii, iso-8859-*, koi8-r ...
通过第二阶段的匹配,我们可以进一步精确定位图片垃圾邮件了,但是还缺少图片MIME段的查找,通过找到图片MIME段,假如我们匹配到了图片MIME段以后,即本上98%的概率以上,这就是一封垃圾邮件(特别是针对某些字符集,如windows-125*)但是这个时候还是会有一些误判存在的,假如100封中误判了两封,事实上用户也是觉得不可忍受的!为了降低误判,我们还需要借鉴类似于灰名单的欺骗技术,所谓欺骗技术就是指在邮件通过SMTP传输的过程中就判别这些特征,然后在最后模拟一个虚假的451 temporary internal failure, please try later! 一般来说,正常的MTA会在一定时间内进行重新投递,当第二次投递的时候,基本上就表明这是一封正常邮件,就将这封邮件接收下来,也就是说返回250 OK给对方。绝大部分僵尸电脑是不具备重发机制的,用这种欺骗技术,基本上可以将垃圾邮件阻挡在邮件系统外,同时又可以避免将正常的商业邮件误挡掉。
实际上我所说的只是一些大体的思路,对于一些处理细节,我就不再阐述了,实际上反垃圾是一门非常繁琐的工作,正如大家所说,发送垃圾邮件的也是人,更多的是一种智力较量,在目前的技术条件下,根本就不存在一劳永逸的方案,很多所谓智能学习,行为分析之类的反垃圾网关只不过是商业宣传而已。个人以为现如今最为可行的反垃圾方案应该是各种有效手段的大杂烩。欢迎大家拍砖!
沙发
 楼主| 发表于 2007-2-27 15:26:01 | 只看该作者

用SpamAssassin的FuzzyOCR插件阻止图片垃圾邮件

说明:这是一篇作弊条,应光棍节的postfix活动网友要求而撰写,因此原理等会尽可能少介绍,只讲过程。

前提:安装了amavisd-new并配置正确。
需求:阻止图片垃圾邮件。
方案:安装FuzzyOCR插件。
注意:高负载服务器请小心使用。

1. 安装FuzzyOCR:

cd /usr/ports/mail/p5-FuzzyOcr/ && make install clean
[下载一个靠谱的操作系统并确保可重现、可维护地安装应用程序]

2. 复制需要的文件
cp /usr/local/share/examples/FuzzyOcr/* /usr/local/etc/mail/spamassassin/

3. 修改配置
打开/usr/local/etc/mail/spamassassin/FuzzyOcr.cf
找到:loadplugin FuzzyOcr FuzzyOcr.pm,删除;
找到:focr_logfile /usr/local/etc/mail/spamassassin/FuzzyOcr.log
改为:focr_logfile /var/log/FuzzyOcr.log
找到:#focr_scansets $gocr -i -, $gocr -l 180 -d 2 -i -,去掉#
找到:##### Various Score/Scan settings #####在下面写:focr_timeout 10
找到:#focr_base_score 4去掉注释符
找到:#focr_add_score 1去掉注释符
找到:#focr_wrongctype_score 1.5去掉注释符
找到:#focr_corrupt_score 5去掉注释符
找到:#focr_autodisable_score 50去掉注释符
找到:#focr_counts_required 2去掉注释符
找到:#focr_gif_max_s 5去掉注释符

打开 /usr/local/etc/mail/spamassassin/v310.pre 中最后加入:
# FuzzyOCR - performs fuzzy Optical Character Recognition on spam images
#
loadplugin FuzzyOcr FuzzyOcr.pm
loadplugin Mail::SpamAssassin::Timeout

在 /var/log 中创建FuzzyOcr.log,并赋予vscan用户写权限

重启amavisd: /usr/local/etc/rc.d/amavisd restart

tail -f /var/log/maillog确认amavisd启动正常。

4. 测试:

sendmail your_name@example.com < /usr/local/share/doc/FuzzyOcr/samples/animated-gif.eml
藤椅
 楼主| 发表于 2007-2-27 15:30:41 | 只看该作者
在9.5的CF规则中有这么一条,但效果似乎不大
rawbody   MD_CID_MIX_88         /\"cid\:[A-F0-9]{8}\.[A-F0-9]{8}\"/
score     MD_CID_MIX_88         1.66
板凳
发表于 2007-2-27 16:14:38 | 只看该作者
好贴。后来者继续补充
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2026-8-5 18:40

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表