許 金
(中煤科工集團重慶研究院有限公司,重慶 400039)
煤礦安全監控系統是防范煤礦瓦斯事故的重要手段。安全監控系統數據是日常監管、事故調查分析最重要、客觀、真實的資料,確保監控數據不被篡改意義重大。為此,國家煤礦安全監察局將“假數據”等“五假五超三瞞三不”列為重點打擊對象[1]。《煤礦安全監控系統升級改造技術方案》的通知(煤安監函〔2016〕5 號)和 AQ 6201—2019 煤礦安全監控系統通用技術要求均明確要求對“采掘工作面瓦斯超限報警、斷電、饋電異常,局部通風機停風等數據應進行加密存儲,防止篡改”[2-4]。
目前行業主流煤礦安全監控系統軟件,均運行在微軟Windows 系統上,數據庫多采用大型關系數據庫。系統部署在煤礦企業,日常維護由礦方負責。礦方擁有操作系統、監控軟件、數據庫的最高權限,對數據有充分控制權,給數據防篡改帶來了較大挑戰。
煤礦安全監控系統數據防篡改關注的核心是對數據非法修改、刪除與添加,而對不影響數據真實性的查詢操作一般不作過多關注。針對這種情況,IT行業一般采用數據加密、日志審計,同時建立完備的“數據管理、安全管理、審計管理”三權分立的管理模式,從技術與管理2 個層面來保障數據安全,但這種方式專業性強、人員要求高、資金與設備投入多,在煤礦難以大面積推廣。
監控系統廠家為防止數據被非法篡改,目前主要采用如下2 種方法:
1)數據庫加密存儲[5-8]。采用監控軟件前端加密或利用數據庫內置加密機制,多采用可逆加密方式,利用對稱或非對稱加密算法,對數據進行加密存儲。加密算法與秘鑰均由廠家掌握,可對數據修改操作進行有效防范,具備易管理、編程實現方便等優點。但該方式對數據非法添加、刪除操作無法識別;加密導致索引失效,查詢性能大幅下降;無法直接使用數據庫內置函數,統計分析困難;數據共享融合困難,需要對三方接口進行大量改造。
2)文件加密,數據庫明文存儲。為了克服數據庫加密存儲方法的缺點,充分利用數據庫提供的強大檢索與統計分析能力,采用文件加密、數據庫明文存儲的方式。但該方法數據存儲冗余量大,數據篡改識別高度依賴文件與數據庫關聯對比分析規則,識別過程復雜且性能較低。
為此,亟需一種能充分利用數據庫能力,并能對數據篡改行為進行有效識別、捕獲跟蹤的方法。
為滿足實際需要,安全監控系統數據防篡改的設計,既要對數據修改操作進行捕獲、跟蹤、識別,也要在性能、存儲方面取得有效平衡。鑒于系統實際應用情況,防篡改的設計應滿足如下6 項基本要求:
1)應能對數據庫添加、刪除、更新操作實時識別與記錄。
2)應能記錄修改(Update)前后的原始數據。
3)應能自動記錄被刪除的數據。
4)應能對數據庫中數據進行合法性識別。
5)兼容已有數據庫架構,能與已有軟件功能或接口完全適配。
6)加密后數據庫所有功能全部可用,存儲容量不能大幅增加,性能不能出現明顯下降。
為滿足上述6 條要求,為此主要采用變動數據捕獲和消息摘要加密來實現。
對數據庫添加、刪除、更新操作的捕獲,多采用觸發器,但其性能開銷大、觸發器自身安全機制可控性差,不適合安全監控系統需要。隨著商業數據庫技術的發展,Oracle、Sql Server 在其最新版本中均提供了變動數據捕獲(Change Data Capture)組件,對數據庫數據變化進行捕獲。CDC 組件性能開銷小,可對源表進行INSERT、UPDATE 和 DELETE 等操作實時捕獲,并將變化的數據同步記錄到系統表中,并提供接口供第三方程序訪問。利用CDC 組件,可以較好的滿足防篡改前3 項基本要求[9]。
CDC 機制如圖1,變更數據捕獲的更改數據源為Sqlserver 事務日志,當對表啟用變更數據捕獲時,系統將生成1 個與該表結構相似的副本。當對捕獲表進行DDL 操作時,在事務日記會記錄相關操作信息。變更數據捕獲代理使用異步進程讀取事務日記并記錄到副本中,以完成對源表的跟蹤。Sqlserver 提供相應的查詢函數,供外部調用查看捕獲記錄。
圖1 CDC 機制Fig.1 The Mechanism of CDC
安全監控系統運行在Windows 平臺,數據庫多選用SQL Server,故以SQL Server2014 對CDC 的使用進行介紹。首先利用系統存儲過程sys.sp_cdc_enable_db 啟用數據庫CDC 捕獲功能;再利用sys.sp_cdc_enable_table 啟動指定表數據變化捕獲功能,最后執行sys.sp_cdc_start_job 存儲過程,啟動數據捕獲作業。通過查詢指定對象的捕獲實例系統表,即可獲取變動的數據。為了減少數據存儲量,針對不同的表,可以指定需要捕獲的數據列。
為了滿足防篡改第4 項~第6 項要求,擬完全保留已有數據庫結構設計,確保數據庫所有功能和接口可用,在每個數據表增加1 個消息摘要校驗列,從而既可大幅減少密文長度,又可驗證數據合法性。
消息摘要(Message Digest) 又稱為數字摘要(Digital Digest)。它由1 個單向Hash 加密函數對待加密的“明文消息”進行作用,而生成固定長度的密文,該密文即為數字指紋。數字指紋具備固定的長度,且不同的明文消息摘要成密文,其結果總是不同的,而同樣的明文其摘要必定一致。本方案中,每個表明文記錄與相應消息摘要同時存在,導致極易被破解,故需對消息摘要進行二次加密。因摘要數據與明文是一一對應,綜合考慮速度、安全性與便捷性,摘要的加密宜采用可逆加密算法。
消息摘要算法常見的主要有 MD5、SHA、RIPEMD、PANAMA、TIGER 等[10-11]。MD5 具備安全性高、速度快等優點,產生的摘要長度固定為16 字節(128 位),故選擇MD5 生產相應記錄的消息摘要。對摘要數據的加密,根據性能與數據還原的需要,采用DES 對稱加密算法。
煤礦安全監控系統防篡改算法見表1。
表1 基于CDC 與消息摘要加密的監控系統數據防篡改算法Table 1 Data tampering proofing algorithm of monitoring system based on CDC and message digest encryption
安全監控系統密采數據真實、客觀的反映了傳感器周期采樣原始值,所有統計分析均以此為基礎。密采數據具備數據量大,讀寫極為頻繁,在本文中以它為典型對象進行試驗,測試其存儲、安全和性能等指標。
1)測試環境。采用Windows10 專業版,微軟SQL Server2014 開發版進行測試。
2)測試表建立。密采數據表主要包括ID、監測點、監測地址、監測值、采集時間、校驗值等,數據表結構見表2。
表2 數據表結構Table 2 Data table structure
3)啟用CDC 跟蹤。在查詢分析器中執行如下T-SQL 語句,啟用數據變動捕獲功能。
USE CDC //打開測試數據庫CDC
GO
EXEC sys.sp_cdc_enable_db //啟用測試數據庫CDC 跟蹤
GO
//啟用對應表捕獲功能
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'RunRecord',
@capture_instance='RunRecord_Check',
@role_name = NULL
GO
//啟動對應的捕獲作業
exec sys.sp_cdc_start_job N'capture'
go
4)數據操作行為測試。通過在數據庫操作界面,人為添加、修改和刪除數據1 條記錄,通過CDC 查詢函數在追蹤記錄表中查詢, 根據查詢記錄即可清楚的看到對數據的所有增刪改操作。假定插入的數據為真實數據,通過對比更新前后的消息摘要密文,即可發現更新后的密文與更新前的密文一致,但監測值不一致,根據本文消息摘要生成原理可知不同的明文生成的消息摘要不一致,可知更新后的數據為人為添加的非法數據。
5)數據合法性測試。數據合法性可以通過對記錄明文進行MD5 HASH 摘要計算后,調用校驗字段Check 的解密方法,進行對比,若值不等即為非法數據。其可以有效識別非法添加或更改特定字段的假數據。
6)數據讀寫性能測試。采用C#編寫簡單的WinForm 程序,結合監控系統實際情況,以每5 s 寫入10 000 條記錄,每 3 s 讀取10 000 條記錄,持續運行30 min,觀察啟用本方案前后數據庫讀取與寫入性能變化情況。采用Sql Server Profiler 監測數據庫性能。運行測試結果見表3。
表3 性能測試結果Table 3 Performance test results
從表3 可知,數據庫啟用CDC 組件,密采數據采用消息摘要加密后,在讀寫速度、CPU 占用、內存占用有一定影響,但影響有限,幾乎可以忽略。由于變動數據捕獲機制,使得數據庫每新增1 條記錄,會自動記錄到捕獲表中,導致了數據庫存儲空間的增加。而在監控系統數據防篡改中,當人為添加偽數據時,可以通過密鑰識別,因此無需對插入數據進行捕獲,只需對更新數據和刪除數據進行記錄。去掉插入數據捕獲時,數據庫存儲空間變為1.08 GB,沒有大幅度增加數據庫存儲容量。因此本方案,在數據存儲、安全和讀寫性能方面取得了較好的平衡。
安全監控系統數據防篡改是保障監控有效的重要手段,利用數據庫的變動數據捕獲機制與記錄摘要加密的方式,可有效的對數據庫操作行為進行識別、跟蹤和記錄,在安全、性能、存儲三方面取得了較好的平衡,同時具備良好的兼容性,避免了大面積的接口適配工作。該方案經過多個礦井現場檢驗運行效果良好,該方法可推廣到人員定位、電力監測等其他系統。