再谈反病毒领域工程化技术与科学方法的结合

来源:互联网 发布:炒美股用什么软件 知乎 编辑:程序博客网 时间:2024/04/30 19:03

再谈反病毒领域工程化技术与科学方法的结合

——一次谈话记录的整理

江海客

(在某高校与信安专业教师交流某次大学生信安大赛作品情况、和反病毒领域的人才培养等,当时讲的可能是语无伦次,感谢同事Emma进行录音整理。因部分内容东拉西扯跑题了有删节)

    今天还是想谈谈工程经验和学术方法的结合问题,既然大家谈到了内容挖掘,我们就从内容挖掘开始。

基于内容挖掘的思想,我印象中较早是从上世纪哥伦比亚大学的相关研究开始的,从其样本集来看基本是DOS下的COM文件,其中很大比例的样本都是用汇编语言编写的。COM文件的特点,就是他基本是纯的指令编译结果,没有结构、基本没有资源。可以几乎把这种挖掘看成对纯的指令流的挖掘。

因此,为什么这种方法搬到今天的活跃样本集上,反而不如以前有效了,是忽略了其原有的场景前提,其原始样本集由于当时的历史原因,本身是不需要通过格式筛进行分类。但学步者们就忘记了这一点。

有人讲神经网络是做人所想不明白的事情,我并不反对,但我以为前提是把人能想明白的事情先做了。

05年,David还在安天做本科毕业设计时,就已经是基于PE结构拆解,针对不同的属性节以及结构本身进行挖掘了。而今天,我们依然能看到一些同学连脚本和PE的样本都不分开,一股脑丢给神经网络,指望它能去解决,这怎么可能。

   我有些失望的是,这么多年过去了,还总是看到有人在恶意代码的未知检测的论文和课题中使用BP网络,这就是典型的为神经网络而神经网络了,其实估计多数使用者自己也知道,BP网络有严重的过学习问题。特别不适合于恶意代码研究这种大样本集的情况。谬误如果总在继续,这里面必然有沿袭甚至抄袭,但我们为什么要纵容呢?

我也看到过另外一组同学做的未知检测的课题,是基于贝叶斯来做的,我们看到其实现还是基于垃圾邮件的那套方法。也有老师认为很有创造力,垃圾邮件和病毒不都是有害数据么?既然对垃圾邮件可用那么对病毒也可用,那么为什么在病毒上不能用呢?

但我们推敲一下:

垃圾邮件的有害性是基于语义的,病毒的有害性是基于行为的。

垃圾邮件的本质是文本,病毒的本质是指令,比如一个PE怎么“分词”呢?

就算是针对脚本病毒,我们也会发现有问题:

垃圾邮件的特点是其全文都是垃圾,但脚本病毒则可能只是整个网页中很小一部分,或者只是嵌入的一个iframe、或者一个外链。而我看到的实现又没有考虑到这些。

一套机制,一旦能找到了开源代码,或者师兄已经做了,就搬来搬去,不再改了。而其本质早已迷失。贝叶斯也是如此,信安专业的学生听闻此词,第一反应是垃圾邮件过滤,而不是条件概率。

而事实上,在上世纪90年代已经工程应用的未知检测技术本身,也是看成是基于条件概率的方法的,尽管其更多还是基于基本的算法加权。但其条件本身是高质量的,是经历了应用实践考验的。对PE中的字符串提取和挖掘真的没意义么?贝叶斯的思想对恶意代码检测没有价值么?当然不是,但这种扒(开源)出来、丢(样本)进去的做法,肯定是不会有什么效果的。

当年在X大的小波和统计之争。我是说过用小波能做的,我用统计都能做,而且速度更快,更准确,小波的用处是什么?我当时听到的回答是,用小波才能发论文。今天还有人和我提起,还是说我有反学术倾向,但我并没有讲过小波不好、或者不行。我只是觉得这个建模的基础太粗糙,就是一个流量建模,且不说对特定内容、标志位等等,就连协议类型和端口都没有。

当年有老师笑称我是三反分子,反管理、反软件工程、反学术。

前两者的倾向我是有的,但反学术绝对没有。我不是反对学术,我是反对把学术方法,特别是数学建模和算法庸俗化和绝对化。

相关的解释,在05年那封《给X大恶意代码研究组的公开信》中我已经表达的很明确了。

回想起来,我们有些遗憾,我们没有尝试在学术领域去证实引入工程化基础的重要性。即没有尝试去形成一些高质量的研究文献。这也导致当时在和高校一起研究中,安天的工程师与博士们之间,谁也很难说服谁,因为谁都没有在对方的领域,依靠自己擅长的方法取得可以被双方高度认同的成果。

真正推动双方达成一些共识的,是值后国外研究这一篇关于welchian蠕虫的论文,其实他的工程思想很易懂,就是因为蠕虫进行大量地址段的扫描时,必然有些IP地址是不存在实际节点、或者节点无法连接的,那么如果一个节点发起大量的连接,而目标没有应答的占据一定比例,那么就可能是一个感染节点。对这样的一个原理性的思想,相关研究者做了建模和分析,形成了一篇形神兼备的高质量研究文献。这个例子非常鲜明的说明了学术方法和工程创新结合的必要性。

到今天来看,本来起步的更早、工程化基础更好的反病毒领域,反而感觉学术和工程的结合似乎还不如当年紧密,至少那时还在频繁的摩擦和碰撞。而我们反而看到类似漏洞挖掘等领域,高校和院所在安全模型的建立,挖掘方法的形式化方面取得了更多的让安全企业亦关注的成果。

当然,我绝无贬低高校在反恶意代码领域的努力,亦不是为了打消从事相关领域研究的同学们的信心,事实上,我们也看到了很多令人欣喜的进展,比如诸葛在honeypot方面成果,比如哈工大和中科院在恶意代码流量监测上的大量工作,都是值得我们学习借鉴的。而段海新老师等对《The Art of Computer Virus Research and Defense》、彭国军博士等对《Malwareforensics》的译作,亦都是我们工程师的必读书目。

我只是想说,相关领域的学术研究可以把既有的工程化技术作为一个背景基础,而不是从头来做。科学研究可以建立在既有的经验和教训之上,但绝不是重复,甚至是把已经抛弃的弯路,完全照样再走一边。

回头看我自己的那封公开信,亦是有很大局限性的,我对计算能力的快速增长,包括对虚拟化等技术的快速成熟对反病毒技术的影响在当时是预判不足的。当时指出的方向多数以相对窄带。而今天看,病毒的基本检测的方法已经完全是工程化的了,而与学术可能的结合点则更多在体系、架构、云和数据的挖掘等等。

原创粉丝点击