【转载】企业安全建设之数据库安全(中)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 数据库作为绝大多数互联网公司核心用户数据的存储方式,直接或者间接的成为黑客攻击的重点。伴随倒卖个人信息的黑色产业链的迅猛发展,利用Web漏洞、内外勾结等方式窃取互联网公司的个人数据用于黑市交易的事件屡见不鲜。

本文转载自我在freebuf上的专栏 http://www.freebuf.com/column/151319.html

数据库作为绝大多数互联网公司核心用户数据的存储方式,直接或者间接的成为黑客攻击的重点。伴随倒卖个人信息的黑色产业链的迅猛发展,利用Web漏洞、内外勾结等方式窃取互联网公司的个人数据用于黑市交易的事件屡见不鲜。数据库安全成为甲方安全不可回避的一个重要的工作。本文将介绍数据库规模较大时,如何基于DBProxy进行数据库审计以及简单的防护。

当数据库规模较小时,比如10台以内,可以通过镜像数据库流量或者在数据库上安装审计客户端来进行数据库操作审计以及SQL注入检测。但是当数据库规模较大时,分布式的架构下,镜像数据库流量难以实施;部署审计客户端虽然受分布式影响较小,但是说服DBA在数据库服务器上安装软件本身就是一个慢工细活。于是基于DBProxy进行数据库审计以及SQL注入检测成为一个不错的选择。所谓的DBProxy,可以理解为一个支持数据库协议的代理服务,Web前端通过DBProxy访问数据库服务器,审计和各种控制手段都是在DBProxy上进行。目前360、美团、京东和百度都有对应的解决方案,本文以美团开源的DBProxy为例介绍相关使用,有兴趣的同学也可以搜索其他公司的DDBProxy方案。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=



本文介绍的DBProxy在美团点评广泛应用,开源和内部使用保持一致。目前只支持MySQL 5.55.6DBProxy其主要功能[1]

l  读写分离

l  从库负载均衡

l  IP过滤

l  分表

l  DBA可平滑上下线DB

l  自动摘除宕机的DB

l  监控信息完备

l  SQL审计与过滤

其中可以作为数据库防火墙功能使用的是IP过滤和SQL审计与过滤。


下载与安装

DBProxy对应的GitHub地址为:

https://github.com/Meituan-Dianping/DBProxy

安装方法如下所示。

yum install -y Percona-Server-devel-55.x86_64Percona-Server-client-55.x86_64 Percona-Server-shared-55  jemalloc jemalloc-devel libeventlibevent-devel openssl openssl-devel lua lua-devel bison flex libtool.x86_64libffi-devel libffi glib2.x86_64 glib2-devel.x86_64 glib2-fam.x86_64 git

git clonehttps://github.com/Meituan-Dianping/DBProxy.git

cd DBProxy/

sh autogen.sh

./configure --prefix=/home/maidou/opt/DBProxy --enable-maintainer-mode

make

make install

配置

为了演示方便,我们继续在我的www.douwaf.com的云主机上测试。拓扑结构如下所示,DBProxy监听本地的3307端口,真实数据库服务MySQL监听3306端口,Web服务器以及数据库管理员均通过DBProxy访问数据库服务。


1)       创建配置文件目录和日志目录

cd /home/maidou/opt/DBProxy/

mkdir log conf

cp /home/maidou/DBProxy/script/source.cnf.samplesconf/douwaf.cnf

2)       编辑配置文件

DBProxy的配置文件默认为conf/start.cnfDBProxy启动时根据实例名称加载对应的配置文件,比如本例中实例名称为douwafDBProxy启动时会自动加载配置文件conf/douwaf.cnfDBProxy可以配置的内容比较多,我们这里介绍几个常见的配置内容。

l  后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

proxy-backend-addresses=127.0.0.1:3306

l  连接数据库服务的用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密。

pwds=pig:7O7YJJEK

l  设置运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true

daemon=false

l  日志存放的路径

log-path=/home/maidou/opt/DBProxy/log

l  实例名称,用于同一台机器上多个dbproxy实例间的区分

instance=douwaf

l  监听的工作接口IP和端口

proxy-address=0.0.0.0:3307

l  后台MySQL版本号,默认为5.5,我们的环境是5.6

mysql-version=5.6

启动服务

DBProxy提供了启动脚本,文件路径为bin/mysql-proxyd,编辑启动脚本,设置需要根据具体情况配置的环境变量,主要需要配置的就是安装路径。

