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