Linux 安全——被入侵后的排查
最后更新:2023-11-06
1. 系统审查
用户相关命令:
- 查看用户登录记录:last -xad
- 查看用户登录失败记录:lastb
- 查看用户上次登录情况:lastlog
- 查看当前登录的用户:who、w。w -f 可显示出登录来源(IP、终端等)
- cat /etc/passwd,以及 users 命令列出可登录的帐号
- stat /etc/passwd,查看系统里帐号最后修改密码时间
- awk -F: '$3=="0"' /etc/passwd,查找 root 组的帐号
- 检查 /etc/shadow 有密码的帐号
进程相关命令:
- 进程检查 ps -ef、ps -pantul
- 查看该进程启动的完整命令行: ps eho command -p $PID
- 显示所有进程:ps aux
- 显示所有进程,及进程的环境变量、父子关系:ps auxef
- 查看该进程启动时候所在的目录: readlink /proc/$PID/cwd
- 进程对应的二进制文件:/proc/[PID]/exe
- 查看该进程启动时的完整环境变量: strings -f /proc/$PID/environ | cut -f2 -d ' '
- 列出该进程所打开的所有文件: lsof -p $PID
- 列出该进程所打开的网络连接: netstat -pan(或ss -pan) | grep $PID
- top -H 查看当前活跃进程,如果有占用大量 CPU 资源的进程,可能是挖矿木马的
- 可以用 top -n 1 输出一份当前进程的“快照”
在实战中还发现有某些情况下,攻击者会将运行中的后门文件从磁盘中删除,可以检查哪些运行中的进程对应的文件已被删除:
ls -l /proc/*/exe 2>&1 | grep deleted
网络相关命令:
- 查看端口开放:netstat -tunlp、ss -lntp
- 检查ARP表:arp -a
- 查看 /etc/hosts 是否有可疑条目
系统服务相关命令:
- 检查系统服务:chkconfig –list或者systemctl list-unit-files
Rootkit 检查:
- chkrootkit:http://chkrootkit.org/
- Rootkit Hunter:http://rkhunter.sourceforge.net/
2. 文件审查
- 某次安全应急时,遇到客户服务器的 CentOS 中多个命令(如 sudo、ls)被替换成带有后门的命令,我们的方法是找同发行版、同版本的系统对比 /bin、/sbin、/lib/modules/内核版本 等地方的文件 MD5:
find /bin/ -type f | xargs md5sum
- 到网站目录找出最近更改的文件:
find -type f -mtime -30 # 列出 30 天内修改的文件
- 检查 crontab 任务:/etc/cron.d、/var/spool/cron/crontabs、/etc/cron.daily
- 检查 .bashrc、.bash_profile、.bash_login、~/.ssh/authorized_keys
- 检查 /root、/tmp、/var/tmp、/dev/shm 目录,如 ls -alt /tmp,检查是否有 exp、后门等,如果 /root 目录下存在恶意文件,表示服务器已经被提权
- 检查 /etc/init.d 里的脚本,排除随系统启动的恶意程序
- 用 lsmod 查看系统加载的驱动
- 对于可疑的文件,可以到 https://www.virustotal.com/ 检测是否是恶意软件
现今流行用 Go 开发恶意程序,并编译为静态二进制文件,这种文件体积往往都在 10M 以上,找出系统中大的二进制文件:
find / -size +10M -executable -type f
对于习惯用包管理来安装三方软件的系统,可以搜索可疑文件是出自哪个包,例如:
Debian 系:apt-file search <文件路径>
Fedora:dnf provides <文件路径>
尤其警惕 /usr/bin、/usr/local/bin 之类目录下不属于任何包的二进制文件
将代码仓库的代码和线上运行的目录用 diff 做差异对比,找出可能隐藏的后门:
diff -c -a -r -q <运行目录> <项目代码目录>
3. 日志审查
最好把系统日志(如 /var/log)单独拷贝出来分析。
- 查找哪些人通过 SSH 登录过服务器:
fgrep 'Accept' /var/log/secure* # 有些发行版是 /var/log/auth.log
用了 Systemd 的系统:journalctl –unit ssh
- 分析 shell 的 history 文件,如 ~/.bash_history。