Linux应急响应小结
通过系统运行状态、安全设备告警,主机异常现象来发现可疑现象通常的可疑现象有:资源占用、异常登录、异常文件、异常连接、异常进程等。
用户排查
如果发现异常用户活动,例如尝试多次登录失败、执行不正常的命令等,应该及时采取措施,包括禁止用户登录、修改用户密码等。
- 查看 uid 或 gid 为 0 的用户(默认系统只存在root一个特权账户)
grep :0 /etc/passwd
- 查看 passwd 文件的最后修改记录
stat /etc/passwd
- 统计所有用户的 shell 相关信息
cat /etc/passwd | awk -F: '{print $7}' | sort | uniq
- 重点检查有登录权限的用户
cat /etc/passwd | grep bash
- 查看用户登录信息
last # 查看用户最近登录信息
lastb # 查看错误的用户登录信息
lastlog # 查看所有用户最后一次登录信息
- 查看允许 sudo 的用户
more /etc/sudoers | egrep -v "^#|^$"
- 继续检查 wheel 组包含的用户,wheel组通常用于授权用户拥有使用 sudo
grep wheel /etc/group
- 查看空口令的用户
awk -F: 'length($2)==0 {print $1}' /etc/passwd
- 查看可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
历史命令
history 记录位于用户 home 目录下的 .bash_history 文件中,可以直接 cat ~/.bash_history
查看历史记录。
网络排查
检查系统上正在监听的网络连接和端口情况,以及用户的网络活动,发现存在异常的网络行为。
- 查看本机开放的端口信息
netstat -antulp 或 ss -antulp 或 lsof -i
- 查看当前已建立的 TCP 连接
netstat -antulp | grep ESTABLISHED
- 查看反弹连接
netstat -antulp | grep bash
- 查看某一端口的具体应用
lsof -i:22
- 查看路由表:
route -n
- 查看 DNS 配置信息:
cat /etc/resolv.conf
进程排查
Linux 默认的进程权限分离,每个进程有不同的权限,所以从进程用户名上能给我们很多信息。比如 webshell 执行反弹连接,会显示 apache 的用户权限。
- 查看资源占用
top
- 查看所有进程
ps -ef
- 根据进程 PID 查看进程详细信息
lsof -p PID
- 查看进程的启动时间
ps -p PID -o lstart
- 对于一些异常的文件可以用 strings 显示里面的可读字符串进行初步判断
strings /usr/sbin/sshd | more
- 查看进程可执行文件
ps -eo pid,cmd
- 查看进程树
pstree
文件排查
- 显示文件的详细信息
stat filename
- 查找根目录下,修改时间小于1天的文件
find / -mtime -1
- 结合文件名进一步查找
find /var/www/html/ -mtime -1 -name *.php
- 查看系统命令是否存在异常,如大小、修改时间、创建时间等
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/*
开机启动项排查
查看系统服务
- 查看所有系统服务的状态和启动方式
systemctl list-unit-files --type=service
- 查看当前正在运行的服务
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 文件三剑客从日志中快速提取信息。
- 定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
- 定位有哪些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
- 爆破用户名字典:
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1 \n";}'|uniq -c|sort -nr
- 登录成功的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( ̄▽ ̄)ブ
热门相关:剑道邪尊 恶魔总裁霸道宠:老婆,太惹火 我拍戏不在乎票房 寒门状元 聊斋大圣人