许 金
(中煤科工集团重庆研究院有限公司,重庆 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,没有大幅度增加数据库存储容量。因此本方案,在数据存储、安全和读写性能方面取得了较好的平衡。
安全监控系统数据防篡改是保障监控有效的重要手段,利用数据库的变动数据捕获机制与记录摘要加密的方式,可有效的对数据库操作行为进行识别、跟踪和记录,在安全、性能、存储三方面取得了较好的平衡,同时具备良好的兼容性,避免了大面积的接口适配工作。该方案经过多个矿井现场检验运行效果良好,该方法可推广到人员定位、电力监测等其他系统。