Linux应急响应实战:异常检测、进程分析与安全加固

前言

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: 进程ID
  • ppid: 父进程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提交到:


三、安全事件处置

3.1 WebShell查杀

什么是WebShell?

WebShell是攻击者通过Web漏洞上传到服务器的恶意脚本,可以执行系统命令、上传下载文件、操作数据库等。

常见WebShell类型:

  • PHP: c99.phpr57.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: 国产安全检测工具

安装使用:

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)
  • 进程名伪装(如kdevtmpfsikthrotlds)
  • 文件位于/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后门类型:

  1. 替换sshd程序为后门版本
  2. 修改PAM认证模块窃取密码
  3. 添加公钥认证后门

检测方法:

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检测,每个环节都需要细致和专业。

核心要点回顾:

  1. 异常识别要快 - ifconfig、top、ps是第一时间使用的命令
  2. 进程分析要全 - PID、PPID、网络连接、打开文件都要检查
  3. 文件校验要准 - MD5对比和威胁情报查询必不可少
  4. 工具使用要熟 - chkrootkit、rkhunter、河马等工具要提前准备
  5. 清除要彻底 - 进程、文件、持久化机制一个都不能漏
  6. 加固要及时 - 修改密码、打补丁、配置防火墙同步进行
  7. 日志要保留 - 证据链完整才能有效溯源

能力提升建议:

  • 搭建Linux实验环境练习命令
  • 分析真实恶意软件样本
  • 参与CTF取证类题目
  • 阅读安全公告和漏洞分析报告
  • 定期演练应急响应流程

记住:快速响应、准确判断、彻底清除是Linux应急响应的三大原则。


免责声明: 本文内容仅供安全从业人员学习和研究使用。所有命令和工具应当在合法授权的环境中使用。未经授权对他人系统进行分析和操作属于违法行为。

相关推荐
better_liang3 天前
每日Java面试场景题知识点之-ELK日志分析
java·elk·微服务·面试题·日志分析·企业级开发
better_liang3 天前
每日Java面试场景题知识点之-ELK技术栈实战应用
java·elk·elasticsearch·kibana·logstash·日志分析·企业级应用
mooyuan天天4 天前
CTF-PTE 日志分析3
cisp-pte·日志分析
mooyuan天天5 天前
CISP-PTE 日志分析2
网络安全·cisp-pte·日志分析
mooyuan天天7 天前
CISP-PTE 日志分析1
cisp-pte·日志分析·暴力破解
ManageEngine卓豪1 个月前
SQL Server 审计指南:配置、使用与最佳实践
sql server·日志分析·数据库安全·sql server审计
xing.yu.CTF1 个月前
ATT&CK实战系列——红队实战(十二)
渗透测试·权限提升·入侵检测·内网对抗·安全评估·代理隧道
观测云1 个月前
Kubernetes CRD 方式配置容器日志采集最佳实践
容器·kubernetes·日志分析
IT小哥哥呀2 个月前
Nginx高可用配置实战:负载均衡 + 健康检查 + 动态扩展
运维·nginx·负载均衡·devops·日志分析·openresty·动态扩展