本發(fā)明是關于信息安全
技術領域:
,特別涉及一種數(shù)據庫對象腳本安全漏洞的行為檢測方法。
背景技術:
:隨著信息技術的發(fā)展,數(shù)據庫成了很多企業(yè)的核心資產,特別是金融、互聯(lián)網等企業(yè),數(shù)據庫一旦出現(xiàn)故障整個企業(yè)的業(yè)務立刻癱瘓,因此數(shù)據庫安全越來越受到人們的重視。目前數(shù)據庫系統(tǒng)越來越先進,功能也越來越強大,人們可以在數(shù)據庫上開發(fā)各種對象供應用程序調用,比如各種存儲過程、視圖、觸發(fā)器等,這方便了應用程序的開發(fā),但同時也帶來了各種安全問題。由于這些對象運行在數(shù)據庫服務器上,能直接操作數(shù)據庫,如果數(shù)據庫對象開發(fā)人員開發(fā)時無意或有意的犯錯,就可能會在數(shù)據庫上留下后門或使數(shù)據庫丟失數(shù)據,這些都會對數(shù)據庫造成巨大的影響。因此對這些對象腳本的安全審計非常重要,但是很多時候由于審計人員經驗欠缺或疏忽,這些對象腳本的安全風險不能被全部發(fā)現(xiàn)。而且很多時候由于沒有審計人員,這些腳本直接寫進了數(shù)據庫。因此必須有方法能快速全面地發(fā)現(xiàn)腳本中的安全風險,降低腳本安全審計的難度。目前常見的數(shù)據庫安全掃描軟件主要檢測數(shù)據庫系統(tǒng)配置風險和數(shù)據庫軟件本身的安全漏洞,分析的都是數(shù)據庫系統(tǒng)的信息,沒有對數(shù)據庫對象腳本進行分析的功能。技術實現(xiàn)要素:本發(fā)明的主要目的在于克服現(xiàn)有技術中的不足,提供一種能夠發(fā)現(xiàn)數(shù)據庫對象腳本安全漏洞的方法。為解決上述技術問題,本發(fā)明的解決方案是:提供一種數(shù)據庫對象腳本安全漏洞的行為檢測方法,用于對待檢測數(shù)據庫對象腳本的安全漏洞進行檢測,所述數(shù)據庫對象腳本安全漏洞的行為檢測方法包括下述步驟:(1)將待檢測數(shù)據庫中的對象、表結構、部分表數(shù)據(部分表數(shù)據是指每個表開頭的100條數(shù)據,全部復制數(shù)據量太大,如果表里沒數(shù)據可能一些對象就無法正常執(zhí)行)復制到測試數(shù)據庫;所述測試數(shù)據庫采用一個與待檢測數(shù)據庫同類型同版本號的空數(shù)據庫,并在測試數(shù)據庫中創(chuàng)建一張測試表;(2)獲取測試數(shù)據庫中所有用戶編寫的對象;具體包括下述子步驟:步驟D:在測試數(shù)據庫中,用SELECT語句從數(shù)據庫系統(tǒng)視圖里獲取對象列表;步驟E:將步驟D中獲取的對象中,沒有調用參數(shù)的對象過濾掉;(3)用滲透參數(shù)庫中的字符串作為傳入參數(shù),嘗試執(zhí)行測試數(shù)據庫中所有有參數(shù)的對象;具體包括下述子步驟:步驟F:取步驟E返回的一個對象;步驟G:取滲透參數(shù)庫中的一條字符串作為調用參數(shù),嘗試執(zhí)行取得的對象;所述滲透參數(shù)庫是指(根據以往漏洞滲透經驗形成的)滲透字符串的集合,用于對參數(shù)進行滲透測試;(4)對象嘗試調用后判斷測試表中是否插入了測試數(shù)據,如果有說明該對象存在安全漏洞;具體包括下述子步驟:步驟H:對象執(zhí)行后判斷測試表里是否插入了測試數(shù)據:如果測試表里有數(shù)據說明該對象有安全漏洞,記下對象名稱、參數(shù)名稱,以及滲透用的字符串,并刪除測試數(shù)據;如果測試表里沒有數(shù)據,循環(huán)執(zhí)行步驟G、步驟H,直至完成滲透參數(shù)庫中所有字符串的滲透測試;步驟I:循環(huán)執(zhí)行步驟F、步驟G、步驟H,直至完成對步驟E返回的所有對象的執(zhí)行結果行為判斷;(5)列出有安全漏洞對象名、參數(shù)名和對應的滲透字符串,即步驟H中得出的有安全漏洞的對象名稱、參數(shù)名稱和滲透字符串,形成掃描報告輸出。在本發(fā)明中,所述步驟(1)具體包括下述子步驟:步驟A:準備一個與待檢測數(shù)據庫同類型同版本號的空數(shù)據庫作為測試數(shù)據庫(比如Oracle10.2.0.1.0),并創(chuàng)建一張測試表;步驟B:用管理員賬號連接待檢測數(shù)據庫和測試數(shù)據庫;步驟C:用SELECT語句獲取待檢測數(shù)據庫的對象腳本、表結構,然后用CREATE語句在測試數(shù)據庫中重新創(chuàng)建對象和表(用SELECT語句獲取待檢測數(shù)據庫中每個表的部分數(shù)據,比如100條,然后用INSERT語句插入測試數(shù)據庫)。與現(xiàn)有技術相比,本發(fā)明的有益效果是:本發(fā)明根據當前要檢測的數(shù)據庫生成測試數(shù)據庫,然后在測試數(shù)據庫上對數(shù)據庫腳本進行滲透測試,故能在不影響待檢測數(shù)據庫的前提下,通過滲透測試、行為分析,發(fā)現(xiàn)對象中SQL注入等危害比較大的安全漏洞。由于本發(fā)明在測試數(shù)據庫上進行滲透,所以這種方法能避免對待掃描數(shù)據庫造成損害,同時用戶也能快速定位有安全漏洞的腳本對象,并能有效降低漏洞的誤報率。附圖說明圖1為本發(fā)明的工作流程圖。具體實施方式首先需要說明的是,本發(fā)明涉及數(shù)據庫技術,是計算機技術在信息安全
技術領域:
的一種應用。在本發(fā)明的實現(xiàn)過程中,會涉及到多個軟件功能模塊的應用。申請人認為,如在仔細閱讀申請文件、準確理解本發(fā)明的實現(xiàn)原理和發(fā)明目的以后,在結合現(xiàn)有公知技術的情況下,本領域技術人員完全可以運用其掌握的軟件編程技能實現(xiàn)本發(fā)明,凡本發(fā)明申請文件提及的均屬此范疇,申請人不再一一列舉。下面結合附圖與具體實施方式對本發(fā)明作進一步詳細描述:如圖1所示,假設要對Oracle10g數(shù)據庫進行對象腳本安全漏洞行為檢測,具體包括下述步驟:步驟A:首先確定要檢測的數(shù)據庫的類型和版本號,比如Oracle10.2.0.1.0,然后在另外一臺計算機上安裝一個相同版本的數(shù)據庫,我們稱它為測試數(shù)據庫,并創(chuàng)建一張名為TestTable的表,添加一個字符串類型的字段strTest;步驟B:用管理員賬號連接要檢測的數(shù)據庫和測試數(shù)據庫;步驟C:用SELECT語句獲取待檢測數(shù)據庫的對象腳本、表結構,然后用CREATE語句在測試數(shù)據庫中重新創(chuàng)建對象和表。用SELECT語句獲取待檢測數(shù)據庫中每個表的部分數(shù)據,比如100條,然后用INSERT語句插入測試數(shù)據庫,盡量使測試數(shù)據庫和待檢測數(shù)據庫保持一致;步驟D:在測試數(shù)據庫中,用SELECT語句從數(shù)據庫系統(tǒng)視圖All_SOURCE里獲取對象名稱和傳入參數(shù)列表,例如:對象名稱為test,傳入參數(shù)為一個VARCHAR2型的參數(shù);步驟E:將沒有傳入參數(shù)的對象過濾掉;步驟F:取步驟E返回的一個對象,如test(VARCHAR2);步驟G:取滲透參數(shù)庫中的一條字符串作為調用參數(shù),嘗試執(zhí)行取得的對象,例如:首先創(chuàng)建一個插入測試數(shù)據的函數(shù)F1:CREATEORREPLACEFUNCTIONF1RETURNNUMBERAUTHIDCURRENT_USERASPRAGMAAUTONOMOUS_TRANSACTION;BEGINEXECUTEIMMEDIATE'insertintoTestTablevalue(\‘test\’)';COMMIT;RETURN(0);END;然后調用滲透測試對象:begintest('.”||F1()||””)--','a');end;步驟H:對象執(zhí)行后判斷測試表里是否插入了測試數(shù)據,用select*fromTestTable語句查看,如果表里有測試數(shù)據,說明該對象有安全漏洞,記下對象名test和參數(shù)名param1,以及滲透用的字符串'.”||F1()||””)--','a',然后刪除測試數(shù)據deletefromTestTable;步驟I:如果測試表里沒有數(shù)據,循環(huán)執(zhí)行步驟G、步驟H,直至完成滲透參數(shù)庫中所有字符串的滲透測試;步驟J:循環(huán)執(zhí)行步驟F、步驟G、步驟H、步驟I,直至完成對步驟E返回的所有對象的執(zhí)行結果行為判斷;步驟K:將步驟H中得出的有安全漏洞的對象名稱、參數(shù)名稱和滲透字符串列出,形成掃描報告提供給用戶,可參考下表1。表1掃描報告表對象名參數(shù)名滲透字符串testparam1'.”||F1()||””)--','a'最后,需要注意的是,以上列舉的僅是本發(fā)明的具體實施例。顯然,本發(fā)明不限于以上實施例,還可以有很多變形。本領域的普通技術人員能從本發(fā)明公開的內容中直接導出或聯(lián)想到的所有變形,均應認為是本發(fā)明的保護范圍。當前第1頁1 2 3