Linux 应急响应

 

Linux 应急响应

0x00. 前言

当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。

针对常见的攻击事件,结合工作中应急响应事件分析和解决的方法,总结了一些Linux服务器入侵排查的思路。

攻击者通常从三个方向入手:系统漏洞、Web程序漏洞(最多的)、第三方应用程序漏洞, 被钓鱼

0x01 入侵排查思路

基于 CentOS 7 演示

1.1 账号安全

一般攻击者拿下主机后,想要留个后门,通常会新建一个管理员账号。

1.1.1 用户信息文件

 cat /etc/passwd    # 查看所有用户信息,排查可疑账号

/etc/passwd 文件格式说明:

 root:x:0:0:root:/root:/bin/bash
 用户名:密码占位符:UID:GID:用户描述:用户家目录:分配的shell终端

UID 含义:

  • uid=0:超级管理员(root)

  • uid=1-499:系统用户

  • uid=500-999:服务用户

  • uid=1000+:普通用户

排查命令:

 
 # 查看UID为0的账号(特权用户)
 awk '/\$1|\$6/{print $1}' /etc/shadow    # 查看有密码哈希的账号(可远程登录)
 more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"    # 查看拥有sudo权限的账号

1.1.2 影子文件

 cat /etc/shadow    # 查看用户密码信息,排查异常

/etc/shadow 文件格式说明:

 root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
 用户名:加密密码:密码最后一次修改日期:两次密码修改时间间隔:密码有效期:密码到期警告天数:密码过期宽限天数:账号失效时间:保留

1.1.3 查看当前登录用户

 who      # 查看当前登录用户(tty本地登录,pts远程登录)
 图形界面(seat0)
 虚拟控制台(tty2)
 终端模拟器(pts/1)
 w        # 查看当前在线用户及正在执行的操作
 uptime   # 查看系统运行时间、登录用户数、系统负载
 last     # 查看最近登录记录
 lastb    # 查看错误登录记录(暴力破解痕迹)

1.1.4 后门用户添加示例(攻击者视角)

useradd -p `openssl passwd -1 -salt 'salt' 123admiN` yuechu -o -u 0 -g root -G root -s /bin/bash -d /home/Tomcat
# 创建一个UID为0的隐藏后门账号(-o -u 0 表示复用root的UID)

1.1.5 账号处置方法

usermod -L user    # 禁用账号,账号无法登录(/etc/shadow第二栏变为!开头)
userdel user # 删除用户
userdel -r user # 删除用户并删除其/home目录

1.2 历史命令

通过 .bash_history 查看账号执行过的系统命令,还原攻击者操作轨迹。

1.2.1 查看历史命令

