数据库审计实例规则配置最佳实践
建议您开启风险告警,配置了风险告警后,当数据库访问触发了审计规则时,DBSS才能及时将风险通知给您,操作详情请参见设置告警通知。
数据库安全审计场景一:核心资产数据库表的异常访问、告警
示例:某电商网站后台分为多个微服务,分别为订单管理服务、用户管理服务、商品搜索服务等,各服务部署在不同的服务节点上,有不同IP地址,如图1所示。
图1 服务器部署拓扑图
绿色箭头为正常访问路径,如果订单管理服务或商品搜索服务两个节点被攻陷,攻击者会从这两个节点去访问数据库的用户信息表,意图窃取用户信息,就属于数据库的异常访问。
在DBSS中可通过如下规则设置来检测数据库异常访问情况:
图2 添加数据库异常访问
如图2所示填写的规则表示从192.168.1.1或192.168.3.3上发起的所有针对user_info表的操作都是“高风险”。
设置该规则后,所有异常访问或窃取表user_info的行为都会被审计,并且触发风险告警。
添加“操作对象”时,单击“添加操作对象”,填写“目标数据库”和“目标表”,单击“确认”,完成添加。
图3 添加检测异常行为的目标表
数据库安全审计场景二:利用DBSS进行应用程序的SQL语句性能优化
示例:某应用上线之后发现当用户执行某些操作时总会出现界面长时间卡顿。经定位,发现后台应用访问数据库时出现好几秒的时延,但未定位到具体是哪些语句导致。
此时可利用DBSS的“数据库慢SQL检测”规则进行辅助定位,帮助开发人员进行性能优化。
操作步骤如下:
登入DBSS控制台,进入风险操作页面。
图4 进入风险操作页面
单击“数据库慢SQL检测”项“操作”列的“编辑”,在编辑页面的底部设置执行时长规则设置为大于1000毫秒。
图5 设置执行时长
单击“确认”,完成设置。
设置完成后,待运行一段时间,在语句页面下的规则名称搜索框中填入“数据库慢SQL检测”对检测情况进行检索。
图6 检索慢SQL检索情况
说明:您可对检索的结果进行分析,对可进行优化的SQL进行优化。若需要进行多轮优化,您可对规则中的“执行时长”字段进行修改,逐步缩小时间,直到达成性能提升的目标。
数据库安全审计场景三:解决SQL注入风险的告警误报
DBSS提供SQL注入检测功能,并内置了一些SQL注入检测规则。您也可以自行添加SQL注入检测规则。
示例:若某些语句命中了SQL注入规则,但是经分析发现该语句并不是一条攻击语句,是自己程序生成的合法语句,如图7所示。
图7 SQL注入误报
为了避免DBSS对误报SQL的持续告警,您可以通过设置白名单来解决该误报问题。
说明:风险规则的优先级高于SQL注入规则。
如图7所示,执行的SQL语句如下:
SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'adventureworks' UNION SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'adventureworks' UNION SELECT COUNT(*) FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = 'adventureworks'
分析语句关键信息:该语句用SELECT语句访问information_schema库的TABLES表。
配置操作
1、进入风险操作页面。
图8 进入风险操作
2、单击添加风险操作,填写规则信息。
图9 填写规则信息
如图9所示,填写的规则表示:在information_schema库的TABLES表执行的SELECT语句为无风险。
添加“操作对象”时,单击“添加操作对象”,填写“目标数据库”和“目标表”,单击“确认”,完成添加。
图10 添加SQL注入白名单操作对象
3、单击下方“确认”,添加规则成功。
设置完成后,再次检测到该语句时,优先命中该条规则,识别为无风险将不再告警。
数据库安全审计最佳实践
-
审计RDS关系型数据库
数据库安全审计采用旁路部署,获取访问数据库流量、将流量数据上传到审计系统、接收审计系统配置命令和上报数据库状态数据,实现对RDS关系型数据库的安全审计
-
审计ECS自建数据库
在数据库端部署数据库安全审计Agent,获取访问数据库流量、将流量数据上传到审计系统、接收审计系统配置命令和上报数据库状态数据,实现对自建数据库的安全审计
-
数据库慢SQL检测
数据库安全审计检测响应时间大于1秒的SQL语句。通过数据库慢SQL检测,可获知执行耗时长、影响行数、执行该SQL语句的数据库信息并根据实际需求对慢SQL进行优化
-
数据库脏表检测
数据库安全审计规则增加一条“数据库脏表检测”的高风险操作。用户预设无用的库、表或列作为“脏表”,无风险程序不会访问用户自建的“脏表”,用于检测访问“脏表”的可能的恶意程序