当Linux主机发生安全事件需要进行入侵排查时,一般可以使用常见的shell命令,通过分析主机的异常现象、进程端口、启动方式、可疑文件和日志记录等信息以确认主机是否被入侵。随后找到入侵点,进行修复
账号安全
-
查看用户信息文件,检查有无UID为0的用户、有无新增的未知用户
cat /etc/passwd | grep /bin/bash #查看可登录用户
awk -F: ‘$3==0{print $1}’ /etc/passwd #查看UID=0的用户
more /etc/sudoers | grep -v “^#\|^$” | grep “ALL=(ALL)” #查看sudo权限的用户 -
查看当前登录用户及登录时长
#who 命令,查看当前登录系统的所有用户(tty 本地登陆 pts 远程登录)
#uptime 命令,查看登陆多久、多少用户,负载状态
#w 命令,显示已经登录系统的所用用户,以及正在执行的指令
[root@192 ~]# w
06:48:14 up 8:03, 6 users, load average: 0.00, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 04:17 1:30m 2.28s 2.28s -bash
root pts/0 192.168.219.1 04:27 2:14m 0.07s 0.00s vi test.py
root pts/1 192.168.219.1 05:01 1:38m 0.09s 0.09s -bash -
排查用户登录信息
- 查看最近登录成功的用户及信息
[root@localhost ~]# last
root pts/0 192.168.219.1 Tue Feb 15 21:06 still logged in
root pts/1 192.168.219.1 Tue Feb 15 18:30 - 19:49 (01:18)
root pts/0 192.168.219.1 Tue Feb 15 15:00 - 17:32 (02:31)
root tty1 Tue Feb 15 14:41 still logged in
reboot system boot 3.10.0-1160.el7. Tue Feb 15 14:00 - 21:06 (07:06)
wtmp begins Tue Feb 15 14:00:13 2022
# 显示logged in表示用户还在登录
# pts表示从SSH远程登录
# tty表示从控制台登录,就是在服务器旁边登录 - 查看最近登录失败的用户及信息
[root@localhost ~]# lastb
root ssh:notty 192.168.219.1 Tue Feb 15 21:13 - 21:13 (00:00)
root ssh:notty 192.168.219.1 Tue Feb 15 21:13 - 21:13 (00:00)
root ssh:notty 192.168.219.1 Tue Feb 15 21:13 - 21:13 (00:00)
root ssh:notty 192.168.219.1 Tue Feb 15 21:13 - 21:13 (00:00)
root tty1 Tue Feb 15 14:41 - 14:41 (00:00)
btmp begins Tue Feb 15 14:41:47 2022
# ssh表示从SSH远程登录
# tty表示从控制台登录 - 显示所有用户最近一次登录信息
[root@localhost ~]# lastlog
Username Port From Latest
root pts/2 192.168.219.1 Wed Dec 8 05:17:57 -0500 2021
bin Never logged in
daemon Never logged in
… …
… …
postfix Never logged in
chrony Never logged in
mysql Never logged in
zhang pts/1 Fri Nov 19 13:07:34 -0500 2021
- 查看最近登录成功的用户及信息
-
查看 sudo 用户列表,除root帐号外,其他帐号是否存在sudo权限
查询sudoers文件中能从任意主机以任意身份执行命令的用户
more /etc/sudoers | grep -v “^#\|^$” | grep “ALL=(ALL)”
异常端口与进程
-
查看端口连接情况,分析可疑端口、IP、PID等信息
netstat -antlp | more
- Local Address(本地地址)
- 查看有无重要端口被连接,如 22,3306等
- Foreign Address(外部地址)
- 查看有无非常用IP或可疑IP连接
- IP可以使用在线危险情报平台检索,如微步在线
- PID/Program name(PID/程序名称)
- 查看是否有可疑程序,如上面的截图中的bash,可能为bash执行反弹shell
- 注:若发现有异常连接需要持续观察,可以进行抓包获取流量,而后使用相关工具分析
将ens33网卡上目的端口为tcp 80端口的流量保存到target.pcap文件中
tcpdump tcp and dst port 80 -i ens33 -w ./target.pcap
- 注:若发现有异常连接需要持续观察,可以进行抓包获取流量,而后使用相关工具分析
- Local Address(本地地址)
-
检查可疑进程
-
使用 ps 列出系统中当前运行的那些进程,分析异常的进程名、PID,可疑的命令行等
[root@192 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S Dec07 0:00 [kthreadd]
…
root 7263 0.0 0.1 115548 1932 pts/3 S+ 06:35 0:00 bash -i
root 7267 0.0 0.1 155452 1864 pts/4 R+ 06:35 0:00 ps aux此处PID为7263的进程所执行的 “ bash -i ”是十分可疑的,极有可能为反弹shell执行的命令。 我们可以使用“ kill -9 7263” 强制结束进程
-
通过top命令显示系统中各个进程的资源占用状况,如发现资源占用过高的进程可以进一步排查
-
进程排查分析
查看该进程启动的环境变量与命令行等信息: ps eho command -p $PID
查看该进程启动时候所在的目录: readlink /proc/$PID/cwd
查看下pid所对应的进程文件路径:ls -l /proc/$PID/exe
-
系统服务
- 查看自启服务
#centos7 查看自启服务
systemctl list-unit-files --type=service | grep “enabled”
#centos6 查看自启服务
chkconfig --list
chkconfig --list | grep “3:on|5:on”
开机启动项
- 开机启动配置文件
/etc/rc.local ,是/etc/rc.d/rc.local的软连接,用于添加开机启动命令
/etc/rc.d/rc[0~6].d , 各个启动级别的执行程序连接目录,系统的标准的运行级为3(完全多用户模式) - 排查入侵项
#查看rc.local中有无异常的开机启动命令
more /etc/rc.local
#查看 /etc/rc.d/rc[0~6].d
ls -l /etc/rc.d/rc3.d/ # 查看运行级别为3的执行程序连接目录下有无异常脚本
定时任务
- cron相关文件
/etc/crontab ,配置文件,配置 cron 任务运行环境变量等。
/var/spool/cron/ ,存放着每个用户的crontab任务,每个任务以创建者的名字命名。
/etc/cron.d/ ,此目录下存放的是系统级任务的任务文件。
/etc/anacrontab ,这个文件存着系统级的任务。它主要用来运行每日的(daily),每周的(weekly),每月的(monthly)的任务。一般不在此文件安装自己的任务。
/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/等目录存放要在指定时间周期执行的脚本。 - 定时任务排查
#查看当前用户的cron任务
crontab -l
#crontab任务编辑
crontab -e
#删除当前用户的定时任务
crontab -r
#查看以下目录中是否存在恶意脚本
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/var/spool/anacron/*
异常文件
- 查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“.”为开头的文件目录
- 若能得知远控木马的创建时间的范围,可根据时间查找文件
#查找最近一天以内修改的文件:
find / -mtime -1 -ls | more
#常用参数
-amin n : 在过去 n 分钟内被读取过
-atime n : 在过去 n 天内被读取过的文件
历史命令
- 查询某个用户在系统上的历史命令
- 使用root用户登录系统,检查/home目录下该用户主目录的 .bash_history 文件
[root@192 zhang]# cat .bash_history
系统日志
-
secure安全日志(var/log/secure)
检查系统错误登陆日志,统计IP重试次数,成功登录的时间、用户名和ip,确认账号是否存在暴力破解或异常登录的情况
- 查看有多少IP可能在爆破主机的root帐号
#统计多少IP登录失败及失败次数
grep “Failed password for root” /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr - 登录成功的IP
grep "Accepted " /var/log/secure | awk ‘{print $11}’ | sort | uniq -c | sort -nr
- 登录成功的日期、用户名、IP
grep "Accepted " /var/log/secure | awk ‘{print $1,$2,$3,$9,$11}’
- 查看有多少IP可能在爆破主机的root帐号