摘要:日志文件分析是系統(tǒng)安全檢測(cè)的重要內(nèi)容,同時(shí)日志文件也是計(jì)算機(jī)取證的重要依據(jù)。文章設(shè)計(jì)了第三方的Windows日志取證系統(tǒng),并討論了今后的研究方向。
關(guān)鍵詞:日志文件;網(wǎng)絡(luò)取證;審計(jì)跟蹤;IRP
0 引言
當(dāng)前網(wǎng)絡(luò)應(yīng)用非常廣泛,網(wǎng)絡(luò)涉及了各種各樣的信息,由此產(chǎn)生各種攻擊事件非常多,有些已經(jīng)構(gòu)成網(wǎng)絡(luò)犯罪。我們除了對(duì)攻擊進(jìn)行防范外,還要記錄下犯罪現(xiàn)場(chǎng)的信息,得到黑客入侵證據(jù),以便分析入侵者的企圖和事后追究責(zé)任。這需要記錄網(wǎng)絡(luò)狀態(tài)、系統(tǒng)狀態(tài)等一系列的數(shù)據(jù)和信息。整個(gè)記錄系統(tǒng)中有一個(gè)重要的環(huán)節(jié)是系統(tǒng)日志的獲取,但系統(tǒng)中的任何日志文件都可能被入侵者改動(dòng)過(guò),因此必須要獲得原始的系統(tǒng)日志,尤其對(duì)于存儲(chǔ)了敏感信息的服務(wù)器,或者是安全需求大的部門(mén),不僅在系統(tǒng)受到威脅時(shí)需要備份出原始的系統(tǒng)日志,平時(shí)也需要備份出原始的系統(tǒng)日志。本文就是設(shè)計(jì)一個(gè)基于Windows的用于計(jì)算機(jī)取證的日志系統(tǒng)。該系統(tǒng)有相對(duì)獨(dú)立的取證計(jì)算機(jī),不影響原系統(tǒng),在實(shí)時(shí)取證中,不會(huì)破壞原始的系統(tǒng)狀態(tài),不會(huì)驚擾攻擊者,可以跟蹤攻擊過(guò)程,以便分析入侵者的企圖和攻擊技術(shù)。有了全面完整的日志,也便于事后的分析和追究責(zé)任。
1 取證日志
1.1 Windows日志
Windows日志的默認(rèn)存放路徑是%SystemRoot%\\system32\\config\\,其中應(yīng)用日志為AppEvent.Evt,系統(tǒng)日志為SysEvent.Evt,安全日志為SecEvent.Evt。其文件格式為Windows日志文件專用的格式。日志文件中包含了一定的信息,但還有一些信息是在另外的dll文件中。在日志記錄結(jié)構(gòu)中,有定長(zhǎng)的部分和不定長(zhǎng)的部分。定長(zhǎng)部分是固定的描述信息,在定長(zhǎng)結(jié)構(gòu)的最后就是事件來(lái)源信息。不定長(zhǎng)部分則是相關(guān)的描述信息。在描述信息中有一些插入字符串,如n%的形式,這些插入字符存在相關(guān)的dll文件中。
1.2 日志文件的防護(hù)
計(jì)算機(jī)取證的數(shù)據(jù)保護(hù)的重點(diǎn)是日志保護(hù),它是取證與反取證斗爭(zhēng)的焦點(diǎn)。日志文件包含大量敏感的記錄,每條記錄由時(shí)間戳和操作描述組成。普通日志系統(tǒng)非常脆弱,入侵者能輕易讀取、修改或刪除日志而不留痕跡。安全保存日志的方法有:①將日志“定期”備份到異地的日志主機(jī),缺點(diǎn)是日志易被篡改;②直接打印日志或?qū)懭隬ORM(Write Once Read Multiple)介質(zhì),缺點(diǎn)是費(fèi)用昂貴,不適應(yīng)大容量日志;③將日志數(shù)據(jù)“實(shí)時(shí)”發(fā)送到遠(yuǎn)程的日志主機(jī)。攻擊者對(duì)攻擊目標(biāo)的操作系統(tǒng)的漏洞非常熟悉,但用另一個(gè)系統(tǒng)存儲(chǔ)日志,作為第三方日志,可以被隔離保護(hù),免受入侵者攻擊。第三方存儲(chǔ)作為計(jì)算機(jī)取證的核心技術(shù)之一,目前在國(guó)內(nèi)還屬于新技術(shù)。本文設(shè)計(jì)的系統(tǒng)功能就是將日志數(shù)據(jù)“實(shí)時(shí)”發(fā)送到遠(yuǎn)程的日志主機(jī),作為取證的日志系統(tǒng)。
2 系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)拓?fù)浣榻B
把要記錄日志的那臺(tái)機(jī)器稱為被取證機(jī)。我們不能把日志信息記錄在被取證機(jī)上,因?yàn)閺脑砩蟻?lái)說(shuō)有被黑客刪除的可能。所以要把日志信息傳到另一臺(tái)黑客所不能發(fā)現(xiàn)的,但與被取證機(jī)連在同一個(gè)網(wǎng)絡(luò)上的機(jī)器上,這臺(tái)機(jī)器稱為取證機(jī)。不同的被取證機(jī)上運(yùn)行的操作系統(tǒng)有多種類型(Windows。Liunx,Unix),本文設(shè)被取證機(jī)上運(yùn)行Windows2000(2003)操作系統(tǒng)。日志獲取模塊在Windows2000(2003)下截獲操作系統(tǒng)產(chǎn)生的日志,并通過(guò)SSL加密方式傳到取證機(jī)上。取證機(jī)上運(yùn)行的操作系統(tǒng)是Linux,上面運(yùn)行接收模塊,接收模塊把接收到的日志解密,用給定的格式存儲(chǔ),實(shí)現(xiàn)了整個(gè)系統(tǒng)的日志記錄。
2.2 系統(tǒng)結(jié)構(gòu)圖
取證系統(tǒng)的結(jié)構(gòu)。
2.3 Windows系統(tǒng)模塊功能
在Windows系統(tǒng)上,運(yùn)行三個(gè)模塊:日志信息獲取模塊、日志信息緩存模塊、加密認(rèn)證傳輸模塊。各模塊主要功能如下:
2.3.1日志信息獲取模塊
日志信息獲取模塊是上述三個(gè)模塊中最重要的部分,它又分為:主引導(dǎo)子模塊、過(guò)濾器驅(qū)動(dòng)程序子模塊、日志獲取線程子模塊。其中主引導(dǎo)子模塊的作用就是啟動(dòng)日志獲取線程。
過(guò)濾器驅(qū)動(dòng)子模塊:是一個(gè)獨(dú)立的模塊,主要進(jìn)行日志截取處理,利用Windows系統(tǒng)驅(qū)動(dòng)程序的方式來(lái)實(shí)現(xiàn)。
Windows系統(tǒng)由好幾個(gè)部分組成,而且是分層次的,上層的程序運(yùn)行依靠下層的服務(wù)。一般來(lái)說(shuō),上層的程序運(yùn)行方式叫用戶模式(user Mode),一般的API就是運(yùn)行在這種模式。在用戶模式下,程序只能得到有限的權(quán)限使用計(jì)算機(jī)的資源,很多硬件資源是限制的,不允許訪問(wèn)。這樣可防止用戶模式程序不經(jīng)意地,或故意地會(huì)造成計(jì)算機(jī)崩潰的操作,從而保護(hù)了計(jì)算機(jī)。用戶模式下的程序運(yùn)行在3個(gè)級(jí)別的權(quán)限下。處于用戶模式下層的是核心模式(Kernel Mode),核心模式下的程序可用任何計(jì)算機(jī)資源,沒(méi)有限制,也就是運(yùn)行在0級(jí)權(quán)限下。在這種模式下,誤操作很容易會(huì)引起系統(tǒng)死機(jī)。日志獲取模塊為了更可靠地截取到日志記錄,使用了過(guò)濾器驅(qū)動(dòng)的方法,驅(qū)動(dòng)運(yùn)行在核心模式,從而可以在系統(tǒng)底層得到更多的權(quán)限,把日志充分地記錄下來(lái)。
用戶模式對(duì)計(jì)算機(jī)的操作其實(shí)是通過(guò)向底層即核心模式發(fā)送請(qǐng)求實(shí)現(xiàn)的。每一個(gè)請(qǐng)求被封裝成一個(gè)包,叫IRP(IJOrequest packet),包里面有操作的相關(guān)信息。所以用驅(qū)動(dòng)進(jìn)行日志截取的原理就是,當(dāng)對(duì)日志文件寫(xiě)入日志信息時(shí),就會(huì)有一個(gè)IRP發(fā)到底層,只要截獲了這個(gè)IRP,那就能從IRP里面得到寫(xiě)入的信息,也就是說(shuō)得到日志實(shí)時(shí)記錄信息。而截獲IRP的過(guò)程是由過(guò)濾器驅(qū)動(dòng)實(shí)現(xiàn)的。
過(guò)濾器驅(qū)動(dòng)會(huì)在啟動(dòng)的時(shí)候或適當(dāng)?shù)臅r(shí)候把自己掛接到硬盤(pán)驅(qū)動(dòng)上去,只要掛接成功,對(duì)硬盤(pán)操作的IRP不再發(fā)向硬盤(pán)驅(qū)動(dòng),而是傳到了過(guò)濾器驅(qū)動(dòng)上,過(guò)濾器驅(qū)動(dòng)作相應(yīng)的處理后再傳到硬盤(pán)驅(qū)動(dòng),這就是截獲的過(guò)程。
該驅(qū)動(dòng)程序在系統(tǒng)啟動(dòng)時(shí)會(huì)由日志獲取線程子模塊中的服務(wù)調(diào)用,一直駐留在內(nèi)存中,直到關(guān)機(jī)或用戶讓服務(wù)停止驅(qū)動(dòng)才停止工作。同一時(shí)間系統(tǒng)只運(yùn)行一個(gè)實(shí)例,它負(fù)責(zé)截取指定文件的寫(xiě)入操作,把寫(xiě)入的內(nèi)容記錄下來(lái),并在其它模塊的要求下傳送截獲的內(nèi)容。
在這個(gè)模塊中數(shù)據(jù)流的變化:日志信息獲取模塊截獲數(shù)據(jù)并進(jìn)行格式化,得到格式化的字節(jié)流,字節(jié)流將組裝成日志信息對(duì)象及日志信息對(duì)象指針。
日志獲取線程子模塊:在本系統(tǒng)中日志的獲取和傳輸是通過(guò)服務(wù)來(lái)實(shí)現(xiàn)的。將相關(guān)功能寫(xiě)成服務(wù),這樣更可靠、穩(wěn)定。為了實(shí)現(xiàn)可靠、穩(wěn)定的目的,共設(shè)計(jì)了三個(gè)眼務(wù)。第—個(gè)是主要的服務(wù):?jiǎn)?dòng)日志獲取線程,調(diào)用過(guò)濾器驅(qū)動(dòng)程序。為防止服務(wù)意外終止,又設(shè)計(jì)了第二個(gè)服務(wù),用于保護(hù)的服務(wù)。這兩個(gè)服務(wù)互相監(jiān)視,若發(fā)現(xiàn)一方停止,另一方會(huì)馬上啟動(dòng)被停止的一方,這樣就能保證服務(wù)不會(huì)停止。為了方便用戶,還設(shè)計(jì)—個(gè)用于停止這兩個(gè)服務(wù)的程序,以便在確實(shí)需要停止的時(shí)候,可以停止前兩個(gè)服務(wù)。
2.3.2日志信息緩存模塊
日志信息緩存模塊的功能是對(duì)日志獲取模塊獲得的數(shù)據(jù)作緩存處理。其中控制功能部分依靠中心控制器來(lái)完成,中心控制器檢測(cè)到當(dāng)前優(yōu)先級(jí)隊(duì)列中有緩存的數(shù)據(jù),立即查看它所緩存的傳輸控制對(duì)象的指針是否已經(jīng)初始化,若沒(méi)有,則先獲取傳輸控制對(duì)象,否則進(jìn)行下一步:利用緩存的指向傳輸控制對(duì)象的指針,進(jìn)行數(shù)據(jù)的傳輸Send。Send函數(shù)執(zhí)行過(guò)程中,傳輸控制對(duì)象將對(duì)它進(jìn)行數(shù)據(jù)的加密、認(rèn)證等操作,這些操作對(duì)于其他對(duì)象或者模塊而言是透明的。
2.3.3 加密認(rèn)證傳輸
加密認(rèn)證傳輸部分主要是獲得日志信息緩存模塊中的日志信息對(duì)象指針,對(duì)該指針?biāo)赶虻臄?shù)據(jù)進(jìn)行加密、認(rèn)證并傳輸。傳輸以網(wǎng)絡(luò)bit流方式進(jìn)行。
2.4 Linux系統(tǒng)模塊功能
Linux一方完成日志信息接收和解密:監(jiān)聽(tīng)網(wǎng)絡(luò)數(shù)據(jù)流,一旦有數(shù)據(jù)流到達(dá),則進(jìn)行接收,接收后立即進(jìn)行數(shù)據(jù)解密。使用對(duì)象緩存的日志信息存儲(chǔ)對(duì)象的指針,調(diào)用相關(guān)操作進(jìn)行日志的存儲(chǔ)操作,解析數(shù)據(jù)接收控制對(duì)象的數(shù)據(jù),進(jìn)行正確的日志保存。通過(guò)數(shù)據(jù)接收控制對(duì)象得到格式化的字節(jié)流,對(duì)格式化的字節(jié)流,按照Windows的日志格式和規(guī)范進(jìn)行存儲(chǔ),保證數(shù)據(jù)在Windows平臺(tái)上的正確格式,產(chǎn)生日志文件。
3 結(jié)束語(yǔ)
本系統(tǒng)為了安全、可靠,通過(guò)IRP(UO request packet)來(lái)獲得日志信息,所以對(duì)WWW、FTP所產(chǎn)生的Log文件不能截獲,因?yàn)閷?duì)這些Log文件的操作不經(jīng)過(guò)Fast I/0及一般的IRP。在下一步的工作中,要實(shí)現(xiàn)相關(guān)服務(wù)所產(chǎn)生的Log文件的獲取;另外,將在現(xiàn)有的模型基礎(chǔ)上,實(shí)現(xiàn)基于Linux操作系統(tǒng)的日志取證,并通過(guò)實(shí)踐進(jìn)一步完善模型的設(shè)計(jì)。