Linux 应急响应
Linux 应急响应
0x00. 前言
当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
攻击者通常从三个方向入手:系统漏洞、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 查看网络连接
使用 netstat 或 ss 命令分析可疑端口、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 查看进程
使用 ps 和 top 命令分析异常进程。
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 |
当前登录用户信息(二进制文件,用 w、who、users 查看) |
/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暴力破解处置建议
-
禁止向公网开放管理端口,若必须开放应限定管理IP地址并加强口令安全审计(口令长度不低于8位,由数字、大小写字母、特殊字符等至少两种以上组合构成)
-
更改服务器SSH默认端口
-
部署入侵检测设备,增强安全防护
-
修改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查杀
-
深信服Webshell网站后门检测工具:http://edr.sangfor.com.cn/backdoor_detection.html
安装与使用:
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 |
常用处置措施
-
断网隔离:首先断开受感染主机的网络连接,防止进一步扩散和数据泄露
-
备份证据:保留关键日志和可疑文件样本,便于后续溯源分析
-
清除后门:
-
删除可疑账号:
userdel -r 恶意用户 -
清除定时任务:
crontab -r或编辑删除 -
结束可疑进程:
kill -9 可疑PID -
删除恶意文件:
rm -rf 恶意文件路径 -
禁用开机自启:
systemctl disable 恶意服务
-
-
修复漏洞:找到入侵源头(如Web漏洞、弱口令等)并修复
-
系统加固:
-
修改所有密码
-
更新系统补丁
-
配置防火墙限制访问
-
更改SSH默认端口
-
部署HIDS/EDR等安全监控工具
-
参考资源
-
Linux挖矿病毒案例:https://forum.butian.net/index.php/share/2225
-
Linux应急响应案例:https://wxiaoge.blog.csdn.net/article/details/114282426

浙公网安备 33010602011771号