摘 要: 鑒于Cache數(shù)據(jù)庫多種訪問方式,利用Antlr語法產(chǎn)生工具完成Cache對象腳本語法和SQL腳本語法向中間表示語言的轉(zhuǎn)換以便于設(shè)置統(tǒng)一的審計規(guī)則。該系統(tǒng)的主要功能包括Cache協(xié)議分析和Cache對象腳本語法轉(zhuǎn)換等。在實(shí)現(xiàn)過程中用人工方法編寫和收集大量測試用例,確定了協(xié)議分析模塊能夠起到對Cache數(shù)據(jù)庫進(jìn)行安全審計的作用。
關(guān)鍵詞: 通信協(xié)議分析; 數(shù)據(jù)庫安全審計; Cache 對象腳本語言; Cache協(xié)議分析
中圖分類號: TN915.08?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2016)21?0116?04
Research and implementation of database security protocol
TU Yunjie
(School of Computer, Hulunbuir University, Hulunbuir 021008, China)
Abstract: With provision for the multiple access modes of Cache database, the Antlr grammar generating tool is used to convert the Cache object script grammar and SQL script grammar into the intermediate representation language, so as to set the uniform audit rule. The main functions of the system include Cache protocol analysis and Cache object script grammar transformation mainly. The manual method is used to compile and collect massive test cases in realization process. It is determined that the protocol analysis module can play a role in security audit of Cache database.
Keywords: communication protocol analysis; database security audit; Cache object script language; Cache protocol analysis
作為新一代的高性能面向?qū)ο髷?shù)據(jù)庫,Cache將面向?qū)ο蠹夹g(shù)與SQL技術(shù)融為一體,為復(fù)雜應(yīng)用提供了快速開發(fā)環(huán)境以及快速多維引擎。根據(jù)前期的調(diào)查研究,Cache數(shù)據(jù)庫協(xié)議是不公開的,當(dāng)前國內(nèi)對Cache數(shù)據(jù)庫協(xié)議的研究很少,還沒有一個完全支持Cache數(shù)據(jù)庫協(xié)議分析的系統(tǒng)。所以,利用網(wǎng)絡(luò)數(shù)據(jù)報文分析,語法轉(zhuǎn)換和軟件設(shè)計等技術(shù)實(shí)現(xiàn)一個能夠自動分析Cache協(xié)議網(wǎng)絡(luò)數(shù)據(jù)流并從中提取出COS語句和SQL語句信息,完成對這兩種腳本語句向中間語言轉(zhuǎn)換,從而開發(fā)出Cache數(shù)據(jù)庫協(xié)議分析系統(tǒng),為數(shù)據(jù)庫安全審計和語法分析教學(xué)提供實(shí)踐支持。
1 Cache協(xié)議分析
1.1 SQL訪問方式
1.1.1 JDBC協(xié)議
Cache有三種不同的方式與Java互連,即通過JDBC使用SQL語句直接訪問,Cache類映射為Java類進(jìn)行訪問和Cache類映射為EJB(EnterpriseJavaBeans)類,這種映射是自動完成的。InterSystems提供了一個Java類庫使得Java應(yīng)用程序可以訪問Cache數(shù)據(jù)庫。
1.1.2 ODBC協(xié)議
一個基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,不直接與DBMS交互,其所有操作都由對應(yīng)的DBMS驅(qū)動程序完成。因此不論SQLServer,Oracle還是Cache數(shù)據(jù)庫都可以使用ODBCAPI進(jìn)行訪問。
1.1.3 SQL返回值分析
JDBC和ODBC客戶端在執(zhí)行完一條SQL語句后,能夠收到服務(wù)器端發(fā)送的返回值,這些值稱為SQLCODE。不同SQLCODE值表示服務(wù)器執(zhí)行SQL語句后的不同返回信息,比如當(dāng)SQLCODE為0時,表示有返回結(jié)果的SQL語句的正確執(zhí)行;當(dāng)SQLCODE為100時,表示沒有返回結(jié)果的SQL語句的正確執(zhí)行;當(dāng)SQLCODE為其他數(shù)值時,表示一種錯誤信息。
1.2 多維訪問方式
多維訪問方式是Caches數(shù)據(jù)庫特有的數(shù)據(jù)操作方式,對象訪問方式和SQL訪問方式直接利用多維數(shù)組自動生成的統(tǒng)一數(shù)據(jù)字典和位圖索引操作數(shù)據(jù)。多維訪問方式使得Cache數(shù)據(jù)庫只保留一份數(shù)據(jù)就可以實(shí)現(xiàn)三種方式的兼容并發(fā)操作,提供了包括數(shù)據(jù)存儲,并發(fā)管理,事務(wù)處理和過程管理的一整套完整的服務(wù)。多維方式的實(shí)現(xiàn)語言主要是Cache ObjectScript和Cache Basic,開發(fā)工具一般是Cache Studio和Cache Terminal。
2 語法分析器設(shè)計
Antlr語法分析器構(gòu)造COS語法分析器時,首先要配置Antlr的工作環(huán)境,然后參考Cache ObjectScript語法范式編寫語法文件,AntlrWorks開發(fā)工具根據(jù).G語法文件內(nèi)容自動生成COS腳本的詞法分析文件和語法分析文件。新生成的詞法文件和語法文件導(dǎo)入到VisualStudio工作環(huán)境中,進(jìn)而開發(fā)語法分析器外部程序。
2.1 Options選項(xiàng)
Antlr語法文件的Options集合決定編譯生成的目標(biāo)語言操作。在本系統(tǒng)中,COS語法分析器設(shè)置目標(biāo)語言為C語言;output選項(xiàng)設(shè)置為AST,表示返回類型為抽象語法樹;ASTLabelType設(shè)置為pANTLR3_BASE_TREE,表示語法樹節(jié)點(diǎn)類型為ANTLR3_BASE_TREE_struct類型,該類型中包括當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)、孩子節(jié)點(diǎn)、索引節(jié)點(diǎn)、符號節(jié)點(diǎn)和一系列操作方法。
2.2 Tokens選項(xiàng)
Antlr中的Tokens選項(xiàng)定義文法中用到的所有符號,這些符號通常用于標(biāo)識樹節(jié)點(diǎn),該類樹節(jié)點(diǎn)用于標(biāo)記或者組織根據(jù)實(shí)際輸入生成的子樹。Tokens符號可以是解析語言的保留字或者系統(tǒng)函數(shù)名稱。AntlrWorks在自動編譯生成目標(biāo)代碼時會產(chǎn)生一個后綴名為.token的文件,保存所有要用到的語法文件。
2.3 語法規(guī)則
結(jié)合Antlr語法基礎(chǔ)知識,Antlr的語法包括一個終結(jié)符集合,一個非終結(jié)符集合,一個產(chǎn)生式集合和一個初始狀態(tài)。產(chǎn)生式集合中的每一條產(chǎn)生式都是一條語法規(guī)則,每條規(guī)則以分號結(jié)束。為了區(qū)分終結(jié)符和非終結(jié)符,在語法中一般非終結(jié)符全部為小寫字符,終結(jié)符一般為大寫字符。在Cache對象語法中支持Set,Write,IF,F(xiàn)or,While,Goto,Do,Merge,Kill和嵌入式SQL語句等多種語法規(guī)則。Cache對象腳本語法的開始語法規(guī)則定義為start_rule,從該規(guī)則開始可以分析所有類型的語句。為了使start_rule可讀性更強(qiáng),添加cos_statement語法規(guī)則,這樣也能夠使得修改start_rule時操作更簡單。
2.3.1 SET語法規(guī)則
SET語句的功能是給變量賦值,變量的個數(shù)可以是一個或者多個。SET語句給多個變量賦值時使用逗號隔開。在SET語法中有兩個閉包:一個是賦值符號形成的閉包;一個是小括號內(nèi)部的變量之間形成的閉包,變量的命名必須符合Cache語法的命名規(guī)則,即不能以數(shù)字開頭,但是能夠以特殊的符號如‘%’,‘$’,’^’或者‘#’開頭。在SET語法結(jié)構(gòu)中,set_command中SET是Tokens標(biāo)記集合中的符號,符號“^”表示SET符號作為語法樹的根節(jié)點(diǎn);to_set_data語法規(guī)則表示賦值符號形成的閉包規(guī)則;set_statement語法規(guī)則表示賦值語句,set_item表示賦值語句左側(cè)變量集合;comparison_op表示賦值符號,identifier表示賦值符號右邊的變量,可以是標(biāo)識符,數(shù)字和字符串等。
2.3.2 WRITE語法規(guī)則
WRITE語句的功能是把變量值打印到當(dāng)前輸出設(shè)備。WRITE命令不僅能夠輸出計算表達(dá)式,變量值,常量,還能輸出對象屬性值和方法返回值。在該語法規(guī)則中,write_command規(guī)則中WRITE是Tokens集合中的符號,符號“^”表示W(wǎng)RITE符號作為語法樹的根節(jié)點(diǎn);to_write_data語法規(guī)則表示W(wǎng)RITE命令中逗號形成的閉包規(guī)則;write_statement語法規(guī)則表示對象函數(shù)遞歸調(diào)用形成的閉包;item_identifier表示標(biāo)識符語法規(guī)則。
3 系統(tǒng)實(shí)現(xiàn)
3.1 Cache協(xié)議分析器實(shí)現(xiàn)
首先根據(jù)需要配置Cache客戶端訪問數(shù)據(jù)庫的三種方式的測試環(huán)境,針對不同的訪問方式監(jiān)聽捕獲不同請求類型的數(shù)據(jù)包,并且把數(shù)據(jù)包按照訪問方式的不同分類放在不同的文件夾中。為了能夠全面分析各種類型的數(shù)據(jù)包,必須根據(jù)不同的訪問方式編寫客戶端代碼,并且每一種訪問類型的數(shù)據(jù)包保存為統(tǒng)一的文件格式。然后查閱Cache數(shù)據(jù)庫相關(guān)資料和對比分析同類與不同類數(shù)據(jù)報文,分析記錄Cache數(shù)據(jù)庫的頭部信息字段值和數(shù)據(jù)部分的結(jié)構(gòu)體的起始字節(jié),偏移量,長度和功能。最后根據(jù)分析記錄結(jié)果闡述核心代碼實(shí)現(xiàn)。
3.1.1 協(xié)議分析器的系統(tǒng)設(shè)計
結(jié)合需求分析和系統(tǒng)流程圖,設(shè)計了如圖1所示的Cache協(xié)議分析器的系統(tǒng)模塊圖。
(1) SQL訪問方式,報文頭部信息的TYPE字段值為0x0100,當(dāng)STATUS字段值為0x5050時,該報文是JDBC報文,報文數(shù)據(jù)部分由JDBC模塊處理;當(dāng)STAUS字段值為0x4455或0x4451時,該報文是ODBC報文,報文的數(shù)據(jù)部分由ODBC模塊處理。
(2) 對象訪問方式,報文頭部信息的TYPE字段值隨著PACKET?NUM字段值的變化而變化,當(dāng)STATUS字段值為0x434e或者0x4237時表示該報文為.NET框架映射報文或者Java對象映射報文。
(3) 多維訪問方式下,Cache數(shù)據(jù)庫的數(shù)據(jù)是以多維數(shù)組結(jié)構(gòu)存儲的。報文頭部信息TYPE字段值變化范圍較大,當(dāng)STATUS字段值為0x434e,0x42**或者0x53**(**表示任意值)時表示該報文為Cache對象腳本方式和Cache全局訪問方式的報文。
3.1.2 類和算法實(shí)現(xiàn)
(1) 類CachePreprocessor
Cache協(xié)議分析的原始數(shù)據(jù)報文信息是以文件形式存放在各自類別的文件夾下,文件格式是.ncf。類CachePreprocessor的主要功能是首先遍歷讀取某一訪問方式下的所有ncf格式文件,按照ncf格式處理每個數(shù)據(jù)報文,由于每次讀取的數(shù)據(jù)報文是完整的TCP/IP數(shù)據(jù)包,所以需要對每個報文進(jìn)行TCP/IP協(xié)議退棧操作,將數(shù)據(jù)鏈路層頭部信息,網(wǎng)絡(luò)層頭部信息和傳輸層頭部信息層層剝離,剩下部分為Cache協(xié)議數(shù)據(jù)報文內(nèi)容,然后將該報文信息傳送給類CacheParser對象的處理過程,最后將CacheParse對象返回結(jié)果打印到控制臺界面同時保存到指定文件中。
(2) 類CacheParse
類CacheParse負(fù)責(zé)解析Cache數(shù)據(jù)庫的三種訪問方式下的所有數(shù)據(jù)包,類CacheParse首先分析傳入的報文頭部信息,根據(jù)報文頭部信息的TYPE字段和STATUS字段值組合類型調(diào)用對應(yīng)的方法處理后,被調(diào)用函數(shù)根據(jù)數(shù)據(jù)結(jié)構(gòu)體類型和功能把結(jié)果信息填寫到預(yù)定義的數(shù)據(jù)結(jié)構(gòu)中,然后把填寫結(jié)果信息返回給外部調(diào)用函數(shù)。
3.2 Cache語法分析器實(shí)現(xiàn)
COS腳本語法文件編寫完成之后,Antlrworks集成開發(fā)工具編譯語法文件自動生成詞法分析目標(biāo)代碼文件,語法分析目標(biāo)代碼文件和符號文件等,然后將這些文件導(dǎo)入到項(xiàng)目中實(shí)現(xiàn)對Cache語法分析。由于本系統(tǒng)生成的目標(biāo)語言是C語言,所以生成的目標(biāo)代碼文件名為COSLexer.h,COSLexer.c,COSParser.h,COSParser.c和COS.TOKENS。Cache語法分析器的系統(tǒng)流程如圖2所示。
從圖2分析,語法分析器的上層模塊設(shè)計流程如下:
(1) 字符串流表示輸入文本,函數(shù)antlr3NewAsciiStringInPlaceStream()負(fù)責(zé)生成一個結(jié)構(gòu)體用于加載和存儲輸入文本信息,即ANTLR3_INPUT_STREAM_struct。
(2) 函數(shù)COSLexerNew()負(fù)責(zé)詞法分析,該函數(shù)返回詞法分析類pCOSParser的對象實(shí)例,詞法分析從左到右掃描ANTLR3_INPUT_STREAM_struct中的字符流,然后根據(jù)構(gòu)詞規(guī)則識別單詞符號。函數(shù)antlr3CommonTokenStreamSourceNew()根據(jù)返回單詞符號信息生成TOKEN符號流。
(3) 函數(shù)COSParserNew()負(fù)責(zé)語法分析,該函數(shù)根據(jù)符號表,目標(biāo)代碼和語法規(guī)則對TOKEN符號流進(jìn)行語法檢查和構(gòu)建語法樹的過程。
(4) 函數(shù)DisplayTree()負(fù)責(zé)遍歷語法樹和輸出節(jié)點(diǎn)信息。
3.3 Cache協(xié)議分析器結(jié)果展示
(1) SQL訪問方式的結(jié)果
從網(wǎng)絡(luò)數(shù)據(jù)流中解析出來的每個結(jié)果都包含一條SQL語句和一條服務(wù)器的返回信息。結(jié)果展示的SQL語句是由包含動態(tài)綁定變量的SQL語句和變量值合成的。對于服務(wù)器返回的信息,如果服務(wù)器正確執(zhí)行SQL語句則返回Success,否則返回錯誤編碼和詳細(xì)的描述信息,如圖3所示。
(2) 對象訪問方式的結(jié)果
從網(wǎng)絡(luò)數(shù)據(jù)流中解析出來的每個結(jié)果都包含對象名稱,調(diào)用方法名稱和服務(wù)器的返回信息。結(jié)果圖中展示的“[SQL]”標(biāo)志后面包含調(diào)用對象的名稱和方法名稱。每個方法都是以符號‘%’開始的。同樣地,對于服務(wù)器返回的信息,如果服務(wù)器正確執(zhí)行SQL語句則返回Success,否則返回錯誤編碼和詳細(xì)的信息,如圖4所示。
3.4 Cache語法分析器結(jié)果展示
在Cache對象語法中支持Set,Write,IF,F(xiàn)or,While,Goto,Do,Merge,Kill和嵌入式SQL語句等多種語法規(guī)則。為了展示語法分析器的運(yùn)行結(jié)果,以IF語法規(guī)則為例進(jìn)行說明,在抽象語法樹中,以NIL作為根節(jié)點(diǎn),由語法分析器默認(rèn)設(shè)置。NIL節(jié)點(diǎn)只有一個子節(jié)點(diǎn),即IF節(jié)點(diǎn)。IF和ELSE后面語句塊的每一個關(guān)鍵字都是一個子節(jié)點(diǎn),作為IF和ELSE的子樹掛在IF和ELSE節(jié)點(diǎn)下面。依此類推,WRITE節(jié)點(diǎn),QUIT節(jié)點(diǎn)分別包含各自子樹。
4 結(jié) 論
Cache協(xié)議分析的目的是為了建設(shè)Cache數(shù)據(jù)庫安全審計系統(tǒng)提供實(shí)踐支持。與當(dāng)前關(guān)系數(shù)據(jù)庫審計系統(tǒng)相比,全面地配置分析了Cache數(shù)據(jù)庫多種訪問方式下的網(wǎng)絡(luò)協(xié)議的語法和時序,系統(tǒng)地研究學(xué)習(xí)了COS腳本語法和SQL語法,既能夠?qū)嶋H運(yùn)用于數(shù)據(jù)庫安全審計和防火墻等安全防護(hù)產(chǎn)品中,又適用于信息安全和編譯原理教學(xué)自主學(xué)習(xí)平臺上去,具有實(shí)際意義。解決了Cache數(shù)據(jù)庫協(xié)議分析系統(tǒng)開發(fā)的兩個關(guān)鍵技術(shù)難題,即在全面地訪問方式下的Cache協(xié)議分析模塊和Cache對象腳本語法分析模塊。
對于Cache數(shù)據(jù)庫協(xié)議分析的研究開發(fā),盡管已經(jīng)提出了有效的解決方案,但是系統(tǒng)的功能仍然有待完善,本文中的Cache數(shù)據(jù)庫協(xié)議分析模塊和Cache對象腳本語法分析模塊仍存在亟需解決的問題:需要繼續(xù)分析報文和參考相關(guān)資料完善Cache協(xié)議分析模塊;經(jīng)過驗(yàn)證ADO訪問方式和ODBC訪問方式下的Cache數(shù)據(jù)庫協(xié)議格式和字段基本上完全相同,但是.NET訪問協(xié)議仍需要驗(yàn)證;在以后的研究開發(fā)中需要優(yōu)化產(chǎn)生式規(guī)則,提高語法分析的運(yùn)行效率。
參考文獻(xiàn)
[1] HUANG Zhongming, YE Jin, HUANG Jianhua, et al. Implement of TCP/IP stack in the embedded system which is independent of OS [J]. Journal of Guilin University of Electronic Technology, 2011(6): 45?48.
[2] ASRODIA P, SHARMA M V. Packet sniffing: an efficient approach for network monitoring and analysis [J]. International journal of electrical, electronics and computer engineering, 2012(1): 90?95.
[3] 李弘偉,王惠臨.本體表示語言轉(zhuǎn)換技術(shù)研究綜述[J].圖書情報工作,2007(5):82?85.
[4] AIKEN A, HELLERSTEIN J M, WIDOM J. Static analysis techniques for predicting the behavior of active database rules [J]. ACM transactions on database systems, 1995, 20(1): 3?41.
[5] LITCHFILED D, ANLEY C, HEASMAN J, et al. The database Hacker′s handbook defending database servers [M]. US: Wiley Publishing, 2005.
[6] 陳晨,陳懷楚,高國柱,等.基于Oracle數(shù)據(jù)庫的數(shù)據(jù)審計系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].實(shí)驗(yàn)技術(shù)與管理,2005,22(12):76?79.
[7] 易江波,趙戰(zhàn)生,阮耀平.SSL及使用SSLeay實(shí)現(xiàn)證書的簽發(fā)和管理[J].計算機(jī)應(yīng)用研究,2001(1):76?78.
[8] SMITH Kenny,HAISLEY Stephan.Oracle備份與恢復(fù)培訓(xùn)教程[M].北京:機(jī)械工業(yè)出版社,2012:11?12.