记录一下,服务器又又被黑的一次。

事发

早上正健身了,8点半左右,boss说网站不行了。
上线一看,全红。

记录一下,服务器又又被黑的一次。

好家伙,看看阿里云监控,果然cpu也是炸了。

那就常规流程走一套。

常规流程处理

看面板状态,宝塔一键清楚内存,发现数秒后,cpu又炸了。

top free 查看使用情况。

记录一下,服务器又又被黑的一次

查看链接ip 进程数:

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr

记录一下,服务器又又被黑的一次
发现某个ip有 150个链接。立马查看这个ip是什么?看上去是内网ip。
那通过安全组是无法禁用的。

问问阿里云客服去。

客服给出反馈,果然是黑了,中了挖矿木马。

记录一下,服务器又又被黑的一次

那就简单了,直接屏蔽ip即可。

问题分析与起因

这是系统各种漏洞造成了,不单单是php,也有可能centos 版本低,或者怎样怎样,阿里云最终给出的解释,是他们无法主动查询到这种情况。
必须是我们客户主动反馈,阿里云才回去查询是否有黑客,木马这样。

也就就是说,出事自己多反馈,反正阿里云客服组人多。

此次问题小结

老代码的东西,尽量重构成新版本服务吧。
实在是成本不够,那就硬抗。

本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
本帖由系统于 5个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 33

分享一些排查命令吧;

# 查看所有进程
top
# 查看内存占用进程
top -o %MEM
# 查看执行命令
history | grep sh
# 进程若隐藏可尝试【记得备份】
echo “”>/etc/ld.so.preload 
# 在使用,查看进程
top -o %MEM 
# 查看隐藏进程方式2【需要安装,大家自行百度哈】
unhide proc
# 查看进程启动文件
ls -l /proc/进程ID/exe
# 常用挖矿程序 查找 
find . -name xmrig
# 找到启动程序后,记得根据程序启动时间排查执行命令,执行命令角色等等
# 不过还是建议大家重装吧

根据进程占用程度杀死进程,搬迁期间可用

#!/bin/bash

# 设置 CPU 和内存占用的阈值(百分比)
cpu_threshold=60
memory_threshold=80

# 使用 ps 命令查找所有进程,并按 CPU 或内存占用排序
processes=$(ps -eo pid,%cpu,%mem,comm --sort=-%cpu | awk 'NR>1 { print $1, $2, $3, $4; }')

# 遍历所有进程
while read -r pid cpu_usage memory_usage process_name; do
  if (( $(bc <<< "$cpu_usage > $cpu_threshold") )); then
    # CPU 占用超过阈值,终止进程
    kill "$pid"
    echo "进程 $process_name (PID: $pid) 的 CPU 占用超过 $cpu_threshold%,已终止."
  elif (( $(bc <<< "$memory_usage > $memory_threshold") )); then
    # 内存占用超过阈值,终止进程
    kill "$pid"
    echo "进程 $process_name (PID: $pid) 的内存占用超过 $memory_threshold%,已终止."
  fi
done <<< "$processes"

或指定进程

#!/bin/bash

# 请替换为你要删除的进程名称
process_name="your_process_name"

# 设置 CPU 占用阈值(百分比)
cpu_threshold=60

# 使用 pgrep 查找进程 ID
process_id=$(pgrep "$process_name")

if [ -z "$process_id" ]; then
  echo "进程 $process_name 未找到."
else
  # 使用 top 命令获取进程的 CPU 占用百分比
  cpu_usage=$(top -b -n 1 -p "$process_id" | awk 'NR>7 { sum += $9; } END { print sum; }')

  if [ "$cpu_usage" -gt "$cpu_threshold" ]; then
    # CPU 占用超过阈值,终止进程
    kill "$process_id"
    echo "进程 $process_name (PID: $process_id) 的 CPU 占用超过 $cpu_threshold%,已终止."
  else
    echo "进程 $process_name (PID: $process_id) 的 CPU 占用为 $cpu_usage%,未超过 $cpu_threshold%."
  fi
