Linux入侵排查常用命令
本文最后更新于 2024-09-12,文章内容可能已经过时。
Linux入侵排查常用命令
一、账号安全
查看用户信息文件,检查有无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、uptime、w
# 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
排查用户登录信息
查看最近登录成功的用户及信息
last
[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表示从控制台登录,就是在服务器旁边登录
查看最近登录失败的用户及信息
latsb
[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表示从控制台登录
显示所有用户最近一次登录信息
lastlog
[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
二、查询异常端口与进程
查看端口连接情况,分析可疑端口、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
将保存后的target.pcap文件放入流量分析工具如:wireshark等进行分析
检查可疑进程
使用 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 天内被读取过的文件
.ssh目录下的公钥文件
- 具备u+s权限的可执行程序
find / -perm /u=s -type f 2>/dev/null
# /:表示从根目录开始查找。可以根据需要更改为其他目录的路径。
# -perm /u=s:表示检查文件的权限,/u=s表示检查用户(u)的权限是否为s。
# -type f:表示只查找文件,不包括目录。
# 2>/dev/null:将错误信息重定向到/dev/null,以忽略没有权限访问某些目录时的错误信息。
排查webshell木马:
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name “.jsp" | xargs grep “exec(”
find ./ type f -name ".php” | xargs grep “eval(”
find ./ type f -name “.asp" | xargs grep “execute(”
find ./ type f -name ".aspx” | xargs grep “eval(”
//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name “*.php” | xargs grep “base64_decode”
# xargs:将标准输入的数据转换为命令行参数。它会将 find 命令的输出传递给 grep。
七、查看历史命令
查询某个用户在系统上的历史命令
使用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}'
- 感谢你赐予我前进的力量