写在前面
在服务器上使用docker build
程序,发现奇慢无比,执行了一下htop
好家伙,本片正式开始。
一、检查系统可疑进程
有5个进程长时间占用了CPU
,一查xmrig
你懂得,要是想学挖矿谷歌一下这个词,你会回头来谢我的。
有人肯定会问了,不是觉得网络慢么,怎么会是CPU
满,有这个疑问的同学,建议先去知乎刷点liunx tcp
相关的知识。
我当时没想到要写成博客,直接找到/root/.c2pool
这个文件夹,进去查看了config.json
文件,没找到突破口,索性直接删除了/root/.c2pool
(应该截个图再删除的)。
查了下时间 /root/.c2pool
这个文件夹,落盘时间为2021-11-10 11:21:45
。收获敏感时间,后面的系统敏感位置都根据这个时间来判断,只要大于等于这个时间,都要查。
二、检查系统敏感文件
- 第一步:当然是检查
ssh
,在我预料之中,有一个名为sssd
的后门。
这里面我打开看过,其实就是单独起了一个ssh
进程,当然配置文件是他自己的。
- 第二步:有第一步的信息了,接下来当然是检查ssl
虚惊一场,没啥问题。我以为他会把ssl
指向到了刚才他创建的那个sssd
文件夹中的文件。
-
第三步:(ssh都被改了,不会这么单纯相信秘钥还是原厂的吧)检查秘钥文件
公钥和私钥都被他删除了,多了个authorized_keys
文件,这是基本操作了,打开这个文件一看,全是乱码,我截图了。
- 看起来,像一些服务的信息,正常这里应该是某些服务器公钥才对,由于是乱码(编码设置都没用)没搞明白这里写的是什么内容。
-
第四步:检查原厂的ssh服务有没有异常
- 确认无异常
-
第五步:检查开机启动项
- init.d文件夹很干净,从时间上看,这里面的程序与挖矿无关。
- init.d文件夹很干净,从时间上看,这里面的程序与挖矿无关。
-
第六步:检查系统启动项
- 找到了2个东西
- 第一个
c3pool_miner.service
这个就是刚刚开头被我发现的那5个进程,指向的文件就是被我删除的/root/.c2pool
这个文件夹 - 第二个东西,这就开始搞混淆了
- 进到
multi-user.target.wants
瞄一眼
- 这两个玩意,眼熟不。又有一个
c3pool_miner.service
,合着是外面那个估计暴露给你删除的。打开看一下另一个sssd.service
- 很明显,通过写入临时的
DEBUG_LOGGER
系统变量来传递登录秘钥,看起来还有其他程序在配合。 - 看这个脚本出现的代码,检查了一下
/etc/sysconfig
- 没有异常
三、检查痕迹
到上面这里,线索断了,是哪个程序在提供DEBUG_LOGGER
没有找到。重启了服务器,突然看到/var/log
下有点眼熟的东西
这倒是让我抓到了几个方向。
执行了htop
没有异常。
发现服务器上的mysql.sock
文件被删除了,得知是mysql root
使用了弱密码,且开启了远程登录。
继续排查方向:
1、从mysql
日志出发。
2、从/var/log
出发。
寻找DEBUG_LOGGER
相关的输出日志。
检查结果:
mysql
相关的日志全部被清除了,并且删除了mysql.sock
文件。/var/log
下相关日志全部被删除了,只留下了btmp-20211101
,执行last -f /var/log/btmp-20211101
打开看看。
还有很多很多。
很明显,这里记录了通过默认的端口来检测程序口令,也就是常说的爆破。从日志看,攻击很早就开始了,只是从3306
端口默认了mysql root
,很容易就进来了。由于没有日志证据,我只能猜测是通过3306
进来的。
接下来我找到了一把如何通过mysql root
进行服务器提权,向目标服务器写入文件的文章。大致了解了用mysql root
提权liunx
权限原理
四、还原一下攻击过程
主要就是渗透攻击:
1、嗅探扫描服务器ip
开放端口,试探端口默认的程序协议,来确定该端口运行的程序。
2、使用端口对应的客户端程序,进行相同协议的默认账户进行登录,密码使用密码本匹配,爆破。
3、爆破成功后(我这里使用mysql 3306 root开启了远程登录
举例),在本地mysql 客户端
发起远程mysql root
连接,由于前面的爆破是知道了默认root
账户密码的,可以正常登录进来。
4、接下来就是渗透攻击的主要操作:
- 创建一个数据库,
- 然后创建一张表,执行
create table a (shell text)
- 插入数据
insert into a values ("set wshshell=createobject (""wscript.shell"" ) " ); insert into a values ("a=wshshell.run (""run.sh /c net user 1 1/add"",0) " ); insert into a values ("b=wshshell.run (""run.sh /c net localgroup root 1 /add"",0) " );
- 将数据生成文件
select * from a into outfile "/root"
现在可执行文件已经在/root
落盘成功了。
5、利用mysql root
获取liunx root
权限 - 这就很复杂了,我也没搞太明白,找到了一篇博客说明,有兴趣的可以看看。MySQL数据库Root权限MOF方法提权研究
- 大概意思就是利用了
mysql
的一个漏洞,来做shell反弹
到特定服务器上,特定服务器就具有了远程操作mysql
服务器的root
权限。
五、如何检查服务器是否被纳入攻击目标
1、在服务器上执行last -f /var/log/btmp
,这里面记录了没有正确登录的日志。要是已经黑进来了,这个文件大概率是被删除的。发现大量的异常登录但是服务器还是正常的时候,一定要增强端口暴露出去的服务器的密码强度。有更新补丁的及时打补丁。
2、liunx
其他日志文件也可以去看看,不过意义不大,一般黑进来都会删除那些日志的。也可以通过服务器日志莫名其妙丢失了来确认是否已经被黑了。
3、检查/etc
目录,一般向系统申请root
权限启动的程序都会在这个文件夹下。
4、检查系统启动/etc/systemd/system
目录,通过判断修改时间是否有异常即可。
5、检查ssh
服务,一般都会有后门。
6、检查服务器秘钥,一般都会被篡改,或者增加新的秘钥。
7、检查ssl
服务,有的会改这个。
8、检查systemd
服务,一般都会增加好几个地方的服务。
六、服务器已经被攻击了怎么办
1、牛皮想折腾的的就慢慢折腾,斗智斗勇。不牛皮不想折腾的的直接重装系统。
2、一定反思一下,为什么就黑你的服务器,别人的怎么没被黑,兄弟,这里面有你的故事。
评论区