网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > 网络安全预防措施

安华金和数据库防火墙技术研究(2)

  “包过滤”又可分为“有连接(stateful)”和“无连接(stateless)”两种。“有连接(stateful)”是指防火墙会记录通过的连接状态信息,维护相应的连接状态数据库,基于同一连接的数据包可免于重复检查,这样将提高数据包传输效率, “无连接(stateless)”是对每一个数据包进行检查,通常意义上会导致网络响应缓慢,这两种方式各有优缺点。

  安华金和数据库防火墙(DBFirewall)实现了对主流数据库类型通讯协议的“双向、全协议解析”,重要的解析内容包括:SQL语句、参数化语句句柄、SQL参数、应答结果信息、结果集结构信息、结果集数据等。

  SQL语句的解析和表达是实现对SQL语句攻击行为控制的关键;SQL注入的检查、应用sql语句的放行,都依赖于sql语句的解析和特征捕获。传统的技术,往往采用正则表达式的方式,但该方式存在巨大的技术缺陷,一是正则匹配过程性能地下,二是对于复杂的参数情况容易产生匹配错误,三是通过语句的变体容易欺骗。

  DBFirewall为了有效扑获SQL语句的特征,以及为了快速地对SQL语句进行策略判定,以实现数据库防火墙的高效处理,提供了专利性的SQL语法特征技术,实现了对SQL语句的重写。

  SQL重写是在不改变原SQL语句的语义的情况下,DBFirewall对捕捉到的SQL语句进行重写,替换原语句中的参数值。

  SQL重写是一个抽象的过程,便于管理和操作。SQL重写包括以下几个方面:

  ● 除了单双引号内的内容,小写字母全部变为大写字母;

  ● 准确区分正负号和加减号;

  ● 将SQL语句中的数值、单引号引起的字符串各自重写为统一的占位符;

  ● 将注释、换行重写为空格,将连续的空格合并为1个,去掉运算符两端等不影响语义的空格

  以如下SQL语句为例:

  Select +0.25 * money,sum(id) From “testdb”.accounts

  Where id = ' G1792 ' or name !=‘’/*this message come from Lisa*/

  XSeure-DBF在SQL重写的基础上,根据SQL语法,对SQL进行了多级分类。SQL多级分类是将具有相同操作行为的不同语句合并为一类,为SQL信息的查看和策略的定制提供了便利,且SQL分类编码操作后,易于后续的计算、操作和存储。

  SQL分类主要分为三级,分类的方向由细到粗,即二级分类是在一级分类的基础上进行的,三级分类是在二级的基础上进行的。

  ● 一级分类

  基于目前的SQL重写,即替换所有的可变“参数”数据为固定的“参数(例如,#)”,并且将所有谓词全部大写化(格式化为大写字母)等。也就是说,一级分类的输出是经过“重写”后的SQL语句。

  ● 二级分类

  在一级分类的基础上,对所有的谓词、函数、比较运算符进行编码后,生成摘要的字符串编码,该编码就是SQL的二级分类码。

  ● 三级分类

  在二级分类的基础上,对所有的谓词比较运算符进行编码后,生成的摘要字符串编码,该编码就是SQL三级分类码。

  根据SQL分类的原则,假如有如下SQL语句:

  1:SELECT salary*1.5 FROM employees WHERE job_id ='PU_CLERK';

  2:SELECT salary*2 FROM employees WHERE job_id='SA_MAN';

  3:SELECT employee_id FROM department WHERE department_name = 'HR';

  4:SELECT department_id FROM employees WHERE salary <5000;

  5:SELECT sum(salary) FROM employees WHERE job_id ='PU_CLERK';

  6:SELECT max(salary) FROM employees WHERE job_id='PU_CLERK';

  那么按照分类码,DBFirewall看到的分析SQL,由三级到一级如下呈现:

   SELECT FROM WHERE =

   SELECT FROM WHERE =

   SELECT SALARY*0 FROM EMPLOYEES WHERE JOB_ID='#'

   SELECT EMPLOYEE_ID FROM DEPARTMENT WHERE DEPARTMENT_NAME='#'

   SELECT SUM FROM WHERE =

   SELECT SUM(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘

   SELECT MIN FROM WHERE =

   SELECT MIN(SALARY) FROM EMPLOYEES WHERE JOB_ID='#‘

   SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0

   SELECT MIN FROM WHERE <

  SELECT DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY<0

  SQL语句格式化重写后的结果为:

  SELECT 0*MONEY,SUM(ID) FROM “testdb”.ACCOUNTS WHERE ID=’#’ OR NAME!=’’

  正式基于精准的数据库通讯协议解析,数据库防火墙才能对数据库进行周密的防护。

  黑白名单机制

(责任编辑:admin)