使用Python进行异常检测

问题描述:

我为webhost工作,我的工作是查找和清理被黑客户。我发现shell \ malware \注射90%的方法是寻找“不合适”的文件。例如,eval(base64_decode(.......)),其中“.....”是一大堆基本64位的文本,通常不会很好。奇怪的文件跳出来,因为我grep通过关键字符串的文件。使用Python进行异常检测

如果这些文件在我跳出作为一个人我敢肯定,我可以建立某种形式的python探查寻找的东西都是“出位”统计和标记他们为人工审核。首先我想我可以比较PHP文件中包含关键字符串(eval,base64_decode,exec,gunzip,gzinflate,fwrite, preg_replace等)的行长度,并查找偏离平均值2个标准偏差的行。

线长度差别很大,我不知道这将是一个很好的统计使用。另一种方法是将加权规则分配给克雷廷事物(线长超过或低于阈值= X点,包含单词上传= Y点),但我不确定我实际上可以对分数或如何对每个分数进行评分属性。我的统计数据有点生疏。

任何人都可以点我在正确的方向(指南,教程,库)进行统计分析?

+3

这个建议有点宽泛,真的很有用,但你可能想尝试贝叶斯方法。建立一个“好”代码和一个“坏”代码语料库,建立或使用一个分类器(你可以直接使用各种垃圾邮件过滤器之一)来预测一个特定的新代码是否更有可能成为“好”或“坏”语料库的成员。谷歌进行贝叶斯学习,垃圾邮件过滤等。我愿意成为你可以直接使用垃圾邮件过滤项目来做到这一点,而不是从头开始写点东西。 –

+1

@Joe,Josh - 如果您选择贝叶斯方法,我曾经在过去使用过类似问题的成功案例。如果您可以正确地获取数据集,则很容易获得合理的结果。 http://reverend.sourceforge.net/ –

这里有一个简单的机器学习方法的问题,是我会做什么,以获得在这个问题上开始发展的基准分类:

树立脚本的语料库并粘贴标签是“好'(label = 0)或'bad'(label = 1)越多越好。尽量确保'坏'脚本是总语料库的合理部分,50-50好/坏是理想的。

开发指示可疑或不良脚本的二进制功能。例如,'eval'的存在,'base64_decode'的存在。尽可能全面,不要害怕包含可能捕获一些'好'脚本的特性。帮助做到这一点的一种方法可能是计算两类脚本中单词的频率计数,并选择出现在“坏”但突出显示为“不好”的特征词中。

在语料库上运行特征生成器,并使用标签构建特征的二元矩阵。

拆分胼成列车(实施例80%)和测试组(20%)。使用scikit学习库,使用训练集训练几种不同的分类算法(随机森林,支持向量机,朴素贝叶斯等),并在未知的测试集上测试其性能。

希望我有一个合理的分类准确度来进行基准测试。然后,我会考虑改进功能,一些无监督的方法(无标签)和更专业的算法以获得更好的性能。

对于资源,机器学习安德鲁Ng的Coursera课程(包括例如垃圾邮件分类,我相信)是一个良好的开端。