Linux应急响应
字数 1269 2025-08-09 13:33:44

Linux应急响应指南

前言

网络安全是相对的,再安全的服务器也可能遭受攻击。除了定期备份数据外,还需要定期进行安全检查,做好充分准备才能在攻击发生时从容应对。

入侵排查流程

账号安全排查

基本命令

  • /etc/passwd:用户信息文件
    用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
    
  • /etc/shadow:影子文件
    用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
    
  • who:查看当前登录用户(tty本地登陆、pts远程登录)
  • w:查看系统信息
  • uptime:查看登陆多久、多少用户,负载

入侵排查步骤

  1. 查询特权用户(uid为0)

    awk -F: '$3==0{print $1}' /etc/passwd
    
  2. 查询可以远程登录的帐号信息

    awk '/\$1|\$6/{print $1}' /etc/shadow
    
  3. 检查其他帐号是否存在sudo权限

    more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
    
  4. 禁用或删除多余及可疑的帐号

    usermod -L user  # 禁用帐号
    userdel user     # 删除user用户
    userdel -r user  # 删除user用户及/home目录下的user目录
    

历史命令检查

基本使用

  1. 查看帐号执行过的系统命令

    • root的历史命令:history
    • 普通帐号的历史命令:查看/home/各帐号目录下的.bash_history
  2. 增强历史命令记录

    sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
    
    # 在/etc/profile尾部添加:
    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"
    
    source /etc/profile
    
  3. 清除历史命令

    history -c  # 不会清除文件中的记录,需手动删除.bash_profile中的记录
    

入侵排查

cat /home/用户/.bash_history >> history.txt

可疑端口检查

netstat -antlp | more

# 查看pid对应的进程文件路径
ls -l /proc/$PID/exe
file /proc/$PID/exe

可疑进程检查

ps aux | grep pid

开机启动项检查

基本使用

  • 查看运行级别:runlevel
  • 系统默认允许级别:vi /etc/inittab中的id=3:initdefault
  • 开机启动配置文件:/etc/rc.local/etc/rc.d/rc[0~6].d

入侵排查

more /etc/rc.local /etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/

定时任务检查

基本使用

  • crontab -l:列出用户cron服务详细内容
  • crontab -r:删除所有计划任务(谨慎使用)
  • crontab -e:编辑当前crontab文件
  • 默认crontab文件位置:/var/spool/cron/用户名

anacron使用

vi /etc/anacrontab
@daily 10 example.daily /bin/bash /home/backup.sh

入侵排查

重点关注以下目录:

