Linux应急响应小结

通过系统运行状态、安全设备告警,主机异常现象来发现可疑现象通常的可疑现象有:资源占用、异常登录、异常文件、异常连接、异常进程等。

用户排查

如果发现异常用户活动,例如尝试多次登录失败、执行不正常的命令等,应该及时采取措施,包括禁止用户登录、修改用户密码等。

  1. 查看 uid 或 gid 为 0 的用户(默认系统只存在root一个特权账户)
grep :0 /etc/passwd
  1. 查看 passwd 文件的最后修改记录
stat /etc/passwd
  1. 统计所有用户的 shell 相关信息
cat /etc/passwd | awk -F: '{print $7}' | sort | uniq
  1. 重点检查有登录权限的用户
cat /etc/passwd | grep bash
  1. 查看用户登录信息
last # 查看用户最近登录信息
lastb # 查看错误的用户登录信息
lastlog # 查看所有用户最后一次登录信息
  1. 查看允许 sudo 的用户
more /etc/sudoers | egrep -v "^#|^$"
  1. 继续检查 wheel 组包含的用户,wheel组通常用于授权用户拥有使用 sudo
grep wheel /etc/group
  1. 查看空口令的用户
awk -F: 'length($2)==0 {print $1}' /etc/passwd
  1. 查看可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow

历史命令

history 记录位于用户 home 目录下的 .bash_history 文件中,可以直接 cat ~/.bash_history 查看历史记录。

网络排查

检查系统上正在监听的网络连接和端口情况,以及用户的网络活动,发现存在异常的网络行为。

  1. 查看本机开放的端口信息
netstat -antulp 或 ss -antulp 或 lsof -i
  1. 查看当前已建立的 TCP 连接
netstat -antulp | grep ESTABLISHED
  1. 查看反弹连接
netstat -antulp | grep bash
  1. 查看某一端口的具体应用
lsof -i:22
  1. 查看路由表:
route -n
  1. 查看 DNS 配置信息:
cat /etc/resolv.conf

进程排查

Linux 默认的进程权限分离,每个进程有不同的权限,所以从进程用户名上能给我们很多信息。比如 webshell 执行反弹连接,会显示 apache 的用户权限。

  1. 查看资源占用
top
  1. 查看所有进程
ps -ef
  1. 根据进程 PID 查看进程详细信息
lsof -p PID
  1. 查看进程的启动时间
ps -p PID -o lstart
  1. 对于一些异常的文件可以用 strings 显示里面的可读字符串进行初步判断
strings /usr/sbin/sshd | more
  1. 查看进程可执行文件
ps -eo pid,cmd
  1. 查看进程树
pstree

文件排查

  1. 显示文件的详细信息
stat filename
  1. 查找根目录下,修改时间小于1天的文件
find / -mtime -1
  1. 结合文件名进一步查找
find /var/www/html/ -mtime -1 -name *.php
  1. 查看系统命令是否存在异常,如大小、修改时间、创建时间等
ls -altS /usr/sbin | head -30

持久化排查

Linux的持久化方式通常有以下这几种方式:定时任务、开机服务、开机启动、驱动加载。

定时任务排查

列出当前用户的定时任务列表:

crontab -l

定时任务还应检查以下文件和文件夹:

/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/*

开机启动项排查

查看系统服务

  1. 查看所有系统服务的状态和启动方式
systemctl list-unit-files --type=service
  1. 查看当前正在运行的服务
systemctl list-units --type=service --all

Linux 开机有多种运行级别,不同级别下加载的启动文件也不相同

查看当前启动级别

runlevel

不同启动级别会加载不同启动文件,需要关注检查启动脚本目录

/etc/rc.d/*
/etc/rc.local
/etc/rc[0-6].d
/etc/inittab

日志分析

Linux 使用 rsyslog 管理日志,包括系统登录日志、服务访问日志、网站日志、数据库日志等。

日志默认存放位置 /var/log/ 目录,查看日志配置情况 vim /etc/rsyslog.conf

通常关注的系统日志有:

  • /var/log/messages:内核及公共消息日志,会记录linux系统的绝大多数重要信息

  • /var/log/cron:系统定时任务相关的日志

  • /var/log/dmesg:系统引导日志,系统在开机时内核自检的信息,dmesg命令直接查看

  • /var/log/boot.log:记录系统在引导过程中发生的,包含系统启动时的日志,包括自启动的服务

  • /var/log/secure:用户验证相关的安全性事件,如SSH登录,su切换用户,sudo授权等

  • /var/run/utmp:正在登录系统的用户信息,默认由who和w记录当前登录用户的信息

  • /var/log/wtmp:当前登录用户详细信息,二进制文件,使用last命令来查看

  • /var/log/btmp:记录错误登录日志,二进制文件,使用lastb命令查看

  • /var/log/lastlog:用户最后一次登录时间的日志,二进制文件,使用lastlog命令查看

  • /var/log/maillog:邮件系统日志

应用日志:

Nginx日志:

  • /var/log/nginx/access.log

Apache日志:

  • /var/log/httpd/access.log

  • /var/log/apache/ access.log

  • /var/log/apache2/ access.log

  • /var/log/httpd-access.log

Mysql日志:

  • /var/log/mysql/

Linux 可以使用 sed、awk、grep 文件三剑客从日志中快速提取信息。

  1. 定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' |  sort | uniq -c | sort -nr | more
  1. 定位有哪些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
  1. 爆破用户名字典:
grep "Failed password" /var/log/secure|perl -e  'while($_=<>){ /for(.*?) from/; print "$1 \n";}'|uniq -c|sort -nr
  1. 登录成功的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}'

若有错误,欢迎指正!o( ̄▽ ̄)ブ

热门相关:剑道邪尊   恶魔总裁霸道宠:老婆,太惹火   我拍戏不在乎票房   寒门状元   聊斋大圣人