如何避免数据库“勒索事件”和“从删库到跑路”的尴尬
摘要:8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了一线数据库实践经验和技术干货。在本次峰会上,阿里云数据库技术专家张友东(林青)分享了如何从代码层面做好数据库安全防护,以及如何避免频发的数据库“勒索事件”的发生,帮助大家了解了数据库安全防护需要注意的事项。以下内容根据演讲嘉宾现场视频以及PPT整理而成。
近年来,数据库安全问题逐渐引起大家的关注和重视,本次分享的主题就是如何去应对数据库安全所面对的问题。本次的分享主要将围绕以下三个方面:
- 2017数据库安全事件及反思
- 如何让你的数据库更加安全可靠?
- 阿里云数据库为你的数据保驾护航
一、2017数据库安全事件及反思
2017年1月,MongoDB赎金事件
在今年的1月份,MongoDB黑客勒索赎金事件在互联网上闹得沸沸扬扬。这个事件大致就是某一天你发现自己的数据库无法访问了,当登陆到数据库上去看时发现数据库中的数据全都没有了,而只有黑客留下的一些记录,里面的内容大概就是“你的数据库已经被我黑掉了,而且我已经对于你的数据库进行了备份,如果你想拿回自己的数据,就需要向某个比特币账户中转一笔钱。”,其实这与现实生活中的绑架勒索的性质基本相同。




- 这些数据库之所以会被黑客攻击,一个原因是这些数据库开放了公网访问,使得任何一台连接到公网的机器都能够访问到。除此之外,这些数据库也没有开启鉴权,所以导致黑客能够轻松地访问用户的数据库,造成了用户的数据损失。
- 受到影响的用户对于数据的备份不够重视,因为如果用户对于数据进行了备份,即使黑客将数据删除了,用户也可以通过备份数据来进行恢复。
2017年1月,炉石传说数据库故障
接下来和大家继续探讨2017年1月份的另一起数据库安全事件,也就是炉石传说数据库故障事件。这个事件并没有公布技术细节,只有炉石传说的官方公告。炉石传说在1月14号因为机房断电导致的出现了数据库故障,最终导致整个服务停了四五天,最终在1月18号将数据回滚到14号的某一个时间点。

- 炉石传说并没有做高可用的机房容灾,因为整个机房挂了,于是服务就停了。
- 整个数据恢复使用了四五天的时间,所以在数据恢复方面的工作还是存在一定欠缺的。
2017年2月,Gitlab数据库误删
在2017年2月份还出现了一起数据库安全事件,就是Gitlab的数据库误删事件。这个事件的发生完全是因为运维同学鏖战到深夜的时候,在已经非常疲劳的情况下把某一个数据库误删掉了。这个事件当时也导致Gitlab的整个服务都停掉了,但是做的比较好的一点是Gitlab将他们对于整个事件的处理过程在互联网上进行了直播,同时将改进的措施通过分成很多个issue来实现。


- 黑客攻击,黑客攻击存在不同层面,也有很多种攻击方法。
- 硬件故障,如果数据库服务只部署了单个节点,当单个节点挂掉之后,整个数据库就无法提供服务了。
- 软件缺陷,数据库服务毕竟是软件系统,当软件存在Bug的时候,也往往会造成安全问题。
- 运维失误,类似于刚才提到的Gitlab事件,数据库往往是由运维同学管理的,而运维同学可能会发生一些运维的失误,这也可能造成数据的丢失。
- 自然灾害,类似于之前的炉石传说的机房断电以及其他可能的自然灾害导致机房数据无法恢复。
二、如何让你的数据库更加安全可靠?
三招搞定数据库安全
面对这么多数据库安全的威胁,我们应该如何去做数据的安全防护呢?其实总结而言,只需要三招就能搞定数据库安全。第一招:安全配置,从单个数据库节点的数据来看,应该尽可能地进行安全方面的配置来避免遭受黑客攻击以及非法访问等。第二招:高可用部署,尽可能地部署多节点来构成的高可用数据库服务,这样就能够应对硬件故障的问题,当单个节点出现问题的时候,可以直接启用备用节点来顶上;当软件出现Bug导致数据库崩溃的时候,也可以通过高可用将故障进行转移。第三招:数据备份,做好数据备份就可以应对运维的失误以及自然灾害等问题。通过以上的三个步骤,就可以使得数据库达到比较安全的状态。

