暴力破解排查


介绍

暴力破解一般针对
ssh、mysql、ftp、redis、mongodb、smtp

SSH暴力破解
  1. 使用netstat -pantu查看网络状态,重点是PID(当被破解时会有大量的ESTABLISHED)

  2. 使用awk -F: '{if($3==0) print $1}' /etc/passwd查找特殊权限账号(默认root)

  3. 查找可以使用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}'
    
  4. 查看正在连接的ssh-session

    who -a
    w
    last -p now
    sudo netstat -tnpa | grep 'ESTABLISHED.*sshd'
    pgrep -af sshd
    echo $SSH_CONNECTION
    ss | grep ssh
    
  5. 查看所有的账号信息

    /var/log/auth.log(Ubuntu)
    /var/log/secure(centOS)
    列出当前账户         
    who am i  
    
  6. 查看登录日志

    # 查看日志
    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"
    
  7. 统计数据

    # 登录失败的用户名及其次数
    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
    
  8. 加固防护
    升级SSH版本至少为 7.7版本以上,7.7及以下版本存在SSH用户名枚举
    加强口令复杂程度
    禁止root用户登录,可以通过其他用户su到root
    安装 fail2ban 来进行防御

Mysql暴力破解

Mysql 默认安装会保留登录日志,在 Ubuntu 上默认位置为 /var/og/mysql/error.log

  1. 查看登录失败的用户名

    cat /var/log/mysql/error.log | grep "Access denied for user" | grep "using password: YES" | awk -F "'" '{print $2}' | sort | uniq -c | sort -nr
    
  2. 查看登录失败的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暴力破解
  1. 查看网络连接(如果有爆破会有大量的ESTABLISHED状态和TIME WAIT状态的网络连接)
    netstat -pantu
    
  2. 查看最近的一个ftp会话(也可以用ftpwho查找)
    last -w -t
    
  3. 查找日志
    cat /var/log/vsftpd.log   具体的位置可能不太一样,需要自己查找
    
  4. 查找登录失败的账号
    cat /var/log/vsftpd.log | grep FAIL | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq -c | sort -nr
    
  5. 查找登录失败的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
    
  6. 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查看

  1. 登录失败的账户
    cat /var/log/mongodb/mongodb.log | grep -v "UserNotFound"|grep failed | awk -F " " '{print $9}' | sort|uniq -c|sort -nr
    
  2. 登录所有账户失败的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
    
  3. 不存在账户的爆破事件
    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

评论
  目录