JustaNotion/SSH-Log-Analyzer
GitHub: JustaNotion/SSH-Log-Analyzer
一个用 Python 编写的 SSH 认证日志解析练习工具,通过统计失败登录尝试来识别潜在的暴力破解源 IP。
Stars: 0 | Forks: 0
# SSH-Log-Analyzer
这是一个 Python 工具,用于解析 SSH 认证日志,统计登录尝试次数,正确格式化结果,
并对多次失败的登录尝试发出警告。它还包含一个基于 IP 的统计功能,当失败登录尝试达到设定的 5 次或以上的阈值时,将触发警告。
该项目旨在作为一项模拟练习,用于编写通知暴力破解攻击的脚本,以及进行日志解析。
## 目的与目标
本项目的主要目的包含两个独立的目标:
1. 创建一个项目,让我初步了解 Python 中的核心工具
2. 构建一个可以作为任何类型日志解析/日志分析起点的工具。
## 所学工具
这是我在 Python 学习之旅中较早完成的项目之一,它比基础的/简单的函数
(计算器、计时器、猜数字游戏等)更进了一步。该项目介绍了 .split()、索引和字典,
并且这些都作为核心组件在项目中得到了展示。
## 用法
需要 Python 3.6+(使用了 f-strings)。无外部依赖。
将需要分析的日志文件放在与 logchecker.py 相同的目录下,并命名为 sample_auth.log,然后运行:
```
py logchecker.py
```
任何出现 5 次或以上失败密码尝试的源 IP 都会在终端打印一行 [WARNING] 信息。
## 示例输出
结果清晰地直接展示出具有 5 次或以上失败尝试的源 IP 地址。
攻击 IP 以及具体的失败尝试次数都会与 [WARNING] 信息一同显示。
198.51.100.7 在示例日志中出现了 3 次失败尝试,并被正确排除,同时被排除的还有成功的登录记录以及 [preauth] 行。

## 已知限制
- 输入文件名被硬编码为 sample_auth.log;不支持命令行参数
- 没有错误处理机制 —— 文件缺失会引发 FileNotFoundError 并退出
- 阈值被硬编码为 5,不可配置
- 解析程序假定使用标准的 OpenSSH 语法。如果某行包含
"Failed password" 和 "from " 但没有 " port",将会生成
格式错误的键,而不是被跳过
- 仅检测 "Failed password" 事件。其他认证失败类型
(如 publickey 失败、"Invalid user" 的 preauth 行)不计入统计
## 关于所提供示例 IP 的说明
sample_auth.log 中提供的所有 IP 均来自 RFC 5737 文档规定的地址段。
项目中包含的 sample_auth.log 实际上是直接由 AWS Serverless 日志解析器项目中的脚本生成的,
该项目可以在这里找到:[Failed-Login_Parser](https://github.com/JustaNotion/Failed-Login_Parser)
## 从脚本到 Serverless
这个项目成为了最终促成我的 AWS Serverless 日志解析器诞生的催化剂。我意识到,通过使用 AWS 提供的 S3、DynamoDB 和 Lambda 等服务,
我可以模拟将日志输入到 S3 存储桶并显示为攻击 IP 的过程,从而模拟出我作为 SOC Analyst 会遇到的环境和情况。
标签:Python, 无后门, 脚本工具, 运维工具, 逆向工具