日志审计-graylog ssh登录超过6次告警

Apt 设备通过UDP收集日志,在gray创建接收端口192.168.0.187:1514

1、ssh登录失败次数大于5次

ssh日志级别默认为INFO级别,通过系统rsyslog模块处理,日志默认存储在/var/log/auth.log。

将日志转发到graylog

vim /etc/rsyslog.conf

文件末尾追加

if $programname == 'sshd' then @192.168.0.187:1514

重启rsyslog服务

sudo systemctl restart rsyslog

以错误密码登录

graylog查看,自动刷新日志

错误密码登录

页面可以看见产生的日志

完整的日志内容

|--------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|
| Aug 21 07:00:18 a sshd[20129]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.108 user=root | [第一阶段]身份验证失败阶段 |
| Aug 21 07:00:20 a sshd[20129]: Failed password for root from 192.168.0.108 port 61432 ssh2 | [第二阶段]首次密码验证失败阶段 |
| Aug 21 07:01:00 a sshd[20129]: message repeated 4 times: [ Failed password for root from 192.168.0.108 port 61432 ssh2] | [第三阶段]多次重复的密码验证失败阶段 |
| Aug 21 07:01:25 a sshd[20129]: Failed password for root from 192.168.0.108 port 61432 ssh2 | [第四阶段]最终的密码验证失败阶段 |
| Aug 21 07:01:26 a sshd[20129]: error: maximum authentication attempts exceeded for root from 192.168.0.108 port 61432 ssh2 [preauth] | [第五阶段]超过最大尝试次数阶段。SSH 服务决定断开连接并阻止进一步的尝试 |
| Aug 22 02:27:32 a sshd[26318]: Disconnecting authenticating user root 192.168.0.108 port 60267: Too many authentication failures [preauth] | [第六阶段]断开连接 |
| Aug 22 02:27:32 a sshd[26318]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.108 user=root | [第七阶段]由PAM模块产生,提示认证失败一次基础上,又尝试了5次。即一共失败6次 |

在最后一个阶段产生的日志,PAM模块会记录首次失败后,继续尝试连接失败次数,

PAM 5 这里次数为5,即首次失败1次,加上后续尝试次数5,一共6次失败产生。

这个日志产生的条件

1、达到ssh服务配置最大尝试次数上限,服务器主动断开连接,PAM模块产生后续尝试次数

2、客户端主动断开连接,PAM统计后续尝试次数。

对于ssh登录失败,使用最后一个日志作为目标日志,因为他在下面每个场景都会产生

1、用户登录失败1次,断开连接。这里失败没有继续尝试,操作没有风险

2、用户多次尝试失败,断开连接,产生PAM,根据尝试次数决定是否告警

3、用户尝试多次,服务器主动段考连接,产生PAM,根据尝试次数,决定是否告警

这里有一个问题,如果客户在同一客户端,一直用不同的连接尝试访问,就不会产生PAM,也有暴力破解的风险,对这个情况,要加一个告警日志聚合,就是针对第二个的日志对ip聚合统计。如果超过规定次数也告警。

Graylog pipline清洗数据追加问题字段

ssh登录失败N次就告警

  • 聚合场景一:存在PAM日志

配置 extractor提取,在数据进入stream前先解析,拿到次数,并追加failedtime:[次数]字段

对原始日志,配置json解析

到这里随便加载一个就行

选择正则表达式提取

正则表达式,可以提取次数

PAM (\d+) more authentication failure

转换成数值,后面告警进行聚合操作时,需要判断决定是否告警

  • 聚合场景二:不存在PAM

Failed password字段存在,统计源目的ip出现次数,

pipline规则

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 提取服务器IP rule "gl2_remote_ip rename" when has_field("gl2_remote_ip") then set_field("server_ip", to_string(message.gl2_remote_ip)); end | | 提取源IP rule "ssh password for from" when contains(value: to_string(message.message), search: "ssh", ignore_case: false) then let m = regex("(Failed|Accepted) password for (\\S+) from (\\S+)\\s+port\\s+(\\d+)",to_string($message.message)); set_field("command", to_string(m["0"])); set_field("account", to_string(m["1"])); set_field("remote_addr", to_string(m["2"])); set_field("remote_port", to_string(m["3"])); end |

总结:

PAM日志将会追加

trytime

1

Failed password将会追加

remote_addr

192.168.0.108

server_ip

192.168.0.18

Graylog Alert聚合规则

PAM日志聚合规则

1、字段匹配

首先过滤日志中的字段

|-----------------------------------------------------------------------|
| message: "sshd" AND message: "PAM" AND message: "more authentication" |

在进行聚合匹配前先对周期内的日志根据源目的IP分类

对同类日志,配置聚合规则,失败次数大于4就告警

测试

尝试登录,且填写错误密码,登录6次

查看告警内容

问题:

1、graylog运行状态

graylog所有的功能都是基于日志的,如果不能连续提供日志,grayLog所有功能就会暂停;比如,现在存在匹配告警的日志,但此刻没有新的日志到graylog,那么这个应该匹配告警的日志,就不会产生告警,只能在之后继续收日志的时候才能继续工作上报告警,存在漏报的问题。(不过实际场景,日志应该会很多,持续上报,不存在这个问题)

相关推荐
海鸥8125 分钟前
在linux下,找到指定命令对应的路径信息
linux·运维·服务器
shyuu_30 分钟前
Linux 三种方式查看和设置主机名
linux·运维·服务器·正则表达式·云计算·运维开发
黑客大佬1 小时前
安全工具 | 使用Burp Suite的10个小tips
运维·前端·网络·学习·安全·云计算·腾讯云
啊呦.超能力2 小时前
Linux下进程间的通信--共享内存
linux·运维·服务器
勤劳兔码农2 小时前
使用Ansible进行多云环境的自动化部署与管理
运维·自动化·ansible
zjsnh_Z2 小时前
Linux 操作系统 进程(2)
linux·运维·服务器
雾岛LYC听风2 小时前
3. 轴指令(omron 机器自动化控制器)——>MC_Power&MC_MoveJog
运维·c#·自动化
小堃学编程2 小时前
计算机网络(五) —— 自定义协议简单网络程序
运维·服务器·计算机网络
凤 曦2 小时前
Linux网络:网络套接字-TCP回显服务器——多进程/线程池(生产者消费者模型)
linux·运维·服务器
云上帮手2 小时前
最新免费云服务器,有需要的自行领取
运维·服务器·云计算