云服务器安全防御记录

前言

由于对安全防御缺乏认识,在管理阿里云服务器一年半时间后,出现了一次业务数据库被勒索事件。具体记录就是业务数据库被删除,勒索病毒自己创建一个数据库,插入一条数据,数据大概内容就是你们的数据库已经被我黑了,我们现在还保有备份,请在什么什么日期之前转多少比特币到哪,如果不转,我们将把数据库备份删除。大概这些内容,这件事发生在要为客户演示之前一天,演示数据库丢失,由于之前已经跟开发人员沟通做好数据库备份,演示问题不大。其实在阿里云平台报告系统漏洞等安全隐患时,我也曾给出建议,建议公司老大购买安全产品进行防御,但是公司老大可能感觉测试服务器无关痛痒没必要把钱花在云服务器上。所以一直没去特意处理云平台安全中心报出的漏洞和隐患,这其实也为以后中勒索病毒埋下了伏笔。这其中还有很重要的一个原因,事发之后我和其它公司做技术的朋友聊过这件事,发现大家都有一个共同的错误概念:云服务器怎么可能被黑?大家都错误得以为云服务器已经自带很多安全机制了·····而实际上我当初租的就是只带操作系统的最基础的ESC云服务器而已。

安全隐患解决记录

根据阿里云基线检查,进行解决,修改安全隐患:

1.修改服务器root密码        
切换到root账号,输入:passwd,输入新密码即可        
阿里云修改建议:请修改为12位以上,数字/字母/特殊字符组合的强密码        
        
2.开启服务器防火墙,开启所需端口        
常用端口:mysql端口,nginx端口,tomcat端口,redis端口等        
开启防火墙:sudo ufw enable 关闭防火墙:ufw disable 防火墙状态:ufw status        
外来访问默认允许/拒绝:ufw default allow/deny        
允许/拒绝 访问20端口:ufw allow/deny 20 (20后可跟/tcp或/udp,表示tcp或udp封包)        
ufw allow/deny servicename:ufw从/etc/services中找到对应service的端口,进行过滤。        
ufw allow proto tcp from 10.0.1.0/10 to 本机ip port 25:允许自10.0.1.0/10的tcp封包访问本机的25端口。        
ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则        
        
3.修改mysql默认的端口号        
命令行用root账号登录mysql,查看端口号:        
show global variables like 'port';        
查看到端口号为3306        
ubuntu16.04编辑的配置文件为:        
/etc/mysql/mysql.conf.d/mysqld.cnf        
/etc/mysql/mysql.cnf        
修改这两个文件的端口号为2032        
修改后,重启mysql服务        
再次查看端口号为2302:show global variables like 'port';        
在阿里云控制台的安全组规则开启2032端口        
        
4.mysql禁用符号链接以防止各种安全风险        
编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置symbolic-links=0,5.6及以上版        
本应该配置为skip_symbolic_links=yes或skip-symbolic-links,并重启mysql服务。        
mysql5.7中编辑文件:/etc/mysql/mysql.conf.d/mysqld.cnf        
阿里云安全中心怎么改配置此项检查都过不去,而且确实也改了,最后根据客服回复:选择忽略        
验证修改成功:show variables like 'have_symlink';        
显示为:DISABLED        
        
5.确保没有用户配置了通配符主机名        
避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网        
加固建议:        
执行SQL更新语句,为每个用户指定允许连接的host范围。        
①登录数据库,执行use mysql;        
②执行语句select user,Host from user where Host='%';查看HOST为通配符的用户;        
③删除用户或者修改用户host字段,删除语句:DROP USER 'user_name'@'%';         
更新语句:update user set host = 'new_host' where host = '%';        
④执行SQL语句: OPTIMIZE TABLE user; flush privileges;


6.禁止自动部署(Tomcat)---此问题忽略        
配置自动部署,容易被部署恶意或未经测试的应用程序,应将其禁用        
解决办法:        
修改Tomcat 跟目录下的配置文件conf/server.xml,将host节点的autoDeploy属性设置为“false”,如果host的deployOnStartup属性(如没有deployOnStartup配置可以忽略)为“true”,则也将其更改为“false”


