关于数据库加密,你不能不知道的秘密(一)

安全 数据安全
数据库是所有信息系统的核心,数据库的安全通常是指其中所存数据的安全,是网络安全、信息安全的重要组成部分。

 前言

数据库是所有信息系统的核心,数据库的安全通常是指其中所存数据的安全,是网络安全、信息安全的重要组成部分。而对数据库中数据的加密保护,是数据库安全的重要内容。但是数据库加密具有相对较高的技术门槛,对于广大用户、甚至是信息安全从业人员来说都比较神秘。本文希望通过几个相关问题的分析,来帮助大家揭开数据库加密的神秘面纱。

1. 什么是数据库加密?

数据库加密是指将存储于数据库中的数据,尤其是敏感数据,以加密的方式进行存储。

2. 为什么要对数据库加密?

数据是信息系统中最核心的资产,数据的丢失、破坏或泄漏,很可能会给企业带来难以估量的损失。对敏感数据进行加密是数据安全防护中最核心的手段之一。数据类型分两种,一种是非结构化数据,比如文档和图片,另一种是结构化数据,比如数据库中的数据。这两种形态的数据都非常重要,都需要进行加密保护。而结构化数据,通常所承载的是非常集中且极有价值的信息,因而对其进行加密保护尤为重要。而且,由于国内所使用的数据库管理系统大都是国外产品,出于安全可控的考虑,在国产数据库尚不能完全取代国外产品的现阶段,尤其需要一款纯国产的数据库加密产品。面对敏感数据频繁泄漏的严峻现实,虽然加解密过程将损害数据库的使用效率,但对数据库进行加密仍是不得不为的必要防护措施。数据库加密能够显著提升数据库的安全性。加密后,数据以密文的方式存储,防止了数据直接暴露,同时增强对加密数据的访问控制,大大降低了数据被泄漏和恶意破坏的风险。

3. 国内数据库加密产品经历了哪些阶段?

国内数据库加密产品的发展可以分为三个阶段:

[[181765]]

第一个阶段是摸索阶段。在2003年之前,国内的数据库加密手段是通过反编译国外安全数据库系统完成的。国外安全版本的数据库系统具有加密功能,有国内技术人员对其进行逆向工程,加入国产加密算法,即完成了“国产化”。该加密手段在国内某些敏感部门曾进行了小范围的应用,达到了一定的效果。但随着数据库安全技术的进一步发展,目前已退出市场。

第二阶段是国外产品导入国内市场以及国产数据库加密产品萌芽阶段。从2003年开始,几家国外的数据库加密产品厂商,为了进入中国市场,将产品界面进行“中国化”,经由香港进入国内市场。但由于国家保密政策的限制,这些被伪装成国产的数据库加密产品并没有在国内数据库安全市场大行其道,反而逐渐销声匿迹。据作者所知,国内大概还有一两家“国产化”的外国数据库加密产品在市场销售,但也是局限在很小的一个范围内,无法被国内用户广泛接受。但在这一阶段,逐渐有国内科研人员开始进行数据库加密技术的研究。2009年已有数据库加密技术的专利发明出现。其中北京理工大学戴林副教授的“一种支持密文索引的数据库透明加密方法”被学术界认为是国内数据库加密技术研究中最早最重要的一个专利发明。随后,国内陆续有研发团队开始进行数据库加密产品的开发,虽说与国外顶级技术有不小差距,但毕竟是迈出了非常重要的第一步。

第三个阶段是国产数据库加密技术逐步产品化并走向市场的阶段。从2010年开始,随着科研成果的产业化,国内市场开始出现纯国产的数据库加密产品。经过市场的磨练,产品越来越成熟,越来越为数据库安全运维人员所接受。不难预见,假以时日,数据库加密产品将成为数据库安全市场的重要力量,甚至能取代数据库审计产品和数据库防火墙产品的市场地位,成为数据库安全市场的宠儿。

4. 何为数据库透明加密?

数据库透明加密是指对库内数据的加密和解密,对数据库的访问程序是完全无感知的。特别是应用系统,不需要做任何修改和编译,就能够直接应用到加密库上。

与透明加密相对应的,是在应用系统中对数据进行加密,然后再存储到数据库中。需要真实数据的时候,从数据库中读取密文,再解密出明文。严格的说,这种方式并不是数据库加密,而是数据加密。

本文所指的数据库加密都是指透明加密。

5. 数据库加密实现方式有哪些,特性如何?

全盘加密:采用全盘加密系统或者存储加密网关系统,将数据库文件所在的磁盘扇区进行加密。当数据库访问磁盘扇区的时候,对加密扇区再进行解密。这种方式对于数据库自身来说是透明的,数据库管理系统也感觉不到加密解密过程的存在。这种加密方式工作在存储层,仅能防止磁盘丢失时敏感数据遭受泄漏。所有对磁盘具有访问权限的用户都可以访问到真实的数据库文件。因而,对于控制了操作系统的攻击者来说,并没有防护能力。

文件加密:在操作系统文件驱动层将数据库的存储文件经过加密后存储到磁盘上。当数据库访问存储文件的时候,再进行解密。这种方式对于数据库自身来说也是透明的,数据库管理系统也感觉不到加密解密过程的存在。这种加密方式能防止磁盘丢失和文件被复制导致的敏感数据泄漏。但是,对于控制了数据库系统的攻击者来说,文件还是开放的,因而也没有真正的防护能力。

