由异常行为数据特征提取引发的感想

作者: 康康 分类: 机器学习 发布时间: 2018-04-06 11:03

用户异常行为检测(详细代码见github)

本项目采用的是二分类思路,预测哪些是正常用户操作,哪些是伪装用户或者异常操作,数据全是linux bash操作符 目前核心代码和验证已完成,有关部署的一些想法:在ubuntu上装一个bash操作的log实时提取,然后将命令的参数去除,每一百条做为一个基准,有异常强制退出。谁有更稳妥有效简单的部署方案,欢迎提交issue

  • Masquerading User Data数据集简介:

Matthias Schonlau是加拿大安大略省滑铁卢大学统计学教授他试图通过搜集Linux服务器的Bash操作日志,通过训练识别用户的操作习惯,判断主机上的账户是否被入侵、盗用。然后进行进一步识别账户的异常行为。在他的个人网站上发布了针对Linux操作的训练数据。训练数据中包括50个户的操作日志,每个日志包含15 000 条操作命令,其中前5 000 条都是正常操作,后面的10 000 条日志中随机包含有异常操作。为了便于分析,数据集每100 条操作作为个操作序列,同时进行了标注,每个操作序列只要有1条操作异常就认为这个操作序列异常。

  • 特征提取与数据清洗:

碰巧兜哥的《web安全之机器学习入门》介绍了此数据集,借鉴他的特征提取方法:

  1. tmp.py采用了词频统计,将用户使用频率最高的前50条操作和最低的50条操作加以区分
  2. testsvm.py将用户的每一条命令的频率作为一个特征
  • 模型训练:

    看了兜哥的用SVM来预测XSS准确度而收到了启发,SVM在向量化的二分类问题优势很大

    1. testsvm.py 使用KNN近邻算法、朴素贝叶斯算法和支持向量机都做了一次模型训练
    2. tmp.py 由原来KNN改为使用了支持向量机
  • 预测的准确率:

注意测试集的不同,准确率也不同,默认是user3测试,换作其他user可能会小幅度波动

  1. tmp.py 曾经的KNN(%100) SVM(%96) SVM做十次交叉验证(%100)
  2. testsvm.py KNN(%83) NB(%83) SVM(86%) SVM做十次交叉验证(%93)
  • 不足之处

数据也是比较老一点的了,有些操作我都没见过。如有条件拿到更适用的数据,我会再试一次

  • 一些思考

机器学习项目里,令人最头疼和繁琐的还是数据清洗和数据特征提取。实验证明清洗和特征提取方法的不同对最后准确率的影响远远大于不同机器学习算法带来的影响!

发表评论

电子邮件地址不会被公开。 必填项已用*标注