【问题标题】:Anomaly detection using Python [closed]使用 Python 进行异常检测 [关闭]
【发布时间】:2011-10-17 01:44:58
【问题描述】:

我为网络托管服务商工作,我的工作是查找和清理被黑的帐户。我找到 90% 的 shell\malware\injections 的方法是查找“不合适”的文件。例如,eval(base64_decode(.......)),其中“.....”是一大堆 base64 化的文本,通常不会很好。当我在文件中查找关键字符串时,奇怪的文件突然出现在我面前。

如果这些文件作为人类突然出现在我面前,我确信我可以在 python 中构建某种分析器来查找统计上“不合适”的东西并将它们标记为手动审查。首先,我想我可以比较包含关键字符串的 php 文件中的行长度(evalbase64_decodeexecgunzipgzinflatefwritepreg_replace 等)并寻找偏离平均值 2 个标准差的线。

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

谁能为我指出正确的统计分析方向(指南、教程、库)?

【问题讨论】:

  • 这个建议有点宽泛,实际上很有用,但您可能想尝试贝叶斯方法。建立一个“好”代码语料库和一个“坏”代码语料库,并构建或使用分类器(您可能可以直接使用各种垃圾邮件过滤器之一)来预测特定的新代码是否更有可能成为“好”或“坏”语料库的成员。 Google 用于贝叶斯学习、垃圾邮件过滤等。我愿意您可以直接使用垃圾邮件过滤项目来执行此操作,而不是从头开始编写一些东西。
  • @Joe, Josh -- 如果您选择贝叶斯方法,我过去曾使用 reverend 成功解决类似问题。如果您可以正确获取数据集,则很容易获得合理的结果。 reverend.sourceforge.net

标签: python machine-learning statistics intrusion-detection


【解决方案1】:

这是解决该问题的简单机器学习方法,也是我着手解决此问题并开发基线分类器的方法:

建立一个脚本语料库并附加一个“好”(标签= 0)或“坏”(标签= 1)的标签,越多越好。尽量确保“坏”脚本占总语料库的合理比例,50-50 好/坏是理想的。

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

在语料库上运行特征生成器并构建带有标签的特征的二进制矩阵。

将语料库分成训练集(80% 的示例)和测试集(20%)。使用 scikit learn 库,使用训练集训练几种不同的分类算法(随机森林、支持向量机、朴素贝叶斯等),并在未知测试集上测试它们的性能。

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

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

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2021-03-24
    • 1970-01-01
    • 2018-09-06
    • 2020-06-01
    相关资源
    最近更新 更多