发现问题
几天前,突然发现 Foxmail打开邮件出现一大堆乱码。
刚开始以为是软件坏了,尝试卸载Foxmail后重新安装。重装之后的那一会儿是好的,但是貌似是过了小半天就又不行了。
我尝试导出邮件为eml文件,记事本打开,并没有发现明显的异常。eml
文件看起来虽然是各种字母乱的很,其实它是一种特殊的编码,大部分是quot-printable,也有一些是base64。
然后我才隐约觉得电脑应该是中毒了。之前觉得电脑卡,就索性把所有杀毒软件,包括电脑管家、垃圾清理什么的软件都卸掉了。嗯,确实比较快了。我想,现在的网络环境应该比十年前好很多了吧,很久没有听说什么病毒感染或爆发了,大部分安全事件都是漏洞攻击。
解决问题
赶紧下载一个腾讯电脑管家,开始全盘扫描。
提醒一下,杀毒的时候,最好断掉网络
很快,电脑管家就扫描到几千个中毒文件。出好奇,我仔细看了一下中毒提示,是一种脚本感染,病毒名称叫html.win32.script.1501246
。看感染文件,咦,都是HTML文件。
扫描完了之后,点击清除病毒,基本上就搞定了。
仔细看看
既然是HTML,那么我很好奇,这个病毒张什么样子。所以小心翼翼地找到一个文件,用记事本打开。
千万不要双击打开可能携带病毒文件
因为双击打开,系统可能当做一个可执行程序来执行。另外,对于HTML文件,双击的结果就是用浏览器打开,然后后面我们可以看到,这个病毒就是通过浏览器(IE浏览器)来传播的!!
所以保险的方式是用记事本,因为记事本只会把这个文件当成一个一个的字符串来显示,不会有别的动作。
114KB!! 这对于一个普通的HTML文件来说,是不是有点太大了?
打开文件以后,往下一拖,马上发现问题所在:
正常HTML文档,</html>
表示文档结束,但是这个文件后面被追加了一段脚本代码。这里用的是VBScript
,为啥是VB?因为VB在IE浏览器里面拥有强大的功能,ActiveXObject
那个双刃剑。什么意思呢?他的功能很强大,可以做很多普通网页脚本没法做的事儿,比如访问文件系统,这可以用于实现一些特殊应用,比如OA系统需要调用Office程序。但这同时也给病毒一个可乘之机,比如破坏文件系统,或者这个病毒做的事儿:不断滴复制。
分析这段代码,声明了一个变量 DropFileName
和WriteData
,这个变量名很易懂嘛 是个有良心的病毒嘛 后面这个WriteData的值是一大堆数字和字母,看不懂,也不重要,直接拉到最后面,如下:
这段代码大意:创建一个文件系统对象,利用这个对象判断DropFileName
文件是否存在,如果不存在,则创建一个文件,写入WriteData
,最后执行这个文件。
虽然我还没有仔细分析那个文件的内容,但是以我的中毒情况来猜测,它的作用应该是扫描整个硬盘(或目录),将发现到的所有HTML文件(.html和.htm)感染,也就是追加上我们刚看到的这段代码。这样,所有的html文件不仅自己多了一段莫名其妙的代码(导致了最初我通过Foxmail看到的乱码),同时只要有人用IE浏览器打开这个文件,就会中毒。
想到这里,我觉得好可怕。。。我电脑上有很多采集的网页数据,还有编写的web应用,它们是不是都被感染了? 赶紧打开文件夹一个一个看,发现几乎无一例外都中毒了,时间大概是6月21日下午3点半。那是上周五,我由于工作需要,想找一个免费的画甘特图的工具。悲剧应该就是那样发生的。
不过好在,这个病毒是良性的,它虽然通过附加这段代码达到不断传播的目的,但没有破坏文件内容。否则就真该我悲剧了!!!
病毒清除
腾讯电脑管家可以清除,但它也知道不能删除整个文件,那样就矫枉过正了。它怎么做的呢?
我看了一下被他清理的文件,大概是这样的:
一个空的<script>自然是没有什么危害的,也没有什么实际效果,但是对于自己的代码文件,都有一个尾巴,总是不好看。那怎么办呢?我希望把这个<script>也去掉。如果杀毒软件有插件功能就好,我可以加一个指令或代码。也许有,但是了解怎么做,可能时间比较长。
那就自己来吧,写一个程序来处理。为了使程序稍微强一点,需要也一样能扫描出中毒文件,不能只处理这种已经处理过的文件。
刚要做,我就在想:
- 杀毒软件怎么检测这种病毒的?既然给病毒编了号,那肯定是有一些唯一的特征,虽然人来看这段那段病毒代码肯定能看出来,但是机器呢?
- 考虑到文件长短不一,内容千差万别,要准确快速地识别出这种病毒,是因为记住了整个<script>代码片段吗?
- 还是有一些类似特征值的东西,能够对任意文件快速计算,看是否匹配某个病毒的特征?
这些问题恐怕是搞信息安全的专业问题了,以后有机会再研究吧。
写个简单滴程序,递归扫描一个文件夹下的所有文件,凡是HTML文件,就把整个文件读取到内存中,然后基于字节查找比对的方式,判断是否已//--></SCRIPT>
结尾,且匹配<SCRIPT Language=VBScript>
。找到后,直接砍掉这部分内容,然后写回原文件。Done!
教训
- 老老实实地装上杀毒软件。就算电脑慢卡,那也比数据或泄露好得多。
- 不要乱下载和安装东西。