记一次树莓派(Raspbetty)系统ssh被爆破攻击日志分析

作者: 管理员 分类: 系统运维,随笔心情 发布时间: 2021-09-20 22:08
  • 前面的文章有过提及,这个博客的载体是一块树莓派,就像下面图片的这样

今天在家无聊,所以想看下系统的登录日志,真应的那一句话,不看不知道,一看吓一跳,我TMD居然被爆破攻击了,想起来了前几天需要有个东西测试下,远程到服务器上开放了一个ssh端口没有关闭,才隔两三天居然被爆破攻击了,不过我当时应该是没有慌乱,因为之前在ssh服务上有过加固,爆破成功可能性不大,所以就开启了树莓派分析日志的过程,在此留一个记录。

  • 第一步分析日志查看系统是否被成功登录
  • 第二步查找IP归属地及攻击次数

树莓派里面有三个文件需要我们进行分析:(下面三个文件都在/var/log/目录下)
auth. log 可以看到登陆的情况
btmp 中可以查看到登陆失败的记录(可通过lastb命令进行检查)
lastlog 中可以查看最近登陆的记录(可通过last命令进行检查)

看下系统最近登录失败的记录:

grep "Failed password" /var/log/auth.log | wc -l
看记录有4万多条是密码验证失败的

看下系统最近登录成功的记录:

grep "password" /var/log/auth.log| grep -v Failed | grep -v Invalid

简单看了下,问题不大,因为都是自己的IP地址,最近也就自己登录了进来,大家应该发现了,这个应该是最近的登录记录,说明对方并没有成功登录过,我们还需要继续分析

我们查询下恶意攻击的IP及他们攻击的次数

cat /var/log/auth.log | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'

可以看到,这个攻击数量是比较大的,特别是60.191.11.242这个IP地址,居然爆破了14657次,实在是服~

先看下所有的auth 文件

ls /var/log/auth.log* -lht

可以看到系统目前产生了 5 个日志文件了。刚刚看的 auth.log 文件只是最近的日志,我们将日志全部放在一个目录里面进行分析

awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(ip in ips){print ip, ips[ip]}}' auth.* | wc -l

看情况还好,只有36个IP地址扫描过我这一台服务器,不算多也不算少,按照攻击我们排一个序看下

awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(ip in ips){print ip, ips[ip]}}' auth.* | sort -k2 -rn | head

可以通过上图发现,攻击排名第一的总共攻击了16万多次,牛批~

我们可以将上述IP保存到文件,以便后续查证

awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(ip in ips){print ip, ips[ip]}}' auth.* | sort -k2 -rn > ip.log

查看下IP地址他们的具体分布情况,只查文件top10的

head -10 ip.log | awk '{print $1" ";system("curl //freeapi.ipip.net/"$1);print("\n")}'

查看攻击所使用的用户名及尝试次数

awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(user in users){print user, users[user]}}' auth.* | sort -k2 -rn |wc -l
#查询总爆破次数
awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(user in users){print user, users[user]}}' auth.* | sort -k2 -rn | head
#查询爆破使用用户名及次数

可以看得出来,root绝对不是什么安全密码,我这里被爆破38682次,不过我这里有安全策略,你密码错两次就锁定了,锁定后输入正确的密码也无法登录成功,所以更别说其他系统不存在的用户名了,所以此次攻击者并没有爆破成功,不过还是建议将不必要的端口封闭,不要留下安全隐患~

将查询的保存到文件

awk '{if($6=="Failed"&&$7=="password"){if($9=="invalid"){ips[$13]++;users[$11]++}else{users[$9]++;ips[$11]++}}}END{for(user in users){print user, users[user]}}' auth.* | sort -k2 -rn > username.log

其他细节;

查看日志位置

一般来说 ubuntu 在 /var/log/auth.log centos 在 /var/log/secure 这两者格式不一样。

具体在什么位置是在 rsyslog 的配置文件里:/etc/rsyslog.conf 或者 /etc/rsyslog.d (当然你的系统必须是用 rsyslog 的才行,如果不是用这个就不在这里,使用命令 ps aux | grep "rsyslog" | grep -v "grep" 看系统里有没有 rsyslog 进程可以判断系统是否使用 rsyslog)

ubuntu 18.04

auth,authpriv.* /var/log/auth.log
具体位置是 /etc/rsyslog.d/50-default.conf

CentOS 7.6

# The authpriv file has restricted access.
authpriv.* /var/log/secure
具体位置是 /etc/rsyslog.conf

命令:
查看成功登录

grep "Accepted password for" /var/log/secure

查看每个用户名失败的次数

grep "Failed password"  /var/log/secure | awk '{if (NF==16){c[$11]++}else{c[$9]++}}END{for(u in c)print u,c[u]}' | sort -k 2 -nr | head

查看每个 IP 地址失败的次数

grep "Failed password"  /var/log/secure | awk '{if (NF==16){c[$13]++}else{c[$11]++}}END{for(u in c)print u,c[u]}' | sort -k 1 -n  | head

发表评论

电子邮件地址不会被公开。