7.删除项目无关文件和目录        
Tomcat安装提供了示例应用程序、文档和其他可能不用于生产程序及目录,存在极大安全风险,建议移除    
解决办法:        
请删除Tomcat示例程序和目录、管理控制台等,即从Tomcat根目录的webapps目录,移出或删除docs、examples、host-manager、manager目录。
    
8.Tomcat目录权限检测        
在运行Tomcat服务时,避免使用root用户运行,tomcat目录(catalina.home、  catalina.base目录)所有者应改为非root的运行用户
解决办法:        
使用chown -R <Tomcat启动用户> <Tomcat目录>修改tomcat目录文件所有者,        
如chown -R tomcat /usr/local/tomcat        
路径添加用户组:chown -R tomcat.tomcatgroup /usr/local/apache-tomcat-8.5.27/        
查看用户组:cat /etc/group        
查看用户:cat /etc/shadow        
增加用户组tomcatgroup:groupadd tomcatgroup        
增加用户tomcat并指定该用户home目录和用户组:useradd tomcat -d 目录 -g tomcatgroup为tomcat用户设定密码:passwd tomcat    #添加已存在的用户tomcat到用户组tomcatgroup中:usermod -a -G tomcatgroup tomcat

9.禁止显示异常调试信息            
当请求处理期间发生运行时错误时,ApacheTomcat将向请求者显示调试信息。建议不要向请求者提供此类调试信息。            
解决办法:            
在Tomcat根目录下的conf/web.xml文件里面的web-app添加子节点:            
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>    
在webapps目录下创建error.jsp,定义自定义错误信息。


10.设置密码过期时间            
设置密码失效时间,强制定期修改密码,减少密码被泄漏和猜测风险,使用非密码登陆方式(如密钥对)请忽略此项。            
解决办法:            
在 /etc/login.defs中将 PASS_MAX_DAYS 参数设置为 60-180之间,如            
PASS_MAX_DAYS 90            
需同时执行命令设置root密码失效时间:            
chage --maxdays 90 root            
            
11.设置密码修改最小间隔时间--忽略            
设置密码修改最小间隔时间,限制密码更改过于频繁            
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7            
PASS_MIN_DAYS 7            
需同时执行命令为root用户设置:            
chage --mindays 7 root            
            
12.设置SSH空闲超时退出时间--忽略            
设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险            
解决办法:            
编辑/etc/ssh/sshd_config,将ClientAliveInterval =设置为300到900,即5-15分钟,            
将ClientAliveCountMax设置为0-3之间。            
ClientAliveInterval 600            
ClientAliveCountMax 2            
            
13.设置用户权限配置文件的权限            
设置用户权限配置文件的权限            
解决办法:            
执行以下5条命令            
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow            
chmod 0644 /etc/group            
chmod 0644 /etc/passwd             
chmod 0400 /etc/shadow             
chmod 0400 /etc/gshadow             
            
14.密码复杂度检查--忽略            
检查密码长度和密码是否使用多种字符类型            
解决办法:            
1、安装PAM的cracklib模块,执行命令:            
apt-get update&&apt-get install libpam-cracklib            
2、编辑/etc/pam.d/common-password,            
在password requisite pam_cracklib.so开头的这一行配置            
minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中的3类或4类)            
设置为3或4,即在行末尾加上参数minclass=3;在password [success=1 default=ignore] pam_unix.so            
开头的这一行增加配置minlen(密码最小长度)设置为9-32位,建议为9,即在行末尾加上参数minlen=9            
            
15.检查密码重用是否受限制--忽略            
强制用户不重用最近使用的密码,降低密码猜测攻击风险            
解决办法:            
编辑/etc/pam.d/common-password,在password [success=1 default=ignore] pam_unix.so开头的            
这一行增加配置remember设置为5-24之间,建议为5,即在行末尾加上参数remember=5            
            
16.USN-3932-1: Linux内核漏洞            
修复命令:apt-get update && apt-get install linux-image-generic            
            
