SSH(Secure Shell)是 Linux 服务器最常用的远程管理协议,同时也是攻击者最常瞄准的入口点之一。暴力破解 SSH 密码是互联网上最常见的自动化攻击行为,几乎每一台暴露在公网的 Linux 服务器都会遭受此类攻击。本章系统性地讲解 SSH 暴力破解与未授权访问的检测、分析、处置与加固全流程。
Mar1514:23:01 web-server sshd[12345]: Failed password for root from 192.168.1.100 port 54321 ssh2
Mar 15 14:23:01 — 时间戳
web-server — 主机名
sshd[12345] — 服务名和进程 PID
Failed password — 事件类型:密码认证失败
for root — 目标用户名
from 192.168.1.100 — 来源 IP
port 54321 — 来源端口
ssh2 — SSH 协议版本
无效用户名的失败日志
1
Mar1514:23:05 web-server sshd[12346]: Failed password for invalid user admin from 192.168.1.100 port 54322 ssh2
注意关键区别:多了 invalid user 标记
说明系统中不存在该用户名,攻击者在猜测用户名
认证成功日志(密码登录)
1
Mar1515:00:00 web-server sshd[12400]: Accepted password for deploy from 10.0.0.50 port 60001 ssh2
Accepted password — 密码认证成功
认证成功日志(密钥登录)
1
Mar1515:00:00 web-server sshd[12401]: Accepted publickey for deploy from 10.0.0.50 port 60002 ssh2: RSA SHA256:xxxxxxxxxxx
Accepted publickey — 密钥认证成功
末尾会显示密钥指纹信息
会话打开/关闭
1 2
Mar1515:00:01 web-server sshd[12400]: pam_unix(sshd:session): session opened for user deploy by (uid=0) Mar1515:30:00 web-server sshd[12400]: pam_unix(sshd:session): session closed for user deploy
连接断开(无认证)
1
Mar1514:22:50 web-server sshd[12340]: Connection closed by 192.168.1.100 port 54310 [preauth]
Mar 15 02:13:01 web-prod sshd[8801]: Invalid user admin from 185.220.101.34 port 45231 Mar 15 02:13:01 web-prod sshd[8801]: pam_unix(sshd:auth): check pass; user unknown Mar 15 02:13:03 web-prod sshd[8801]: Failed password for invalid user admin from 185.220.101.34 port 45231 ssh2 Mar 15 02:13:04 web-prod sshd[8801]: Connection closed by invalid user admin 185.220.101.34 port 45231 [preauth] Mar 15 02:13:05 web-prod sshd[8805]: Invalid user test from 185.220.101.34 port 45232 Mar 15 02:13:07 web-prod sshd[8805]: Failed password for invalid user test from 185.220.101.34 port 45232 ssh2 Mar 15 02:13:08 web-prod sshd[8805]: Connection closed by invalid user test 185.220.101.34 port 45232 [preauth] Mar 15 02:13:09 web-prod sshd[8809]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=185.220.101.34 user=root Mar 15 02:13:11 web-prod sshd[8809]: Failed password for root from 185.220.101.34 port 45233 ssh2 Mar 15 02:13:12 web-prod sshd[8812]: Failed password for root from 185.220.101.34 port 45234 ssh2 Mar 15 02:13:14 web-prod sshd[8815]: Failed password for root from 185.220.101.34 port 45235 ssh2 Mar 15 02:13:15 web-prod sshd[8818]: Failed password for root from 185.220.101.34 port 45236 ssh2 Mar 15 02:13:17 web-prod sshd[8821]: Failed password for root from 185.220.101.34 port 45237 ssh2 Mar 15 02:13:18 web-prod sshd[8824]: Failed password for root from 185.220.101.34 port 45238 ssh2 Mar 15 02:13:20 web-prod sshd[8827]: Failed password for root from 185.220.101.34 port 45239 ssh2 Mar 15 02:13:22 web-prod sshd[8830]: Failed password for root from 185.220.101.34 port 45240 ssh2 --- 中间省略约 200 次失败尝试,持续约 30 分钟 --- Mar 15 02:45:33 web-prod sshd[9201]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=185.220.101.34 user=deploy Mar 15 02:45:35 web-prod sshd[9201]: Failed password for deploy from 185.220.101.34 port 46102 ssh2 Mar 15 02:45:36 web-prod sshd[9204]: Failed password for deploy from 185.220.101.34 port 46103 ssh2 Mar 15 02:45:38 web-prod sshd[9207]: Failed password for deploy from 185.220.101.34 port 46104 ssh2 Mar 15 02:45:40 web-prod sshd[9210]: Accepted password for deploy from 185.220.101.34 port 46105 ssh2 Mar 15 02:45:40 web-prod sshd[9210]: pam_unix(sshd:session): session opened for user deploy by (uid=0) Mar 15 02:45:41 web-prod sshd[9210]: pam_loginuid(sshd:session): set_loginuid failed foruid=1001 Mar 15 02:46:02 web-prod sudo: deploy : TTY=pts/0 ; PWD=/home/deploy ; USER=root ; COMMAND=/bin/bash Mar 15 02:46:02 web-prod sudo: pam_unix(sudo:session): session opened for user root by deploy(uid=1001) Mar 15 02:47:15 web-prod useradd[9301]: new user: name=support, UID=1002, GID=1002, home=/home/support, shell=/bin/bash Mar 15 02:47:20 web-prod usermod[9305]: add'support'to group 'sudo' Mar 15 02:47:35 web-prod sshd[9310]: pam_unix(sshd:session): session opened for user deploy by (uid=0) Mar 15 02:48:01 web-prod CRON[9315]: (root) CMD (/tmp/.hidden/update.sh)
# 遍历所有用户的 authorized_keys 文件 for user_home in /home/* /root; do if [ -f "${user_home}/.ssh/authorized_keys" ]; then echo"=== ${user_home}/.ssh/authorized_keys ===" ls -la "${user_home}/.ssh/authorized_keys" cat"${user_home}/.ssh/authorized_keys" echo"" fi done
# 检查所有用户的 crontab for user in $(cut -d: -f1 /etc/passwd); do crontab_content=$(crontab -l -u "$user" 2>/dev/null) if [ -n "$crontab_content" ]; then echo"=== Crontab for $user ===" echo"$crontab_content" echo"" fi done
# 检查系统级 crontab cat /etc/crontab ls -la /etc/cron.d/ ls -la /etc/cron.daily/ ls -la /etc/cron.hourly/
# 读取所有用户的命令历史 for user_home in /home/* /root; do for hist_file in .bash_history .zsh_history; do if [ -f "${user_home}/${hist_file}" ]; then echo"=== ${user_home}/${hist_file} ===" cat"${user_home}/${hist_file}" | tail -100 echo"" fi done done