本帖最后由 某公司安全产品研发 于 2016-6-12 09:47 编辑
作者简介: 赵伟健男数据库审计产品资深工程师擅长SQL审计与关联分析
一、三层关联是什么
B/S 架构中,我们把客户浏览器、web服务器、数据库服务器这三个模块划分为三层。 如下图,由于数据库服务器接收的账号IP等皆由WEB服务器发起,所以在数据库服务器中,每条SQL语句的来源是无法追溯到客户浏览器的。 而三层关联,就是在不改变原有架构模式下,通过时间等要素,采集数据进行规律分析,将每个SQL语句绑定到它的实际发起人。即最终达到将SQL语句和URL请求相绑定的目的。
二、应用场景
数据库管理员的期望是数据永远是安全的,但当入侵或者越权访问等异常情况出现时,追溯就是最后的底线了。三层关联主要应用在事后追溯即分析上面。
例如,管理员A发现某个SQL语句访问了敏感表,通过三层关联信息,他发现了访问者没有权限去访问,那么他就可以采取某种措施修复权限上的漏洞。
或者,数据库审计产品发现了风险SQL语句,通过三层关联就可以发现发起人,发起人所使用的URL具体参数,定位到实际责任人。
三、 实现原理
(1) 时间点匹配 我们现在实现的时间点抓取,是直接拿到数据包流进网口的时间点,并且精确到了毫秒级别。 其中分别抓取了四个时间:URL 开始时间、SQL 开始时间、SQL 结束时间、URL 结束时间。
通过对服务器的观察可知,SQL语句的产生时间,是在客户点击页面与得到数据的时间点之间。由此,我们可以得到一个模糊的范围,即 某次请求所对应的备选集。
(2) 模板匹配 得到了备选集,还不能精确的找到他们之间的关系。我们还需要通过不断地积累数据,来挖掘URL与SQL之间的某种联系。
我们做了如下的工作:
一、 由程序分析捕获的URL信息,将一个URL与一种操作进行绑定。 二、 通过词法分析,将SQL语句提取成统一模板。 三、 根据时间点的匹配,获取一个URL所可能出现的SQL频繁集。 由于服务器不断的接受URL请求,并填充URL对应的SQL频繁集。当到达所规定的阈值时,就可以获得一个URL操作所对应的SQL模板集合了。
|