17.阿里云标准-Redis安全基线检查            
①禁止监听在公网            
Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。            
加固建议:            
在redis的配置文件redis.conf中配置如下: bind 127.0.0.1或者内网IP,然后重启redis            
②限制redis 配置文件访问权限            
因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600            
加固建议:            
执行以下命令修改配置文件权限:            
chmod 600 /<filepath>/redis.conf            
③修改默认6379端口            
避免使用熟知的端口,降低被初级扫描的风险            
加固建议:            
编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis            
④开启redis密码认证,并设置高复杂度密码            
redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。 redis因查询效率高,auth            
这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。            
加固建议:            
打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:            
a、长度8位以上            
b、包含以下四类字符中的三类字符:            
英文大写字母(A 到 Z)            
英文小写字母(a 到 z)            
10 个基本数字(0 到 9)            
非字母字符(例如 !、$、%、@、^、&等,#除外)            
c、避免使用已公开的弱密码,如:abcd.1234 、admin@123等            
再去掉前面的#号注释符,然后重启redis            
⑤禁用或者重命名危险命令            
Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或            
者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。            
加固建议:            
修改 redis.conf 文件,添加            
rename-command FLUSHALL ""            
rename-command FLUSHDB  ""            
rename-command CONFIG   ""            
rename-command KEYS     ""            
rename-command SHUTDOWN ""            
rename-command DEL ""            
rename-command EVAL ""            
然后重启redis。 重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,            
如: rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC            
            
18.mysql:禁用local-infile选项---暂时忽略            
禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力            
加固建议:            
编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务:             
local-infile=0            
local-infile:本地批量导入和导出数据            
            
19.SSH暴力破解,如何防御?            
参照URL:            
    https://www.freebuf.com/sectool/159488.html        
    https://blog.csdn.net/openinfra/article/details/88872989        
更改ssh端口号为2323            
    vim /etc/ssh/sshd_config        
    在/etc/hosts.allow中设置允许的IP访问,例如sshd:192.168.17.144:allow        
    如果开启左右访问:ufw allow 2323        
    如果阿里云服务器在云服务器实例中需要添加安全组2323

结论

发生勒索病毒,虽然可以直接删除勒索数据库,把备份的数据库再构建回去,但是从此也开始注意服务器安全问题,联系阿里云客服寻求解决方案。以下是阿里云客服的回复:

[问题定义] 描述问题:业务数据库被黑,并创建数据库,在数据库中写入勒索信息 实例ID: 接下来,我们将对上述问题进行分析排 查,如果针对上述问题定义及范围有任何疑问,欢迎随时联系我们。  [处理建议] 您好,非常抱歉让您久等了,经过我们排查分    析,我们针对于这种加密勒索病毒的情况也无能为力。这种情况下恢复类似于破译密码,难度几乎不可能完成的,由于您没有更早时间的快照备份,因此目前我们无法恢复。建议您看下市面上第三方数据恢复公司看下能否帮您处理。后续还请您务必做好服务器以及数据库等应用安全加固工作,给您提供以下建议和方案:                     
1. 建议使用安骑士企业版病毒自动隔离(即病毒自动查杀)功能为您提供精准防御能力。目前已支持主流勒索病毒、DDOS木马、挖矿和木马程序、恶意程序、后门程序和蠕虫病毒等类型。                     
2. 加密勒索事件防护方案 https://help.aliyun.com/knowledge_detail/48701.html            
3. 预防数据库勒索事件https://help.aliyun.com/knowledge_detail/60893.html 

通过阿里云工单的回应及电话客服的建议,得出结论

对于已经发生勒索病毒,属于强力破解,问题很严重,出现这种情况只有两种解决方案:①重做系统②换云服务器否则已经被黑客定位到ip很难做到全新防范。换服务器后,最好也为阿里云ECS服务器配置企业级病毒查杀和安全漏洞的检测,因为一切严重安全事件的发生都是从漏洞开始的。(冰冻三尺非一日之寒)

以阿里云平台解决方案,为了防止数据丢失情况,使用"企业版云安全中心"是基础,最保险的方法是购买RDS阿里云专业数据库服务,此服务使数据绝不会出现安全事件。

根据以下配置,以下是云安全中心、RDS、阿里云的一年的租金:

①RDS阿里云专业数据库服务

8G内存+2核心+2000连接数+500GB存储,一年5900¥。

②云安全中心

企业版安全防护,企业级基础版,一年1785¥。

③阿里云ECS云服务器

2核8G内存,2MB带宽,100GB系统盘20GB数据盘,一年3988¥

ECS+RDS+安全防护一年一共:5900+1785+3988=11673¥

这只是当前时间点基础版的配置参数,具体参照阿里云平台。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戰士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值