当前位置:  开发笔记 > 编程语言 > 正文

使用Python进行异常检测

如何解决《使用Python进行异常检测》经验,为你挑选了1个好方法。

我为一个虚拟主机工作,我的工作是找到并清理被黑客入侵的帐户.我找到90%的shell/malware\injections的方法是寻找"不合适"的文件.例如,eval(base64_decode(.......))其中" ....."是一大堆base64'ed文本,通常永远不会好.当我查看关键字符串的文件时,奇怪的文件会跳出来.

如果这些文件作为人类向我跳出来,我确信我可以在python中构建某种类型的分析器,以便在统计上查找"不合适"的内容并标记它们以供人工审核.要开始我想我可以比较线的长度在含有键字符串(PHP文件eval,base64_decode,exec,gunzip,gzinflate,fwrite,preg_replace,等等)并查找由2个标准偏差从平均偏离线.

线路长度变化很大,我不确定这是否是一个很好的统计使用.另一种方法是将加权规则分配给cretin事物(线长超过或低于阈值= X点,包含单词upload = Y points)但我不确定我可以对分数实际做什么或如何对每个分数进行评分属性.我的统计数据有点生疏.

有人能指出我正确的方向(指南,教程,图书馆)进行统计分析吗?



1> Mike..:

这是一个简单的机器学习方法来解决这个问题,这是我开始研究这个问题并开发基线分类器的方法:

建立一个脚本语料库并附加一个标签'good'(label = 0)或'bad'(label = 1)越多越好.尽量确保'坏'脚本是总语料库的合理分数,50-50好/坏是理想的.

开发指示可疑或错误脚本的二进制功能.例如,'eval'的存在,'base64_decode'的存在.尽可能全面,并且不要害怕包括可能捕获一些'好'脚本的特征.帮助这样做的一种方法可能是计算两类脚本中单词的频率计数,并选择在"坏"中突出显示但在"良好"中不显着的单词.

在语料库上运行要素生成器,并使用标签构建二进制矩阵.

将语料库分成火车(80%的例子)和测试集(20%).使用scikit学习库,使用训练集训练一些不同的分类算法(随机森林,支持向量机,朴素贝叶斯等),并在看不见的测试集上测试它们的性能.

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

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

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有