python - 使用 Python 进行异常检测

标签 python machine-learning statistics intrusion-detection

<分区>

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

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

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

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

最佳答案

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

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

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

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

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

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

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

关于python - 使用 Python 进行异常检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892449/

相关文章:

math - 使用之前的数据来预测下一步(算法+统计)

R geom_tile ggplot2 应用了什么样的统计数据?

mysql - 解析时间差异并划分mysql

python - 如何在Python中将变量限制为零

java - 无法在 habase 谷歌云中将存储的 python 整数返回到 java 中

machine-learning - InvalidArgumentError : input must be 4-dimensional[8, 6171,4]

oracle - 复制优化器统计信息 - Oracle 10g

python - 建议使用 JupyterLab 构建并成功安装,但无法工作。为什么?

python - 我可以在 python Django 上使用数据库缓存永久缓存数据吗

machine-learning - 达斯克VS急流。急流提供哪些 dask 没有?