对于一般的Linux机器被入侵,第一要务是止损,止损的步骤如下。
- 如果业务允许,最好先关停除ssh外的对外开放服务,因为往往拿到机器权限后没有办法第一时间锁定入侵源
- 对入侵者的权限维持(反弹shell/后门…)进行查杀等操作(关键操作及时取证)
准备工作
- 防止命令被替换,最好使用busybox进行排查,下载地址12chmod +x busybox./busybox COMMAND
进程
1) 通过pstree查看正常父进程下的异常子进程
如果使用ps去查询进程,没有办法清晰的查看父子进程的关系,容易有遗漏,以下是在该机器上反弹shell后pstree得到的结果。
很清楚的看到php-fpm底下起了sh进程
2) 查看进程启动时间
使用ps命令列出进程时,可能由于进程较多,优先排查入侵时间附近的进程
3) 使用unhide查看隐藏进程
为了尽可能的维持权限,入侵者可能会将相关后门进程隐藏,隐藏的方式有以下几种
- 替换
top
ps
等系统命令 - 劫持文件
ld.so.preload
- 劫持libc库
- 使用mount将其他目录挂载到
/proc/pid
下 - 修改内核(rootkit)
其中前三种可以使用unhide工具进行查杀,原因为前三种方式无法修改/proc下的文件信息,因此使用unhide调用系统函数读取proc再将读取的信息与ps做对比,即可发现隐藏进程。
针对挂载的隐藏方式,使用命令mount -l
查看是否有到/proc
下的挂载,有的话使用umount /proc/pid
取消挂载,查看对应进程是否恶意
针对修改内核的隐藏方式,使用命令lsmod
查看是否有加载异常模块, 但rootkit可删除struct module
中的lsmod相关信息,从而躲避检测,具体可参考Rootkit技术(二)隐藏LKM
网络
1) 使用netstat命令检查已建立连接
上述命令可监控如下场景
- 反弹shell(进程名为bash/sh/python/php/java/perl等等)
- 非正常ssh登录(企业中往往使用堡垒机登录机器,而黑客则会使用获得权限的机器进行横向渗透,因此非堡垒机的ssh连接均为异常连接)
- 即使服务监听地址是127.0.0.1,也有可能通过端口反弹等形式反弹到外网,因此需要结合进程做判断
SSH
1) 查看SSH登录日志
登录失败的情况也需要关注,登录失败的ip可用于关联分析其他恶意行为,以及登录失败的日志也可能被用作后门,具体可参考 记一次安全应急响应中遇到的利用SSH日志触发的后门分析
2) 查看known_hosts
known_hosts文件会记录通过ssh,scp访问的计算机的ip以及公钥
3) pam相关
查看sshd的pam配置文件以及认证文件是否存在异常,具体可参考文章Linux PAM&&PAM后门
目录
- 应用目录
- Nginx: 查找nginx.conf配置文件,定位应用目录。检索目录下是否有异常文件(webshell)以及检索相应log日志是否有攻击或入侵痕迹
- Apache: 查找
apache2.conf
或apache.conf
等配置文件,定位应用目录。检索目录下是否有异常文件(webshell)以及检索相应log日志是否有攻击或入侵痕迹 - webshell检测工具可使用长亭牧云
- /tmp
- /var/tmp
- /dev/shm
history
- 用户目录下的history(通过/etc/passwd定位用户目录,查询每个目录下的.bash_history文件)
启动项
- inittab
- inittab的启动脚本主要在
/etc/rc.d
下,配置文件则在/etc/inittab
或/etc/init/*.conf
- inittab的启动脚本主要在
- systemd
- systemd的启动脚本在
/lib/systemd/system
下,具体格式可参考systemctl使用方法
- systemd的启动脚本在