/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
more /etc/cron.daily/*  # 查看目录下所有文件

服务检查

基本使用

  1. 服务自启动设置方法:
    chkconfig --level 2345 httpd on
    # 或修改/etc/re.d/rc.local
    # 或使用ntsysv命令
    

入侵排查

  1. RPM包安装的服务:

    chkconfig --list
    ps aux | grep crond
    # 中文环境
    chkconfig --list | grep "3:启用\|5:启用"
    # 英文环境
    chkconfig --list | grep "3:on\|5:on"
    
  2. 源码包安装的服务:

    service httpd start
    # 检查/etc/rc.d/init.d/
    

系统日志分析

基本使用

  • 日志默认存放位置:/var/log/
  • 查看日志配置:vi /etc/rsyslog.conf

日志分析技巧

  1. /var/log/secure分析:

    • 定位爆破root的IP:
      grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
      
    • 登录成功的IP:
      grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
      
    • 用户增删记录:
      grep "useradd" /var/log/secure
      grep "userdel" /var/log/secure
      
  2. /var/log/yum.log

    more /var/log/yum.log
    

挖矿事件处理

1. 获取异常进程pid

  • CPU占用:
    top -c -o %CPU
    ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%cpu | head -n 5
    
  • 内存占用:
    top -c -o %MEM
    ps -eo pid,ppid,%mem,%cpu,cmd --sort=-%mem | head -n 5
    
  • 网络占用:
    apt-get install nethogs
    nethogs
    

2. 寻找恶意文件样本

  • 通过进程名获取pid:
    pidof "name"
    ps -aux | grep "name"
    ps -ef | grep "name" | grep -v grep | awk '{print $2}'
    pgrep -f "name"
    
  • 通过pid获取程序信息:
    lsof -p pid
    pwdx pid
    systemctl status pid
    cat /proc/pid/maps
    ls -al /proc/pid/exe
    
  • 查看进程线程:
    ps H -T -p pid
    ps -Lf pid
    top -H -p pid
    htop
    pstree -acU
    

3. 处理异常进程

  • 恶意文件采样:
    scp -P 4588 remote@www.xxx.com:/usr/local/a /home/kali
    
  • 进程查杀:
    kill -9 pid          # 杀死指定进程
    kill -9 -pid        # 杀死进程组
    
  • 线程查杀:
    ps -T -p pid
    ps -aLf pid
    ps -eLFa
    

4. 删除恶意文件

  • 查看文件占用:
    lsof eval.sh
    
  • 处理特殊属性文件:
    chattr -a 文件名  # 去除a属性
    chattr -i 文件名  # 去除i属性
    

案例分析

SSH隐蔽登录

ssh -T root@192.168.1.1 /usr/bin/bash -i

分析:这种方式不会分配伪终端,不会被w和lastlog等命令记录。

处理

lsof -i 22
ss -nt

惯性密码

分析:如aaRedis63090329,中间四位为本机端口号,容易被猜测。

处置:使用复杂且不可预测的密码。

pid查询失败

分析:可能是攻击者隐藏了/proc/pid/目录。

处置

cat /proc/
$$
/mountinfo

文件删除问题

分析:奇怪文件名导致无法删除。

处置:使用inode删除:

ls -li xxx.sh          # 查看inode
find ./* -inum inode -delete
find ./ -inum inode -exec rm {} \;

总结

不同安全事件需要从不同角度处理,一次事件可能包含多种类型。本指南提供了全面的Linux应急响应流程和技术,帮助安全人员在遭受攻击时快速定位和处理问题。

Linux应急响应指南 前言 网络安全是相对的,再安全的服务器也可能遭受攻击。除了定期备份数据外,还需要定期进行安全检查,做好充分准备才能在攻击发生时从容应对。 入侵排查流程 账号安全排查 基本命令 /etc/passwd :用户信息文件 /etc/shadow :影子文件 who :查看当前登录用户(tty本地登陆、pts远程登录) w :查看系统信息 uptime :查看登陆多久、多少用户,负载 入侵排查步骤 查询特权用户(uid为0) 查询可以远程登录的帐号信息 检查其他帐号是否存在sudo权限 禁用或删除多余及可疑的帐号 历史命令检查 基本使用 查看帐号执行过的系统命令 root的历史命令: history 普通帐号的历史命令:查看 /home/各帐号目录下的.bash_history 增强历史命令记录 清除历史命令 入侵排查 可疑端口检查 可疑进程检查 开机启动项检查 基本使用 查看运行级别: runlevel 系统默认允许级别: vi /etc/inittab 中的 id=3:initdefault 开机启动配置文件: /etc/rc.local 、 /etc/rc.d/rc[0~6].d 入侵排查 定时任务检查 基本使用 crontab -l :列出用户cron服务详细内容 crontab -r :删除所有计划任务(谨慎使用) crontab -e :编辑当前crontab文件 默认crontab文件位置: /var/spool/cron/用户名 anacron使用 入侵排查 重点关注以下目录: 服务检查 基本使用 服务自启动设置方法: 入侵排查 RPM包安装的服务: 源码包安装的服务: 系统日志分析 基本使用 日志默认存放位置: /var/log/ 查看日志配置: vi /etc/rsyslog.conf 日志分析技巧 /var/log/secure 分析: 定位爆破root的IP: 登录成功的IP: 用户增删记录: /var/log/yum.log : 挖矿事件处理 1. 获取异常进程pid CPU占用: 内存占用: 网络占用: 2. 寻找恶意文件样本 通过进程名获取pid: 通过pid获取程序信息: 查看进程线程: 3. 处理异常进程 恶意文件采样: 进程查杀: 线程查杀: 4. 删除恶意文件 查看文件占用: 处理特殊属性文件: 案例分析 SSH隐蔽登录 分析 :这种方式不会分配伪终端,不会被w和lastlog等命令记录。 处理 : 惯性密码 分析 :如 aaRedis63090329 ,中间四位为本机端口号,容易被猜测。 处置 :使用复杂且不可预测的密码。 pid查询失败 分析 :可能是攻击者隐藏了 /proc/pid/ 目录。 处置 : 文件删除问题 分析 :奇怪文件名导致无法删除。 处置 :使用inode删除: 总结 不同安全事件需要从不同角度处理,一次事件可能包含多种类型。本指南提供了全面的Linux应急响应流程和技术,帮助安全人员在遭受攻击时快速定位和处理问题。