解析嵌入式系统中入侵检测的设计
侵检测模块一般分为四部分:
(1) 事件产生器。从环境中抽取感兴趣的信息,并把信息转化为标准格式供系统其他部件使用。
(2) 事件数据库。事件数据库保存事件日志。
(3) 事件分析器。分析输入的格式化后的事件,进行真正意义上的入侵检测,并产生新的警告。
(4) 响应单元。响应单元按照警告进行相应的保护,反击入侵行为。
根据电力应用的特性和嵌入式系统的特点,对上述入侵检测框架进行修改如下:
(1)事件发生器产生原始日志数据,为了避免对进程实时性造成太大的影响,先不做格式化处理。
(2)事件数据库将接收的原始日志数据进行格式化处理,并进行相应的分类保存。
(3)事件分析器与响应单元合并,以减少对系统进程的占用。
整个入侵检测框架如图1所示。
图1 入侵检测框架图
3 基于主机的入侵检测模块的实现
3.1 入侵检测模块的实现流程
该操作系统是一个实时操作系统,为了不影响系统的实时性,入侵检测并不是实时处理,数据流在整个处理过程中可能并不是很流畅,所以在设计时采用消息队列形式传递原始记录。即每个事件产生器发送的消息都送到一个消息队列中,事件数据库在系统空闲时取出消息做统一的格式化处理,并保存到数据库中。当日志记录累积到一定程度时,由事件数据库触发事件分析器做分析检测,经过检测的日志记录可以适当删除,以保持事件数据库接收新日志的能力。事件分析器作为整个入侵检测模块的核心,其程序流程如图2所示。
'
图2 事件分析器程序流程图
从图2可以看出,系统目前只检测三种安全威胁,这是针对电力系统的威胁而确定。检测的结果保存到威胁日志中并生成相应错误号,辅助响应单元完成后续操作。可以根据需求,通过修改检测策略库增加检测的攻击类型,但是为了不影响嵌入式系统的实时性,原则上只检测必要的攻击行为。
3.2 主要数据结构和方法
大型入侵检测系统采用标准的日志数据结构,以方便系统之间的数据交流。但作为一个嵌入式的应用,目前并没有做分布式架构的设计。若采用标准数据结构,则会使日志记录的数据量大大增加,占用大量有限的存储器空间。因此系统自定义了一个日志记录的数据结构,而事件数据库以一个结构体数组形式存在,并通过一个结构体控制数组使其成为一个循环区域。日志记录和控制循环区域的结构体数据格式如下:
struct log {
unsigned char tp; //说明日志文件类型
unsigned char action; //说明操作类型
unsigned long time; //说明操作时间
unsigned long ip; //说明操作地点
long backup; //供扩展用
}
日志记录是整个模块中最占用存储器的部分,为了尽量减少占用存储区域,各个字段都做了优化处理。在时间上并不采用传统标准的年/月/日/时/分/秒表示,而是以一个无符号的长整型表示时间差来计算时间。
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入侵检测模块的设计已基本实现。μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立
- 基于FPGA的DSP设计方法(08-26)
- 电力电子装置控制系统的DSP设计方案(04-08)
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 基于DSP的嵌入式显微图像处理系统的设计(06-28)