專利名稱:一種基于自定義安全jdbc驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全技術(shù)領(lǐng)域的安全防護(hù)方法,特別是涉及一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法。
背景技術(shù):
隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的廣泛應(yīng)用到包括黨政軍在內(nèi)的各個(gè)領(lǐng)域。數(shù) 據(jù)庫系統(tǒng)成為了業(yè)務(wù)應(yīng)用信息首選持久化存儲(chǔ),是各個(gè)信息系統(tǒng)的數(shù)據(jù)核心,其安全性至
關(guān)重要。在國內(nèi)涉密單位或者大型企業(yè)中,已廣泛采取機(jī)房門禁、網(wǎng)絡(luò)隔離、入侵檢測(cè)、力口 密認(rèn)證等多種方式進(jìn)行整體防護(hù)。但是業(yè)界缺少針對(duì)數(shù)據(jù)庫訪問進(jìn)行防護(hù)的安全增強(qiáng)產(chǎn)品。常規(guī)的數(shù)據(jù)庫防火墻、IDS/IPS等防護(hù)方式,無法深入理解通信中數(shù)據(jù)庫操作具體 內(nèi)容,只能進(jìn)行初級(jí)的的端口、協(xié)議、地址等網(wǎng)絡(luò)層過濾,無法有效針對(duì)數(shù)據(jù)庫的訪問進(jìn)行 針對(duì)性防護(hù)。
發(fā)明內(nèi)容
發(fā)明目的針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出的是一種基于自定義安全JDBC (JavaData Base Connectivity)驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法。通過實(shí)現(xiàn)一個(gè)自定義安全JDBC驅(qū)動(dòng)(下文簡稱為 安全JDBC驅(qū)動(dòng)),搭配安全檢查器與操作轉(zhuǎn)換器,達(dá)到對(duì)用戶所有JDBC調(diào)用的全過程控制 與審計(jì),以及對(duì)執(zhí)行SQL語句的基本注入特征分析,從而提升數(shù)據(jù)庫訪問的安全防護(hù)能力。 在整個(gè)的處理流程中,安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器之間的交互以及安全檢查器對(duì)SQL請(qǐng)求 的檢查與審計(jì)對(duì)于上層用戶完全透明。技術(shù)方案本發(fā)明實(shí)現(xiàn)的技術(shù)方案如下安全JDBC驅(qū)動(dòng)部署在應(yīng)用服務(wù)器上代替標(biāo)準(zhǔn)JDBC驅(qū)動(dòng)。除了完全實(shí)現(xiàn)JDBC 3. 0 標(biāo)準(zhǔn)接口的所有接口功能,安全JDBC驅(qū)動(dòng)能夠通過與安全檢查器的聯(lián)動(dòng)實(shí)現(xiàn)對(duì)SQL語句的 安全檢查與操作審計(jì)。檢查合格的數(shù)據(jù)庫請(qǐng)求,將會(huì)被轉(zhuǎn)發(fā)至操作轉(zhuǎn)換器。安全JDBC驅(qū)動(dòng) 與操作轉(zhuǎn)換器之間的通信采用自定義的通信協(xié)議,并且支持自定義的加密算法或SSL加密 算法。操作轉(zhuǎn)換器通過對(duì)加密后的數(shù)據(jù)庫請(qǐng)求進(jìn)行解密,提取相應(yīng)的執(zhí)行命令,進(jìn)行真實(shí)數(shù) 據(jù)庫的執(zhí)行。執(zhí)行完成后,操作轉(zhuǎn)換器負(fù)責(zé)將返回的結(jié)果集返回給安全JDBC驅(qū)動(dòng)。應(yīng)用程序通過本方法進(jìn)行數(shù)據(jù)庫操作時(shí)具體包括以下步驟1)系統(tǒng)啟動(dòng)時(shí),應(yīng)用程序?qū)⑾仍L問安全檢查器獲得安全策略文件,將安全策略寫 入內(nèi)存,然后利用安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器建立持久TCP連接;2)應(yīng)用程序進(jìn)行數(shù)據(jù)庫操作時(shí),直接調(diào)用自定義JDBC接口 ;3)安全JDBC驅(qū)動(dòng)進(jìn)行接口級(jí)安全過濾。調(diào)用安全檢查器接口進(jìn)行,對(duì)SQL操作語句進(jìn)行注入特征安全檢查;4)操作若檢查失敗,不滿足策略要求,則會(huì)在JDBC驅(qū)動(dòng)中拋出相應(yīng)的JAVA異常;5)操作若檢查通過,滿足策略要求,安全JDBC驅(qū)動(dòng)則會(huì)將具體操作傳遞至操作轉(zhuǎn) 換器進(jìn)行轉(zhuǎn)換與執(zhí)行;6)操作轉(zhuǎn)換器將數(shù)據(jù)庫上的執(zhí)行結(jié)果進(jìn)行返回,最后返回至應(yīng)用程序。基于自定 義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法實(shí)現(xiàn)如下功能
1)完全實(shí)現(xiàn)JDBC標(biāo)準(zhǔn)的所有必需接口。2)設(shè)計(jì)并實(shí)現(xiàn)一套自定義傳輸格式,傳輸JDBC中的各種命令和數(shù)據(jù)。3)設(shè)計(jì)并實(shí)現(xiàn)一套自定義加密算法。4)設(shè)計(jì)并實(shí)現(xiàn)安全策略格式,并將策略應(yīng)用在JDBC的操作接口中。本發(fā)明的進(jìn)一步方案可以是所述安全JDBC驅(qū)動(dòng)不針對(duì)某一特定數(shù)據(jù)庫,因此為了保證最大程度的通用性,安 全JDBC驅(qū)動(dòng)實(shí)現(xiàn)了標(biāo)準(zhǔn)JDBC 3.0接口的所有通用功能。安全JDBC驅(qū)動(dòng)包含三類接口 一 類是提供給上層應(yīng)用系統(tǒng)調(diào)用的標(biāo)準(zhǔn)JDBC接口 ;一類是進(jìn)行緩沖區(qū)管理、安全檢查等內(nèi)部 支持接口 ;一類是與操作轉(zhuǎn)換器之間進(jìn)行數(shù)據(jù)通信的消息處理接口,如圖2。本發(fā)明的進(jìn)一步方案可以是所述JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器之間的通信采用自定義通信協(xié)議,傳輸協(xié)議是構(gòu)建 在TCP/IP協(xié)議基礎(chǔ)之上的應(yīng)用層協(xié)議。消息協(xié)議的設(shè)計(jì)囊括安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器 之間的所有通信要求并具有充分的可擴(kuò)展性。協(xié)議報(bào)文總體分為如下幾類加密(認(rèn)證)協(xié) 商協(xié)議;版本協(xié)商協(xié)議;連接協(xié)議;登錄認(rèn)證協(xié)議;客戶端安全策略協(xié)議;數(shù)據(jù)庫操作協(xié)議; 配置管理協(xié)議;錯(cuò)誤協(xié)議。所有通訊均支持可選自定義加密或者SSL加密,防止網(wǎng)絡(luò)竊聽。本發(fā)明的進(jìn)一步方案可以是所述安全JDBC驅(qū)動(dòng)同操作轉(zhuǎn)換器之間的交互總體上分為兩個(gè)過程握手過程和 數(shù)據(jù)庫訪問過程。握手過程是系統(tǒng)啟動(dòng)階段安全JDBC驅(qū)動(dòng)和操作轉(zhuǎn)換器之間建立TCP連 接,并確認(rèn)對(duì)方的身份以及協(xié)商對(duì)稱密鑰的過程。數(shù)據(jù)庫訪問過程是指在握手過程以后上 次應(yīng)用程序調(diào)用安全JDBC接口,通過操作轉(zhuǎn)換器進(jìn)行數(shù)據(jù)庫訪問。本發(fā)明的進(jìn)一步方案可以是所述安全檢查器中的安全策略可以靈活配置,包含但不限于用于防SQL注入的 正則表達(dá)式規(guī)則;用于防應(yīng)用程序惡意操作的限制單個(gè)Connection打開statement數(shù)量的 規(guī)則;用于防傳輸exe等類型大字段的二進(jìn)制匹配規(guī)則等。有益效果本發(fā)明達(dá)到對(duì)用戶所有JDBC調(diào)用的全過程控制與審計(jì),以及對(duì)執(zhí)行SQL語句的基 本注入特征分析,從而提升數(shù)據(jù)庫訪問的安全防護(hù)能力。在整個(gè)的處理流程中,安全JDBC 驅(qū)動(dòng)與操作轉(zhuǎn)換器之間的交互以及安全檢查器對(duì)SQL請(qǐng)求的檢查與審計(jì)對(duì)于上層用戶完 全透明。
圖1是本發(fā)明流程示意圖;圖2是自定義安全JDBC接口組成圖3是握手過程示意圖;圖4是數(shù)據(jù)庫操作過程。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。本方法的安全JDBC驅(qū)動(dòng)部署在應(yīng)用服務(wù)器上,將連接字符串指向安全監(jiān)視器與操作轉(zhuǎn)換器。在操作轉(zhuǎn)換器上配置后臺(tái)數(shù)據(jù)庫的信息??梢詫⒉僮鬓D(zhuǎn)換器按照堡壘機(jī)的方 式部署在應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器之間,以獲得更好的效果。為增強(qiáng)應(yīng)用系統(tǒng)的安全性, 本發(fā)明的方法對(duì)數(shù)據(jù)庫訪問的方式進(jìn)行了改變,監(jiān)視并控制數(shù)據(jù)庫訪問接口。本發(fā)明方法 可阻止對(duì)數(shù)據(jù)庫系統(tǒng)SQL注入、上傳惡意文件、惡意消耗數(shù)據(jù)庫資源等威脅,增強(qiáng)應(yīng)用系統(tǒng) 的整體安全防護(hù)能力。安全JDBC驅(qū)動(dòng)同操作轉(zhuǎn)換器之間的交互總體上分為兩個(gè)過程握手過程和數(shù)據(jù) 庫訪問過程。握手過程是系統(tǒng)啟動(dòng)階段安全JDBC驅(qū)動(dòng)和操作轉(zhuǎn)換器之間建立TCP連接,并 確認(rèn)對(duì)方的身份以及協(xié)商對(duì)稱密鑰的過程。數(shù)據(jù)庫訪問過程是指在握手過程以后上次應(yīng)用 程序調(diào)用安全JDBC接口,通過操作轉(zhuǎn)換器進(jìn)行數(shù)據(jù)庫訪問。在兩種交互的過程中,為了保 護(hù)數(shù)據(jù)傳輸安全,相互之間交互的報(bào)文都將進(jìn)行加密。本發(fā)明的報(bào)文加密設(shè)計(jì)主要采用了非對(duì)稱加密算法、對(duì)稱加密算法、隨機(jī)數(shù)生成 算法、DH密鑰交換算法。非對(duì)稱加密算法用于握手過程中的數(shù)據(jù)加密。對(duì)稱加密算法用于 數(shù)據(jù)庫訪問過程的數(shù)據(jù)加密。DH密鑰交換算法以及隨機(jī)數(shù)生成算法用于生成對(duì)稱密鑰。握 手過程使用DH密鑰交換算法產(chǎn)生數(shù)據(jù)庫訪問過程加密使用的對(duì)稱密鑰。一個(gè)典型的交互示例用戶單擊應(yīng)用系統(tǒng)某查詢頁面,應(yīng)用程序生成查詢語句,并 調(diào)用安全JDBC驅(qū)動(dòng)。安全JDBC驅(qū)動(dòng)負(fù)責(zé)對(duì)用戶的操作請(qǐng)求進(jìn)行安全檢查與審計(jì),然后將其 轉(zhuǎn)換為自定義的消息傳給操作轉(zhuǎn)換器,操作轉(zhuǎn)換器在解析消息后生成對(duì)應(yīng)的標(biāo)準(zhǔn)JDBC請(qǐng) 求,通過本地的數(shù)據(jù)庫廠商提供的JDBC和真正的數(shù)據(jù)庫服務(wù)器進(jìn)行交互,執(zhí)行成功以后將 結(jié)果集返回給應(yīng)用服務(wù)器。具體流程如下1.握手過程1)安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器通過三次握手建立TCP連接;2)雙方進(jìn)行加密協(xié)商,協(xié)商一個(gè)用于加密以后傳輸報(bào)文的對(duì)稱密鑰;3)雙方進(jìn)行版本協(xié)商,確定交互雙方的版本;4)進(jìn)行用戶身份認(rèn)證,通過對(duì)用戶名和密碼的校驗(yàn),檢查相應(yīng)的用戶是否具備訪 問操作轉(zhuǎn)換器的權(quán)限。2.數(shù)據(jù)庫操縱過程1)上層應(yīng)用系統(tǒng)產(chǎn)生數(shù)據(jù)庫訪問請(qǐng)求,調(diào)用安全JDBC接口 ;2)進(jìn)行接口過濾,阻擋一些自定義的非法JDBC調(diào)用,如針對(duì)特定系統(tǒng)表的操作, 刪除特定表的操作等。當(dāng)非法JDBC調(diào)用發(fā)生時(shí),發(fā)出警報(bào)并終止請(qǐng)求;3)調(diào)用安全檢查器接口,進(jìn)行SQL語句的安全檢查,檢查不通過則拋出“檢測(cè)到可 疑SQL語句”的SQLExc印tion,同時(shí)記錄相關(guān)日志信息;4)檢查合格后,提取SQL請(qǐng)求相關(guān)信息,比如原始SQL語句,操作類型等組裝為自 定義消息報(bào)文;
5)利用握手過程中協(xié)商的對(duì)稱密鑰對(duì)報(bào)文進(jìn)行加密;6)調(diào)用通信接口,發(fā)送報(bào)文;7)操作轉(zhuǎn)換器接收?qǐng)?bào)文,并進(jìn)行解密,提取數(shù)據(jù)庫操作命令以及相關(guān)信息;
8)調(diào)用后臺(tái)標(biāo)準(zhǔn)JDBC驅(qū)動(dòng),進(jìn)行真實(shí)數(shù)據(jù)庫訪問,并獲取結(jié)果集;9)將返回結(jié)果集組裝為自定義報(bào)文,通過通信接口進(jìn)行發(fā)送。
權(quán)利要求
一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法,其特征在于,包括以下步驟1)系統(tǒng)啟動(dòng)時(shí),應(yīng)用程序?qū)⑾仍L問安全檢查器獲得安全策略文件,將安全策略寫入內(nèi)存,然后利用安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器建立持久TCP連接;2)應(yīng)用程序進(jìn)行數(shù)據(jù)庫操作時(shí),直接調(diào)用自定義JDBC接口;3)安全JDBC驅(qū)動(dòng)進(jìn)行接口級(jí)安全過濾,調(diào)用安全檢查器接口進(jìn)行,對(duì)SQL操作語句進(jìn)行注入特征安全檢查;4)操作若檢查失敗,不滿足策略要求,則會(huì)在JDBC驅(qū)動(dòng)中拋出相應(yīng)的JAVA異常;5)操作若檢查通過,滿足策略要求,安全JDBC驅(qū)動(dòng)則會(huì)將具體操作傳遞至操作轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換與執(zhí)行;6)操作轉(zhuǎn)換器將數(shù)據(jù)庫上的執(zhí)行結(jié)果進(jìn)行返回,最后返回至應(yīng)用程序。
2.根據(jù)權(quán)利要求1所述的一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法,其特征在 于,所述安全JDBC驅(qū)動(dòng)實(shí)現(xiàn)了標(biāo)準(zhǔn)JDBC 3. 0接口的所有通用功能。
3.根據(jù)權(quán)利要求1所述的一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法,其特征在 于,所述的安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器建立持久TCP連接的應(yīng)用層協(xié)議是自定義的。
4.根據(jù)權(quán)利要求1所述的一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法,其特征在 于,所述的安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器建立持久TCP連接包括握手過程和數(shù)據(jù)庫訪問過 程;握手過程是啟動(dòng)階段安全JDBC驅(qū)動(dòng)和操作轉(zhuǎn)換器之間建立TCP連接,并確認(rèn)對(duì)方的身 份以及協(xié)商對(duì)稱密鑰的過程;數(shù)據(jù)庫訪問過程是指在握手過程以后上次應(yīng)用程序調(diào)用安全 JDBC接口,通過操作轉(zhuǎn)換器進(jìn)行數(shù)據(jù)庫訪問。
全文摘要
本發(fā)明公開了一種基于自定義安全JDBC驅(qū)動(dòng)的數(shù)據(jù)庫防護(hù)方法,包括以下步驟系統(tǒng)啟動(dòng)時(shí),應(yīng)用程序?qū)⑾仍L問安全檢查器獲得安全策略文件,將安全策略寫入內(nèi)存,然后利用安全JDBC驅(qū)動(dòng)與操作轉(zhuǎn)換器建立持久TCP連接;應(yīng)用程序進(jìn)行數(shù)據(jù)庫操作時(shí),直接調(diào)用自定義JDBC接口;安全JDBC驅(qū)動(dòng)進(jìn)行接口級(jí)安全過濾,調(diào)用安全檢查器接口進(jìn)行,對(duì)SQL操作語句進(jìn)行注入特征安全檢查;操作若檢查失敗,不滿足策略要求,則會(huì)在JDBC驅(qū)動(dòng)中拋出相應(yīng)的JAVA異常;操作若檢查通過,滿足策略要求,安全JDBC驅(qū)動(dòng)則會(huì)將具體操作傳遞至操作轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換與執(zhí)行;操作轉(zhuǎn)換器將數(shù)據(jù)庫上的執(zhí)行結(jié)果進(jìn)行返回,最后返回至應(yīng)用程序。
文檔編號(hào)G06F17/30GK101833620SQ201010159269
公開日2010年9月15日 申請(qǐng)日期2010年4月28日 優(yōu)先權(quán)日2010年4月28日
發(fā)明者張濤, 戴造建, 林為民, 石聰聰, 秦浩, 秦超, 陳浩 申請(qǐng)人:國網(wǎng)電力科學(xué)研究院