cat /root/.bash_history    # 查看root用户的历史命令
cat /home/*/.bash_history    # 查看所有普通用户的历史命令

重点关注:

  • bash反弹shell命令

  • SSH连接记录

  • apt/yum安装记录

  • vim编辑文件记录

  • crontab定时任务设置

  • 网站敏感文件操作

1.2.2 增强历史命令记录(记录IP和时间)

1)修改历史命令保存条数为10000(默认1000条)

sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

2)在 /etc/profile 文件尾部添加以下配置:

vim /etc/profile

添加内容:

######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########

3)使配置生效

source /etc/profile    # 重新加载profile文件使历史命令增强配置生效

效果示例:

1  2018-07-10 19:45:39 192.168.204.1 root source /etc/profile

1.2.3 导出历史命令分析

cat .bash_history >> history.txt    # 将历史命令导出到txt文件便于分析

1.2.4 清除历史命令痕迹

history -c    # 清除当前会话的历史命令(仅清除内存中的记录)
> ~/.bash_history    # 清空历史命令文件(清除磁盘中的记录)

1.3 查看网络连接

使用 netstatss 命令分析可疑端口、IP和PID。

netstat -antlp | more    # 查看所有网络连接(-a所有 -n数字显示 -t TCP -l监听 -p显示进程)
ss -antlp | more    # 更高效的网络连接查看工具,用法同netstat
lsof -i -P -n | grep LISTEN    # 查看所有监听端口及对应进程
ls -l /proc/$PID/exe    # 查看进程对应的可执行文件路径($PID替换为实际进程号)
file /proc/$PID/exe    # 查看进程可执行文件类型信息

1.4 查看进程

使用 pstop 命令分析异常进程。

ps aux | more    # 查看所有进程详细信息
ps -ef | more    # 查看所有进程(标准格式)
top    # 动态查看进程资源占用(重点关注CPU和内存占用高的进程)
ps aux --sort=-%cpu | head -20    # 按CPU使用率排序查看前20个进程
ps aux --sort=-%mem | head -20    # 按内存使用率排序查看前20个进程
kill -9 $PID    # 强制终止可疑进程($PID替换为实际进程号)
pkill -f process_name    # 按进程名终止所有匹配进程

重点关注:

  • 名称奇怪的进程(随机字母数字组合)

  • CPU使用率过高的进程

  • 与默认系统进程混淆的进程(如 tomcat 伪装)

  • 路径异常的进程

1.5 开机启动项

1.5.1 系统运行级别

运行级别含义
0 关机
1 单用户模式(类似Windows安全模式,主要用于系统修复)
2 不完全命令行模式(不含NFS服务)
3 完全命令行模式(标准字符界面,常用)
4 系统保留
5 图形模式(常用)
6 重启

1.5.2 查看和切换运行级别

runlevel    # 查看当前和上一次运行级别
init 5    # 切换到图形模式(切换运行级别)

1.5.3 查看开机启动项

ls -l /etc/rc.d/rc3.d/    # 查看运行级别3的开机启动项
ls -l /etc/rc.d/rc5.d/    # 查看运行级别5的开机启动项(图形模式)
systemctl list-unit-files | grep enabled    # 查看所有启用(enabled)的系统服务
chkconfig --list    # 查看所有运行级别的服务状态(CentOS 6及以下)

说明: S 开头的脚本代表自启动,K 开头的脚本代表不启动。

1.5.4 排查可疑开机脚本

find /etc/rc.d/ -name "S*" -exec ls -l {} \;    # 列出所有自启动脚本
cat /etc/rc.local    # 查看rc.local中的自定义启动命令

1.6 定时任务

攻击者常通过 crontab 创建计划任务实现持久化。

1.6.1 查看定时任务

crontab -l    # 查看当前用户的计划任务
crontab -u root -l    # 查看指定用户的计划任务
cat /etc/crontab    # 查看系统级计划任务
ls -la /var/spool/cron/    # 查看所有用户的cron文件存放目录

1.6.2 定时任务相关目录

ls -la /etc/cron.d/        # 查看系统cron任务目录
ls -la /etc/cron.daily/ # 查看每日执行的cron任务
ls -la /etc/cron.hourly/ # 查看每小时执行的cron任务
ls -la /etc/cron.monthly/ # 查看每月执行的cron任务
ls -la /etc/cron.weekly/ # 查看每周执行的cron任务
ls -la /var/spool/anacron/ # 查看anacron任务(非持续运行系统的定时任务)

1.6.3 编辑和删除定时任务

crontab -e    # 编辑当前用户的计划任务
crontab -r    # 删除当前用户的所有计划任务(谨慎操作!)

1.6.4 可疑定时任务示例

# 可疑的反弹shell任务示例(每天运行backup.sh脚本)
0 0 * * * /bin/bash /home/backup.sh
grep -r "bash -i" /var/spool/cron/ 2>/dev/null    # 搜索所有包含反弹shell的cron任务

1.7 系统日志

日志默认存放位置:/var/log/

1.7.1 查看日志配置

more /etc/rsyslog.conf    # 查看系统日志配置文件

1.7.2 重要日志文件

日志文件说明
/var/log/cron 系统定时任务相关日志
/var/log/cups 打印信息日志
/var/log/dmesg 系统开机内核自检信息(可用 dmesg 命令查看)
/var/log/mailog 邮件信息日志
/var/log/messages 系统重要信息日志(系统出问题首先检查此文件)
/var/log/btmp 错误登录日志(二进制文件,用 lastb 查看)
/var/log/lastlog 所有用户最后登录时间(二进制文件,用 lastlog 查看)
/var/log/wtmp 所有用户登录/注销记录(二进制文件,用 last 查看)
/var/log/utmp 当前登录用户信息(二进制文件,用 wwhousers 查看)
/var/log/secure 认证授权日志(SSH登录、su切换、sudo授权等)

1.7.3 SSH暴力破解分析

grep -o "Failed password" /var/log/secure | uniq -c    # 统计登录失败次数
grep "Failed" /var/log/secure | head -1    # 查看第一条爆破记录(确认爆破开始时间)
grep "Failed" /var/log/secure | tail -1    # 查看最后一条爆破记录(确认爆破结束时间)
grep "Failed password for root" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c
# 提取所有爆破IP并统计次数
grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -nr
# 查看爆破使用的用户名字典及频率

1.7.4 登录成功分析

grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
# 查看登录成功的IP及次数
grep "Accepted" /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
# 查看登录成功的日期、用户名、IP

1.7.5 用户管理日志

grep "useradd" /var/log/secure    # 查看添加用户日志
grep "userdel" /var/log/secure    # 查看删除用户日志
grep "password changed" /var/log/secure    # 查看密码修改日志

1.7.6 SSH暴力破解处置建议

  1. 禁止向公网开放管理端口,若必须开放应限定管理IP地址并加强口令安全审计(口令长度不低于8位,由数字、大小写字母、特殊字符等至少两种以上组合构成)

  2. 更改服务器SSH默认端口

  3. 部署入侵检测设备,增强安全防护

  4. 修改ssh登录方式 只允许公钥登录

1.8 Web日志

1.8.1 常见Web日志路径

# Apache日志
/var/log/apache2/access.log # Ubuntu/Debian Apache访问日志
/var/log/apache2/error.log # Ubuntu/Debian Apache错误日志
/var/log/httpd/access_log # CentOS/RHEL Apache访问日志
/var/log/httpd/error_log # CentOS/RHEL Apache错误日志

# Nginx日志
/var/log/nginx/access.log # Nginx访问日志
/var/log/nginx/error.log # Nginx错误日志

# 宝塔面板
/var/wwwlogs/ # 宝塔面板默认日志目录

1.8.2 Web日志分析命令

cut -d- -f 1 log_file | uniq -c | sort -rn | head -20
# 列出当天访问次数最多的前20个IP
awk '{print $1}' log_file | sort | uniq | wc -l
# 查看当天有多少个独立IP访问
grep "/index.php" log_file | wc -l
# 查看某个页面被访问的次数
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
# 查看每一个IP访问了多少个页面
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
# 将每个IP访问的页面数进行从小到大排序
grep ^111.111.111.111 log_file | awk '{print $1,$7}'
# 查看某个特定IP访问了哪些页面(替换IP地址)
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}' | sort | uniq | wc -l
# 查看指定时间段的IP访问数
grep -E "(SELECT|UNION|DROP|INSERT|'|--)" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 查找SQL注入攻击痕迹
grep -E "(<|>|%3C|%3E|javascript|onerror|onload)" access.log | awk '{print $1}' | sort | uniq -c | sort -nr
# 查找XSS攻击痕迹

0x02 工具篇

2.1 Rootkit查杀

Rootkit是一种特殊的恶意软件,功能是在目标系统上隐藏自身及指定的文件、进程和网络链接等信息,通常配合木马、后门等其他恶意程序结合使用。

2.1.1 chkrootkit

安装方法一:编译安装

yum install gcc gcc-c++ make glibc-static -y    # 安装编译工具包
wget http://www.chkrootkit.org/download/chkrootkit.tar.gz    # 下载chkrootkit
tar zxvf chkrootkit.tar.gz    # 解压
cd chkrootkit-0.55 # 进入目录
make sense # 编译
./chkrootkit # 运行检测

安装方法二:yum安装

yum install chkrootkit -y    # 直接yum安装
chkrootkit # 运行检测

说明: 带有 INFECTED(感染)标记的是被病毒感染的文件,需要进行系统排查。假如 ps 被感染,修复方法是重新下载一个 ps 文件替换到受害主机中。

2.1.2 rkhunter

wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz --no-check-certificate
# 下载rkhunter(若wget无法下载可去官网下载后上传)
tar -zxvf rkhunter-1.4.4.tar.gz    # 解压
cd rkhunter-1.4.4 # 进入目录
./installer.sh --install # 安装
rkhunter -c # 运行检测

2.2 Webshell查杀

2.2.1 河马webshell查杀

安装与使用:

wget -O /opt/hm-linux.tgz http://dl.shellpub.com/hm/latest/hm-linux-amd64.tgz?version=1.8.2
# 下载河马webshell查杀工具(64位版本)
cd /opt/                        # 进入/opt目录
tar xvf hm-linux.tgz # 解压
chmod +x hm # 赋予执行权限

注意事项:

  • 不要将本软件放置到Web目录下

  • 不要在Web目录下运行软件

使用方法:

./hm -h                         # 查看帮助信息
./hm version # 查看版本
./hm scan /var/www/html/ # 扫描Web目录后门

0x03 综合应急响应工具

GScan

GScan是一款Linux应急响应自动化检查工具。

yum install git -y    # 安装git
git clone https://github.com/grayddq/GScan.git    # 克隆GScan仓库
cd GScan    # 进入目录
python GScan.py    # 默认模式运行

参考链接:

0x04 补充内容

4.1 排查隐藏进程与文件

unhide    # 使用unhide工具检测隐藏进程(需安装)
find / -type f -name ".*" -mtime -7    # 查找最近7天内创建的隐藏文件
lsattr /etc/passwd /etc/shadow    # 查看关键文件是否被设置不可变属性
chattr -i /etc/passwd    # 去除文件的不可变属性(若被锁定)

4.2 排查SSH后门

cat ~/.ssh/authorized_keys    # 查看是否有异常的SSH公钥
cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"    # 查看SSH配置是否被篡改
grep "sshd" /var/log/secure | grep "Accepted"    # 查看SSH登录成功日志

4.3 常用文件排查

stat /etc/passwd    # 查看passwd文件修改时间
stat /etc/shadow # 查看shadow文件修改时间
md5sum /bin/ls /bin/ps /usr/bin/top    # 校验关键命令的MD5值,判断是否被替换
rpm -Va    # 校验所有已安装的RPM包的完整性(CentOS/RHEL)

4.4 常见挖矿病毒特征

  • CPU使用率异常飙升(接近100%)

  • 存在随机字母数字组合的进程名

  • 存在可疑的外联IP(矿池地址)

  • /tmp 目录存在可疑脚本文件

  • crontab 中存在可疑定时任务

find /tmp -name "*.sh" -mtime -3 -exec ls -l {} \;    # 查找/tmp目录下最近3天创建的shell脚本
netstat -antlp | grep -E "443|4444|5555|8080|1337|1444"    # 常见挖矿木马端口排查

总结

Linux应急响应核心流程

步骤排查要点关键命令
1. 账号安全 排查特权账号(UID=0)、可疑后门用户、sudo权限异常 awk -F: '$3==0{print $1}' /etc/passwd
2. 历史命令 查看攻击者操作痕迹、是否反弹shell cat ~/.bash_history
3. 网络连接 排查可疑外连、异常监听端口、C2通信 netstat -antlp
4. 进程排查 查找高CPU/内存异常进程、随机名称进程 top, ps aux
5. 开机自启 检查异常服务、S*脚本 systemctl list-unit-files
6. 定时任务 排查cron后门、持久化机制 crontab -l, ls -la /etc/cron*
7. 系统日志 分析SSH登录日志、暴力破解痕迹 grep "Failed" /var/log/secure
8. Web日志 分析Web攻击痕迹、SQL注入、文件上传 awk '{print $1}' access.log
9. 工具辅助 使用Rootkit查杀、Webshell查杀工具 chkrootkit, rkhunter, hm
10. 文件完整性 校验关键命令是否被替换、关键文件是否被篡改 rpm -Va, md5sum

常用处置措施

  1. 断网隔离:首先断开受感染主机的网络连接,防止进一步扩散和数据泄露

  2. 备份证据:保留关键日志和可疑文件样本,便于后续溯源分析

  3. 清除后门

    • 删除可疑账号:userdel -r 恶意用户

    • 清除定时任务:crontab -r 或编辑删除

    • 结束可疑进程:kill -9 可疑PID

    • 删除恶意文件:rm -rf 恶意文件路径

    • 禁用开机自启:systemctl disable 恶意服务

  4. 修复漏洞:找到入侵源头(如Web漏洞、弱口令等)并修复

  5. 系统加固

    • 修改所有密码

    • 更新系统补丁

    • 配置防火墙限制访问

    • 更改SSH默认端口

    • 部署HIDS/EDR等安全监控工具

参考资源

 

 

处理被感染的文件的时候思路

 
posted @ 2026-07-11 14:35  月初吖  阅读(11)  评论(0)    收藏  举报