开源数据库防火墙GreenSQL
原文:http://blog.webserverguard.net/post/e5bc80e6ba90e695b0e68daee5ba93e998b2e781abe5a299GreenSQL.aspx
同步更新:Web应用安全观察站 http://blog.WebServerGuard.Net/
应用防火墙主要关注于应用层面的,目前也有一个类对于DB层的应用防火墙,也可以算是数据库应用防火墙(Database Application Firewall)。
前端的Web攻击千变万化,而前端针Web对于DB而发动的各类攻击(主要是SQL注入攻击)也有诸多变种,但是无论如何变化,到了DB层这一端,一定会万河归宗,还原到本相,这也是DB Firewall的用处所在。
实现DB防火墙与实现Web应用防火墙很类似,可以内嵌于数据库内核或者独立的服务器承担反向防火墙。后面详细探讨如何内嵌于数据库内核(针对SQL Server 2005以后版本)以及反向代理模式的实现核心。
为了让大家初步了解到GreenSQL这一款目前唯一的开源数据库防火墙,我特地翻译了一篇介绍文章,可以通览有关GreenSQL的信息:
关于GreenSQL
英文原文:http://www.greensql.net/about
翻译:Web应用安全观察站(WAS) http://blog.WebServerGuard.net/
什么是GreenSQL?
GreenSQL是一个开源的数据库防火墙(Database firewall),用来保护数据库免受SQL注入攻击。GreenSQL作为一个SQL命令代理来工作,并且内置对于MySQL的支持。其工作原理是基于SQL命令的评估,采用风险评分矩阵的模式进行工作,阻止已知的DBA命令(DROP、CREATE等等)。GreenSQL基于GPL协议进行分发。你可以在这里下载到GreenSQL: www.GreenSQL.net/download 。
GreenSQL架构
GreenSQL作为MySQL的反向代理来工作。这就意味着,其可以来代替MySQL服务器,你的应用程序可以连接到GreenSQL服务器来正常工作。GreenSQL会分析SQL查询并将它们转发到后端的MySQL服务器。
下图描述了整个处理过程。
GreenSQL架构
正如你所看到的,GreenSQL调用真正的数据库服务器来执行SQL命令,而Web应用程序则连接到GreenSQL服务器,就好像GreenSQL服务器就是一个真实的数据库服务器那样。
GreenSQL可以安装到与数据库服务器所在的同一台机器上或者作为一个完全分开的服务器来安装。默认情况下,GreenSQL监听本地的127.0.0.1:3305端口,并将SQL查询转发到127.0.0.1:3306端口(默认的MySQL设置)。这个设定可以使用GreenSQL控制台程序来进行修改。
支持模式
GreenSQL数据库防火墙支持如下模式:
· 模拟模式(数据库入侵检测系统)
· 阻止可疑命令模式(数据库入侵防御系统)
· 学习模式
· 主动防御模式(数据库防火墙)
在模拟模式下,基本上不会阻止任何SQL命令。在这种模式下,GreenSQL扮演着数据库入侵检测系统的角色。在此模拟模式下,GreenSQL使用一个风险评分矩阵(Risk Scoring Matrix)引擎来发现可疑查询并使用GreenSQL管理控制台通知给DBA。
当系统配置为阻止可疑命令模式时,GreenSQL使用启发式引擎来发现不合法的查询并自动的阻止它们。这是一个典型的数据库入侵防御系统。如果查询被认为是非法的-白名单就被开启(译者:为了对比此非法查询是否在白名单内)。如果此查询在系统白名单内,它会被直接重定向到真实的MySQL服务器。如果是非法请求并且被发现不存在于白名单内,一个空的结果集将会被发送到调用方的应用程序。在此模式下,GreenSQL有时会出现错误的判定。其后果就是,一些合法查询被阻止或者一些非法的查询没有被检测出来。这也是赞成以及反对IPS系统的理由之一。我们将会坚持不懈的提升我们的启发式引擎,这将是一个循序渐进不断改进的过程。
英文原文:http://www.greensql.net/about
翻译:Web应用安全观察站(WAS) http://blog.WebServerGuard.net/
为了避免以上所提到的各种模式的缺点,我们建议启用学习模式并在学习过程完成后切换到主动防御模式。在学习模式下,所有的查询都会被自动的加入到白名单中。当学习模式结束时,GreenSQL会自动开启主动防御模式。如果主动防御模式被开启,所有未知的命令都会被阻止。这是典型的数据库防火墙模式。当一个未知SQL命令被检测到时,会将其自动阻止掉。另外,GreenSQL也会使用启发方法计算其风险并使用GreenSQL管理控制台显示出来。
GreenSQL如何发现”非法”查询?
GreenSQL使用如下方法发现可疑的查询:
· 查找管理员以及敏感SQL命令
· 计算查询风险分值
查找管理员以及敏感SQL命令
GreenSQL使用一个模式匹配引擎来查找被认为非法的SQL命令。从本质上而言,这是一种基于签名的子系统。例如,下面的命令会被认为是非法的:数据库管理员命令;试图更改数据库结构的命令;访问系统文件的命令。系统管理员同样可以将非法查询设定为合法的,通过将其加入到白名单或者更改保存非法模式判定的配置文件。
计算查询风险分值
对于每一个查询,GreenSQL都会计算其风险分值。本质上说,这是一个异常检测子系统。一旦风险分值计算出来后,GreenSQL会阻止这个查询或者仅仅创建一个警告消息(依赖于应用程序模式)。GreenSQL计算风险分值时候会使用很多的启发方法。例如:
· 访问敏感表将会增加风险分值(users,accounts,credit information)
· 在SQL命令中的注释将会增加查询风险
· 使用空白密码字符串
· 在查询中发现’or’关键字
· 发现SQL表达式始终为true(SQL tautology)
· 比较常数的数值(SQL tautology)
· ...
为了发现异常,GreenSQL使用它自己的SQL语言解析器来发现SQL关键字。
命令如何被阻止?
当GreenSQL决定要阻止一个查询时,它会产生一个空结果集并将其发送回应用程序,因此将不会打断应用程序的执行。
白名单如何工作的?
每次GreenSQL判定一个SQL查询为一个安全风险时,此查询会被阻止掉。你可以将一个查询明确的加入到白名单中来更改这个操作行为。
新:在学习模式下,所有的新查询会自动被加入到白名单中。
下载
在此下载www.GreenSQL.net/download。请记住,GreenSQL是一个自由软件。它是开源的 J
英文原文:http://www.greensql.net/about
翻译:Web应用安全观察站(WAS) http://blog.WebServerGuard.net/