Linux 安全——被入侵后的排查

Table of Contents

最后更新: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 检查:

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。