最直接、最有效的排查方法,就是进入事件查看器 → Windows 日志 → 安全,按事件 ID 4625 进行筛选。这样通常可以快速查看所有远程登录失败记录,包括源 IP、账户名、登录类型(10 代表 RDP 远程桌面),以及对应的失败原因代码。不过有一个前提很关键:必须提前启用“审核登录事件 → 失败”策略,否则这类失败日志往往不会被完整记录下来。

更高效的做法,是先把失败登录日志单独筛出来,再围绕时间、IP、账户这三个维度进行交叉分析。通过这种方式,像暴力破解、撞库尝试这类异常登录行为,通常都能比较快地识别和定位。
盯住关键日志位置和事件类型
不同操作系统的日志路径和标识方式虽然不同,但安全日志分析的核心目标是一致的:
- Windows 系统:打开 事件查看器 → Windows 日志 → 安全,筛选事件ID 4625(登录失败);重点关注“源IP地址”“目标用户名”“失败原因代码”等关键字段
- Linux(SSH):查看 /var/log/auth.log(Ubuntu/Debian)或 /var/log/secure(CentOS/RHEL),搜索关键词 Failed password 和 Invalid user
- 若使用 systemd 管理日志(如较新的 Arch 或 Fedora),运行 journalctl -u sshd | grep "Failed" 获取实时认证失败日志条目
用命令或脚本快速统计攻击源
手动逐条翻查安全日志效率较低,借助终端命令或脚本,几秒钟就能快速统计高频攻击源:
- 统计高频失败IP(Ubuntu/Debian):
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr - 同时抓取无效用户名尝试:
grep "Invalid user" /var/log/auth.log | awk '{print $8, $10}' | sort | uniq -c | sort -nr($8通常为用户名,$10通常为IP,建议先用 head -1 /var/log/auth.log 确认字段位置) - Windows PowerShell 自动化(查询最近6小时):
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4625;StartTime=(Get-Date).AddHours(-6)} | Group-Object -Property {$_.Properties[18].Value} | Sort-Object Count -Descending | Select-Object Count, Name(其中索引18一般对应源IP)
验证是否已失守,不能只看失败记录
暴力破解的最终目标是成功登录,因此排查时不能只看失败日志,还必须同步检查是否已经“得手”:
- 查成功登录记录:
Linux 执行 grep "Accepted" /var/log/auth.log | tail -30,重点关注非工作时间、陌生IP、root账户的登录行为 - 交叉验证登录历史:
Linux 运行 last -a | head -15,比对IP与前面发现的攻击IP是否存在重合 - Windows 查事件ID 4624(登录成功),特别留意登录类型为 8(网络明文) 或 10(远程桌面) 的异常记录,这类情况常与FTP、IIS基本认证等弱认证协议有关
- 如果发现某个IP在连续多次失败后紧接着出现一次成功登录,且该IP不在白名单范围内,应立即判定为疑似失陷,尽快启动应急响应流程
加固与后续动作建议
日志分析不是终点,关键在于推动后续安全处置形成闭环:
- 对已确认的攻击IP,立即加入防火墙或安全组黑名单;生产环境建议部署 Fail2Ban 或类似自动封禁工具
- 修改所有被高频尝试的账户密码,尤其是 root、administrator、ftp 等高风险账户;同时禁用长期未使用的账户
- 检查登录来源是否合理:例如 FTP 暴力破解常见于暴露在公网的默认端口场景,应尽量关闭外网映射,或改用 SFTP + 密钥认证
- 开启日志轮转并定期归档,确保至少保留30天以上原始安全日志,方便后续回溯分析与取证
