嵌入式系統中入侵檢測的設計及實現
圖2 事件分析器程序流程圖
從圖2可以看出,系統目前只檢測三種安全威脅,這是針對電力系統的威脅而確定。檢測的結果保存到威脅日志中并生成相應錯誤號,輔助響應單元完成后續操作??梢愿鶕枨?,通過修改檢測策略庫增加檢測的攻擊類型,但是為了不影響嵌入式系統的實時性,原則上只檢測必要的攻擊行為。
3.2 主要數據結構和方法
大型入侵檢測系統采用標準的日志數據結構,以方便系統之間的數據交流。但作為一個嵌入式的應用,目前并沒有做分布式架構的設計。若采用標準數據結構,則會使日志記錄的數據量大大增加,占用大量有限的存儲器空間。因此系統自定義了一個日志記錄的數據結構,而事件數據庫以一個結構體數組形式存在,并通過一個結構體控制數組使其成為一個循環區域。日志記錄和控制循環區域的結構體數據格式如下:
struct log {
unsigned char tp; //說明日志文件類型
unsigned char action; //說明操作類型
unsigned long time; //說明操作時間
unsigned long ip; //說明操作地點
long backup; //供擴展用
}
日志記錄是整個模塊中最占用存儲器的部分,為了盡量減少占用存儲區域,各個字段都做了優化處理。在時間上并不采用傳統標準的年/月/日/時/分/秒表示,而是以一個無符號的長整型表示時間差來計算時間。這樣不僅節省了存儲空間,還簡化了檢測過程中時間差計算的復雜度。具體操作類型通過char tp與char action確定,用每一個bit位表示一個操作,這樣可以表示64個具體操作類型。
struct logchain {
struct log* start; //緩存區開始的地址
struct log* end; //緩存區結束的地址
unsigned short lpoint//上次入侵檢測提取的最后一條記錄
unsigned short ttsize//整個緩存區的大小
unsigned short entries//目前被占用的記錄數目
unsigned short curpoint//指向當前可以寫入的緩存區點
}
上述數據結構將控制整個事件數據庫日志的存儲管理。事件數據庫以一個循環的結構體數組表示,可以避免數據緩沖區的溢出。
整個入侵檢測模塊主要有以下幾個功能函數。為了保證通用性,所有函數都是以標準C語言編寫。
(1)入侵檢測模塊的啟動:unsigned char audit_init(void)。該功能函數將完成事件數據庫存儲區域的初始化、消息隊列的初始化和常駐任務的建立。
(2)常駐任務:void audittrail_thread(void*arg)。當系統啟動入侵檢測服務后,該任務將作為常駐任務運行在系統中。常駐任務是接收事件產生器發送的消息,經格式化處理保存在事件數據庫中,并根據事件數據庫的情況觸發事件分析器。
(3)檢測函數
密碼猜測攻擊:void check_countguess(void)
異常操作行為:void check_abnormalaction(void)
資源訪問情況:void check_resoucestatus(void)
這三個功能函數用來分析用戶登錄日志記錄,檢測是否存在惡意攻擊。
(4)響應單元主函數:void response_main(unsigned char alarm)。該函數根據分析器得出的警告,調用響應策略庫中的相關策略,實施保護或者反擊措施。
本文提出的基于改進的μC/OS-II入侵檢測模塊的設計已基本實現。并且,作者修改了本實驗室已實現的智能脫扣器項目的軟件,并把它加載到修改后的嵌入式操作系統上進行初步測試。測試結果表明:系統的實時性和安全性均能滿足要求。在本論文的基礎上,作者將對入侵檢測的策略進行進一步改進和擴充,增強其穩定性和實時性,以使其能更適應實際的電力應用領域。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
評論