CN113792299B - 一种基于ftrace技术的Linux系统保护方法 - Google Patents
一种基于ftrace技术的Linux系统保护方法 Download PDFInfo
- Publication number
- CN113792299B CN113792299B CN202111344516.4A CN202111344516A CN113792299B CN 113792299 B CN113792299 B CN 113792299B CN 202111344516 A CN202111344516 A CN 202111344516A CN 113792299 B CN113792299 B CN 113792299B
- Authority
- CN
- China
- Prior art keywords
- sector
- bio
- ftrace
- read
- submit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/575—Secure boot
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种基于ftrace技术的Linux系统保护方法,步骤S01:ftrace注册;步骤S02:分析出当前硬盘布局,统计已使用空间和未使用空间,建立表格;步骤S03:获取扇区偏移、扇区数量、是否读写、数据缓冲区基本请求信息;步骤S04:查找表格,判断扇区偏移是不是受保护扇区;是受保护扇区,进入步骤S06;不是受保护扇区,进入步骤S05;步骤S05:查找表格,计算出映射后的扇区位置,调用原始函数读写新扇区位置,实现读写重定向;步骤S06:读写硬盘指定扇区内容。本发明基于一种基于ftrace技术实现了Linux系统的拦截读写、数据重定向、从而使基于Linux的操作系统运行环境安全。
Description
技术领域
本发明涉及计算机技术领域,涉及一种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系统默认内核函数,利用此函数,可以完成对任意磁盘设备、任意扇区位置、任意扇区数量的块数据读写,本发明也是利用此内核函数,完成读写请求的重新构造过程。
Claims (4)
1.一种基于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读写新扇区位置,实现读写重定向;重新构造读请求的方法为:步骤S51:在表格MRE_TABLE中查找当前硬盘未使用的空间,分配给当前待请求扇区使用,计算出映射后的扇区偏移offset2;步骤S52:使用bio_alloc申请一个新的块结构bio2;步骤S53:填充new_bio结构;步骤S54:调用原始函数submit_bio,读取出新位置offset2的扇区内容buffer2,填充到读写缓冲区buffer,完成读请求;重新构造写请求的方法为:步骤S61:在表格MRE_TABLE中查找当前硬盘未使用的空间,分配给当前待请求扇区使用,计算出映射后的扇区偏移offset2;步骤S62:使用bio_alloc申请一个新的块结构bio2;步骤S63:使用alloc_page申请新的内存页,用于存储数据内容;步骤S64:填充bio2结构;步骤S65:为bio2添加内存页,完成数据内容拷贝;步骤S66:调用原始函数submit_bio,将原本要写入offset位置的内容,写到offset2位置,完成写请求;步骤S06:读写硬盘指定扇区内容。
2.如权利要求1所述的方法,其特征在于:在步骤S03中,系统发生硬盘读写,块设备层驱动模块响应submit_bio函数执行设备读写请求,内核ftrace框架模块自动判断submit_bio函数是否被Hook,没有Hook则直接读写物理设备,如果submit_bio已经被Hook,则会跳转到内核驱动mreblk.ko中注册的跟踪函数new_submit_bio执行。
3.如权利要求1所述的方法,其特征在于:所述硬盘指定扇区,在读请求或写请求不是保护扇区的情况下为原始位置;在读请求或写请求需要重定向的情况下为映射后的位置。
4.如权利要求1-3任一项权利要求所述的方法,其特征在于:在步骤S04中,判断offset是不是受保护扇区的判断方法为:在表格MRE_TABLE中查找,offset是属于未使用空间内则为扇区不在受保护区间内;offset是属于已使用空间内,则扇区在受保护区间内。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111344516.4A CN113792299B (zh) | 2021-11-15 | 2021-11-15 | 一种基于ftrace技术的Linux系统保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111344516.4A CN113792299B (zh) | 2021-11-15 | 2021-11-15 | 一种基于ftrace技术的Linux系统保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113792299A CN113792299A (zh) | 2021-12-14 |
CN113792299B true CN113792299B (zh) | 2022-02-15 |
Family
ID=78955164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111344516.4A Active CN113792299B (zh) | 2021-11-15 | 2021-11-15 | 一种基于ftrace技术的Linux系统保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113792299B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114462026B (zh) * | 2021-12-31 | 2022-11-18 | 北京亿赛通科技发展有限责任公司 | 密文进程监控方法、装置、设备及计算机可读存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100464314C (zh) * | 2006-03-23 | 2009-02-25 | 联想(北京)有限公司 | 一种数据透明保护的安全写系统和方法 |
CN100573480C (zh) * | 2008-02-29 | 2009-12-23 | 中国科学院计算技术研究所 | 一种磁盘数据保护方法和系统 |
-
2021
- 2021-11-15 CN CN202111344516.4A patent/CN113792299B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113792299A (zh) | 2021-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102255767B1 (ko) | 가상 머신 감사를 위한 시스템 및 방법들 | |
EP3123311B1 (en) | Malicious code protection for computer systems based on process modification | |
RU2640300C2 (ru) | Движок интроспекции памяти для защиты целостности виртуальных машин | |
US8516589B2 (en) | Apparatus and method for preventing virus code execution | |
US9178900B1 (en) | Detection of advanced persistent threat having evasion technology | |
US20080059726A1 (en) | Dynamic measurement of an operating system in a virtualized system | |
CN105393255A (zh) | 用于虚拟机中的恶意软件检测的过程评估 | |
RU2580016C1 (ru) | Способ передачи управления между областями памяти | |
CN109960597B (zh) | 一种应用层接口的动态注册方法及相关装置 | |
CN114327777B (zh) | 确定全局页目录的方法、装置、电子设备及存储介质 | |
US20080028180A1 (en) | Inappropriate access detector based on system segmentation faults | |
CN111666586A (zh) | 共享库文件模拟方法、装置、计算机设备及存储介质 | |
CN111800490A (zh) | 获取网络行为数据的方法、装置及终端设备 | |
CN108898012B (zh) | 检测非法程序的方法和装置 | |
CN113792299B (zh) | 一种基于ftrace技术的Linux系统保护方法 | |
US20140222410A1 (en) | Hybrid emulation and kernel function processing systems and methods | |
RU2634172C1 (ru) | Способ передачи управления между адресными пространствами | |
US7296138B1 (en) | Method and apparatus to hook shared libraries across all processes on windows | |
CN116737526A (zh) | 一种代码段动态度量方法、装置及电子设备 | |
JP2022064320A (ja) | バッファオーバーフロートラッピングのための方法、システムおよびコンピュータプログラム製品(バッファオーバーフロートラッピング) | |
KR102122968B1 (ko) | 애플리케이션 설치 정보 분석 시스템 및 방법 | |
CN110633210A (zh) | 文件执行方法、装置、存储介质和电子设备 | |
JP2007510237A (ja) | デバイスに特権モードフックの動的な登録のためのシステム | |
CN113127148B (zh) | 一种虚拟化环境主动动态度量方法和系统 | |
CN114638004B (zh) | 一种数据保护方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |