【51CTO.com原创稿件】在本文中,笔者将带大家了解下数据库防火墙的阻断方式,以及为什么在数据库防火墙中不能执行Session阻断?
首先,我们来看看关于阻断的简单分类和定义。有威胁入侵时,阻断危险有两种方式:行为阻断和Session阻断。
什么是行为阻断?行为阻断是数据库防火墙的自然工作方式。当检测到入侵行为的时候,阻断该行为的操作。行为阻断依据响应偏好的不同,可以工作在两种不同模式之下。
◆模式一:错误响应模式
阻断操作之后,返回预先定义的错误信息,使应用程序可以构造合理的错误响应。错误响应模式的好处在于可以让应用程序检测到入侵发生,并响应合理的错误形式给用户和入侵者。坏处在于入侵者有可能也可以感知到有安全业务逻辑在发生作用,特别是如果应用程序缺乏错误处理有可能会直接返回错误响应给入侵者。
◆模式二:静默响应模式
阻断操作之后,返回正常的零响应信息,包括0行数据,0行数据被影响或者成功操作的响应信息。静默响应模式的好处在于完全正常的业务逻辑响应使入侵者很难获取相关信息,坏处在于应用程序也无法感知入侵,只能依赖于安全设备的运行。
然而,相对于行为阻断,Session阻断是一种很简单的操作,中断网络连接,阻止进一步的操作。Session阻断的好处在于技术上实现非常简单,坏处则会带来众多不可预知的影响。而且,其不可被用在数据库防火墙中。
为什么在数据库防火墙中不能执行Session阻断?
绝大部分企业级应用建立在数据库连接池技术之上。基本业务路径是:业务应用程序发起数据库操作请求,从数据库连接池中获得一个数据库连接,应用程序在这个给定的数据库连接执行业务操作,业务操作完成之后释放这个数据库连接到数据库连接池。
下面我们来分析Session阻断的操作和影响。一般情况下,多数Session阻断会采用向客户端和服务端分别发Reset包的方式来实现阻断,我们这里不探究reset信号的阻断有效性,假设其总是可以快速阻断。在此前提下我们从两个方面来探讨可能的影响:
一是,数据库连接池的影响。Session阻断之后,会导致数据库连接池的可用数量减少。特别是在多数情况下,数据库连接池并不会检测到reset信号,也就是说虽然网络连接已经被中断,但是数据库连接池并没有意识到连接已经不可用,依然会把业务分配到这个已经中断的数据库连接之上,导致业务大规模错误。
简单来看,入侵者可以通过简单的可以被数据库防火墙识别的无效攻击来实现cc攻击,导致业务系统不可用。为了避免这种情况,需要在数据库连接池上增加特定错误检测功能,当检测到特定错误之后,关闭特定无效链接,并主动发起重新连接以保持业务程序运行。
二是,数据库端的影响。在大部分情况下,数据库并不能很好的处理reset信号,而需要依赖死进程检测程序来处理。由于处理无法保证有效,也就是说在相当多的场景下可能会出现大量的僵死进程,消耗大量数据库会话资源,入侵者可以通过这个特征实现cc攻击。特别是在实际运行中,僵死进程甚至存在共享的资源没有释放,从而导致数据库业务部分挂起或者全部挂起。
总结
数据库防火墙设备从理论上讲必须采用行为阻断模式,采用具体形式的行为阻断都可以完成相应目标。Session阻断模式会带来众多不可预知的影响,不应该被数据库防火墙所采用。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】。