proxydir=/home/maidou/opt/DBProxy/

启动DBProxy服务,调试阶段强烈建议使用终端运行模式,正式运行使用后台运行模式。

bin/mysql-proxyd douwaf start

案例:使用DBProxy审计SQL语句

测试期间,我们使用MySQL命令行模拟Web程序访问MySQL

1)       直接访问数据库

通过3306端口直接连接数据库,默认使用root账户登录。

./mysql -h127.0.0.1 --port 3306 -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 125

Server version: 5.6.36 MySQL Community Server (GPL)

 查询全部数据库实例名称。

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| kippo             |

| mysql             |

| performance_schema |

| test              |

| wordpress         |

+--------------------+

6 rows in set (0.01 sec)

2)       通过DBProxy访问数据库

通过3307端口直接连接数据库,发现root账户已经无法登录。

[root@instance-ubtsv90g bin]# ./mysql -h127.0.0.1--port 3307 -p

Enter password:

ERROR 1045 (28000): Access denied for user'root'@'127.0.0.1' (using password: YES)

使用DBProxy上配置的pig账户连接DBProxy,连接成功,细心的同学估计会发现,回显的数据库版本为5.6.22-71.0-log,而我们真实MySQL5.6.36

[root@instance-ubtsv90g bin]# ./mysql -upig   -h127.0.0.1 --port 3307 -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.6.22-71.0-log MySQL CommunityServer (GPL)

Copyright (c) 2000, 2017, Oracle and/or itsaffiliates. All rights reserved.

查询全部数据库实例名称,与直接连接数据库查询的内容一致。

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| kippo             |

| mysql             |

| performance_schema |

| test              |

| wordpress         |

+--------------------+

6 rows in set (0.01 sec)

查看DBProxy douwaf实例的连接日志douwaf.log,记录下了rootpig账户的登录情况。

2017-07-28 10:22:48.707429:(warning)proxy-plugin.c:1188(proxy_read_auth) event_thread(1) C:127.0.0.1:51766S:127.0.0.1:3307(thread_id:0) Usr:root Db: Access denied for user'root'@'127.0.0.1' (using password: YES)

2017-07-28 10:22:48.707487: (warning)network-mysqld.c:1647(network_mysqld_con_handle):event_thread(1) C:127.0.0.1:51766 C_usr:root CON_STATE_READ_AUTH process authpacket failed

2017-07-28 10:23:05.162088:(message)network-conn-pool-lua.c:425(self_connect): event_thread(2)C:127.0.0.1:51788 C_usr:pig C_db: S:127.0.0.1:3306(thread_id:292) createbackend connection success

查看DBProxy douwaf实例的SQL审计日志sql_douwaf.log,记录下了相应的查询行为。

[root@instance-ubtsv90g sql]# tail -fsql_douwaf.log

2017-07-28 10:23:05.164223: C_begin:2017-07-2810:23:05.161541 C:127.0.0.1:51788 C_db: C_usr:pigS:127.0.0.1:3306(thread_id:292) S_db: S_usr:pig inj(type:4 bytes:33 rows:1)2.612(ms) OK Query:select @@version_comment limit 1

2017-07-28 10:26:49.353570: C_begin:2017-07-2810:26:49.352848 C:127.0.0.1:51788 C_db: C_usr:pig S:127.0.0.1:3306(thread_id:292)S_db: S_usr:pig inj(type:4 bytes:89 rows:6) 0.639(ms) OK Query:show databases

案例:使用DBProxy进行SQL过滤

DBProxy本身的功能是做数据库代理,透明实现读写分析,主从负载,之所以我们也使用它作为数据库防火墙,主要就是因为它强大的SQL过滤功能。配置文件中与SQL过滤功能相关的功能如下所示。

#设置黑名单文件所在的路径

blacklist-file=/home/maidou/opt/DBProxy/conf/sqlblacklist.conf 

#设置手动添加的拦截语句是否生效,默认是不生效 ON:生效 OFF:不生效                                               

manual-filter-flag=ON                

#设置自动添加的拦截语句是否生效,默认是不生效 ON:生效 OFF:不生效 

auto-filter-flag=OFF                    

测试期间,我们假设要限制使用命令show databases,编辑sqlblacklist.conf文件,其中blacklist_0表示规则的序列号,filter表示限制的SQL语句,is_enabled表示是否是能,1为使能,0为不使能。

[blacklist_0]

