七大维度谈NoSQL数据库安全风险
作者:思成 发布时间:2017-11-03

NoSQL,泛指非关系型的数据库。随着近年数据规模的爆发式增长,数据库的发展也经历了快速演变。为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,NoSQL数据库应运而生。

从2009年登上历史舞台,NoSQL数据库只用了8年时间,已经在主流数据库中占据3个席位。相较传统的非关系型数据库,NoSQL凭借其读取数据的高效性、易扩展性等优势,在众多细分领域应用中取得主导地位。例如电商行业:其业务属于标准的多读少写、事物简单,数据关系不复杂,这部分业务应用NoSQL会事半功倍。

01.jpg

NoSQL数据库不像标准关系形数据库有明确的定义,权威的规范,每种不同NoSQL适合的细分领域也多有不同,NoSQL从大类可以分成四类:

  • 键值数据库

  • 文档数据库

  • 列族数据库

  • 图数据库

仍以电商为例,该行业某些业务中使用的是键值数据库和文档数据库,本文对NoSQL安全问题展开分析也将主要从这两大类数据库类型入手。

一、NoSQL安全问题综述

NoSQL数据库在设计之初,就是为大大提升用户使用效率,所以并未做安全考虑。因此,NoSQL数据库普遍存在大量安全问题。安全问题主要可以分为七大类,分别为:

  • 身份认证

  • 权限控制

  • 审计

  • 通讯加密

  • 数据加密

  • NoSQL注入

  • 自身安全漏洞

大约在2013年前后,一些开源项目被企业化,企业化后企业版在一定范围内解决了一部分NoSQL数据库的安全问题。但大部分解决方案是以牺牲性能为代价,并不具备优良的推广性。大部分用户使用最多的还是社区版,该版本存在诸多安全问题,列举如下:

1)身份认证安全问题

无密码的身份认证安全问题

由于NoSQL中默认没有用开启户身份认证机制,所以任何用户都可以伪装成合法用户来访问数据库,并对数据库中的数据进行各种操作。如2016年底至2017年初兴起的一股针对NoSQL数据库的勒索行动,就是利用无身份认证登陆上NoSQL数据库实施敲诈勒索,这只是此安全隐患最简单的利用方式。很多时候黑客会以NoSQL数据库为跳板入侵NoSQL数据库所在的服务器,甚至整个网络环境。目前,最直接的解决方法就是给NoSQL加用户名和密码。

有密码的身份认证安全问题

NoSQL出于性能考量,默认不设置用户名和密码。要解决身份认证安全问题,一般采取两种方法。一种是使用NoSQL数据库自身支持的简单身份验证。通过客户端获取用户名和密码,然后和数据库中对应的记录进行比对,吻合则批准登录。该方法在抗暴力破解和网络窃取上非常差,一旦用户数量过多会引起性能的严重下降,所以部分NoSQL数据库不支持多用户登录。

另一种解决方案是以Hbase为代表,引入成熟的身份认证机制Kerberos来完成身份认证工作。该方式较适合以计算为主业的NoSQL数据库,对于要求执行效率和以大量查询为主要的业务并不适合。随着用户数量增长,并发量不断提高,KCD(密钥奋发中心)很快会成为整个业务流程的瓶颈。

2)权限控制

NoSQL数据库不仅缺乏身份验证,更缺乏对每个数据库用户的权限控制。很多NoSQL数据库,把自己当作“应用数据库”去设计,完全不关心数据库用户之间的权限区别,导致任意用户都相当于ORACLE数据库的sys用户。这种权限的混乱可能导致应用侧、运维侧两个层面的三种安全风险:1、缺乏命令权限控制;2、缺乏集合访问权限控制;3、缺乏集合内部数据访问控制。

NoSQL中有两类权限,一类是调用脚本的权限;另一类是对数据库系统的权限。Redis在这部分做得较差,任意用户都可以调用这两类权限,导致数据库面临安全威胁。一些重视安全的NoSQL数据库具备一定的访问控制能力,但仍缺乏细粒度的访问控制能力。

3)通讯加密

