排查 ECS 实例是否存在被恶意程序占用带宽的情况,核心逻辑就两步:确认现象(确实慢/流量大) -> 定位源头(哪个进程在跑)。
在国内云环境(如阿里云、腾讯云、华为云等)下,通常可以通过“控制台监控 + 操作系统内部命令”结合的方式来精准定位。以下是具体的实操步骤:
一、 先通过云平台控制台快速定性
不要一上来就 SSH 上去敲命令,先看云厂商提供的监控数据,这能帮你快速判断是不是真的被攻击或XX。
- 查看公网流出/流入带宽图
- 登录云控制台,找到你的 ECS 实例,进入“监控”或“性能”页面。
- 观察 公网流出带宽(Outbound) 是否出现异常峰值。如果是正常业务,流量通常是波动的;如果是被用于 CC 攻击、DDoS 反射或XX矿池通信,往往会出现持续的高位输出,或者在深夜无人访问时突然飙升。
- 检查安全组与防火墙日志
- 如果开启了云防火墙或安全组日志,查看是否有大量非常规端口的连接请求。比如你的 Web 服务只开了 80/443,但日志里出现了大量的 6667(IRC)、53(DNS 放大)、或一些随机高位端口的大量出站连接。
- 关联资源监控
- 看一眼 CPU 使用率。如果带宽高且 CPU 也长期维持在高位(尤其是单核满载),极大概率是病毒、木马在进行加密运算(如XX)或发起大规模发包。
二、 登录服务器进行深度排查(Linux 为例)
一旦确定流量异常,就需要进系统抓“现行”。按优先级从高到低执行以下操作:
1. 找出占用带宽最高的进程
这是最关键的一步。你需要知道是哪个 PID(进程 ID)在疯狂发数据包。
-
方法 A:使用
nethogs(推荐,最直观)- 安装:
yum install nethogs(CentOS) 或apt install nethogs(Ubuntu)。 - 运行:
sudo nethogs eth0(假设网卡是 eth0,可通过ip addr查看)。 - 效果:它会实时列出每个进程的带宽占用情况,直接告诉你哪个进程占用了多少 KB/s。如果发现某个陌生进程(如
/tmp/xxx,/dev/shm/xxx或无名字符串)排在第一位,基本就是它了。
- 安装:
-
方法 B:使用
iftop+lsof(组合拳)- 先装
iftop:sudo iftop -i eth0。这会显示当前网络连接及其 IP 和端口。 - 看到可疑的 IP 或端口后,记下 PID。如果
iftop不显示 PID,可以配合lsof -i :<端口号>来查找对应进程。
- 先装
-
方法 C:纯内核态分析(无工具可用时)
- 使用
ss或netstat查看连接数最多的 IP。 -
ss -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 10 - 如果某个外部 IP 连接数成千上万,说明可能正在遭受 DDoS 或被用作肉鸡向外发包。
- 使用
2. 定位具体文件路径
拿到 PID 后,需要知道这个进程对应的可执行文件在哪里,以便后续清理。
- 查看进程详情:
ps aux | grep <PID> # 或者 ls -l /proc/<PID>/exe - 注意陷阱:很多恶意程序会把自己重命名为
httpd,nginx,java等常见名字来混淆视听。所以要看 启动参数 和 工作目录。- 例如:
ps -ef | grep <PID>看到类似/tmp/.hidden/miner --url=stratum+tcp://...这种参数,基本实锤是XX木马。
- 例如:
3. 检查定时任务与自启动项
恶意程序删掉进程没用,它们通常会留下后门再次复活。
- crontab:
crontab -l cat /etc/crontab ls -la /var/spool/cron/ ls -la /etc/cron.d/检查是否有奇怪的脚本在定期下载二进制文件或执行网络命令。
- systemd 服务:
systemctl list-units --type=service --state=running重点看那些名字奇怪、或者指向
/tmp,/dev/shm,/var/tmp等非标准目录的服务。 - rc.local 及 profile 文件:
检查/etc/rc.local,/root/.bashrc,/home/user/.bashrc等文件中是否有隐晦的 curl/wget 下载指令。
4. 检查隐藏文件和权限异常
- 查找最近修改的可执行文件:
find / -name "*.sh" -o -name "miner" -o -name "*coin*" 2>/dev/null find /tmp, /dev/shm, /var/tmp -type f -mtime -1 - 检查 SUID/SGID 文件:黑客常利用这些提权。
find / -perm -4000 -type f 2>/dev/null对比已知系统的 SUID 列表,发现陌生的即可疑。
三、 Windows 服务器的简要思路
如果是 Windows ECS,逻辑类似,但工具不同:
- 任务管理器:查看“性能”标签页下的网络利用率,切换到“进程”标签页,按“网络”排序,找出占用高的进程。
- PowerShell 命令:
Get-NetTCPConnection | Group-Object OwningProcess | Sort-Object Count -Descending | Select-Object -First 10找到高连接数的 PID,再用
Get-Process -Id <PID>查看详细信息。 - 检查启动项:任务管理器 -> “启动”标签页,以及注册表
HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun。
四、 处置建议
- 断网隔离:确认为恶意程序后,先在控制台暂停 ECS 实例或断开弹性网卡,防止进一步扩散或产生高额账单。
- 保留现场:不要直接
rm -rf删除文件!先截图保存ps,netstat,crontab的输出,记录恶意 IP 和文件路径。这对后续溯源和向云厂商申诉免责至关重要。 - 彻底清理:
- 杀死进程。
- 删除恶意文件。
- 清除定时任务和自启动项。
- 修改密码:弱口令是入侵的主要原因,务必重置 root/admin 密码,并开启 SSH 密钥登录,禁用密码登录。
- 重装系统(终极方案):
- 如果无法确定是否留有 Rootkit 级别的深层后门,或者系统已被严重破坏,最安全、成本最低的方式是直接更换操作系统镜像重装。
- 备份好业务数据和代码,重新部署应用。不要试图在一个被攻陷的系统上“洗白”,风险极高。
五、 预防之道
- 最小化端口开放:安全组只开必要的端口(如 22, 80, 443)。
- 定期更新补丁:保持 OS 和软件版本最新。
- 部署主机安全组件:国内主流云厂商都提供免费的“云盾”、“主机安全”或“安骑士”客户端,安装在 ECS 上可以实时拦截暴力破解、Webshell 上传和XX行为,比手动排查高效得多。
记住,带宽费用往往是第一张报警单。一旦发现账单异常,第一时间查带宽监控,再顺着网线找进程。
云技术博客