开源安全项目-GreenSQL

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




http://www.greensql.net/

image

首先我被感动的是项目的名称GreenSQL,人的名树的影,听起来就是不一样,非常的清爽。不仅是名称,上面的log设计也非常可爱,一个拿着板斧的绿色的小犀牛,在保护你的DB系统。

该产品是开源产品,目的也是仅仅保护开源的数据库系统MYSQL和PostgreSQL免遭SQL injection攻击。系统工作在Proxy模式。可以运行于多个Linux发行套件以及FreeBSD之上。对于PostgreSQL而言GreenSQL也是仅有的保护方案。对于SQL Injection不懂的可以Google一下,现在非常流行,我们隔三差五会听到,某某公司泄露了多少多少的客户信息,其中就有SQL Injection的功劳。而且最近刚刚出了一个书,专门写SQL Injection。我托同事从美国买了一本回来,啃了两天,就这么一个东西絮絮叨叨写了4,500页,真是晕菜。不过我还是佩服老美的钻研精神,写的很细致。

GreenSQL迄今还是活跃的,最新的版本1.2是09年12月刚release的版本。看了几个版本的release notes,feature没有什么变化,基本都是可用性的修改,redesign,bug fix等等。

下图为网络部署图。

image

该产品可以运行于下述模式:

1.Simulation Mode (database IDS)

是Silent模式,类似于IDS系统,仅仅对于可疑事件进行Log。

2.Blocking Suspicious Commands (database IPS)

类似于IPS系统,GreenSQL将利用其“启发式”引擎检测以及阻塞非法的查询。其阻塞的Action同IPS看起来很不同,不是中断连接,而是仅仅返回空的结果集,这样用户无法察觉其存在,行为也更加graceful。

3.Learning mode

在该模式下,GreenSQL学习查询信息,并自动加入到白名单(笔者注:这个过程应该是离线的,否则没有意义了)。在learn了足够多的东西后,可以将系统配置为下面的模式4.

4.Active protection from unknown queries (db firewall)

利用从模式3学到的白名单作为基础,采用“启发式”(这个词听得我耳朵都磨出茧子了,大家都说自己的引擎是启发式的)引擎,进行下一步的DB IPS的工作。

其引擎基本实现如下:

1.模式匹配

GreenSQL uses a pattern matching engine to find commands that are considered “illegal”. In essence, this is a signature-based subsystem. For example, the following commands are considered “illegal”: database administrative commands; commands that try to change a db structure; and commands used to access system files.

2.根据几个的因素,计算Risk

GreenSQL calculates each query’s risk. Essentially, this is an anomaly detection subsystem. After the risk is calculated, GreenSQL can block the query or just create a warning message (this depends on the application mode). There are a number of heuristics GreenSQL uses when calculating risk. For example, query risk is increased by:

* Access to sensitive tables (users, accounts, credit information)
* Comments inside SQL commands
* An empty password string
* An ‘or’ token inside a query
* An SQL expression that always returns true (SQL tautology)

In order to find anomalies, GreenSQL uses its own SQL language lexer to find SQL tokens.

最后看看管理Web界面,先不说功能如何,我的感受是心中充满阳光,项目的发起人审美观念非常好:

image

现在SQL Injection的防范已经是WAF的基本配置了,为什么会有这个东东专门防范SQL Injection。笔者认为原因如下:(本想画一张图给大家看看,但是太晚了,我又是急性子,发了再睡觉):

1.Web Server位于HTTP层

2.后面的App server位于App层

3.后面的DB Server位于SQL层

1的层次最低,2的层次最高,3的层次勉强可以说比1高一点点,比3第一点点。因此要想彻底根除SQL Injection要在3保证保证应用层程序员的code没有问题,才能完全保证SQL Injection的消失,但这不可能。在1防范可能不很精确,在3能可以从某个程度说是一个很好的补充,当然也无法完全解决问题,毕竟还低那么一点点。是不是有点唐僧啊。

总之累了该回家了,一家之言,敬请拍砖。

(没有打分)

雁过留声

“开源安全项目-GreenSQL”有11个回复

  1. xixihaha 于 2010-01-18 4:45 下午

    “而且最近刚刚出了一个书,专门写SQL Injection。”
    楼主可以告知书名吗?

  2. appleleaf 于 2010-01-18 5:34 下午

    书名是”SQL Injection Attacks and defense”

  3. magic 于 2010-01-18 7:19 下午

    我想知道GreenSQL对性能的影响怎样呢?

  4. appleleaf 于 2010-01-18 7:43 下午

    magic,参照其网站,我印象中有performance测试的数据。

  5. xixihaha 于 2010-01-18 10:16 下午

    利用从模式3学到的白名单作为基础,采用“启发式”引擎
    ——————————————
    启发式是不是对应的英文单词就是:heuristic?
    他的意思是不是就是可以动态的学习一些知识,然后做出相应的改变呢?

  6. chunhui_true 于 2010-01-19 1:21 上午

    他根据模式识别怎么正确地判断一条sql语句永远为真呢?这种判断用语法解析最好不过。哪位大侠有啥开源东东用这种方式来检测的么?

  7. appleleaf 于 2010-01-19 1:55 上午

    启发式搜索参照http://www.hudong.com/wiki/%E5%90%AF%E5%8F%91%E5%BC%8F%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95

    模式识别和永真没有关系,例如block任何的delete,create等语句。对于从web server过来的sql连接,不应该有这样的sql语句。这里可以match这些关键字等等。

  8. droplet 于 2010-01-20 2:20 上午

    这个部署图有点意思,它的sqlProxy是否支持load balance功能,如果后面是个db pool该怎么办?如果是多个不同的sql server该怎么办。同样的问题也适用于WAF。同样一条语句,对A server是攻击,对B server不是。这种情况下,是过滤,还是不过滤。它需要知道后面是什么吗?

  9. 明月照高楼 于 2010-01-20 3:05 上午

    模式匹配是实际部署用的,RISK的目标就是show,售后售前都满意。

  10. 杰克 于 2010-01-20 5:39 上午

    –同样一条语句,对A server是攻击,对B server不是。

    安全防御的基本法则是什么?

  11. chunhui_true 于 2010-01-20 6:55 上午

    同样一条语句,对A server是攻击,对B server不是
    采用基于目标的策略,可以让他识别出不同的server类型。a ip 对应的是A b ip对应的是B….我想这样应该可以吧。