数据库自带加密:某些数据库自身提供了加密机制,在数据库内核实现了存储的加密。这种加密方式能防止磁盘丢失和文件被复制导致的敏感数据泄漏。但是,对于控制了数据库系统的攻击者来说却是开放的,并没有防护能力。而且其密钥管理通常不会对数据库用户开放,安全性得不到保证,也得不到国内相关评测机构的认可。

库内扩展加密:通过使用视图、触发器、扩展索引等机制,实现透明加密。由于引入了独立于数据库的第三方程序,通过控制加密解密的权限,增加了额外的访问控制。对于数据库内不同的用户,也可以控制其对加密数据的访问。但是这种加密方式不能越过应用系统,实现应用系统用户对敏感数据的访问控制。而且这种加密方式依赖于数据库系统的扩展索引机制,并不能在所有数据库上实现。

数据库加密网关或加密驱动:通过对数据库前端部署数据库加密网关,或者通过扩展数据库访问驱动(如JDBC驱动)实现数据库加密。这种方式理论上能够支持所有的数据库,是一种通用的解决方案,且安全性更高。但是对于所有访问语句和访问机制却难以全部支持,例如对于网关之后的存储过程和触发器都无法支持。

应用加密网关:在应用系统之前放置加密网关,进一步将数据加密的位置提前,在数据进入应用系统之前进行加密。这种加密方式可以控制应用系统的用户对数据的访问权限,并且真实数据对所有数据库用户都是不可见的,是最安全的一种加密方式。事实上,这种加密方式与具体的数据库无关,是对立与数据库的。但是由于应用系统的复杂性,实现的难度也较大。

总之,数据被加密的位置离用户越近,安全性越高,同时实现的难度也越大。以上所述的几种加密方式,数据加密的位置离用户是逐步靠近的,防护能力也是逐步提升的。

目前国内数据库安全市场主流的数据库加密方式是库内扩展加密,本文中,如果没有特别指出,都特指这种加密方式。

6. 数据库加密能解决哪些具体问题?

数据库加密能够通过有效的解决如下问题,来提升数据库的安全性:

1) 防止数据库文件被下载或者复制、以及直接分析数据文件导致的数据泄漏和破坏。由于敏感数据被加密,任何直接对数据库文件进行分析的攻击方式,都只能看到密文。

2) 防止DBA或高权限帐号密码泄露导致的数据泄漏和破坏。DBA或者高权限账号被攻击者获取后,虽然攻击者能够得到数据库中的全部数据,但是由于敏感数据是被加密的,所以仍然不能获得明文。或者攻击者试图修改授权用户的访问密码进行身份伪造攻击,但是加密系统额外的身份认证机制能够对这种伪造身份进行识别,致使攻击者仍然无法获取真实数据。

3) 部分的防止SQL注入方式拖库泄漏全库数据和数据破坏。SQL注入攻击者通过拖库获取全部数据库内容,但是只能获取到攻击时所使用的用户所对应的明文权限,对于该用户不具有权限的敏感数据,攻击者仍然不能访问。

4) 实现多因子身份认证和授权,弥补仅由口令验证方式安全性不足的缺陷。可以增加对应用系统、时间、IP地址、用户名等多种因子的身份认证和授权管理。

7. 数据库加密不能解决什么问题?

虽然数据库透明加密能够显著的提升数据库的安全性,但是并不能解决所有的数据库安全问题:

1) 不能完全阻止SQL注入攻击。SQL注入攻击者如果使用应用系统访问数据库的授权用户对数据库发起攻击,则能够获得加密系统对该用户的相应授权,能够访问到该授权项下的敏感数据。

2) 不能完全阻止攻击者伪造身份对数据库的攻击。当攻击者通过社交工程,完全窃取并伪造了具有对敏感数据合法访问权限的用户的帐号、密码、以及应用系统、IP信息时,数据库加密将不能对其访问进行限制。

3) 不能完全阻止授权应用系统后门程序对数据库的违规访问。当应用系统被授权访问敏感数据,但是被开发者留有后门时,数据库加密系统并不能识别这种后门并加以阻止。

其他相关问题,例如“如何弥补数据库加密系统对数据库保护的不足?”“数据库加密的关键技术有哪些?”“数据库加密系统的关键指标有哪些?”等等,我们将在后续文章中继续阐述。敬请关注。

责任编辑:xiejuan 来源: 中安威士
相关推荐

2017-01-19 14:44:14

2016-12-15 17:15:44

2019-07-08 10:40:03

线程池策略CPU

2017-12-25 13:26:36

CNN深度学习网络

2019-11-13 08:37:34

数据库筒仓基础架构

2020-08-18 10:51:18

AIoT数据泄露网络攻击

2018-04-16 10:54:00

数据中心UPS电池

2019-11-20 10:25:06

sudoLinux

2017-05-04 11:05:43

互联网

2009-06-22 14:17:00

2009-08-03 09:29:26

2012-09-17 09:59:46

创业创业教训创业家

2022-01-05 08:01:48

前端技术编程

2018-05-10 11:50:13

Docker容器冷知识

2010-08-23 09:56:09

Java性能监控

2021-05-27 05:25:11

SpringLifecycleSmartLifecy

2020-03-05 11:10:18

Left join数据库MySQL

2012-11-23 10:57:44

Shell

2021-01-05 11:22:58

Python字符串代码

2020-01-29 19:40:36

Python美好,一直在身边Line
点赞
收藏

51CTO技术栈公众号