raghubirrajmahato15/HackDev-LogSentinel

GitHub: raghubirrajmahato15/HackDev-LogSentinel

基于 Isolation Forest 无监督机器学习的 Web 服务器访问日志异常检测命令行工具。

Stars: 0 | Forks: 0

# HackDev-LogSentinel 基于 ML 的 Web 服务器日志异常检测器,使用 Isolation Forest。 LogSentinel 是一个命令行工具,它可以从基准 Apache/Nginx 访问日志(combined 格式)中学习“正常”流量的特征,然后标记目标日志文件中的异常请求——例如 SQL 注入探测、路径遍历尝试、XSS payload,或是与基准流量明显不同的异常请求。它使用无监督的 `IsolationForest` 模型,因此不需要标记的攻击数据:你只需要一个代表典型、合法流量的日志文件。 ## 功能 - 用于标准 Apache/Nginx **combined** 日志格式的 Regex 解析器,可平滑处理格式错误/无法解析的行(跳过并计数,并在最后提供警告汇总) - 单个请求的特征提取:URL 长度、查询参数数量、路径+查询中的特殊字符比例、查询字符串的 Shannon 熵、响应 payload 大小,以及编码为整数的 HTTP 方法 - `fit` 子命令:在基准日志上训练 `StandardScaler` + `IsolationForest` 模型,并使用 `joblib` 将其保存到磁盘 - `scan` 子命令:使用保存的模型对目标日志进行评分,并报告异常请求及其原始特征值和异常分数 - 文本和 JSON 输出模式,以及统计摘要(总行数、已解析、发现的异常) - 可配置的 contamination 率,用于调整灵敏度 - 附带 `sample_access.log`,这是一个约 30 行的示例日志(主要为正常流量,外加几条类似 SQLi/XSS/路径遍历的请求),方便你立即进行测试 ## 安装说明 ``` git clone https://github.com/raghubirrajmahato15/HackDev-LogSentinel.git cd HackDev-LogSentinel pip install -r requirements.txt ``` 要求 Python 3.10+。 ## 用法 从已知正常的日志文件中训练基准模型: ``` python logsentinel.py fit sample_access.log -o baseline_model.joblib --contamination 0.1 ``` 使用该模型扫描目标日志文件以查找异常: ``` python logsentinel.py scan sample_access.log --model baseline_model.joblib ``` 获取 JSON 输出并将其写入文件: ``` python logsentinel.py scan sample_access.log --model baseline_model.joblib --format json -o results.json ``` 详细日志记录(对调试解析问题很有用): ``` python logsentinel.py -v fit sample_access.log -o baseline_model.joblib ``` ### JSON 扫描输出示例(节选) ``` { "stats": { "total_lines": 30, "parsed": 30, "unparsed": 0, "anomalies_found": 4 }, "anomalies": [ { "line_number": 25, "ip": "203.0.113.9", "path": "/products?id=1 UNION SELECT username,password FROM users--", "status": 500, "anomaly_score": 0.187432, "features": { "url_length": 60, "param_count": 1, "special_char_ratio": 0.216667, "entropy": 3.845, "payload_length": 480, "method_encoded": 0 } } ] } ``` ## CLI 参数参考 | 参数 | 子命令 | 描述 | 默认值 | |---|---|---|---| | `baseline_log_file` | `fit` | 基准访问日志文件的位置参数路径 | 必填 | | `target_log_file` | `scan` | 目标访问日志文件的位置参数路径 | 必填 | | `-o`, `--output` | `fit`, `scan` | `fit`:保存模型 bundle 的路径。`scan`:可选的用于写入结果的路径 | `logsentinel_model.joblib` (fit) / 无 (scan) | | `--model` | `scan` | 由 `fit` 保存的模型+scaler bundle 路径 | 必填 | | `--contamination` | `fit` | 基准数据中预期的异常比例 | `0.05` | | `--format` | `fit`, `scan` | 输出格式:`text` 或 `json` | `text` | | `-v`, `--verbose` | all | 启用详细 (DEBUG) 日志记录 | 关 | | `-h`, `--help` | all | 显示帮助信息并退出 | — | ## 法律声明 LogSentinel 是一款防御性的蓝队工具。它仅用于分析你拥有或获得明确授权访问和分析的 Web 服务器访问日志(例如,你自己的基础设施,或你有书面许可评估的系统)。 请勿在未经授权的情况下,对该工具针对的日志或系统使用此工具。
标签:Apex, Caido项目解析, CISA项目, Python, URL发现, 安全检测, 异常检测, 无后门, 机器学习, 逆向工具