加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

企业网络安全之数据库审计

发布时间:2022-12-12 13:04:03 所属栏目:安全 来源:网络
导读: ID:Computer-network
审计(简称DBAudit)能够实时记录网络上的活动,对操作进行细粒度审计的合规性管理,对遭受到的风险行为进行告警,对攻击行为进行阻断。它通过对用户访问行为的记录、

ID:Computer-network

审计(简称DBAudit)能够实时记录网络上的活动,对操作进行细粒度审计的合规性管理,对遭受到的风险行为进行告警,对攻击行为进行阻断。它通过对用户访问行为的记录、分析和汇报,用来帮助用户事后生成合规报告、事故追根溯源,同时加强内外部网络行为记录,提高数据资产安全。

审计是技术之一,技术主要包括:漏扫、加密、、数据脱敏、审计系统。

一个企业的最核心资产莫过于数据,在企业则是更甚。近些年企业“去IOE”运动使得产品均倾向于或衍生产品。那么基本上提到审计,主要就是相关的审计产品。

1、旁路型

旁路审计几乎是传统乙方安全厂商最常见的模式,通过网络设备镜像流量,审计设备解码组包DB流量,并存储分析,通过模型检测和追溯可疑高危事件。如图1所示。

社工库数据联盟_数据库系统安全_纯真ip库数据

图1 旁路型BD审计设备

这样的架构好处在于部署简单,对于业务方和用户来说几乎是透明的,部署过程无需业务方参与。同时对业务几乎无性能损耗,这也是业务方最关注的一点。

2、主机型

旁路型固然有它的优势,但当面对复杂的业务架构的时候就力不从心了。发展日新月异的今天,业务被要求敏捷迭代,新架构层出不穷。大型公司业务环境每日大量的变更,以至于想完全梳理清楚其网络架构特别是DB访问模型几乎是不可能的事,至少很难在一个较短的时间内有一个相对静止的架构图。

在企业任职期间参与过几次DB审计厂商(包括国外)的产品推介会和评审,结果都是无疾而终。其产品技术能力什么的都不是问题,最大的原因就是架构和部署还是传统厂商的模式数据库系统安全,根本不能适应公司的环境。譬如它们要求在网络节点处部署,但业务环境决定了这种所谓的节点太多太多,以一套设备动辄几十万的价格,计算下来价格已经是不可接受。其次业务错综复杂的访问链路,使得其仅聚焦于某些节点的模式几乎可以断定一定会遗漏很多事件。

那么解决办法是什么?那就是审计产品尽量靠近DB本身部署,最近的莫过于部署到DB Server主机上,这就是主机型产品的由来。主机型的DB审计产品可以是单个进程也可以是HIDS的某个模块,参见图2。

数据库系统安全_纯真ip库数据_社工库数据联盟

图2 基于HIDS模块的DB审计产品

3、代理型

在业务架构治理做得较好的公司,他的业务数据读写均有统一的接口,无论业务逻辑多么复杂,其DB流量都是统一的入口,那么在这些接口位置增加DB审计功能是最完美的方案,参见图3。

社工库数据联盟_数据库系统安全_纯真ip库数据

图3 基于代理的DB审计产品

这样的架构带来了一个近乎完美的产品形态,有以下诸多优点:

部署:不需要像其他产品一样逐一去网络节点或主机部署,其数据采集和filter功能原生集成在业务架构里。

减少性能开销:基于DB协议的数据旁路,不需要基于网络报文数据的处理,组包等开销。

4、攻击检测

DB审计安全产品主要解决两个问题:1);2)操作违规审计。

对于违规审计没有太多需要讲的,通过对日常的DB请求做好基线学习,超出基线范围之外的则为违规行为。基线学习的维度可以有以下几个:

●账户对应的常用DB访问映射。

●账户常用的function。

●账户+client_ip与tables的映射。

社工库数据联盟_数据库系统安全_纯真ip库数据

●应用与数据字段的映射。

●自然时间+频度与裤表的映射。

虽然上述基线学习主要用于审计,但对于业务相对固定以及安全检测覆盖范围较小的安全系统来说,用于做攻击检测也是够用的。因为攻击行为也是超出基线范围的。

对于业务较多、变更较多的企业,上述方式用于攻击检测显然不适合了,相对于业务的生命周期、变更周期来说基线的学习期过长。攻击通常的检测方式是使用相对固化的字符串特征匹配,而这类检测方式会面临各种变形SQL语句的绕过攻击。

事实上无论如何变换攻击负载,它最终要能被DB解析,满足语法要求。那么通过语法解析器的还原,任何的伪装均会褪去。

语法解析之后的语句就需要定义辨别是否恶意的请求了,诸如以下几种场景:

●有多个子查询、联合查询且查询系统库表。

●可能导致SQL查询失败的语句。

●多个联合查询,且子查询非业务所需库表。

将原始SQL请求使用语法解析器(的sqlpare模块)格式化之后的语句,可以清晰地看到SQL语句被递归拆分成了function+parameter的展现形式:

print(sqlparse.format('select msg from news where id=2 and (select 1 from(selectcount(*),concat((select (select (SELECT distinct concat(0x7e,0x27,md5(1122),0x27,0x7e) FROM modoer_admin LIMIT 0,1)) from information_schema.tables limit0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)',reindent=True))

select msg

from news

where id=2 and(select 1from(select count(*),concat((select(select(SELECT distinct concat(0x7e,0x27,md5(1122),0x27,0x7e)FROM modoer_admin LIMIT 0,1))from information_schema.tables limit 0,1),floor(rand(0)*2))xfrom information_schema.tablesgroup by x)a)

其实就是本该只允许输入parameter的地方被恶意插入了function调用且被执行。那么如何检测则应该清楚了。

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!