找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2838

积分

0

好友

380

主题
发表于 前天 05:21 | 查看: 11| 回复: 0

当Linux主机发生安全事件,怀疑被入侵时,除了依赖自动化工具,掌握一套手工排查的思路与方法至关重要。通过分析系统账号、进程端口、启动项、可疑文件及日志等关键信息,我们可以逐步确认入侵事实并定位攻击痕迹。下面,我将结合安全/渗透/逆向工作中的常见分析方法,为你梳理一份清晰的Linux手工入侵排查实战指南。

01、检查系统账号

攻击者在入侵成功后,常会创建隐藏账号或提升普通账号权限作为后门,以便长期控制。因此,用户配置文件 /etc/passwd 和密码配置文件 /etc/shadow 是首要检查点。

  1. 查询特权用户(uid为0):除了root,任何UID为0的账号都拥有最高权限。

    awk -F: '$3==0{print $1}' /etc/passwd
  2. 查询可远程登录的账号:检查密码哈希为 $1$ (MD5) 或 $6$ (SHA-512) 的账号,这些账号通常可以远程登录(如SSH)。

    awk '/\$1|\$6/{print $1}' /etc/shadow
  3. 检查非root账号的sudo权限:不必要的sudo权限可能被滥用。

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

    usermod -L user     # 禁用账号,使其无法登录(/etc/shadow密码栏前加!)
    userdel user        # 删除user用户
    userdel -r user     # 删除user用户及其/home下的主目录
  5. 查看当前登录用户

    who      # 查看当前登录用户(tty为本地登录,pts为远程登录)
    w        # 查看当前用户及其运行的进程
    uptime   # 查看系统运行时间、用户数和负载

02、检查异常端口

入侵者通常会开放端口进行监听或对外发起连接。通过分析网络连接状态,可以发现可疑行为。

  1. 使用netstat查看所有网络连接:重点关注不常见的端口、外连IP和对应的PID。

    netstat -antlp|more
  2. 对可疑连接进行抓包分析:若发现持续的可疑连接,可进一步抓包。

    tcpdump -c 10 -q   # 以精简模式捕获10个数据包

03、检查可疑进程

恶意软件会以进程形式在系统中运行,消耗资源或执行恶意操作。

  1. 列出所有进程:使用ps命令,注意异常的进程名、PID或命令行参数。

    ps aux
    或
    ps -ef
  2. 实时查看进程资源占用top命令可以快速发现CPU或内存占用异常的进程。

    top
  3. 深入分析可疑进程(假设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发行版的服务管理方式不同。

  1. Systemd系统(如CentOS 7+/Ubuntu 16.04+):查看开机自启的服务。

    systemctl list-unit-files --type=service | grep "enabled"
  2. SysV init系统(如CentOS 6):使用chkconfig查看服务状态。

    chkconfig --list
    chkconfig --list | grep "3:on\|5:on"  # 查看在运行级别3和5下开启的服务

05、检查开机启动项

除了系统服务,启动项脚本也是攻击者藏身的常见位置。

  1. 检查启动脚本目录

    more /etc/rc.local /etc/rc.d/rc[0~6].d
    ls -l /etc/rc.d/rc3.d/
  2. 示例原理:启动项通常是在 /etc/rc.d/rc*.d/ 目录下创建指向 /etc/init.d/ 中脚本的软链接。S开头表示启动,K开头表示关闭。

    ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh

06、检查计划任务

利用cronanacron设置计划任务是攻击者常用的持久化手段。

检查以下关键目录中是否存在恶意脚本:

/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、木马或临时工具。

  1. 检查敏感目录:如 /tmp/dev/shm,注意以 . 开头的隐藏文件和目录。
  2. 按时间查找文件:如果知道恶意文件的创建时间,可以查找同一时间点附近创建的文件。
    find /opt -iname "*" -atime 1 -type f  # 查找/opt目录下一天前被访问过的文件
  3. 查看文件详细时间属性:使用stat命令查看文件的访问、修改、状态变更时间。
    stat suspicious_file

08、检查历史命令

攻击者在获得Shell后执行的操作会记录在命令历史中,这是重要的线索。

  1. 检查用户命令历史

    # 以root身份查看指定用户的历史记录
    cat /home/username/.bash_history
  2. 加固历史命令记录(可选):默认配置可能不足以支持日志分析与溯源,可按需加固。

    # 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:记录当前登录用户信息,使用 wwhousers 命令查看。
  • /var/log/secure(RedHat/CentOS)或 /var/log/auth.log(Debian/Ubuntu):记录认证授权日志,如SSH登录、sudo使用等,是排查的重点。

针对 /var/log/secure 日志的分析示例

  1. 统计爆破root密码的IP及次数

    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  2. 提取所有失败登录的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
  3. 查看被爆破的用户名有哪些

     grep "Failed password" /var/log/secure|perl -e 'while($_<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
  4. 查看成功登录的IP及次数

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  5. 查看成功登录的详细记录(时间、用户、IP)

    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

遵循以上九个步骤进行系统性地排查,能够帮助你高效地应对Linux主机安全事件,识别入侵痕迹并采取相应的处置措施。安全运维是一个持续对抗的过程,保持警惕并建立完善的监控体系是关键。更多关于系统安全与运维的深度讨论,欢迎在云栈社区交流。




上一篇:网络安全真没用?分享几个真实案例告诉你为何它比保险更重要
下一篇:Linux服务器入侵排查指南:通过登录日志定位攻击源与应急响应
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 18:14 , Processed in 1.283821 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表