记一次木马排查流程
原因
在调整spark配置问题时把集群内部通信接口暴露给了公网,提供了攻击的机会
攻击者通过端口扫描的方式,用暴露的接口【通过某种方式】进入集群,集群内部可无密码ssh访问,直接访问ssh目录生成密钥,并修改authorized_keys权限
添加redis和程序包(注入+进程隐藏)
- https://github.com/arget13/memdlopen/blob/main/README.md
- https://github.com/gianlucaborello/libprocesshider/blob/master/README.md
这导致了top无法发现其真正进程
发现
cpu占用异常,单核100%,和top无法对应
netstat -alntp 发现异常tcp链接:5.180.174.211:80,检查为境外乌克兰ip,lastb发现有大量异常失败登录,且ip大多来自境外,疑似撞库
处理
关掉集群其他机器
立即修改安全组,关闭除22以外的公网端口
试图删除authorized_keys known_host中的攻击者数据,发现并无权限,但查看权限并无异常,使用lsattr查看文件属性发现被添加ia标记,无法修改无法删除,使用chattr 修改无效且返回结果看起来比较诡异,查看/usr/bin/chattr 发现已被修改,使用ls -l |grep Jan 过滤出最近修改的所有文件,发现其他新增命令工具
但此时需要chattr 来修改标识才能进行操作,从https://github.com/posborne/linux-programming-interface-exercises/blob/master/15-file-attributes/chattr.c下载文件gcc编译,重命名为chattr,利用其来修改标识 chattr -ia,删除原本的chattr 替换之,然后就可以对其他文件进行操作
https://c.biancheng.net/view/874.html
查看/etc/ld.so.preload文件,此文件原先应为空或不存在,设法清空或删除该文件(和文件里的文件路径),top的问题就可以恢复
参考:https://www.jianshu.com/p/d4b3d87fdc51
也可通过busybox top工具直接发现真正的进程,定位到程序所在的目录(我的是/var/tmp/.11/,里面都是编译后的二进制文件和上述github的bash脚本),先不急删
使用systemctl status 对应pid,发现有对应的service(于我情况如此,也可能会使用定时程序),清理掉就可以,然后附带检查service而文件的修改日期,发现有其他攻击者新增但未启动的service一并处理
另外本环境没有redis服务,故连带清理掉,这样cpu和内存就应该能降下来
最后删除病毒文件即可
然后关闭该机器,对其他机器依次操作(因为集群是免密互通的,保险起见)
后续改进
关闭所有不必要的公网端口
内部web服务使用nginx反代并管理登录
Nginx 配置 安全认证 反向代理 HDFS web 页面_nginx如何代理一个web页面-CSDN博客