昨天下午一个朋友和我说,他的服务器被阿里云监测出来在挖矿,然后阿里云官方把服务器给关停了。
不用急,这个时候简单的方法是在阿里云里提一个工单,反馈相关问题。
解禁服务器要解决问题、排查删除挖矿程序,首先我们需要解禁服务器,登录阿里云官方平台后,依次点击 控制台-> 个人头像 -> 安全管控进入相关页面。
在处罚列表,我们可以看到相关处罚记录,点击解除封禁后即可正常进入服务器了。
会有提示,需要在解禁后三日内找到挖矿程序,并删除,否则官方会再次封禁服务器,而且无法再次进行解封(差不多意思就是,这个服务器就废了!直接被官方回收)
我们首先可以看阿里云提供的漏洞管理监测,发现确实有一个漏洞,提示:Redis 未授权弱口令。
我网络上查了,确实可以通过Redis向系统注入本地公钥到服务器的/root/.ssh/authorized_keys中,然后“黑客”就可以在本地免密登录你的服务器了。。。
所以,如果你的服务器上安装了redis的话,可以首先考虑这个问题,引起这个问题的主要原因一般有:
· Redis设置了可远程登录(公网访问)
· Redis没有设置密码或者密码很简单
所以不是业务需求的话,不要开放redis远程登录,另外设置一个较为复杂的、不会在网络出现的密码,开放端口也可以改下,另外还有一个点就是不要用root用户启动redis,这样即使远程连接上redis,也无法去修改root下权限了~
简单分析挖矿程序我们得来看看这个shit的挖矿脚本!!!从配置文件可以看出这个脚本在/etc/newinit.sh,我们直接使用nano来查看这个文件内容,
nano /etc/newinit.sh复制代码
可以看到这个脚本一共有125行代码~其他看不懂,这个函数名看懂了kill主进程~
接下来我们来一起看看,他这个脚本都做了些什么(老表我对linux相关操作并不熟悉,所以以下关于脚本文件的简单分析难免会有不正确或者错误的地方,敬请大家批评指正,但不可恶意攻击~):
part one·
设置ulimit,修改了两个目录chattr的权限,而chattr可用于修改Linux文件系统上的文件属性,这样就是为什么之前即使在root用户下也会显示无法修改文件的原因。
·
·
关闭iptables和ufw防火墙、nmi(不可屏蔽的中断)看门狗,修改文件目录权限为只可追加、删除tmp、var文件夹中某些文件
·
· 这里比较简单,设置了一些文件路径,然后进行一些乱七八糟的mv操作,相当于文件重命名了~
· 大制作了,卸载阿里云相关的安全防护,阿里云安骑士aegis。
· 挖矿程序配置,这个zzh是一个可执行程序,估计就是挖矿程序,newinit.sh就是现在正在简单分享的挖矿程序脚本,也就是即使我把本地的脚本文件删除了,如果这里没删除,他又会从他自己的服务器上下载。
· 这里不太理解,大概在判断程序指令是否正常?如果不正常就修改文件权限?有了解的可以补充下哈~
· 感觉是一个函数,有{却没有},看函数意思是删除主程序进程,
· netstat -anp 显示各种网络相关信息,
· grep进行ip或者端口查找,定位到行,
· awk按指定设置输出对应文本,比如awk '{print $7}' 按空格/tab为界限输出文本中的第七项内容,
· |是管道命令,作用是将左侧命令执行结果作为参数传递给右侧命令执行(需要经过xargs转换),
· xargs可以将管道命令的左侧执行结果转换成命令行参数,传递给右侧命令执行
后,我又看了下part four中提到的挖矿程序配置里的链接,不看不知道,一看吓一跳,原来这个有996行代码(是在暗示什么吗!!!)
修改了很多系统配置~如果服务器里要是有什么重要的东西,或者之前配过什么很麻烦的环境,要修改还是挺麻烦了!
简单的方法就是直接重置系统,我这里也选择的这种方法,因为这个朋友服务器里没啥要备份的。
如前面所说,如果有很多重要东西和难配置的环境,你不想花时间备份和再配置一变,你可以选择根据挖矿脚本程序去一个个修复他对系统的修改。。。看着996行代码就觉得心累!
重置系统的话就相对会简单很多,进入到阿里云控制台,然后找到对应实例,先停止服务器,然后点击更多 -> 云盘和镜像 -> 更换操作系统。
会有一个更换提醒,建议仔细看一遍。
更换操作系统可以选择和之前一样的配置,或者其他配置,然后点击确认订单即可。
更换成功后,会自动启动服务器,我们可以点击管理控制台,然后尝试远程登录下。
这里相关操作和设置和我们之前分享的拥有有一台服务器后,我竟然这么酷?中的介绍基本一致,通过下图,我们可以看到crontab配置是正常的了。
后我们可以过一段时间后看看cpu使用情况,可以看到之前基本都是使用率,重置系统后,使用率变成了2.6%左右。
首先防范的前提是不影响我们使用,甚至所有操作应该是方便我们使用的。
1、目前我还是推荐初次接触或者对云服务器不熟的读者朋友使用宝塔面板来登录、操作服务器内容,具体功能和使用方法,大家可以看我之前的分享Linux里的宝塔,真正的宝塔!详细教程。
2、所有安装的应用服务,尽量不要使用默认端口号,有密码的设置密码,不要嫌麻烦,可以是用http://1password.com这个网站生成随机密码,我之前也分享过一个脚本~
import string
import randomwhile True:
try:
password_len = int(input('请输入密码长度(只能是数字):'))
password = ''.join(random.choices(string.printable.strip(), k=password_len))
print(f'你的新密码为:{password},请保存好~')
except Exception as e:
print(f'【出错啦】看看是不是输入错误吧,可能是输入了非数字内容,错误信息:{e}')
print('*** 想结束就输入0吧!!!***')
print('*** 回车继续生成新密码 ***')
flag = input('是否继续生成新密码:')
if flag == '0':
break
print('******************************************')复制代码
3、系统自带的防火墙、安全防护都不要关闭~
其他的方法,欢迎大家补充~就到这里啦!