fi

防火墙 ip 禁用

CentOSUbuntu个有不同,你记得百度一下
这里是CentOS

# 网络连接查看
netstat -anp
# 禁止某个IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<要禁止的IP地址>" drop'
# 重启保存
sudo firewall-cmd --reload

我还是建议大家别修了,尽早搬迁吧,提供些思路

### 历史执行命令
history
### 日志查找
### **Linux 系统日志文件**
cat /var/log/syslog
cat /var/log/messages
### **防火墙和安全相关的日志文件**
cat /var/log/iptables.log
cat /var/log/ufw.log
cat /var/log/firewalld
### **SSH 日志**
# 一般会被删掉。。。
cat /var/log/auth.log
cat /var/log/secure
### **Web 服务器日志(例如 Apache 或 Nginx)**

还得禁止可疑用户的登录,啊,麻烦

cat /etc/passwd
vi /etc/passwd
# 改为 nologin
/usr/sbin/nologin
6个月前 评论
it_cwc (作者) 6个月前
JinBB 6个月前
jackwuking88992323 5个月前
it_cwc (作者) 5个月前
jackwuking88992323 5个月前

硬抗比较好,节约成本。

6个月前 评论
wangchunbo (楼主) 6个月前

我按照你的命令打了 也有这种情况 不然链接才十几。会是这种情况吗?你是怎么提问阿里云的

6个月前 评论
wangchunbo (楼主) 6个月前
wangchunbo (楼主) 6个月前

之前用 TP,也中过一次挖矿

6个月前 评论
MArtian 6个月前
xylp

宝塔有漏洞,接手的几个项目都中过挖矿木马

6个月前 评论
wangchunbo (楼主) 6个月前
Noctis 6个月前
aliongkk 3个月前

宝塔7.9版本有漏斗,看看是不是宝塔版本没升级

6个月前 评论
wangchunbo (楼主) 6个月前

有不懂的地方,为什么是 php-fpm 进程占用高,是 cpu 高负载引起的吗,172 那个是什么IP 它占用进程多的原因是什么

6个月前 评论
wangchunbo (楼主) 6个月前
徵羽宫 6个月前
wangchunbo (楼主) 6个月前
wangchunbo (楼主) 6个月前

检查下用户目录下有没有隐藏的异常文件夹。之前遇到过类似的挖矿病毒,杀掉进程以后一会又回自动拉起来,最后发现自动拉起的程序都放在用户目录下的隐藏文件夹了,而且还是以系统命令的格式命名的。

不过这种阿里云告警里都会给列出来的,多关注下告警。

再就是安装的第三方软件有上传漏洞,或者密钥泄漏了。安全起见,最好修改下 SSH 密钥(如果有公网访问的话)。

6个月前 评论

分享一些排查命令吧;

# 查看所有进程
top
# 查看内存占用进程
top -o %MEM
# 查看执行命令
history | grep sh
# 进程若隐藏可尝试【记得备份】
echo “”>/etc/ld.so.preload 
# 在使用,查看进程
top -o %MEM 
# 查看隐藏进程方式2【需要安装,大家自行百度哈】
unhide proc
# 查看进程启动文件
ls -l /proc/进程ID/exe
# 常用挖矿程序 查找 
find . -name xmrig
# 找到启动程序后,记得根据程序启动时间排查执行命令,执行命令角色等等
# 不过还是建议大家重装吧

根据进程占用程度杀死进程,搬迁期间可用

#!/bin/bash

# 设置 CPU 和内存占用的阈值(百分比)
cpu_threshold=60
memory_threshold=80

# 使用 ps 命令查找所有进程,并按 CPU 或内存占用排序
processes=$(ps -eo pid,%cpu,%mem,comm --sort=-%cpu | awk 'NR>1 { print $1, $2, $3, $4; }')

