phredreeq/anomaly-detection-login-behaviour

GitHub: phredreeq/anomaly-detection-login-behaviour

使用 Isolation Forest 机器学习算法对登录行为进行无监督异常检测,自动标记可疑登录活动。

Stars: 0 | Forks: 0

# 可疑登录行为的异常检测 ## 在机器学习中使用 Isolation Forest 算法 ## 问题 传统的基于规则的检测需要预先了解 攻击的特征。本项目使用机器学习通过学习 正常行为的特征来自动检测可疑登录行为, 而无需显式告知何为攻击。 ## 目标 - 生成真实的登录行为数据集 - 在正常行为上训练 Isolation Forest 模型 - 自动标记异常的登录活动 - 可视化结果以识别攻击模式 ## 使用工具 | 工具 | 用途 | |---|---| | **Python** | 核心编程语言 | | **Pandas** | 数据组织和处理 | | **Scikit-learn** | Isolation Forest 机器学习算法 | | **Matplotlib** | 数据可视化与图表绘制 | ## 数据集 包含 100 条记录的合成登录数据集, 涵盖三种行为类别: | 类别 | 数量 | 特征 | |---|---|---| | Normal(正常) | 80 | 工作时间 (8-18),0-2 次失败,已知 IP | | Suspicious(可疑) | 10 | 下班时间 (19-23),1-4 次失败,混合 IP | | Attack(攻击) | 10 | 非工作时间 (0-4),20-35 次失败,未知 IP | **使用的特征:** - `hour` — 登录尝试的小时 - `failed_attempts` — 失败登录的次数 - `success` — 登录是否成功 - `ip_repeat` — IP 是否曾出现过 ## 模型 — Isolation Forest Isolation Forest 通过隔离与大多数 不同的数据点来检测异常。这意味着该算法通过隔离不寻常的数据点来发现异常值。 核心原则: - 正常数据点很难被隔离,因为 它们与相似的点混在一起 - 异常很容易被隔离,因为 它们在其他点中显得与众不同 **模型参数:** - `contamination=0.1` — 预期约 10% 的异常 - `random_state=42` — 确保结果一致 - 特征:hour,failed_attempts,success,ip_repeat ## 结果 ### 检测摘要 | 标签 | 数量 | |---|---| | ✅ Normal(正常) | 90 | | 🚨 Suspicious(可疑) | 10 | ### 异常检测图表 ![异常检测图表](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/9e6c6f4fc9043453.png) ### 数据集预览 ![数据集预览](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ab125490cd043453.png) ### 数据集生成脚本 ![创建数据集脚本](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/a2bb0032a1043454.png) ### 异常检测脚本 ![异常检测脚本](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/7bd049a36d043455.png) ### 命令提示符结果 ![检测结果](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/cf482ccc40043455.png) ## 分析 ### 模型检测到了什么 Isolation Forest 模型成功标记了 10 条 可疑登录记录,包括: **明确的暴力破解攻击:** - 小时:0-4(非工作时间) - 失败尝试:20-35 次 - 未知 IP 地址 - 最终成功登录 **下班时间的可疑活动:** - 小时:19-23 - 未知 IP 地址 - 多次失败尝试 ### 为什么有些正常点显示较高 模型使用多变量分析,这意味着它将 所有 4 个特征综合考虑,而不仅仅是失败的尝试。 在工作时间具有高失败次数但 IP 已知的登录 可能仍被归类为正常, 因为多个因素被综合权衡。 这反映了真实世界的复杂性,因为异常 检测从来不是二元的,人类分析师 总是需要审查标记的项目以做出最终 决定。 ## ⚠️ 局限性 | 局限性 | 说明 | |---|---| | **误报** | 正常行为偶尔会被标记为可疑 | | **漏报** | 某些攻击可能未被标记 | | **合成数据** | 真实世界的日志需要重新训练模型 | | **人工审查** | 机器学习只能标记候选项,而分析师做出最终决定 | ## 结论 Isolation Forest 模型成功检测了 可疑登录行为,而无需被显式 告知攻击的特征。它学习了正常 模式并自动标记了偏差。 在真实的 SOC 环境中,此模型将: - 针对实时的身份验证日志持续运行 - 标记可疑登录供分析师审查 - 补充基于规则的 SIEM 检测(如 Splunk) - 通过过滤噪音减少分析师的工作量 ## 🔗 相关项目 - [使用 Splunk 进行暴力破解检测](https://github.com/phredreeq/brute-force-detection) - [事件调查报告](https://github.com/phredreeq/incident-investigation-report) ## 👤 作者 Fredrick Agufenwa 网络安全学生 | SOC 与威胁检测
标签:AMSI绕过, Apex, BSD, Isolation Forest, Matplotlib, PE 加载器, Python, Scikit-learn, 可疑登录检测, 合成数据集, 威胁检测, 孤立森林, 异常检测, 异常行为识别, 数据挖掘, 数据科学, 无后门, 无监督学习, 机器学习, 欺诈预防, 用户实体行为分析(UEBA), 登录风控, 离群点检测, 算法, 网络安全, 账号安全, 资源验证, 身份验证安全, 逆向工具, 降维与隔离, 隐私保护