第一招: 数据库安全配置
接下来为大家更加详细地介绍如何使得数据库更加安全可靠。首先分享如何对数据库进行安全配置。因为用户的业务性质往往各不相同,所以对于数据库安全的要求级别也会是不一样的。这里的数据库配置将会分为三个维度进行介绍,分别是基础安全防护工作、进阶模式和更高层级的数据库防护需要做的工作。

在基础的安全配置完成之后,就可以更进一步地去实现进阶的配置。进阶的配置主要分为两部分,第一部分是开启鉴权之后,因为有很多个用户需要去访问数据库,而这些用户往往会拥有不同的角色,比如开发、运维、DBA以及测试等等,所以需要尽量地为不同的角色配置不同的操作权限,而不是一股脑地为所有的用户都赋予Root权限,使得所有的用户能执行一切操作。具体给什么权限呢?其实这里应该使用最小化权限原则,用户需要什么样的权限,那就只给用户能够满足需求的最低权限。这样就能够尽量地避免一些误操作,也能够避免在出现数据误删事件之后,各个角色之间相互甩锅,当为不同用户分配了不同的权限之后,这样的问题就可以避免了。同时还可以开启审计日志,审计日志就是可以将所有数据库的操作都记录下来,具体是哪个用户操作的、操作用了多长时间、整个操作的执行计划等都可以详细地记录下来,这样就能将所有的操作都实现有据可查,即使发现数据库的误删动作以及非法访问都可以立即查出是谁做的。而且通过开启审计日志,还可以方便地查看数据库的运行状态是否是健康的。
如果用户想要获得更高级别的数据库安全配置其实可以做两部分的工作,其中一部分工作就是实现SSL链路加密。通过SSL链路加密能够避免数据被抓包的风险,并且在开启SSL链路加密之后,客户端和数据库服务端存在一个相互认证的过程,这样就可以避免遭受中间人攻击。除了链路加密,为了达到更高的数据安全级别,还可以在数据存储的时候进行数据加密,也就是TDE数据加密,这个通常是由数据库存储引擎在将数据存储到磁盘上的时候来做的透明的数据加密。而这样的整个加密过程对于用户而言是完全透明的,用户不需要去修改自己的访问业务代码。
第二招: 数据库高可用部署
以上所提到的三个层次的数据安全配置方式是需要根据用户自身业务的不同需求来进行配置的。单个节点的安全配置可能主要是为了防止数据库被黑客入侵,但是如果发生了硬件故障或者软件故障导致数据库崩溃,想要实现数据库的安全转移,就需要实现数据库的高可用部署。那么如何实现整个数据库集群的高可用部署呢?总结而言,数据库的高可用部署主要可以分为三种模式,分别是外部支持、内建高可用以及通过计算和存储分离将数据库的数据存储到共享存储之上,让共享存储来负责数据库的安全。这三种模式中,外部支持常见的有MySQL的MHA、Redis的Redis-sentinal,以及PGPool和Keepalived等都是实现的外部支持的高可用。在内建支持高可用方面,像MySQL Group Replication、MongoDB Replica Set以及阿里云最新上线的MySQL金融版都提供了内置的高可用策略。而在共享存储方面,主要有一些比如将数据放到SAN存储上,或者使用DRBD共享磁盘存储,而且阿里云即将上线的PolarDB数据库也实现了类似的共享存储模式。

外部支持示例:MHA for MySQL

内建高可用示例:MySQL Group Replication

共享存储案例:阿里云PolarDB

