服务器遭受攻击后的处理措施

在物理机情况下(被当肉鸡)

(1)、断开网络
所有的攻击都来自于网络,因此,在得知系统正遭受黑客攻击时,首先要做的就是断开服务器的网络连接。
(2)、查找攻击源
可以通过分析系统日志或登录日志文件,查看可疑信息,同时也要查看系统都打开了哪些端口,运行哪些进程,并通过这些进程分析哪些是可疑的程序。
(3)、分析入侵原因和途径
既然系统遭到攻击,那么原因是多方面的,可能是系统漏洞,也可能是程序漏洞,一定要查清楚是哪个原因导致的,并且还要查清楚遭到攻击的途径,找到攻击源。
(4)、备份用户数据
在服务器遭受攻击后,需要立刻备份服务器上的用户数据,同时也要查看这些数据中是否隐藏着攻击源。如果攻击源在用户数据中,一定要彻底删除,然后将用户数据备份到一个安全的地方

(5)、重新安装系统
永远不要认为自己能彻底清除攻击源,因为没有人能比黑客更了解攻击程序,在服务器遭到攻击后,最安全也最简单的方法就是重新安装系统,因为大部分攻击程序都会依附在系统文件或者内核中,所以重新安装系统才能彻底清除攻击源。
(6)、修复程序或系统漏洞
在发现系统漏洞或者应用程序漏洞后,首先要做的就是修复系统漏洞或者更改程序bug,因为只有将程序的漏洞修复完毕才能正式在服务器上运行。
(7)、恢复数据和连接网络
将备份的数据重新复制到新安装的服务器上,然后开启服务,最后将服务器开启网络连接,对外提供服务。

云服务器

第1步:止损(不中断服务)

  • ✅ 开启云盾/DDoS高防 —— 攻击流量从入口被清洗
  • ✅ 安全组临时收紧 —— 只允许必要端口,拦截海外/异常地区
  • ✅ 如果被入侵(getshell) —— 立即镜像实例,保留内存和磁盘,然后热迁移或重建

绝对不要做的事: ❌ ifdown eth0 ❌ systemctl stop network ❌ 直接关机


第2步:取证(查找攻击源)

  • ✅ 查看云平台的安全日志(云防火墙、WAF、DDoS防护)
  • ✅ netstat/ss —— 异常连接IP、大量SYN_RECV/TIME_WAIT
  • ✅ top/htop —— CPU异常高的进程
  • ✅ last/lastb —— 可疑登录IP
  • ✅ history —— 黑客执行过的命令
  • ✅ cat /var/log/secure —— SSH爆破记录

重点: 不要只盯着80/443,22端口和数据库端口(3306/6379)是重灾区。


第3步:分析入侵途径

  • 弱口令? —— Redis未授权、MySQL空密码、SSH弱口令
  • 系统漏洞? —— Log4j、ThinkPHP、WebLogic
  • 应用漏洞? —— SQL注入、文件上传、反序列化
  • 供应链攻击? —— 第三方SDK、开源组件漏洞

✅ 云上最快捷的方法:
直接提交给云安全中心/主机安全做自动分析,比人肉翻日志快10倍。


第4步:备份与恢复

  • ✅ 备份在断网前做(如果判断是DDoS)
  • ✅ 备份在快照/镜像层面做(如果判断是被入侵)
    不要直接打包网站目录——可能连打包文件都被注入了木马

检查日志信息追踪攻击来源
内核及系统日志
这种日志数据由系统服务syslog统一管理,根据其主配置文件”/etc/syslog.conf”中的设置决定将内核消息及各种系统程序消息记录到什么位置。
用户日志
这种日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
程序日志
有些应用程序运会选择自己来独立管理一份日志文件(而不是交给syslog服务管理),用于记录本程序运行过程中的各种事件信息。

需要在服务器重点检查的日志有如下几个:
/var/log/messages:公共日志文件,记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该文件获得相关的事件记录信息。
/var/log/cron:记录crond计划任务产生的事件消息。
/var/log/dmesg: 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。此文件记录的信息时系统上次启动时的信息。而用dmesg命令可查看本次系统启动时与硬件有关的信息,以及内核缓冲信息。
/var/log/secure:记录用户远程登录、认证过程中的事件信息
还可以查看每个用户目录下的.bash_history文件,特别是/root目录下的.bash_history文件,这个文件中记录着用户执行的所有历史命令。

检查并关闭系统可疑进程
有时候只知道进程的名称无法得知路径,此时可以通过如下方法和流程处理。
首先通过pidof命令可以查找正在运行的进程PID,例如要查找sshd进程的PID,执行如下命令:
[root@server ~]# pidof sshd


然后进入内存目录,查看对应PID目录下exe文件的信息:

[root@VM-0-9-opencloudos ~]# ls -al /proc/1530/exe
lrwxrwxrwx 1 root root 0 Feb 10 11:58 /proc/1530/exe -> /usr/sbin/sshd
[root@VM-0-9-opencloudos ~]# ls -al /proc/820/exe
lrwxrwxrwx 1 www www 0 Feb 10 11:59 /proc/820/exe -> /www/server/nginx/sbin/nginx


这样就找到了进程对应的完整执行路径。


如guo仅知道开放的端口,可通过端口查找进程pid,例如:
[root@server ~]# lsof -i :80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注