一种基于ftrace技术的Linux系统保护方法

文档序号:1963920 发布日期:2021-12-14 浏览:33次 >En<

阅读说明:本技术 一种基于ftrace技术的Linux系统保护方法 (Method for protecting Linux system based on ftrace technology ) 是由 吴阳 郑宗义 杜宇 于 2021-11-15 设计创作,主要内容包括:本发明提供了一种基于ftrace技术的Linux系统保护方法,步骤S01:ftrace注册;步骤S02:分析出当前硬盘布局,统计已使用空间和未使用空间,建立表格;步骤S03:获取扇区偏移、扇区数量、是否读写、数据缓冲区基本请求信息;步骤S04:查找表格,判断扇区偏移是不是受保护扇区;是受保护扇区,进入步骤S06;不是受保护扇区,进入步骤S05;步骤S05:查找表格,计算出映射后的扇区位置,调用原始函数读写新扇区位置,实现读写重定向;步骤S06:读写硬盘指定扇区内容。本发明基于一种基于ftrace技术实现了Linux系统的拦截读写、数据重定向、从而使基于Linux的操作系统运行环境安全。(The invention provides a method for protecting a Linux system based on a ftrace technology, which comprises the following steps of S01: registering ftrace; step S02: analyzing the current hard disk layout, counting used spaces and unused spaces, and establishing a table; step S03: acquiring sector offset, sector quantity, whether to read and write and basic request information of a data buffer area; step S04: looking up a table to determine whether the sector offset is a protected sector; if it is a protected sector, the process proceeds to step S06; if not, go to step S05; step S05: searching a table, calculating the position of the mapped sector, calling an original function to read and write the position of the new sector, and realizing read-write redirection; step S06: and reading and writing the content of the designated sector of the hard disk. The invention realizes interception reading and writing and data redirection of the Linux system based on the ftrace technology, thereby ensuring the operating environment of the Linux-based operating system to be safe.)

一种基于ftrace技术的Linux系统保护方法

技术领域

本发明涉及计算机技术领域,涉及一种Linux系统保护方法,尤其涉及一种基于ftrace技术的Linux系统保护方法。

背景技术

近年来,随着国产系统的迅速普及,越来越多基于Linux的操作系统使用者激增,例如统信和麒麟操作系统越来越受追捧,各种应用需求也随之蓬勃发展,但对于大多数终端环境,尤其是对于诸如机房、网吧、图书馆等公共环境中使用的开放型计算机设备,由于是提供给不特定对象使用,极容易出现意外操作,导致操作系统损坏、中毒、被安装恶意软件等多种问题。

在Windows操作系统下,微软提供SDK能开发基于磁盘扇区级的数据过滤技术,来实现数据隔离和重定向,以此来保护系统的运行,相比于Windows,Linux没有一个统一的SDK来实现磁盘扇区级的过滤,且目前仍没有比较成熟的磁盘过滤软件。因此,急需提出一种面向Linux系统的拦截读写、数据重定向、实现系统保护方法,以保护基于Linux的操作系统的运行环境安全。

发明内容

1.所要解决的技术问题:

Linux没有一个统一的SDK来实现磁盘扇区级的过滤,且目前仍没有比较成熟的磁盘过滤软件。

2.技术方案:

为了解决以上问题,本发明提供了一种基于ftrace技术的Linux系统保护方法,包括以下步骤:步骤S01:ftrace注册;开机时,内核驱动内核模块mreblk.ko加载,然后通过kallsyms查找目标函数submit_bio在内核中地址,然后初始化ftrace_ops结构,然后使用ftrace_set_filter_ip设置原始目标函数submit_bio的跟踪函数new_submit_bio,最后使用register_ftrace_function向内核注册回调站点;步骤S02:在所述内核模块mreblk.ko首次加载执行时,分析出当前硬盘布局,统计已使用空间和未使用空间,建立表格,命名为MRE_TABLE;步骤S03:new_submit_bio响应到系统读写后,解析bio参数,获取扇区偏移offset、扇区数量、是否读写、数据缓冲区基本请求信息;步骤S04:查找表格MRE_TABLE,判断offset是不是受保护扇区,offset不是受保护扇区进入步骤S06;offset是受保护扇区,进入步骤S05;步骤S05:查找表格MRE_TABLE,计算出映射后的新扇区位置,用新扇区偏移重新构造读写请求,调用原始目标函数submit_bio读写新扇区位置,实现读写重定向;步骤S06:读写硬盘指定扇区内容。

在步骤S03中,系统发生硬盘读写,块设备层驱动模块响应submit_bio函数执行设备读写请求,内核ftrace框架模块自动判断submit_bio函数是否被Hook,没有Hook则直接读写物理设备,如果submit_bio已经被Hook,则会跳转到内核驱动mreblk.ko中注册的新函数new_submit_bio执行。

所述硬盘指定扇区,在读请求或写请求不是保护扇区的情况下为原始位置;在读请求或写请求需要重定向的情况下为映射后的位置。

在步骤S04中,判断offset是不是受保护扇区的判断方法为:在表格MRE_TABLE中查找,offset是属于未使用空间内则为扇区不在受保护区间内;offset是属于已使用空间内,则扇区在受保护区间内。

在步骤S05中,重新构造读请求的方法为:步骤S51:在表格MRE_TABLE中查找当前硬盘未使用的空间,分配给当前待请求扇区使用,计算出映射后的扇区偏移offset2;步骤S52:使用bio_alloc申请一个新的块结构bio2;步骤S53填充new_bio结构;步骤S54:然调用原始函数submit_bio,读取出新位置offset2的扇区内容buffer2,填充到读写缓冲区buffer,完成读请求。

在步骤S05中,重新构造读写请求的方法为:步骤S61:在表格MRE_TABLE中查找当前硬盘未使用的空间,分配给当前待请求扇区使用,计算出映射后的扇区偏移offset2;步骤S62:使用bio_alloc申请一个新的块结构bio2;步骤S63:使用alloc_page申请新的内存页,用于存储数据内容;步骤S64:填充bio2结构;步骤S65:为bio2添加内存页,完成数据内容拷贝;步骤S66:然后调用原始函数submit_bio,将原本要写入offset位置的内容,写到offset2位置,完成写请求。

3.有益效果:

本发明基于一种基于ftrace技术实现了Linux系统的拦截读写、数据重定向、从而使基于Linux的操作系统运行环境安全。

附图说明

图1是ftrace的注册流程图。

图2是系统读写拦截流程图。

图3是系统保护流程图。

具体实施方式

下面结合附图和实施例对本发明进行详细说明。

本发明中:ftrace-Function Trace-主要用于记录内核函数运行轨迹;kallsyms-Linux内核函数,完成函数地址抽取+数据块组织封装功能的相关子系统;ftrace_ops-ftrace的数据结构体,用于注册回调函数;new_submit_bio-内核函数;register_ftrace_function-Linux内核函数,该函数的主要功能就是把新的Hook函数加入到 ftrace_ops_list 链表中;offset-硬盘物理扇区偏移位置;bio_alloc- Linux内核函数,申请块设备读写对象。

如图3所示,一种基于ftrace技术的Linux系统保护方法,包括以下步骤:步骤S01:ftrace注册;如图1所示,开机时,内核驱动内核模块mreblk.ko加载,然后通过kallsyms查找目标函数submit_bio在内核中地址,然后初始化ftrace_ops结构,然后使用ftrace_set_filter_ip设置原始函数submit_bio的跟踪函数new_submit_bio,最后使用register_ftrace_function向内核注册回调站点。

其中new_submit_bio主要有四个流程,流程一:解析块数据bio结构参数->是读请求->不需要重定向->直接读取原始位置内容->返回;流程二:解析块数据bio结构参数->是读请求->需要重定向->读取映射位置内容->填充到原始数据缓冲区->返回;流程三:解析块数据bio结构参数->是写请求->不需要重定向->直接将内容写入到原始位置->返回;流程四:解析块数据bio结构参数->是写请求->需要重定向->将原始内容写入到映射后的位置->返回。

ftrace是Function Trace的意思,最开始主要用于记录内核函数运行轨迹,随着功能的逐渐增加,已经演变成一个标准跟踪框架,从Linux2.6.27内核开始,已经成为Linux内核的默认特性。本发明即采用了ftrace驱动程序框架,来跟踪和替换内核级函数的调用流程,实现拦截系统读写的功能,基于此框架,将大幅缩减开发难度和工作量。

步骤S02:在所述内核模块mreblk.ko首次加载执行时,分析出当前硬盘布局,统计已使用空间和未使用空间,建立表格,命名为MRE_TABLE。在一个实施例中,new_submit_bio传入以下的参数,用于解析出待真实读写的硬盘设备:待真实读写的硬盘设备disk=bio->bi_disk;是读请求 is_read=(bio_op(bio) == REQ_OP_READ);扇区位置offset=bio->bi_iter.bi_sector;扇区数量count= bio_sectors(bio);读写缓冲区buffer=bio_for_each_segment(bvec, bio, iter)。

根据offset对应的扇区位置,查找表格MRE_TABLE,如果这个扇区不在受保护区间内,则不做处理,直接调用原始submit_bio完成系统读写请求,如果这个扇区在受保护区间内,重新构造读写请求,完成重定向。

submit_bio是Linux标准的内核级函数,其传入参数bio,包含了磁盘读写的基本信息:磁盘设备对象、读写标志、读写扇区偏移、数据存放缓冲区,利用此参数,可以轻松获取系统即将要读写的位置和内容,为数据重定向步骤提供了必要的输入信息。

步骤S03:new_submit_bio响应到系统读写后,解析bio参数,获取扇区偏移offset、扇区数量、是否读写、数据缓冲区基本请求信息。系统发生硬盘读写时,就对一些数据进行拦截,如图2所示,具体过程为:块设备层驱动模块响应submit_bio函数执行设备读写请求,内核ftrace框架模块会自动判断submit_bio函数是否被Hook,没有Hook则直接读写物理设备,如果submit_bio已经被Hook,则会跳转到内核驱动mreblk.ko中注册的新函数new_submit_bio执行。

ftrace框架内部会自行维护一个全局的哈希链表,当第三方驱动程序调用ftrace_set_filter_ip注册回调站点时,ftrace会将原始函数(submit_bio)的插入到链表,并增加引用计数,完成动态插桩过程,当系统触发函数调用时,ftrace会遍历哈希链表,如果链表中有记录(即被HOOK),将先执行新的回调函数(new_submit_bio),此过程为Linux系统中ftrace的默认流程,对第三方开发者来说完全透明,不用关心其具体实现细节,对开发者来说极其友好。

步骤S04:查找表格MRE_TABLE,判断offset是不是受保护扇区;offset不是受保护扇区,进入步骤S06;offset是受保护扇区,进入步骤S05;步骤S05:查找表格MRE_TABLE,计算出映射后的扇区位置,用新的扇区偏移重新构造读写请求,调用原始submit_bio函数读写新扇区位置,实现读写重定向;步骤S06:读写硬盘指定扇区内容。

其中,在步骤S04中,判断offset是不是受保护扇区的判断方法为:在表格MRE_TABLE中查找,offset是属于未使用空间内,则为扇区不在受保护区间内;offset是属于已使用空间内,则扇区在受保护区间内。

所述硬盘指定的扇区,在读请求或写请求不是保护扇区的情况下为原始位置;在读请求或写请求需要重定向的情况下为映射后的位置。

bio_alloc是Linux系统默认内核函数,利用此函数,可以完成对任意磁盘设备、任意扇区位置、任意扇区数量的块数据读写,本发明也是利用此内核函数,完成读写请求的重新构造过程。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于互联网和工控网漏洞参数预测工控网漏洞的系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类