前言
Linux服务器作为企业基础设施的核心,一旦被入侵,后果可能是灾难性的。从挖矿程序消耗资源,到服务器变成僵尸网络的一员发起DDoS攻击,从WebShell后门到Rootkit隐藏,Linux系统面临的威胁多种多样。本文将系统讲解Linux应急响应的完整流程,从异常现象识别到威胁定位清除,帮助运维和安全人员快速处置入侵事件。
文章目录
- 前言
- 一、Linux服务器异常现象识别
-
- [1.1 常见入侵症状](#1.1 常见入侵症状)
- [1.2 初步快速判断](#1.2 初步快速判断)
- 二、系统资源与进程分析
-
- [2.1 动态进程监控](#2.1 动态进程监控)
- [2.2 进程详细信息查询](#2.2 进程详细信息查询)
- [2.3 网络连接分析](#2.3 网络连接分析)
- [2.4 进程溯源分析](#2.4 进程溯源分析)
- [2.5 文件完整性校验](#2.5 文件完整性校验)
- 三、安全事件处置
-
- [3.1 WebShell查杀](#3.1 WebShell查杀)
- [3.2 病毒与Rootkit查杀](#3.2 病毒与Rootkit查杀)
- [3.3 综合查杀工具](#3.3 综合查杀工具)
- 四、常见入侵场景应急响应
-
- [4.1 挖矿程序处置](#4.1 挖矿程序处置)
- [4.2 DDoS僵尸主机处置](#4.2 DDoS僵尸主机处置)
- [4.3 SSH后门清除](#4.3 SSH后门清除)
- 五、日志分析与溯源
-
- [5.1 关键日志位置](#5.1 关键日志位置)
- [5.2 日志分析技巧](#5.2 日志分析技巧)
- 六、系统加固建议
-
- [6.1 SSH安全加固](#6.1 SSH安全加固)
- [6.2 防火墙配置](#6.2 防火墙配置)
- [6.3 安全监控部署](#6.3 安全监控部署)
- 总结
一、Linux服务器异常现象识别
1.1 常见入侵症状
当Linux服务器出现以下现象时,应立即启动应急响应流程:
性能异常:
- 内存占用率突然飙升(>80%)
- CPU持续100%负载
- 系统响应缓慢,命令执行卡顿
- 磁盘I/O异常升高
网络异常:
- 异常的出站流量激增
- 连接到未知的IP地址或域名
- 大量对外发起的连接(可能是DDoS肉鸡)
- DNS查询频繁(可能是DNS隧道或C2通信)
访问异常:
- SSH无法正常登录
- 合法用户被踢出
- 出现未知的登录会话
- 系统命令执行结果异常
业务异常:
- Web服务响应缓慢或拒绝服务
- 数据库查询超时
- 应用程序崩溃频繁
- 日志文件异常增长或被清空
1.2 初步快速判断
检查网络流量:
bash
ifconfig
关键观察指标:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
RX packets 15820394 bytes 9482651234 (8.8 GiB)
TX packets 28492018 bytes 35829471562 (33.3 GiB)
↑ 异常大的流量数值需要警惕
正常vs异常对比:
| 场景 | RX packets | TX packets | 判断 |
|---|---|---|---|
| 正常Web服务器 | 1-10M | 5-50M | 合理 |
| 内网办公机 | 100K-1M | 100K-1M | 正常 |
| 异常流量 | 数百M+ | 数百M+ | 可疑! |
快速检查进程:
bash
# 查看CPU占用最高的进程
ps aux | sort -k3 -r | head -5
# 查看内存占用最高的进程
ps aux | sort -k4 -r | head -5
如果发现未知进程占用大量资源,立即进入详细分析流程。
二、系统资源与进程分析
2.1 动态进程监控
使用top命令实时监控:
bash
top -c -o %CPU
参数说明:
-c: 显示完整的命令行(包含参数)-o %CPU: 按CPU使用率排序-o %MEM: 按内存使用率排序
交互命令:
P: 按CPU使用率排序M: 按内存使用率排序c: 切换显示命令名称/完整命令行k: 杀死进程(输入PID)q: 退出
top输出解读:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2048 www 20 0 156m 98m 2380 R 99.9 12.3 125:43 /tmp/.x/kdevtmpfsi
1024 root 20 0 312m 45m 8920 S 2.3 5.6 12:34 /usr/sbin/sshd
可疑进程特征:
- 进程路径在
/tmp、/var/tmp、/dev/shm等临时目录 - 进程名随机字符串或伪装成系统进程(如
kdevtmpfsi) - CPU占用长期接近100%
- 进程以非预期用户运行(如www-data运行挖矿程序)
2.2 进程详细信息查询
使用ps命令全面分析:
bash
ps -eo pid,ppid,%mem,%cpu,cmd
参数说明:
-e: 显示所有进程-o: 自定义输出格式pid: 进程IDppid: 父进程ID%mem: 内存占用百分比%cpu: CPU占用百分比cmd: 完整命令
查看CPU占用TOP 5:
bash
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head -n 6
查看内存占用TOP 5:
bash
ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head -n 6
输出示例:
PID PPID %MEM %CPU CMD
2048 1 12.3 99.9 /tmp/.x/kdevtmpfsi -o stratum+tcp://pool.minexmr.com:4444
1024 1 5.6 2.3 /usr/sbin/sshd -D
913 1 3.2 1.5 /usr/sbin/apache2 -k start
分析要点:
- PPID为1表示由init/systemd直接启动(可能是持久化后门)
- 命令行包含矿池地址(如minexmr.com)
- 可执行文件路径异常
2.3 网络连接分析
查看所有网络连接:
bash
lsof -i -Pn
参数说明:
-i: 列出所有网络连接-P: 显示端口号而非服务名-n: 不解析主机名(加快执行速度)
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 913 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)
apache2 1024 www 4u IPv4 23456 0t0 TCP *:80 (LISTEN)
kdevtmpf 2048 www 5u IPv4 34567 0t0 TCP 192.168.1.10:45678->185.xxx.xxx.xxx:4444 (ESTABLISHED)
可疑连接特征:
- 连接到非标准端口(如4444、8888等)
- 外联到国外可疑IP
- 大量并发连接
- 连接到已知恶意域名(如矿池、C2服务器)
针对性查询:
bash
# 查看特定端口的连接
lsof -i :4444
# 查看特定进程的网络连接
lsof -i -a -p [PID]
# 统计连接数最多的IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
2.4 进程溯源分析
根据PID查找进程详情:
bash
ps aux | grep [PID]
示例:
bash
ps aux | grep 2048
输出:
www 2048 99.9 12.3 156m 98m /tmp/.x/kdevtmpfsi -o stratum+tcp://pool.minexmr.com:4444
查看进程打开的文件:
bash
lsof -p [PID]
示例:
bash
lsof -p 2048
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
kdevtmpf 2048 www cwd DIR 253,0 4096 1234567 /tmp/.x
kdevtmpf 2048 www txt REG 253,0 2456789 2345678 /tmp/.x/kdevtmpfsi
kdevtmpf 2048 www 0u CHR 136,0 0t0 3 /dev/pts/0
kdevtmpf 2048 www 1u CHR 136,0 0t0 3 /dev/pts/0
kdevtmpf 2048 www 2u CHR 136,0 0t0 3 /dev/pts/0
kdevtmpf 2048 www 3u IPv4 1234567 0t0 TCP 192.168.1.10:45678->185.xxx.xxx.xxx:4444
关键信息:
cwd: 当前工作目录txt: 可执行文件路径0u/1u/2u: 标准输入/输出/错误3u: 网络连接
查看进程命令行:
bash
cat /proc/[PID]/cmdline | tr '\0' ' '
查看进程环境变量:
bash
cat /proc/[PID]/environ | tr '\0' '\n'
2.5 文件完整性校验
计算文件MD5值:
bash
md5sum [文件路径]
示例:
bash
md5sum /usr/bin/ps
md5sum /bin/ls
与正常系统对比:
如果核心系统命令的MD5值与官方不一致,说明可能被替换为Rootkit版本。
批量校验系统命令:
bash
# 校验/bin目录下所有命令
md5sum /bin/* > /tmp/bin_md5.txt
# 与已知正常的MD5列表对比
diff /tmp/bin_md5.txt /root/baseline/bin_md5_baseline.txt
查询威胁情报:
将可疑文件的MD5提交到:
- VirusTotal: https://www.virustotal.com
- 微步在线: https://x.threatbook.com
- Hybrid Analysis: https://www.hybrid-analysis.com
三、安全事件处置
3.1 WebShell查杀
什么是WebShell?
WebShell是攻击者通过Web漏洞上传到服务器的恶意脚本,可以执行系统命令、上传下载文件、操作数据库等。
常见WebShell类型:
- PHP:
c99.php、r57.php、一句话木马 - JSP:
JspSpy、冰蝎 - ASP:
海阳顶端、小马
手工检测方法:
bash
# 查找最近修改的PHP文件
find /var/www/html -name "*.php" -type f -mtime -7
# 搜索常见WebShell特征
grep -r "eval(" /var/www/html
grep -r "base64_decode" /var/www/html
grep -r "system(" /var/www/html
grep -r "exec(" /var/www/html
grep -r "passthru(" /var/www/html
grep -r "shell_exec(" /var/www/html
推荐工具: 河马WebShell查杀
- 官网: https://www.shellpub.com
- 功能: 深度检测WebShell、后门、可疑文件
- 特点: 支持本地和在线扫描
使用方法:
bash
# 下载河马扫描器(Linux版)
wget https://www.shellpub.com/down/hm-linux.tgz
# 解压
tar -zxvf hm-linux.tgz
# 扫描指定目录
./hm scan /var/www/html
# 查看报告
cat scan_report.txt
清除WebShell:
bash
# 备份可疑文件(用于后续分析)
cp /var/www/html/shell.php /root/evidence/
# 删除WebShell
rm -f /var/www/html/shell.php
# 检查是否有定时任务重新下载
crontab -l
cat /etc/crontab
3.2 病毒与Rootkit查杀
Rootkit是什么?
Rootkit是一种隐藏恶意软件存在的工具,可以:
- 隐藏进程和文件
- 篡改系统命令(如ps、ls、netstat)
- 劫持系统调用
- 窃取敏感信息
检测工具1: chkrootkit
功能特点:
- 检测是否被植入后门、木马、Rootkit
- 检测系统命令是否被篡改
- 检测登录日志异常
- 轻量级,无需安装依赖
安装使用:
bash
# 下载
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
# 解压
tar -zxvf chkrootkit.tar.gz
cd chkrootkit-0.55
# 编译
make sense
# 执行检查
./chkrootkit
输出解读:
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `ps'... INFECTED ← 警告!
如果发现INFECTED:
bash
# 查看被感染命令的详情
./chkrootkit -x | grep INFECTED
# 从可信源恢复命令
# 方法1: 从安装包重新安装
rpm --force -ivh procps-ng-3.3.10-26.el7.x86_64.rpm
# 方法2: 从备份恢复
cp /backup/bin/ps /bin/ps
检测工具2: rkhunter
功能特点:
- 系统命令完整性检测(MD5校验)
- Rootkit特征检测
- 敏感目录和配置文件检测
- 服务和套接字异常检测
- 第三方应用版本漏洞检测
安装使用:
bash
# 下载
wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
# 解压
tar -zxvf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
# 安装
./installer.sh --install
# 更新病毒库
rkhunter --update
# 创建基线(在干净系统上执行)
rkhunter --propupd
# 执行全面检查
rkhunter -c --sk
参数说明:
-c: Check(检查模式)--sk: Skip键盘输入,自动运行--report-warnings-only: 仅显示警告
输出示例:
[00:15:23] Checking system commands...
Performing 'strings' command checks
Checking 'strings' command [ OK ]
Performing 'shared libraries' checks
Checking for preloading variables [ None found ]
Checking for preloaded libraries [ None found ]
Checking LD_LIBRARY_PATH variable [ Not found ]
Performing file properties checks
Checking for prerequisites [ OK ]
/usr/bin/awk [ OK ]
/usr/bin/basename [ OK ]
/usr/bin/ps [ Warning ] ← 警告!
处理警告:
bash
# 查看详细报告
cat /var/log/rkhunter.log
# 如果是误报,添加到白名单
rkhunter --propupd /usr/bin/ps
3.3 综合查杀工具
GScan: 国产安全检测工具
- 项目地址: https://github.com/grayddq/GScan
- 功能: WebShell检测、敏感信息扫描、基线检查
- 特点: 轻量级、易用、支持自定义规则
安装使用:
bash
# 克隆项目
git clone https://github.com/grayddq/GScan.git
cd GScan
# 扫描
python gscan.py -p /var/www/html
Linux Malware Detect (LMD)
bash
# 安装
cd /usr/local/src
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzf maldetect-current.tar.gz
cd maldetect-*
./install.sh
# 扫描
maldet -a /var/www/html
# 查看报告
maldet --report list
四、常见入侵场景应急响应
4.1 挖矿程序处置
典型特征:
- CPU占用99%+
- 连接到矿池地址(如
pool.minexmr.com:4444) - 进程名伪装(如
kdevtmpfsi、kthrotlds) - 文件位于
/tmp、/dev/shm等临时目录
完整处置流程:
bash
# 1. 查找高CPU进程
top -c -o %CPU
# 或
ps aux | sort -k3 -r | head -5
# 2. 记录进程信息
ps aux | grep [PID] > /tmp/evidence_process.txt
lsof -p [PID] > /tmp/evidence_lsof.txt
# 3. 查看网络连接
lsof -i -a -p [PID]
# 4. 杀死进程
kill -9 [PID]
# 5. 删除恶意文件
rm -f /tmp/.x/kdevtmpfsi
rm -rf /tmp/.x
# 6. 检查持久化机制
crontab -l # 检查定时任务
systemctl list-unit-files | grep enabled # 检查服务
cat /etc/rc.local # 检查开机启动
find /etc/init.d -type f -mtime -7 # 查找最近修改的启动脚本
# 7. 清除持久化
crontab -r # 删除当前用户的所有定时任务
# 或编辑删除特定任务
crontab -e
# 8. 查找入侵原因
grep "Accepted password" /var/log/auth.log # SSH暴力破解成功?
grep "Failed password" /var/log/auth.log | wc -l # 失败登录次数
# 9. 加固措施
passwd root # 修改root密码
passwd [username] # 修改其他账户密码
4.2 DDoS僵尸主机处置
识别特征:
- 大量向外发起的连接
- 网络流量异常(TX packets暴增)
- 连接到多个不同的目标IP
处置步骤:
bash
# 1. 查看网络连接
netstat -ntu | grep ESTABLISHED | wc -l # 统计连接数
# 2. 统计连接最多的进程
lsof -i -Pn | awk '{print $2}' | sort | uniq -c | sort -nr
# 3. 查看进程详情
ps aux | grep [PID]
# 4. 临时阻断网络
iptables -A OUTPUT -j DROP # 阻止所有出站流量(慎用!)
# 或
ifconfig eth0 down # 关闭网卡
# 5. 清除恶意程序
kill -9 [PID]
rm -f [恶意文件路径]
# 6. 恢复网络
iptables -D OUTPUT -j DROP
# 或
ifconfig eth0 up
# 7. 检查DNS配置
cat /etc/resolv.conf # 是否被篡改为恶意DNS
4.3 SSH后门清除
常见SSH后门类型:
- 替换sshd程序为后门版本
- 修改PAM认证模块窃取密码
- 添加公钥认证后门
检测方法:
bash
# 1. 检查sshd文件完整性
md5sum /usr/sbin/sshd
rpm -V openssh-server # CentOS/RHEL
# 2. 检查authorized_keys
find / -name "authorized_keys" 2>/dev/null
cat /root/.ssh/authorized_keys
cat /home/*/.ssh/authorized_keys
# 3. 检查PAM配置
ls -la /lib64/security/ | grep pam_unix
rpm -V pam # 验证PAM软件包
# 4. 检查sshd配置
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
清除方法:
bash
# 1. 删除未授权的公钥
vim /root/.ssh/authorized_keys
# 2. 重新安装sshd(如果被替换)
yum reinstall openssh-server # CentOS/RHEL
apt-get install --reinstall openssh-server # Ubuntu/Debian
# 3. 重启sshd服务
systemctl restart sshd
# 4. 修改所有账户密码
passwd root
passwd [username]
# 5. 禁用root直接登录
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd
五、日志分析与溯源
5.1 关键日志位置
认证日志:
bash
# Debian/Ubuntu
/var/log/auth.log
# CentOS/RHEL
/var/log/secure
系统日志:
bash
/var/log/messages # CentOS/RHEL
/var/log/syslog # Debian/Ubuntu
Web服务器日志:
bash
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/nginx/access.log
/var/log/nginx/error.log
5.2 日志分析技巧
查找SSH暴力破解:
bash
# 统计失败登录次数最多的IP
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10
# 查看成功登录记录
grep "Accepted password" /var/log/auth.log
查找提权操作:
bash
# 查看sudo使用记录
grep "sudo" /var/log/auth.log
# 查看su切换记录
grep "su:" /var/log/auth.log
查找异常命令执行:
bash
# 查看bash历史
cat ~/.bash_history
cat /root/.bash_history
# 查找最近执行的命令
history | tail -50
六、系统加固建议
6.1 SSH安全加固
bash
# 编辑SSH配置
vim /etc/ssh/sshd_config
# 推荐配置
Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁用密码认证(使用密钥)
MaxAuthTries 3 # 最大认证尝试次数
ClientAliveInterval 300 # 5分钟无操作断开
ClientAliveCountMax 0
# 重启生效
systemctl restart sshd
6.2 防火墙配置
bash
# 使用firewalld(CentOS 7+)
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 使用iptables
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP
6.3 安全监控部署
bash
# 安装fail2ban(防暴力破解)
yum install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
# 配置fail2ban
vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
总结
Linux应急响应是一个系统工程,需要快速定位威胁、及时清除恶意程序、溯源攻击路径并加固系统。从网络流量监控到进程分析,从WebShell查杀到Rootkit检测,每个环节都需要细致和专业。
核心要点回顾:
- 异常识别要快 - ifconfig、top、ps是第一时间使用的命令
- 进程分析要全 - PID、PPID、网络连接、打开文件都要检查
- 文件校验要准 - MD5对比和威胁情报查询必不可少
- 工具使用要熟 - chkrootkit、rkhunter、河马等工具要提前准备
- 清除要彻底 - 进程、文件、持久化机制一个都不能漏
- 加固要及时 - 修改密码、打补丁、配置防火墙同步进行
- 日志要保留 - 证据链完整才能有效溯源
能力提升建议:
- 搭建Linux实验环境练习命令
- 分析真实恶意软件样本
- 参与CTF取证类题目
- 阅读安全公告和漏洞分析报告
- 定期演练应急响应流程
记住:快速响应、准确判断、彻底清除是Linux应急响应的三大原则。
免责声明: 本文内容仅供安全从业人员学习和研究使用。所有命令和工具应当在合法授权的环境中使用。未经授权对他人系统进行分析和操作属于违法行为。