前言:
故事就发生在2022年11月23日,一个舒适的下午。我不知怎的突然想在企业网络环境下通过我的Xshell7 连接我的阿里云ESC服务器。顺便检查一下我1年前自己搭的小破站是否还健在(域名备案失效了,我本想去检查一下服务在不在跑)。结果Xshell死活连接不上,通过阿里云官网实例提供的远程连接可以正常访问。我嗖的一下从座位上站了起来,很快啊。映入眼帘的error:10053,激发了我想要解决它的冲动,防火墙,安全组,selinux ,ssh端口,sshd服务是否在跑,用户名密码是否正确。这些就是我脑子里的第一反应,毕竟用ssh连接阿里云我早就轻车熟路了。然而现实是残酷的,这些都不是问题的所在。但我却为下一位来宾默默的关闭了防火墙等一系列安全措施。csdn上关于这个报错也有很多攻略,发现基本没一个适合我这种情况,改ssh端口,修改什么配置文件都实验了一圈依然无果。我最后果断的联系了阿里云的客服小姐姐,提交了工单。最后工程师让我用移动热点测试一下,一语中的,果然可以。那不就是网络问题,我由于一开始通过网页可以连接云服务器就大意了,认为网络一定没问题。其实我忽略了一个东西,网页连接云服务器跟Xshell连接云服务器用到的协议跟端口都是不一样的,虽然我连接的主机跟云ESC都没问题。但是企业的防火墙上会不会做了某种限制呢。我想这就是问题所在。连上之后随便撸了一眼就草草结束了。时间来到了第二天,开始进入正题,阿里云官方给我打了个电话告诉我您的ESC存在挖矿行为,请尽快整改,否则就闭门大吉。
寻找挖矿进程之旅:
接下来,我就开始了寻找挖矿进程之旅。先top一下看看资源使用情况
我勒个去,什么鬼东西都把我cpu跑满了。记下PID为15647的进程,先杀为敬。(人狠话还多)
[root@WZY666 ~]# kill -9 15647
找与进程相关的文件
[root@WZY666 ~]# find / -name "kswapd0"
/home/wzy/.configrc2/a/kswapd0
/tmp/.X25-unix/.rsync/a/kswapd0
分别去看一下里面有些什么东西(一定要加-a 参数因为有些是隐藏文件)
看我发现了啥,定时任务文件cron.d 进去撸一眼
1 1 */2 * * /home/wzy/.configrc2/a/upd>/dev/null 2>&1
@reboot /home/wzy/.configrc2/a/upd>/dev/null 2>&1
5 8 * * 0 /home/wzy/.configrc2/b/sync>/dev/null 2>&1
@reboot /home/wzy/.configrc2/b/sync>/dev/null 2>&1
0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1
说说我自己的理解(不一定正确)
第一个任务是执行upd脚本,每两天的1点零1分执行,将输出信息重定向全部丢弃掉,不会在终端显示。第二个任务是每天8点零5分执行sync脚本,输出信息重定向到null中。
第三个任务是每3天零点零分执行aptitude脚本。所有脚本执行完后都会进行一次重启,并且将脚本的所有输出信息定向到/dev/null里。接下去看一下所有执行的脚本
[root@WZY666 .configrc2]# cat a/upd
#!/bin/sh
cd /home/wzy/.configrc2/a
if test -r /home/wzy/.configrc2/a/bash.pid; then
pid=$(cat /home/wzy/.configrc2/a/bash.pid)
if $(kill -CHLD $pid >/dev/null 2>&1)
then
exit 0
fi
fi
./run &>/dev/null
[root@WZY666 .configrc2]# cat b/sync
#!/bin/sh
cd /home/wzy/.configrc2/b
./run
[root@WZY666 .configrc2]# cat /tmp/.X25-unix/.rsync/c/aptitude
#!/bin/sh
cd /tmp/.X25-unix/.rsync/c
./run &>/dev/null
不难看出三个脚本都是进入某个目录下运行run这个脚本。所以接着去找对应的run脚本
第一个定时任务对应的run脚本。很明显就是判断主机是32位还是64位,然后分别执行对应的程序。如果是32位执行anacron ,如果是64位执行kswapd0 。这与我之前发现的挖矿进程正好匹配。
第二个定时任务对应的run脚本。这个脚本有部分内容我也看不懂,看着像是删除ssh连接的记录,创建属于自己的登录密钥,感觉可以实现直接用密钥对登录主机的操作。即使你将来改变了密码,它照样能通过这种方法登录进来(纯个人理解,要有大佬懂可以在下方评论)
第三个定时任务,统计主机cpu具体型号信息和核数,然后根据核心数判断该执行那种脚本。我这边只有1核心,满足$PR -lt 7 这种情况,所以会先执行./stop脚本再执行./go 脚本
接着看stop脚本和go脚本
上图就是stop脚本,看着就是杀各种进程。
go脚本,配置脚本执行路径后清除连接过的记录信息。感觉就是事情干完把卫生打扫干净,让人误以为没人进来过。到这边整一套挖矿的程序调用逻辑基本清晰了,接下来就是去解决问题。
我的处理思路:
1.查看sshd的登录连接日志 /var/log/secure
不看不知道,一看吓一跳很好的描述了我当时的心情
从这部分日志可以看出对方应该在用爆破字典之类的脚本对我的root用户,疯狂的尝试连接。
此时脚本已经在用admin用户开始新的一轮爆破 。还有huawei、ubuntu、test等诸多用户名从连接测试,ip也开始变化起来。这里不在细说,直接放被爆破的连接吧。
以前图方便给wzy这个用户设了一个123456的密码,现在傻眼了。
2.查看所有用户 /home 和 /etc/passwd(找出所有异常的用户并删除)
由于wzy这个用户已经被入侵过了,大家可以先把里面重要的内容备份一下。然后把这个用户彻底删除。命令我汇总一下
userdel -r 要删除的用户名 ,(-r 参数会把这个用户的目录全部删掉,重要的先备份)
kill -9 PID 杀进程 (若用户有进程正在使用,是无法删除用户的)
为了删除这个用户,我连删了好几个进程。大家以后可以先看一眼这些进程后运行的是什么脚本
3.删除/tmp文件下相关的内容
ls -alt (-a 展示所有隐藏文件 -l 文件详细信息 -t 按时间从近到远 )
把可疑的文件都删了(里面的up.txt就是我被爆破的用户名和密码,得知23号下午4点15分就已经被入侵了)
4.检查一下所有的定时任务(十分有必要)
这里面的内容都建议去检查一遍,尤其是11月23日以后的
5.防火墙,selinux全部设为开机自启动,安全组把ssh端口给禁用了,以后要用到再开。实在想用就修改默认端口号。
systemctl start firewalld
systemctl status firewalld
systemctl enable firewalld
/etc/selinux/config
安全组ssh端口禁用
6.其他建议安装一个杀毒软件检测一圈,重要的文件做异机备份,ssh添加ip白名单,登录连接失败次数限制等操作都可以很好的规避,黑客的入侵操作。
今天先到这里吧,创作不易,欢迎点赞收藏转发。欢迎大佬们对文章中不正确的部分就行留言和补充。
版权归原作者 被代码撸的小宇 所有, 如有侵权,请联系我们删除。