# 遍历所有进程
while read -r pid cpu_usage memory_usage process_name; do
  if (( $(bc <<< "$cpu_usage > $cpu_threshold") )); then
    # CPU 占用超过阈值,终止进程
    kill "$pid"
    echo "进程 $process_name (PID: $pid) 的 CPU 占用超过 $cpu_threshold%,已终止."
  elif (( $(bc <<< "$memory_usage > $memory_threshold") )); then
    # 内存占用超过阈值,终止进程
    kill "$pid"
    echo "进程 $process_name (PID: $pid) 的内存占用超过 $memory_threshold%,已终止."
  fi
done <<< "$processes"

或指定进程

#!/bin/bash

# 请替换为你要删除的进程名称
process_name="your_process_name"

# 设置 CPU 占用阈值(百分比)
cpu_threshold=60

# 使用 pgrep 查找进程 ID
process_id=$(pgrep "$process_name")

if [ -z "$process_id" ]; then
  echo "进程 $process_name 未找到."
else
  # 使用 top 命令获取进程的 CPU 占用百分比
  cpu_usage=$(top -b -n 1 -p "$process_id" | awk 'NR>7 { sum += $9; } END { print sum; }')

  if [ "$cpu_usage" -gt "$cpu_threshold" ]; then
    # CPU 占用超过阈值,终止进程
    kill "$process_id"
    echo "进程 $process_name (PID: $process_id) 的 CPU 占用超过 $cpu_threshold%,已终止."
  else
    echo "进程 $process_name (PID: $process_id) 的 CPU 占用为 $cpu_usage%,未超过 $cpu_threshold%."
  fi
fi

防火墙 ip 禁用

CentOSUbuntu个有不同,你记得百度一下
这里是CentOS

# 网络连接查看
netstat -anp
# 禁止某个IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<要禁止的IP地址>" drop'
# 重启保存
sudo firewall-cmd --reload

我还是建议大家别修了,尽早搬迁吧,提供些思路

### 历史执行命令
history
### 日志查找
### **Linux 系统日志文件**
cat /var/log/syslog
cat /var/log/messages
### **防火墙和安全相关的日志文件**
cat /var/log/iptables.log
cat /var/log/ufw.log
cat /var/log/firewalld
### **SSH 日志**
# 一般会被删掉。。。
cat /var/log/auth.log
cat /var/log/secure
### **Web 服务器日志(例如 Apache 或 Nginx)**

还得禁止可疑用户的登录,啊,麻烦

cat /etc/passwd
vi /etc/passwd
# 改为 nologin
/usr/sbin/nologin
6个月前 评论
it_cwc (作者) 6个月前
JinBB 6个月前
jackwuking88992323 5个月前
it_cwc (作者) 5个月前
jackwuking88992323 5个月前

有防火墙好一些吧

6个月前 评论

一旦发生这种问题,大概率系统命令也被替换了。比如cd ls 甚至是你的top。非重装系统不可,每一次你的cd,top命令都是在启动一次病毒进程。

5个月前 评论
wangchunbo (楼主) 5个月前
> netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr
    228 127.0.0.1
     22 220.200.58.145
     12 43.140.47.111
      7 223.104.51.133
      6 112.111.55.186
      4 112.111.55.58
      2 169.254.0.55
      1 59.57.195.57
      1 183.253.77.170
      1 169.254.0.138
      1 162.243.136.79

去测试服务器看,有这么多 127.0.0.1 是正常的吗,项目用的是 nginx 反向代理到 swoole

3个月前 评论
wangchunbo (楼主) 3个月前

自己部署宝塔云服务,专业版直接开整

3个月前 评论

@LnSonG 咱也研究一下,这个服务器的问题。

3个月前 评论

我之前也中过一次,然后发现这个实际上是伪装成 date 命令。然后排除掉就没事了。

这玩意都是带着伪装的,实际排除还是很难的

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
558
收藏
1106
排名:64
访问:12.2 万
私信
所有博文
社区赞助商