介绍
暴力破解一般针对
ssh、mysql、ftp、redis、mongodb、smtp
SSH暴力破解
使用
netstat -pantu
查看网络状态,重点是PID(当被破解时会有大量的ESTABLISHED)使用
awk -F: '{if($3==0) print $1}' /etc/passwd
查找特殊权限账号(默认root)查找可以使用ssh登录的账号
s=$( sudo cat /etc/shadow | grep '^[^:]*:[^\*!]' | awk -F: '{print $1}');for i in $s;do cat/etc/passwd | grep -v "/bin/false\|/nologin"| grep $i;done | sort | uniq |awk -F: '{print$1}'
查看正在连接的ssh-session
who -a w last -p now sudo netstat -tnpa | grep 'ESTABLISHED.*sshd' pgrep -af sshd echo $SSH_CONNECTION ss | grep ssh
查看所有的账号信息
/var/log/auth.log(Ubuntu) /var/log/secure(centOS) 列出当前账户 who am i
查看登录日志
# 查看日志 cd /var/log # 成功登录 cat /var/log/auth.log | grep "Accept" # 正常退出 cat /var/log/auth.log | grep "pam_unix(sshd:session): session closed" # 密码错误 cat /var/log/auth.log | grep "authentication failure" # 连续错误 cat /var/log/auth.log | grep "message repeated 2 times"
统计数据
# 登录失败的用户名及其次数 grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?)from/; print"$1\n";}'|sort|uniq -c|sort -nr # 登录失败的IP及其次数 cat /var/log/auth.log | grep "Failed password for" | grep "root" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' |sort|uniq -c|sort -nr
加固防护
升级SSH版本至少为 7.7版本以上,7.7及以下版本存在SSH用户名枚举
加强口令复杂程度
禁止root用户登录,可以通过其他用户su到root
安装fail2ban
来进行防御
Mysql暴力破解
Mysql 默认安装会保留登录日志,在 Ubuntu 上默认位置为 /var/og/mysql/error.log
查看登录失败的用户名
cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort | uniq -c | sort -nr
查看登录失败的IP及次数
cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort| uniq | while read line;do echo $line;cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password" | awk -F "'" '{print $4}' | sort | uniq -c | sort -nr; done
FTP暴力破解
- 查看网络连接(如果有爆破会有大量的ESTABLISHED状态和TIME WAIT状态的网络连接)
netstat -pantu
- 查看最近的一个ftp会话(也可以用ftpwho查找)
last -w -t
- 查找日志
cat /var/log/vsftpd.log 具体的位置可能不太一样,需要自己查找
- 查找登录失败的账号
cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq -c | sort -nr
- 查找登录失败的IP
cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq | while read line;do echo $line;cat /var/log/vsftpd.log | grep $line | cut -d ":" -f 7 | cut -d '"' -f 1 | sort | uniq -c | sort -nr; done
- FTP服务加固
禁用 anonymous 和 ftp 两个账号
使用 SSL 加密 FTP
安装 fail2ban 来进行防御
Redis未授权暴力破解
将redis.conf 中的 requirepass 前的注释打开,并且设置一个复杂密码
缩减开放端口,建议仅在本机127.0.0.1使用
配置完成后需要重启来生效
- 只有手动设置logfile才能保存日志,默认不设置默认的日志级别notice是不会记录登录、执行指令、退出的。
- loglevel设置为 verbose或者debug才会记录登录主机
- 执行的指令
info,set
等即使 loglevel是 debug 级别也不会记录,但是会记录我们设置了多少个key, 具体key名称以及内容不会记录
虽然如此,但是失败成功的登录日志都是一样的……
没办法区分是不是攻击行为,只能问有没有人那个时候登过了
MongoDB暴力破解
默认配置文件位置为 /etc/mongodb.conf
默认的的日志位置为 /var/og/mongodb/mongodb.log
打开verbose后能看到大量的failed事件
在/var/log/mongodb/mongodb.log查看
- 登录失败的账户
cat /var/log/mongodb/mongodb.log | grep -v "UserNotFound"|grep failed | awk -F " " '{print $9}' | sort|uniq -c|sort -nr
- 登录所有账户失败的IP及次数
cat /var/log/mongodb/mongodb.log | grep -v "UserNotFound"|grep failed | awk -F " " '{print $9}' |sort | uniq | while read line;do echo $line;cat /var/log/mongodb/mongodb.log |grep -v "UserNotFound" | grep failed | grep $line | awk -F " " '{print $14}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr; done
- 不存在账户的爆破事件
cat /var/log/mongodb/mongodb.log | grep "UserNotFound"|grep failed | awk -F " " '{print $9}' |sort | uniq | while read line;do echo $line;cat /var/log/mongodb/mongodb.log |grep "UserNotFound" | grep failed | grep $line | awk -F " " '{print $14}' | cut -d ":" -f 1 | sort | uniq -c | sort -nr; done
SMTP暴力破解
SMTP负责发,POP3、IMAP负责收,POP3协议客户端收到邮件,服务器端就会将其删除,除非有特殊的配置。
IMAP则弥补了这一缺陷,客户端该收收,服务端还给你保存着,同时你在客户端的各种配置操作都会在服务器上进行同步
验证失败的账户IP
cat /var/log/mail.log | grep "authentication failed" | grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' |sort|uniq -c|sort -nr