第三招: 数据库备份
以上的三个例子介绍了目前数据库的高可用是怎样实现的,接下来介绍如何实现数据库的备份。很多人对于数据库的备份存在着一个疑问:之前已经实现了数据库三节点了,通过三节点已经将数据存储了三份了,那么为什么还需要去做数据备份呢?其实一定是需要做备份的。这里就需要谈到做数据备份究竟有什么样的好处了,假设刚才实现了三节点数据库的部署,这样所能够应对的场景就像三节点的其中一个节点的硬件出现故障了,这时候可以自动fail over,或者其中某一个节点因为软件Bug导致整个数据库崩溃了,但是还有多个节点可用,这样整个数据库服务仍旧是处于可用状态。而备份所解决的问题却是:对于刚才的场景,假如运维同学对于三节点数据库做了误操作,向主节点发送了“drop database”删除数据库的操作,这样整个数据库就会从主节点删除掉了,同时这个删除动作也会同步到备节点上去,也就是对于像误删这样的场景,所有的节点上的数据都是会丢失的。还有就是类似于误删的黑客删库攻击,也会将整个数据库都删除掉,而且这将会是无法恢复的。除此之外,如果发生了自然灾害,或者整个机房出现了故障,数据也都会丢失,这时如果进行了数据库的备份,以上的场景就都能够覆盖了。

全量备份方法

逻辑备份 vs 物理备份
逻辑备份和物理备份的区别以及对于数据的影响存在多大的差异呢?我们又应该如何选择数据库备份策略的时候呢?下图就为大家进行了简单对比,从五个维度来对于逻辑备份和物理备份进行对比。

增量备份方法

三、阿里云数据库为你的数据保驾护航
接下来介绍阿里云的数据库是如何实现数据安全防护的,其实阿里云数据库安全防护也是基于上述的安全配置、高可用部署以及数据备份这三个策略。阿里云数据库——ApsaraDB目前的数据库产品已经支持了整个DB Engine排名前十的绝大部分数据库,比如关系型数据库的MySQL、SQL Server、PG以及NoSQL数据库中的MongoDB、Redis以及HBase等。

ApsaraDB 安全体系总览
下图是ApsaraDB安全体系的总览,主要分为了三个维度:最内侧的框表示的是ApsaraDB在单节点上所做的安全工作,比如链路加密、访问鉴权以及防止SQL注入等;这一层往上就是在单节点实现了安全配置之后的高可用部署,最外面一层就是在高可用基础之上做的数据备份以及机房容灾工作。

ApsaraDB 数据安全特性

- 在数据库接收请求开始就支持SSL链路加密,也就是说可以配置数据库使得所有请求的网络数据都是加密的,这样可以免除数据被抓包的风险,还能避免中间人攻击。
- 当加密的数据到达数据库,开始处理用户请求之后,还提供了鉴权以及白名单策略。首先鉴权是默认开启的,如果用户希望使更多的服务器能够访问数据库就需要去开启白名单,通过鉴权+白名单这两个策略来尽量地避免非法访问。
- 在通过了鉴权和白名单之后还会进行SQL检测,因为SQL访问可能包含像SQL注入这样的攻击,所以需要对于用户的SQL进行防止注入的检测。
- 同时,如果配置了审计日志就会把所有的访问都记录到审计日志里面,有了审计日志之后,所有的请求以及所有数据库的操作都是有据可查的并且是可以回溯的。
- 在最底层数据存储到磁盘的时候还可以配置TDE存储加密,这样使得最终的数据以密文的形式存储到磁盘中,这样即使对方拿到数据文件也无法读取其中的数据。
- 最后,阿里云还会提供数据保险服务,用户可以为自己的数据库购买保险,当出现黑客攻击、数据库被破坏的情况发生时,可以获得一定的赔付。
总结而言,对于整体安全策略而言,在故障发生之前,通过SSL、鉴权等策略尽量避免非法请求进入数据库。当访问进来之后,通过SQL检测,在事中对于安全策略进行加固,尽量地避免攻击。在事后,通过审计日志将访问请求都记录下来,更好地发现攻击以及误删等问题。最后,通过第三方数据保险使得用户在数据丢失时获得一定的经济补偿,来弥补所受到的损失。以上这些就是阿里云ApsaraDB单节点上的数据库安全特性。
ApsaraDB 高可用

ApsaraDB 任意时间点备份恢复

ApsaraDB 容灾

ApsaraDB 源码能力 + 专家服务

最后更新:2017-09-02 01:33:42