filter=show databases

is_enabled=1

使用DBProxy上配置的pig账户连接DBProxy

[root@instance-ubtsv90g bin]# ./mysql -upig   -h127.0.0.1 --port 3307 -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.6.22-71.0-log MySQL CommunityServer (GPL)

Copyright (c) 2000, 2017, Oracle and/or itsaffiliates. All rights reserved.

查询全部数据库实例名称,查询失败,我们的过滤策略生效。

mysql> show databases;

ERROR 1105 (07000): Proxy Warning - BlacklistForbidden

mysql>

查看DBProxy douwaf实例的连接日志douwaf.log,记录下了SQL过滤的日志。

2017-07-28 11:33:04.143579:(warning)proxy-plugin.c:4103(filter_pre)event_thread(1) C:127.0.0.1:53206Query:show databases fobidden by filter:show databases

2017-07-28 11:33:04.143641:(critical)proxy-plugin.c:2137(proxy_read_query) event_thread(1)C:127.0.0.1:53206 S:127.0.0.1:3307(thread_id:0) Usr:pig Db: Proxy Warning -Blacklist Forbidden

通过3306端口直接连接数据库,默认使用root账户登录。

./mysql -h127.0.0.1 --port 3306 -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 125

Server version: 5.6.36 MySQL Community Server (GPL)

 查询全部数据库实例名称,命令正常执行。

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| kippo             |

| mysql             |

| performance_schema |

| test              |

| wordpress         |

+--------------------+

6 rows in set (0.01 sec)



[1] http://www.cnblogs.com/olinux/p/6626347.html

[2] https://github.com/Meituan-Dianping/DBProxy/blob/master/doc/USER_GUIDE.md#3.1.1


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 机器学习/深度学习 人工智能
打造企业智能体(AI Agent)的重要技术-向量数据库
本篇介绍的是为通用大模型增加专业业务能力的重要技术:向量数据库
打造企业智能体(AI Agent)的重要技术-向量数据库
|
2月前
|
存储 监控 安全
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
为了提供更好的日志数据服务,360 企业安全浏览器设计了统一运维管理平台,并引入 Apache Doris 替代了 Elasticsearch,实现日志检索与报表分析架构的统一,同时依赖 Doris 优异性能,聚合分析效率呈数量级提升、存储成本下降 60%....为日志数据的可视化和价值发挥提供了坚实的基础。
360 企业安全浏览器基于阿里云数据库 SelectDB 版内核 Apache Doris 的数据架构升级实践
|
5月前
|
存储 缓存 NoSQL
LeveIDB数据库企业项目中的用法
LeveIDB数据库企业项目中的用法
50 0
|
2月前
|
SQL 关系型数据库 MySQL
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
【JavaEE进阶】 数据库连接池与MySQL企业开发规范
|
2月前
|
运维 安全 关系型数据库
数据库自治与安全服务训练营火热开营!完成任务可得国潮保温杯和阿里云定制双肩包!
本训练营带您简单了解数据库自治与云安全服务,数据库自治服务提供云上RDS、PolarDB、NoSQL、ADB等数据库7*24小时异常检测、SQL自优化、安全合规审计、弹性伸缩、数据自治、锁分析等亮点功能。一站式自动化、数字化DAS集成平台,助力您畅享DBA运维智能化。
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
凭安征信引入阿里云PolarDB云数据库支撑企业征信核心业务系统
凭安征信是国家中小企业公共服务示范平台,主营信用管理服务包括信用管家、水滴信用及可信认证。通过采用阿里云PolarDB云原生数据库替代RDS数据库帮助客户全面实现业务系统性能提升1-2倍,通过PolarDB企业级能力的加持下,运维更加简便,操作更加简单,数据安全能力更强。
|
3月前
|
NoSQL 安全 MongoDB
|
3月前
|
Java 数据库 Android开发
基于JavaWeb企业电子商城(源码+数据库脚本+项目讲解)
基于JavaWeb企业电子商城(源码+数据库脚本+项目讲解)
|
3月前
|
开发框架 Java 数据库连接
基于ssm框架实现的企业进销存管理系统【源码+数据库+毕设】
基于ssm框架实现的企业进销存管理系统【源码+数据库+毕设】
|
4月前
|
SQL 存储 安全
CloudQuery一体化数据库SQL操作安全管控平台
CloudQuery一体化数据库SQL操作安全管控平台
191 0

热门文章

最新文章