当Linux主机发生安全事件,怀疑被入侵时,除了依赖自动化工具,掌握一套手工排查的思路与方法至关重要。通过分析系统账号、进程端口、启动项、可疑文件及日志等关键信息,我们可以逐步确认入侵事实并定位攻击痕迹。下面,我将结合安全/渗透/逆向工作中的常见分析方法,为你梳理一份清晰的Linux手工入侵排查实战指南。
01、检查系统账号
攻击者在入侵成功后,常会创建隐藏账号或提升普通账号权限作为后门,以便长期控制。因此,用户配置文件 /etc/passwd 和密码配置文件 /etc/shadow 是首要检查点。
-
查询特权用户(uid为0):除了root,任何UID为0的账号都拥有最高权限。
awk -F: '$3==0{print $1}' /etc/passwd
-
查询可远程登录的账号:检查密码哈希为 $1$ (MD5) 或 $6$ (SHA-512) 的账号,这些账号通常可以远程登录(如SSH)。
awk '/\$1|\$6/{print $1}' /etc/shadow
-
检查非root账号的sudo权限:不必要的sudo权限可能被滥用。
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
-
禁用或删除可疑账号:
usermod -L user # 禁用账号,使其无法登录(/etc/shadow密码栏前加!)
userdel user # 删除user用户
userdel -r user # 删除user用户及其/home下的主目录
-
查看当前登录用户:
who # 查看当前登录用户(tty为本地登录,pts为远程登录)
w # 查看当前用户及其运行的进程
uptime # 查看系统运行时间、用户数和负载
02、检查异常端口
入侵者通常会开放端口进行监听或对外发起连接。通过分析网络连接状态,可以发现可疑行为。
-
使用netstat查看所有网络连接:重点关注不常见的端口、外连IP和对应的PID。
netstat -antlp|more
-
对可疑连接进行抓包分析:若发现持续的可疑连接,可进一步抓包。
tcpdump -c 10 -q # 以精简模式捕获10个数据包
03、检查可疑进程
恶意软件会以进程形式在系统中运行,消耗资源或执行恶意操作。
-
列出所有进程:使用ps命令,注意异常的进程名、PID或命令行参数。
ps aux
或
ps -ef
-
实时查看进程资源占用:top命令可以快速发现CPU或内存占用异常的进程。
top
-
深入分析可疑进程(假设PID为$PID):
# 查看进程的完整命令行
ps eho command -p $PID
# 查看进程启动时所在的工作目录
readlink /proc/$PID/cwd
# 查看进程对应的可执行文件路径
ls -l /proc/$PID/exe
# 查看进程启动时的环境变量
strings -f /proc/$PID/environ | cut -f2 -d ''
# 列出该进程打开的所有文件
lsof -p $PID
04、检查系统服务
攻击者可能会添加或修改系统服务以实现持久化。不同Linux发行版的服务管理方式不同。
-
Systemd系统(如CentOS 7+/Ubuntu 16.04+):查看开机自启的服务。
systemctl list-unit-files --type=service | grep "enabled"
-
SysV init系统(如CentOS 6):使用chkconfig查看服务状态。
chkconfig --list
chkconfig --list | grep "3:on\|5:on" # 查看在运行级别3和5下开启的服务
05、检查开机启动项
除了系统服务,启动项脚本也是攻击者藏身的常见位置。
-
检查启动脚本目录:
more /etc/rc.local /etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/
-
示例原理:启动项通常是在 /etc/rc.d/rc*.d/ 目录下创建指向 /etc/init.d/ 中脚本的软链接。S开头表示启动,K开头表示关闭。
ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
06、检查计划任务
利用cron或anacron设置计划任务是攻击者常用的持久化手段。
检查以下关键目录中是否存在恶意脚本:
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
07、检查异常文件
查找攻击者留下的Webshell、木马或临时工具。
- 检查敏感目录:如
/tmp、 /dev/shm,注意以 . 开头的隐藏文件和目录。
- 按时间查找文件:如果知道恶意文件的创建时间,可以查找同一时间点附近创建的文件。
find /opt -iname "*" -atime 1 -type f # 查找/opt目录下一天前被访问过的文件
- 查看文件详细时间属性:使用
stat命令查看文件的访问、修改、状态变更时间。
stat suspicious_file
08、检查历史命令
攻击者在获得Shell后执行的操作会记录在命令历史中,这是重要的线索。
-
检查用户命令历史:
# 以root身份查看指定用户的历史记录
cat /home/username/.bash_history
-
加固历史命令记录(可选):默认配置可能不足以支持日志分析与溯源,可按需加固。
# a) 将历史命令记录条数改为10000
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
# b) 在/etc/profile文件尾部添加,使历史命令记录执行时间、来源IP和用户
######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 ##########
# c) 使配置生效
source /etc/profile
09、检查系统日志
日志是追溯攻击行为的最重要依据。Linux系统日志默认存放在 /var/log/ 目录下。
关键日志文件:
/var/log/btmp:记录失败登录尝试,使用 lastb 命令查看。
/var/log/lastlog:记录所有用户最近一次登录时间,使用 lastlog 命令查看。
/var/log/wtmp:记录所有登录、注销及系统启停事件,使用 last 命令查看。
/var/log/utmp:记录当前登录用户信息,使用 w、who、users 命令查看。
/var/log/secure(RedHat/CentOS)或 /var/log/auth.log(Debian/Ubuntu):记录认证授权日志,如SSH登录、sudo使用等,是排查的重点。
针对 /var/log/secure 日志的分析示例:
-
统计爆破root密码的IP及次数:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
-
提取所有失败登录的IP地址:
grep "Failed password" /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
-
查看被爆破的用户名有哪些:
grep "Failed password" /var/log/secure|perl -e 'while($_<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
-
查看成功登录的IP及次数:
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}'
遵循以上九个步骤进行系统性地排查,能够帮助你高效地应对Linux主机安全事件,识别入侵痕迹并采取相应的处置措施。安全运维是一个持续对抗的过程,保持警惕并建立完善的监控体系是关键。更多关于系统安全与运维的深度讨论,欢迎在云栈社区交流。
|