NoSQL数据库不仅身份验证是明文传输,后面的请求和结果集同样也是明文传输。这会导致户隐私数据、系统敏感信息在传输过程被窃取。解决通讯加密一般会提供一个附加的SSL安全层,但ssl安全层会拖慢整个业务的执行速度。后文会给出相应解决方案。

4)审计

NoSQL数据库缺乏审计能力,部分NoSQL数据库可以通过配置添加日志监控来完成一部分审计功能。通过日志的记录来判断整个流程中是否存在问题。这种日志的记录缺乏特征的判断和自动提示的功能。后面我们会用NoSQL审计产品完善审计功能的缺失。

5)数据加密

NoSQL数据库缺乏对数据的存储保护,所有数据均是明文形式存储,超管可以不经过用户允许直接查看、修改用户在云端保存的文件,很容易造成数据泄露。因此,需要常态保持加密,只允许具有固定身份的用户拿到明文,这样既保护了数据安全又强化了数据库权限控制。

6)NoSQL注入

虽然NoSQL数据库不再支持sql语句,也就没有了sql注入的威胁,但存在另外一种威胁——NoSQL注入威胁。NoSQL注入和其他注入类攻击类似,能获得数据库中整个集合(表)的信息,甚至通过改变语义,获得其他集合(表)中的敏感信息。目前已发现的SQL注入有重言式、联合查询、JavaScript注入、背负式查询四种。

02.jpg

7)自身安全漏洞

除了上述由于设计理念和web导致的安全风险外,NoSQL数据库本身也存在一些安全漏洞。主要集中在三方面:1、泄露敏感数据;2、越权操作;3、录调用的函数存在缓冲区溢出漏洞,会导致服务宕机。解决方法有二:1、及时打补丁;通过漏洞防护技术进行防护。

二、NoSQL安全解决方案

NoSQL数据库的设计目标是追求极致的效率和简易扩展性,设计者假设NoSQL数据库在一个绝对安全的环境下运行。现实中并没有绝对安全的运行环境,因此不可避免的出现了很多安全问题。

03.jpg

安华金和基于在数据库安全领域的深厚积累和业务前瞻性眼光,密切关注大数据安全的体系搭建,从专业角度提出针对NoSQL数据库全方位的安全解决方案,该解决方案主要由三部分构成。

第一部分如上图黄线所示,采用NoSQL漏扫产品,对NoSQL数据库进行弱口令、CVE漏洞、未使用安全配置进行检测,并生成报告提醒管理人员对NoSQL数据库进行安全加固。通过配置可以解决一部分安全问题,但很多细节问题难以解决。

于是需要引入上文红线所示的一套NoSQL防火墙+加解密代理。作为整套实时防护技术的核心,NoSQL防火墙通过截获web端到数据的数据,对数据进行分析,获取登录信息后进行一系列身份验证。在确定访问用户后,经过判断权限来决定放行与否。此外,NoSQL防火墙还是应对暴力破解的好手。如果单位时间内同一用户错误登录10次,则会对该用户的登录进行限时禁止行为,防止数据库被暴力破解。基于NoSQL防火墙对NoSQL数据库的语法解析能力,提炼出特定特征可以有效阻止NoSQL注入和CVE漏洞攻击,防止低权限用户越权操作。尽管NoSQL防火墙可以解决身份认证、细粒度访问控制、暴力破解、NoSQL注入、CVE漏洞攻击等问题,但欠缺对明文数据的保护。作为必要补充,部署加解密代理可以有效应对这个问题。数据通过加解密代理存入数据库后成为密文形态。加解密代理和NoSQL防火墙联动,保证只有具备访问目标value值的用户拿到的返回值才是明文,其他用户即使获取数据也是密文形态。

第三条绿线则是通过部署NoSQL审计产品对数据库的行为、动态进行更深入细致的追查。在事后为客户追查问题,提供有力保障。

至此,安华金和所提供的完整的NoSQL数据库安全环境搭建完毕。这个环境从事前、事中和事后三个层面,以纵向包裹整个NoSQL数据库, 从而保障数据库的安全。