Linux入侵排查方法和指令
在客户单位值守,难免会遇到需要我们排查Linux系统是否存在病毒的情况,网上临时搜的文章指令不是很全,自己笔记本又不太方便复制指令。于是决定总结一下常用指令,发布到博客方便随时使用
Linux操作系统有CentOS、Ubuntu、Debian等细分类型,不同的操作系统一些指令和配置文件也有些许不同,在应急开始之前需要确认操作系统细分类型,直接问网络运维人员是最快的
如果没有运维人员在,可以通过下面这些指令手动确认:
1 | cat /etc/os-release |
然后和客户运维人员要一个root账号,登录root账号进行排查
查看当前登录用户,tty
表示本地登录,pts
表示远程登录
1 | who |
查看用户登陆时间和登录IP地址等信息
1 | w # 查看当前用户登录信息 |
查看用户账号和密码,排查passwd
时,注意查看可登录shell的用户,例如权限为/bin/bash
1 | sudo -l # 查看sudo权限用户 |
查看除 root 账号外,是否有其他存在 sudo 权限的账号
1 | more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)" # 查看具有sudo权限的用户 |
查看ssh远程连接密钥是否被修改,防止遗留ssh后门
1 | ls -a ~/.ssh # 查看ssh目录 |
发现恶意用户可以通过下面的指令进行处置
1 | usermod -L user # 禁用账号,账号无法登录 |
检查网络连接情况,对公网地址的网络连接要重点注意
1 | netstat -antlp|more |
Ubuntu系统可以通过下面的指令进行进一步排查:
1 | lsof -i :22 # 查看22端口占用情况 |
通过进程PID快速定位文件位置
1 | file /proc/$PID/exe |
查看资源占用情况,排查是否有恶意进程占用大量资源,该指令检测挖矿病毒有奇效
1 | top |
检查进程,进程运行参数太长或存在不可见字符时,需加more命令
1 | ps -ef | more |
Ubuntu系统可以通过指令查看进程树,进程之间的关系更加清晰
1 | pstree |
如果提前知道了攻击者使用的用户,还能指定用户进行进程排查,拿到PID后可以进一步搜索
1 | ps -u root # 查看root用户运行的进程 |
部分恶意程序会绑定守护进程,可以排查下是否有异常守护进程
1 | ps -aef | grep inetd |
拿到恶意程序PID后可以快速定位恶意程序位置
1 | ls -l /proc/$PID/exe |
查看系统已启用的服务,排查是否有恶意服务
1 | systemctl list-unit-files --type=service | grep "enabled" |
Ubuntu系统可以通过下面的指令排查
1 | service --status-all |
历史记录删除指令:history -c
删除的历史记录依然会保存在文件中,通过文件可以看到完整的历史记录,排查是否有攻击痕迹
1 | cat ~/.bash_history |
历史记录默认只保存一千条,如果希望增加历史记录最大保存数量,可以通过下面的方法修改
1 | # 保存最近1w条历史记录 |
查看当前用户定时任务,看是否有定时任务执行恶意脚本或程序
1 | crontab -l # 查看当前用户的计划任务 |
排查定时任务目录,如果提示目录不存在说明这个目录当前操作系统类型没有
1 | ls -al /etc/cron.d/ |
小技巧,分页查看目录下所有文件
1 | more /etc/cron.daily/* |
发现恶意定时任务,通过下面的指令可以进行清除
1 | crontab -e # 编辑当前的计划任务文件 |
查看敏感目录,注重关注隐藏文件夹,以.
位开头的文件夹具有隐藏属性,需要通过-a
查看所有属性
1 | ls -al /tmp |
针对可疑文件可以比对下创建和修改时间
1 | stat {文件名} |
如果被上传webshell,可以进入到网站上传目录,查看当前目录下在过去一天内访问过的文件,
1 | find ./ -iname "*" -atime 1 -type f |
系统运行级别示意图:
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以想象为windows的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式,不含NFS服务 |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
检查开机启动项目录:
1 | ls -al /etc/rc.d/rc[0~6].d |
查看日志配置情况,日志默认存储在 /var/log
目录下
1 | cat /etc/rsyslog.conf |
主要的日志文件如下:
文件路径 | 描述 |
---|---|
/var/log/message | 包括整体系统信息 |
/var/log/auth.log | 包含系统授权信息,包括用户登录和使用的权限机制等 |
/var/log/userlog | 记录所有等级用户信息的日志 |
/var/log/cron | 记录crontab命令是否被正确的执行 |
/var/log/xferlog (vsftpd.log) | 记录Linux FTP日志 |
/var/log/lastlog | 记录登录的用户,可以使用命令lastlog查看 |
/var/log/secure | 记录大多数应用输入的账号与密码,登录成功与否 |
/var/log/wtmp | 记录登录系统成功的账户信息,等同于命令last |
/var/log/faillog | 记录登录系统不成功的账号信息,一般会被黑客删除 |
如果开启了一些服务,也需要对服务运行的日志进行排查(例如Nginx日志)
系统用户登录都会在/var/log/secure
日志文件中记录,但是这个日志文件会被系统自动分割,通过下面的指令可以查看有哪些登录日志文件
1 | ll -ld /var/log/secure* |
针对登录日志进行进一步排查,注意指定对应分割的登陆日志
1 | # 定位有多少IP在爆破主机的root帐号,打印爆破次数和IP地址 |