Amyppp / analog

一款基于机器学习的Web日志统计分析与异常检测命令行工具

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

一款基于机器学习的Web日志统计分析与异常检测命令行工具

Presentation

1. 访问量统计

analog> show statistics requests current day

2. 日志审查

analog> show log of current month

3. IP、请求等统计

analog> show statistics requests current day top 20

analog> show statistics url current day top 20

4.恶意请求统计

包括恶意IP定位、恶意请求统计,恶意IP地理分布统计,正、异常请求比

analog>  show analysis of current month

Installation

1. 安装依赖

 $ pip install -r requirements.txt

Prepare

若想使用异常检测功能,则必须提供自己的日志训练样本。(统计图表功能则不需要)

1. 在analog根目录下的config.ini配置好数据库参数(程序使用的是MYSQL,确保存在数据库环境)

2. 准备机器学习训练样本以及用于参数优化的黑白样本

三个样本在目录analog/sample_set下,分别是train.txttest_black_log.txttest_white_log.txt。 训练样本尽量使样本数量为5000-10000条(视网站情况适量加减,太少不准确,太多影响参数优化速度),且尽可能覆盖正常访问流量,保证异常率不超过15%,否则会影响模型预测效果;白样本则要求尽量全为正常流量,黑样本可以自己从日志里面挑选出来异常的流量,也可以在github上找一些payload放进去,格式可以是日志格式,也可以是纯请求路径格式。同时尽量保持数大于500条(工作量大概在20分钟左右)

3. 使用train或者retrain命令训练模型

可以使用train progress命令获取训练进度或重载当前模型

About

使用的预测模型为Oneclass-SVM,内核为rbf,参数遍历取最优。

特征提取用的是TF-IDF计算2-grams截取未url解码的请求路径,特征向量空间为100*100,取的是string.printable可打印字符

由于analog是基于正则提取的日志,目前只写了nginx的标准日志,往后将继续更新、完善以支持更多的日志格式。

有好的idea也可以请求pull,欢迎在issue中提出问题!

如遇Bug,可以键入bedug,进入debug模式,获取错误信息并在issue中提出,以帮助我改善代码。

更多解释及用法详见博客:Wz's Blog

TODO

  1. 日志实时更新
  2. 提高检测模型效率
  3. 提高检测模型F1值

Reference

  • McPAD-A Multiple Classifier System for Accurate Payload-based Anomaly Detection
  • Preprocessing Web Logs for Web Intrusion
  • System Log Analysis for Anomaly Detection
  • Cybersercurity-data-mining
  • Anomaly-detection-via-server-log
  • Anomaly Detection of Web-based Attacks
  • 基于机器学习的web异常检测 - 阿里聚安全

About

一款基于机器学习的Web日志统计分析与异常检测命令行工具


Languages

Language:Python 100.0%