记录一次自己使用的腾讯云服务器被挂马perfctl的排查及处理过程!同时吐槽一下腾讯云!

先吐个槽吧,腾讯云真的是不太行,无论是kubernetes集群在裸金属机器状态下部署的支持,还是简单的中小应用,感觉做的都不够理想,特别是客服系统,我昨天报这个问题的时候,客服首先做的不是排查问题,哪怕形式上极力帮我解决问题也可,而是发来两个文档,一个是购买他们的防护服务,另外一个是一篇官样文章,大概讲通常类似于矿机病毒很难被根除,可能我需要重新做系统,重新做系统要怎么做服务器加固,里面大概也就是建立ssh改端口记得重启,而且似乎还不是官方文档,是一篇类似于有通用性的社区文章,oh,my god!

昨天在搞论坛插件的时候,因为我有大量的运营帖子需要配图,我在专心的做这件事情,突然感觉服务器奇慢无比,这显然是非常不合理的,因为我自己的nginx服务器,是经过了层层优化的,整个Dockerfile是我自己编译安装了pagespeed这个gooogle提供的资源压缩的插件,并且相应的后端程序,无论是mariadb还是php程序或者是java程序,都经过了层层的优化,本地k8s集群上运行效果都极为迅速,我刚上线到腾讯云的时候,配有cloudflare加持,也是访问极其迅速的,这明显就不是它正常的运行状态,果不其然,我用top命令查看了一下,效果简直就匪夷所思了。

alt text cpu占用超高,马上让我想起上次被挂马的经历,2022年的三月份的时候,当时也是被挂马,cpu占用超高,当时排查出来的原因就在于用的redis的镜像是老版本,导致virus通过漏洞就入侵到镜像里了,然后跑挖矿程序,简直一毛一样。我于是顺手搜了一上关于这个病毒的一些信息,发现遇到问题的看来不是我一个人。

alt text freelancer上还有人发布悬赏任务,也是有点意思的。

alt text 国外老哥的解决方案也给出来了。

我当时立马就意识到,他的方式肯定不适合我,为什么呢?我的思路就是缘起于我上次的挂马经历,我只要把redis服务停掉,就没有cpu占用高的状况出现,一旦启动,立马飙高,所以肯定是它的原因。而这次,我观察运行进程的uid,你们看到了吧,是33,显而易见,没有以root权限运行,说明它肯定只是在镜像运行的时候,才会走它放毒的逻辑,所以肯定还是和镜像有关,我果断停掉了自己的一个php服务,果然perfctl的从占用排行榜中消失了。

那下面的任务就显而易见了,我必须先升级一下镜像,来观察一下是不是因为镜像所有语言版本不做维护了,所以就被开盒了,这种情况下只能升级了。一查果然如此php7.4的版本果然已经不维护了,好在我自己打版本的时候给php打了一个8.2版本一个7.4版本,只是7.4版本没有放xdebug扩展,而8.2版本不只把xdebug打进去了,swoole,opcache都打进去了,不过好在配置灵活,只要扩展加载路径文件夹里没有.so的文件及扩展配置不启用即可,于是把image声明成8.2,果断上传,心想应该像上次一样问题被瞬间拿捏了。

我还是低估了这个病毒的破坏力,我过了一段时间观察,发现perfctl又熟悉的出现在占用列表的榜首,显然升级官方维护的镜像并没有解决掉问题,我于是进一步查了一下有关这个病毒的信息,大家如果遇到也不妨一查,与其他病毒比较大的区别就在于隐蔽性好,当ssh登录态时可能会隐藏自己的运行状态,并且非常擅于伪装,非常擅于针对于系统配置文件层面的漏洞直接升级权限,把自己部署在系统启动文件里,而通常来说,操作系统的运行进程排查还是比较耗费时间的,你要看每个运行进行读取的配置文件,文件是否合法,文件是否符合常规文件的调用策略,我也试了网上一些国外大神的建议,但有些看看就知道不适用于我,因为我上面已经说了,他们好多都是root权限被劫持,而我的是在镜像里面,33通常就是www-data用户的组的标识,通常配合着nginx来做负载,很显然就是php-fpm的程序导致的这个问题,升级镜像又没解决这个问题,于是我能想到出现的原因,肯定就是php程序自身有漏洞,或者我开放了不该开放的访问权限,配置文件给了过高的权限,导致virus可以在部署目录里植入一些垃圾的矿机程序,所以我要做减法,我把php.ini中能堵上的漏洞全堵上,包括太不限于:

  1. disabled_functions = exec, shell_exec, system, passthru, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source,把php层面上能进行脚本执行的相关函数全部禁用掉;
  2. 指定程序执行目录 open_basedir =指定我php程序运行的几个目录,其他目录都不允许php程序执行
  3. 禁用所有的可视打印日志操作,改为logging记录
  4. 禁用registry_globals
  5. 禁用file_uploads
  6. 禁用allow_url_open,allow_url_include
  7. 给目录正确执行权限755,文件正确执行权限644

上传重启,到现在为止,没有发现perfctl重现。至于类似于file_uploads这种,肯定是不能禁用的,但是为了排查方便,如果确认问题解决,我再逐步放开即可。

希望这篇排查perfctl的文章对你有帮助,感谢阅读!

Avatar

Aisen

Be water,my friend.
扫码关注公众号,可领取以下赠品:
《夯实基础的go语言体系建设》645页涵盖golang各大厂全部面试题,针对云原生领域更是面面俱到;
扫码加微信,可领取以下赠品:
【完整版】本人所著,原价1299元的《爱情困惑者必学的七堂课》;
100个搞定正妹完整聊天记录列表详情点这里
【完整版】时长7小时,原价699元《中国各阶层男性脱单上娶指南》;