當有威脅入侵時,阻斷危險有兩種方式:行為阻斷和Session阻斷。
1、行為阻斷
行為阻斷是數據庫防火墻的自然工作方式。當檢測到入侵行為的時候,阻斷該行為的操作。行為阻斷依據響應便好的不同,可以工作眾多工作模式之下。
模式一:錯誤響應模式
阻斷操作之后,返回預先定義的錯誤信息,使應用程序可以構造合理的錯誤響應。錯誤響應模式的好處在于可以讓應用程序檢測到入侵發生,并響應合理的錯誤形式給用戶和入侵者。壞處在于可能入侵者也可以感知到有安全業務邏輯在發生作用,特別是如果應用程序缺乏錯誤處理有可能會直接返回錯誤響應給入侵者。
模式二:靜默響應模式
阻斷操作之后,返回正常的零響應信息,包括0行數據,0行數據被影響或者成功操作的響應信息。靜默響應模式的好處在于完全正常的業務邏輯響應可以使入侵者很難獲取相關信息,壞處在于應用程序也無法感知入侵,只能依賴于安全設備的運行。
模式三:持續阻斷模式
當檢測到應該被阻斷的風險操作之后,該Session被定義為高度風險Session,所有后續的操作都被標記為高風險操作,無論其內容如何都會被阻斷。持續阻斷模式的好處在于增加了入侵者的嘗試成本,增加其沮喪感,壞處在于可能由于風險檢測引擎的誤判導致業務持續失敗。
2、Session阻斷
Session阻斷相對于行為阻斷是一種很簡單的操作,中斷網絡連接,阻止進一步的操作。。Session阻斷的好處在于技術上實現非常簡單,壞處則會帶來眾多不可預知的影響。而且,其不可被用在數據庫防火墻中。
二、為什么在數據庫防火墻中不能執行Session阻斷?
絕大部分企業級應用建立在數據庫連接池技術之上。基本路徑是:業務應用程序發起數據庫操作請求,從數據庫連接池中獲得一個數據庫連接,應用程序在這個給定的數據庫連接執行業務操作,業務操作完成之后釋放這個數據庫連接到數據庫連接池。
下面我們來分析Session阻斷的操作和影響。一般情況下,多數Session阻斷會采用向客戶端和服務端分別發Reset包的方式來實現阻斷,我們這里不探究reset信號的阻斷有效性,假設其總是可以快速阻斷。在此前提下我們從兩個方面來探討可能的影響:
1、數據庫連接池的影響
Session阻斷之后,會導致數據庫連接池的可用數量減少。特別是在多數情況下,數據庫連接池并不會檢測到Reset信號,也就是說雖然網絡連接已經被中斷,但是數據庫連接池并沒有意識到連接已經不可用,依然會把業務分配到這個已經中斷的數據庫連接之上,導致業務大規模錯誤。
簡單來看,入侵者可以通過簡單的可以被數據庫防火墻識別的無效攻擊來實現cc攻擊,導致業務系統不可用。為了避免這種情況,需要在數據庫連接池上增加特定錯誤檢測功能,當檢測到特定錯誤之后,關閉特定無效鏈接,并主動發起重新連接以保持業務程序運行。
2、數據庫端的影響
在大部分情況下,數據庫并不能很好的處理reset信號,而需要依賴死進程檢測程序來處理。由于處理無法保證有效,也就是說在相當多的場景下可能會出現大量的僵死進程,消耗大量數據庫會話資源,甚至存在共享的資源沒有釋放,從而導致數據庫掛起。
總結
數據庫防火墻設備從理論上講必須采用行為阻斷模式,采用具體形式的行為阻斷都可以完成相應目標。Session阻斷模式會帶來眾多不可預知的影響,不應該被數據庫防火墻所采用。