目录
- 引言
- 一、事件概述
- 1. 异地登陆
- 2. 挖矿程序
- 3. 密钥未注册
- 4. 勒索病毒
- 二、问题分析
- 1. 异地登陆
- 2. 挖矿程序
- 3. 密钥登录失效(密钥未注册)
- 4. 勒索病毒
- 三、安全知识讲解
- 1. 密钥登录
- 四、总结
引言
因为是第一次租云服务器,所以出现了很多的问题,最严重的就是安全问题了,而且问题还是很多的。因为黑客会用各种方式入侵你的服务器,来使用你的服务器资源挖矿,或者获取你服务器的信息,甚至将你的数据锁住来让你给他转账。这些问题真的防不胜防,身为一个程序员,在进行项目开发的时候,首先要考虑的就是安全问题,接下来我将以时间线来叙述我遇到的安全问题,以及怎么提防。
一、事件概述
1. 异地登陆
因为是第一次租服务器,啥都不懂,只知道设置个密码,通过密码登录Workbench远程连接,属于是小白一个。之后登录云服务器管理控制台时,显示我的服务器存在风险,内容是异地登陆,ip显示广州(再之后又有陆续的云南、咸阳、香港等),我当时觉得自我感觉良好,因为觉得你登就登呗,我服务器又没啥你用的,而且也没影响我的正常使用,就没管了。
之后我不知道是安全意识上来了可能,也可能是因为觉得使用密钥登录很帅,就学人家,把密码登录的方式禁用了,改为使用密钥登录,也是防止异地登录的原因。
2. 挖矿程序
之后我的服务器就连接不上了,我很疑惑,觉得密钥是对的啊,通过XShell7和CLion连接不上,但好像通过有时Workbench能连上,有时使用密码都连不上,这就不知道怎么回事了。然后我发现我的CPU使用率异常的高,高达90%多,当时不知道怎么回事,以为是我的程序的问题,因为对这CPU资源也没啥概念,觉得就是个2核2G的服务器,觉得应该就是这样的,当时还想着升级一下服务器,但太贵了,就打消了念头。当时是通过反复的关机重启,然后让我的服务器能正常的工作。之后通过云安全中心看到检测到了挖矿程序,才明白,但为什么还能使用我的服务器。
3. 密钥未注册
使用密钥登录刚开始的时候还是好的,不过之后就出现了使用密钥登录不了的情况,这让我感觉有点疑惑,因为我也不知道密钥登录的原理是什么,所以自己也是一头雾水。我以为是自己的密钥有问题,因为用XShell7远程连接时,显示密钥未注册。所以我就从控制台上把密钥解绑然后删除,然后重新创建一个密钥登录,第一次成功了,过了一会就又连接不上服务器了,又是刚才的问题,而且在这期间,居然也出现了异地登陆出现,我原以为他们是通过暴力枚举连接上我的服务器,但是现在我禁用了密码登录的方式,改为使用密钥登录,但也不行,这我就更不明白了。我就网上各种找原因,也没找到解决办法,自己没有从根上解决这个问题。然后就没办法,自己的学习开发之路不能停,所以只能改为密码登录了,通过VNC远程连接设置。
之后,我依然倔强的禁用了密码登录方式,使用密钥登录,因为这期间也知道了密钥登陆的大概原理,觉得应该是创建密钥时,把公钥文件没写进磁盘中(当时可不知道是公钥),所以我就看网上的教程,通过ssh命令的方式生成密钥对,然后将公钥存放到root下的.ssh文件夹里,把私钥存放到本地磁盘。
4. 勒索病毒
之后的某一天,又发生了同样的问题,使用密钥登录不了了,我熟练的通过解绑创建密钥对的方式,重新登录结果不行,然后折腾了一两天觉得还是不能耽误开发,就想着改用密码登陆吧,好歹能连上服务器,我熟练的使用VNC修改配置文件,保存时,发现该文件是只读文件,我一下子就纳闷了,然后我使用ls -l
查看文件权限,发现确实没有写权限(之后发现我所有的文件都没有写权限,即使我是root用户也添加不了写权限),我就是使用chmod命令修改权限,结果失败了,提示什么什么ReadOnly,我就想我是root用户诶,我为什么修改不了,这是我从未遇到的问题,然后就网上查资料看文档,也没解决啥,我不知咋的就跑到root文件夹里,在里面发现了两个文件JKkaqk.lockedfiles
和'Your data has been locked!.txt'
,然后我就打开后一个文件,里面的内容是这样的:
大概的翻译如下图,主要的意思就是:你的数据被锁住了,但没有被泄露,如果你有备份,你可以自行恢复(因为我可以直接初始化磁盘,但是所有的源码和依赖库就都没了)。你需要支付1.00monero币(加密货币,约3400多人民币)到一个钱包地址,然后将我的id和支付截图发送到他的邮箱,就会解锁我的数据。
然后我就意识到了我的服务器被黑客入侵了,我的第一反应就是绝对不向你屈服,所以就没考虑这方面的事,3400多RMB的事是我后来感兴趣才查的,所以不是这个原因,当时想的是一毛钱也不给你。然后就去网上查资料,这事折腾了一两天,是第二天才知道被入侵了,第一天晚上使用免费的病毒检测,才发现自己服务器上全是病毒:持久化后门
、紧急安全事件:自启动后门
、Redis配置不当致使Root被提权
、修改装载库文件
,然后第二天在网上查了一天,才知道可以通过初始化磁盘的方式来解锁,代价就是我的所有源码和安装的依赖库都要重新来一遍。这时自己才意识到安全问题的重要性,幸好自己是远程开发,源码都在本地,只不过上传到服务器运行而已,但要在服务器有那问题就真的太严重了,还有就是安装的依赖库都要重新安装。我就通过云服务器管理控制台初始化了我的磁盘,然后禁用密码登录,采用密钥登录,这期间我才了解到密钥登陆的原理,知道了redis的一些漏洞的处理,比如修改端口、设置指定ip、用其他用户运行,开放仅使用到的端口号,运用我所知道的知识,把我的服务器保护的滴水不漏。
自从上一次入侵到现在,没有遇到过什么安全问题,而且自己的密钥也是一直能够正常使用,也没遇到过什么问题了。
二、问题分析
1. 异地登陆
原因:
应该是使用暴力穷举我的密码,然后登录。因为服务器连接不比我们正常的登录,没有输入密码限制
处理方式:
禁用密码登录,改为密钥登录。
做法:
修改/etc/ssh/sshd_config
中的PasswordAuthentication
设置为no
,这样就会禁用密码登录方法。然后可以通过阿里云控制台生成密钥对,也可以通过服务器中的ssh命令,将私钥保存到本地,公钥拷贝到服务器的~/.ssh/authorized_keys
文件中就行。需要在/etc/ssh/sshd_config
中添加如下语句:RSAAuthentication yes
和 PubkeyAuthentication yes
。
参考博客:
Linux设置密钥登录、使用第三方客户端通过密钥认证登录Linux实例 | 阿里云
2. 挖矿程序
原因:
这个时候已经执行了异地登陆的处理操作了,但还是入侵了。应该是之前留下了后门,因为我当时检测到了什么装载库被修改、持久化后门什么的。(因为处理这些问题,要付费自己就没管了hh)
处理方式:
刚租服务器时,就得把安全做到位,防止被人安插后门、修改程序啥的。自从磁盘初始化后也没检测到这些问题了
做法:
处理异地登录的做法
3. 密钥登录失效(密钥未注册)
原因:
能修改我服务器的公钥,应该就是Redis配置不当致使Root被提权漏洞
,查询了一下解释,发现有人跟我的问题相同 黑客攻防Redis拉锯战之Root提权 ,简单来说就是我使用root用户运行我的redis服务器,由于一些配置不当,黑客能够借此修改我的服务器上的ssh公钥,相当于把锁给换了,他拿他的钥匙就能登录,而我拿原来的钥匙打不开现有的锁。这导致我本地的私钥跟公钥不配对,所以才会出现在Xshell7里的该密钥未注册问题。
处理方式:
1. 修改redis默认端口号(6379)为其它 2. 将bind为我的服务器ip(只能连接服务器ip)3. 使用其它用户运行redis服务器(未使用,觉得前两种够了)
做法:
修改redis.conf
文件中的配置port xxx
、bind xxx
4. 勒索病毒
原因:
其实以上原因都已经致使对方能够访问我的服务器了。只不过目的不同罢了。
处理方式:
我已知只有两种做法:1.初始化磁盘文件。因为他也是在我本地放程序来锁住我的文件,所以直接磁盘初始化,相当于把锁也给删了,代价就是自己的源码文件和安装的库也都没了。 2. 交费
做法:
阿里云服务器初始化云盘
三、安全知识讲解
1. 密钥登录
前提:
客户端(本地)生成一个非对称加密的密钥对,密钥对只能自己有,将非对称加密的公钥拷贝到服务器的~/.ssh/authorized_keys
文件中。
流程:
客户端(本地)给服务器发送登录请求,发送一个数据,并使用自己的非对称加密私钥对其进行加密,加密后的数据和原始数据一并发送。服务器接受数据,使用自己非对称加密的公钥解密加密数据与原始数据对比,则可知该请求是“本人”。因为默认私钥只有“本人”才有,私钥与公钥是配对的,私钥加密的数据只有公钥能解开,如果所得数据是一样,则可以证明该请求对应的用户是“本人”。
四、总结
我目前的安全措施为:
- 开放仅使用的端口号
- 禁用密码登陆、开启密钥登陆
- 修改redis默认端口号,设置其只能 bind 服务器IP
目前就这些,因为遇到的问题这些就够了,目前还没有其它的安全问题,其实也算可以了,经历了之后才会更加重视这些东西,要不然以后的成本还是会越来越大的。自己还是得不断努力才行!