CN116956302A - 一种基于嵌入式存储系统的内核模块完整性保护系统 - Google Patents

一种基于嵌入式存储系统的内核模块完整性保护系统 Download PDF

Info

Publication number
CN116956302A
CN116956302A CN202310700818.3A CN202310700818A CN116956302A CN 116956302 A CN116956302 A CN 116956302A CN 202310700818 A CN202310700818 A CN 202310700818A CN 116956302 A CN116956302 A CN 116956302A
Authority
CN
China
Prior art keywords
storage system
key
host
sector
module
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.)
Pending
Application number
CN202310700818.3A
Other languages
English (en)
Inventor
王岩
李元章
谭毓安
张正
刘璐
张全新
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN202310700818.3A priority Critical patent/CN116956302A/zh
Publication of CN116956302A publication Critical patent/CN116956302A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities

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

本发明涉及一种基于嵌入式存储系统的内核模块完整性保护系统,属于代码完整性保护领域。系统分为两个组成模块,一是主机部分的模块,二是嵌入式存储系统(如SD卡,U盘等)。本发明为解决纯软件的完整性保护方式的不安全,并且对于缺乏相关硬件设施的遗留设备,硬件方法不能使用的问题,提出一种基于嵌入式存储系统的固件扩展的挑战‑应答认证方式,通过将内核模块代码段的校验和保存在嵌入式存储系统固件上,来确保其正确性和独立性,从而在对比校验和过程中,保证所对比的Linux内核模块的代码段校验和的正确性,从而保护内核模块代码的完整性。本发明设计了内核代码段的分析方式,与通用存储系统的交互接口,逆向分析存储系统的固件,分析并进行功能的扩展,来完成技术整体的实现。

Description

一种基于嵌入式存储系统的内核模块完整性保护系统
技术领域
本发明提出一种基于嵌入式存储系统的内核模块完整性保护系统。属于代码完整性保护领域。
背景技术
Linux作为一个开源的操作系统,具有开放、免费、可定制等优势,被广泛应用于各种领域。它不仅在服务器、个人电脑和移动设备等方面得到广泛应用,还被应用于智能家居、工业自动化、汽车控制等领域。它的核心内核由林纳斯·托瓦兹在1991年创建,此后不断发展壮大。然而,由于Linux系统的开放性和广泛应用,也使得其成为攻击者的攻击目标,攻击者利用这些漏洞可以对计算机系统进行各种攻击,如提权攻击、拒绝服务攻击等。在这些攻击中,除了通过网络发起的攻击外,利用操作系统漏洞的攻击占有很大的一部分。
内核作为操作系统的核心部分,是攻击者开展攻击的最高回报的目标。如果内核被攻破,攻击者就可以获取系统的完全控制权,进行各种恶意操作,例如窃取敏感信息、破坏系统文件、甚至完全摧毁系统。如果不能保障内核的安全,其他的任何保护也就无法真正实现。
为了保障内核的安全,Linux自身也提出了一些保护方案:在2004年,作为为计算平台可信性提供保护的重要技术之一的内核完整性度量架构(Integrity MeasurementArchitecture,IMA)被提出。作为内核完整性子系统的一个组成部分,IMA是基于TCG(可信计算组)开放标准的整体完整性架构的一部分,对内核镜像、内核模块、用户态代码、配置文件等,在系统启动、文件首次创建、文件更新时做校验。但其方法还是有其不安全性的,即针对驻留内存的代码篡改没有防护,其存储的校验值如果没有TPM(受信任的平台模块)支持,还是理论上有被篡改的可能。并且以及有研究提出通过恶意块设备来破坏IMA的方法。所以仅仅依靠IMA的方法是远远不够的。
并且从部署的物理实体角度分析代码的完整性保护技术,分为两种:基于软件和基于硬件。
基于软件的方法主要有:校验和、软件哨兵(监测软件运行状态和功能是否正常)、断言检查(检查代码是否符合预期的逻辑或语法规则)、代码模糊(用于将代码转换为不可读的模式,以便在代码被盗用或泄露时保护代码的安全性)、密码技术等。
基于硬件的方法指将软件与硬件配套使用,通过安全的硬件设备来防范代码篡改。一些主流硬件厂商提供的解决方案有如,利用专用CPU:ARM的TrustZone,Intel的Software Guard Extensions等,这一解决方案需要配套扩展指令和额外的访存机制;还有利用外部协处理器:如AMD的Platform Security Processor等。
以上方法中,对于能够完全掌握软件层面的攻击者来说,纯软件的解决方式则是不安全的,而对于缺乏相关硬件设施的遗留设备,硬件方法则是不能使用的,所以寻求一个有通用性的硬件就成为了一个亟需解决的问题。
为此,提出一种基于嵌入式存储系统的固件扩展的挑战-应答认证方式,通过将内核模块代码段的校验和保存在嵌入式存储系统固件上,来确保其正确性和独立性,从而在比较校验和过程中,保证所对比的Linux内核模块的代码段校验和的正确性,从而保护内核模块代码的完整性。
发明内容
本发明为了对缺乏安全硬件支持的设备提供内核模块运行时的完整性保护,提出了一种基于扩展嵌入式存储系统固件的内核模块完整性保护系统。
一种基于扩展嵌入式存储系统固件的内核模块完整性保护系统,包括主机模块和嵌入式存储系统模块;其中,
存储系统模块通过通用器件接口接入主机(如U盘插口、TF卡插口),被Linux主机驱动识别为存储块设备,只有在目标块设备存在情况下,主机端模块才能共同工作,二者才能交互。
主机端模块即Linux内核模块,其代码实现按照功能划分为四个部分:
1、分析系统在加载模块时在一些文件夹下创建的相关文件,得到代码段的加载位置;具体为:
Linux系统在加载模块时会在/sys/module文件夹下创建模块的相关信息文件,从模块文件夹的/sections文件夹里的“.text”文件可以得到模块代码段加载位置。
2、对内核模块文件进行分析,得到代码段大小和重定位位置信息。具体为:
从ELF文件格式,对模块文件进行分析,可以得到代码段大小。对于重定位位置信息,一是从重定位节得到所有重定位位置信息,二是对其中不必要的项目如编译时插入的统计性能的一些跳转指令进行忽略(这些指令会在实际运行时都由NOP指令替代)。
3.选择交互接口,用于向嵌入式存储系统模块发送具体的读写命令。具体为:
主机利用ioctl的方式发送读写命令,由于内核模块并不能使用用户模式使用的具体ioctl函数,所以内核模块使用ioctl在内核里的具体调用的下一层函数vfs_ioctl。主机内核模块只在代码层面按照对应嵌入式存储系统的协议规则操作相关数据结构,设计传递的命令及数据,其他传递操作通过Linux系统本身的驱动,经由总线,硬件接口发送给嵌入式存储系统。
4.设计校验和计算函数以及消息验证码函数。具体为:
校验和计算函数的主要思想为每次读取内存的位置都由上次的计算的值和校验和的计算值来确定,其功能为为所检验的内存区域生成一个唯一的校验和。消息验证码函数采用线性哈希来实现,其功能为对和嵌入式存储系统模块交互的信息加入验证信息,防止交互信息的篡改。
为了构建嵌入式存储系统模块,涉及的基本术语定义如下:
·key_s:存储系统端密钥。
·key_h:主机端密钥。
·会话秘钥:由key_s和key_h计算生成的密钥。
·使能扇区:主机用来使能其他功能时,读取的扇区
·存储系统密钥扇区:主机读取存储系统发送的密钥(key_s)时,读取的扇区。
·主机密钥扇区:主机用来发送主机端密钥(key_h)给存储系统时,写入的扇区。
·校验和扇区:主机发送校验和给存储系统时,写入的扇区。
·校验结果扇区:主机接受存储系统校验结果时,读取的扇区。
嵌入式存储系统模块的实现,需要对其固件代码进行扩展及修改。所实现的代码可以按照的功能划分为五个部分:功能启动,存储系统密钥生成,会话密钥生成,校验和比对,校验和返回,具体为:
1.功能启动,具体为:
当嵌入式存储系统接收到读取使能扇区的命令时,启动读写其它功能扇区时触发的功能,否则读写其他功能扇区都被视为一般对扇区的读写,不触发功能。
2.存储系统密钥生成,具体为:
当嵌入式存储系统接收到读取存储系统密钥扇区的命令时,生成随机的存储系统密钥key_s在本地保存,并且返回给主机。
3.会话密钥生成,具体为:
当嵌入式存储系统接收到写入主机密钥扇区的命令时,将写入的数据提取出主机密钥key_h,与key_s计算生成会话秘钥。
4.校验和比对,具体为:
当嵌入式存储系统接收到写入校验和扇区的命令时,对数据的消息验证码进行验证计算,计算通过后,比较验证码的正确性,如果正确则保存发送数据入缓冲区,否则,向缓冲区加入随机值。
5.校验和返回,具体为:
当嵌入式存储系统接收到读取校验结果扇区的命令时,返回4中生成的缓冲区。
主机模块同嵌入式存储系统模块的交互流程如下:
1.主机读取功能扇区,启动功能。
2.主机读取存储系统密钥扇区,得到存储系统的密钥key_s。
3.主机生成主机端密钥,生成缓冲区并写入主机密钥扇区,同时计算出会话密钥。
4.主机计算完成校验和,并且依据会话密钥生成HMAC后,生成缓冲区并写入校验和扇区。
5.主机读取校验结果扇区,进行判断,如果HMAC正确则继续循环校验,如果不正确则报错。
通过上述交互过程,完成了主机的内核模块循环自检,并通过与嵌入式存储系统的交互,完成校验的验证,实现了对主机的内核模块的完整性保护。
有益效果
本发明与已有技术比较,具有以下优点:
1.直接监控内存的代码段内容,对运行期间的内核模块提供持续保护。
2.保护功能可以直接添加到对应模块上,不需要为通用存储系统开发其他功能,可直接使用存储系统与主机间原本的命令进行交互,不用在主机端进行额外开发,对于能够与存储系统进行正常通信的系统,就能直接使用保护的功能,具有很强的普适性。
附图说明
图1为本发明一种基于嵌入式存储系统的内核模块完整性保护技术的系统架构示意图;
图2为本发明一种基于嵌入式存储系统的内核模块完整性保护技术的流程示意图;
图3为本发明一种基于嵌入式存储系统的内核模块完整性保护技术实施例中的流程示意图。
具体实施方式
下面结合附图和实施例对本发明进行详细说明。
实施例
本实例为了实现了基于嵌入式存储系统的内核模块完整性保护技术,基于TF卡这种嵌入式存储系统进行构建,需要在主机和TF卡上分别建立对应环境,具体选择的TF卡为PNY公司的Elite 64GB TF卡,Linux系统为所采用的NanoPi R5S开发板,内为基于5.10.110Linux版本的friendlywrt 22.03操作系统。
本实例涉及的基本术语定义如下:
iocmd:mmc_ioc_cmd具体声明的结构体,用于ioctl系统调用的参数。
Seg***:实例中用来表示某个段。如seg005表示这一个具体的段。
A_B_C:表示自己定义的函数,A、B、C描述其功能。如hook_sd_write表述是进行主机写操作时的钩子函数。
RAM_**.n。表示**地址的第n位,从0开始计算。例如RAM_16.1表示内存地址RAM_16的第2位的二进制值。
主机端模块实现:
1.分析代码段相关信息:
代码段位置分析:从/sys/module/xx/sections/.text这个文件里(xx表示具体模块名)可以得到该模块的代码段位置。
代码段大小和可重定位位置分析:对所加载的模块文件进行分析,通过ELF文件格式,可以得到其代码段大小和重定位信息。代码段大小直接记录在指向代码段的节区头表中。对重定位信息,除了从重定位节中获得,还需要对其中指向不必要信息的部分进行去除,这部分信息的特征是,其从其信息指向符号表的“_mcount”一项可以得到其位置。
2.交互接口选择:
利用ioctl系统调用,这一文件系统、设备驱动程序和用户空间程序之间的接口,可以进行例如读取、写入等操作。在内核模块里,由于内核并不能直接使用ioctl系统调用,所以使用更深一层的vfs_ioctl来实现。在调用时,需要使用mmc驱动所定义的结构体mmc_ioc_cmd,对该结构体的成员按照要求进行赋值。在使用vfs_ioctl时,也要用set_fs函数扩大内核对能访问空间的限制,因为vfs_ioctl会检查其第三个参数的指针空间。
3.设计校验和计算函数以及消息验证码函数:
消息验证码函数采用线性哈希来实现,校验和计算函数目的生成64位校验和,通过遍历目标内存区域,每次更新校验和中的一个字节,更新方式依赖所取的内存地址,该地址的内存内容和当前字节校验和的值。所取地址也依赖于当前校验和。
TF卡端实现:
1.逆向分析:
通过二进制分析,得到了固件程序的具体位置以及排布方式。由于TF卡芯片的16根地址线限制,只能够访问最大代码段最大为64KB,不能完全容纳固件程序,故采用了代码分页技术,在固件运行时根据功能进行代码段切换。通过逆向分析得,固件程序分为19个代码段,分别命名为seg000,seg005,seg006,…,seg022,其中seg000为ROM代码,其固化在存储系统主控内部;seg005为常驻代码,占用12KB;seg006~seg022为可切换代码,每段占用8KB,总共17段。
对seg005的常驻代码进行逆向分析,分析出其处理读写命令的机制:在固件中,存有一个索引表来对应这些主机发送的命令。当接受到对应命令时,会把命令的类型,LBA地址等信息重新保存到另外的内存单元。对于传递的数据,固件中缓冲区范围为0x4000~0x7FFF,大小为16KB,可容纳32个扇区。主机写入扇区LBA(逻辑块地址)的数据,先存入LBA的低6位对应的缓冲区中,再写入闪存。读出扇区内容时,扇区数据按照读出顺序保存在起始地址为0x4000的内存中,再返回给主机。
2.功能扩展:
对固件进行进一步修改。实现方案为截取主机读写LBA时固件保存主机请求的LBA到固定内存位置里这一操作,改为跳转到设计好的函数hook_set_lba中,在函数里会检查读写指令的类型,以及LBA具体的值。以下是对应主机端发送来的命令对应的处理流程:
(1)主机读取0x01020305扇区:
在hook_set_lba中检查为读指令后,对应进入hook_read_LBA函数中,检查目标读取的LBA是否为0x01020305,如果相等,则执行语句orl RAM_16,#1,将RAM_16.0设为1。只有RAM_16.0为1时,固件程序才会执行功能扩展功能,否则就是读取正常扇区。
(2)主机读取0x01020308扇区:
在(1)中RAM_16.0为1且LBA不为0x01020305时,检查LBA是否为0x01020308,若匹配,则利用8051中的计时器TL0作为随机数,进行简单运算后生成key_t(存储系统端密钥)存储到内部,并且写到0x4000地址处,调用send_buffer_2_host(一个事先准备好的函数,用来把0x4000后512B的数据发给主机)。
(3)主机写key_h(主机端密钥)到0x01020309扇区:
经过检查RAM_16.0后,进入判断LBA的位置,当LBA为0x01020309扇区时,设置RAM_16.5为1;之后进入hook_sd_write具体截获写操作功能区域,判断RAM_16.5为1后,把该值设置为0,把主机发来的key_h进行保存,并生成最终的key,以及一并生成其他值为了之后的HMAC等计算。
(4)主机写带有hmac的checksum到0x01020306扇区:
经过检查RAM_16.0后,进入判断LBA的位置,当LBA为0x01020306扇区时,设置RAM_16.2为1;之后进入hook_sd_write具体截获写操作功能区域,判断RAM_16.2为1后,把该值设置为0,调用函数hmac进行hmac计算,如果消息验证码正确,则按照原始值返回,否则,在一些位置加入随机值。
(5)主机读0x01020307扇区:
经过同(2)中的检查后,判断扇区为0x01020307后,调用send_buffer_2_host返回(4)中的结果。
最终,两个组成模块的交互流程如图3所示,通过如图3所示的交互过程,完成了内核模块与TF卡的会话秘钥协商生成,内核模块循环自检,并通过与嵌入式存储系统的交互,完成校验的验证,实现了对主机的内核模块的完整性保护。

Claims (1)

1.一种基于嵌入式存储系统的内核模块完整性保护系统,其特征在于:包括主机端模块和嵌入式存储系统端模块;其中,
一、主机端模块即Linux内核模块,其代码实现按照功能划分为四个部分:
1、分析系统在加载模块时在一些文件夹下创建的相关文件,得到代码段的加载位置;
2、对内核模块文件进行分析,得到代码段大小和重定位位置信息;
3.选择交互接口,用于向嵌入式存储系统模块发送具体的读写命令;
4.设计校验和计算函数以及消息验证码函数;
为了构建嵌入式存储系统模块,涉及的基本术语定义如下:
·key_s:存储系统端密钥;
·key_h:主机端密钥;
·会话秘钥:由key_s和key_h计算生成的密钥;
·使能扇区:主机用来使能其他功能时,读取的扇区;
·存储系统密钥扇区:主机读取存储系统发送的密钥(key_s)时,读取的扇区;
·主机密钥扇区:主机用来发送主机端密钥(key_h)给存储系统时,写入的扇区;
·校验和扇区:主机发送校验和给存储系统时,写入的扇区;
·校验结果扇区:主机接受存储系统校验结果时,读取的扇区;
二、嵌入式存储系统模块的实现,需要对其固件代码进行扩展及修改;所实现的代码按照的功能划分为五个部分:功能启动、存储系统密钥生成,会话密钥生成、校验和比对、校验和返回,具体为:
1.功能启动,具体为:
当嵌入式存储系统接收到读取使能扇区的命令时,启动读写其它功能扇区时触发的功能,否则读写其他功能扇区都被视为一般对扇区的读写,不触发功能;
2.存储系统密钥生成,具体为:
当嵌入式存储系统接收到读取存储系统密钥扇区的命令时,生成随机的存储系统密钥key_s在本地保存,并且返回给主机;
3.会话密钥生成,具体为:
当嵌入式存储系统接收到写入主机密钥扇区的命令时,将写入的数据提取出主机密钥key_h,与key_s计算生成会话秘钥;
4.校验和比对,具体为:
当嵌入式存储系统接收到写入校验和扇区的命令时,对数据的消息验证码进行验证计算,计算通过后,比较验证码的正确性,如果正确则保存发送数据入缓冲区,否则,向缓冲区加入随机值;
5.校验和返回,具体为:
当嵌入式存储系统接收到读取校验结果扇区的命令时,返回4中生成的缓冲区;
主机模块同嵌入式存储系统模块的交互流程如下:
1.主机读取功能扇区,启动功能;
2.主机读取存储系统密钥扇区,得到存储系统的密钥key_s;
3.主机生成主机端密钥,生成缓冲区并写入主机密钥扇区,同时计算出会话密钥;
4.主机计算完成校验和,并且依据会话密钥生成HMAC后,生成缓冲区并写入校验和扇区;
5.主机读取校验结果扇区,进行判断,如果HMAC正确则继续循环校验,
如果不正确则报错;
通过上述交互过程,完成了主机的内核模块循环自检,并通过与嵌入式存储系统的交互,完成校验的验证,实现了对主机的内核模块的完整性保护。
CN202310700818.3A 2023-06-14 2023-06-14 一种基于嵌入式存储系统的内核模块完整性保护系统 Pending CN116956302A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310700818.3A CN116956302A (zh) 2023-06-14 2023-06-14 一种基于嵌入式存储系统的内核模块完整性保护系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310700818.3A CN116956302A (zh) 2023-06-14 2023-06-14 一种基于嵌入式存储系统的内核模块完整性保护系统

Publications (1)

Publication Number Publication Date
CN116956302A true CN116956302A (zh) 2023-10-27

Family

ID=88460944

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310700818.3A Pending CN116956302A (zh) 2023-06-14 2023-06-14 一种基于嵌入式存储系统的内核模块完整性保护系统

Country Status (1)

Country Link
CN (1) CN116956302A (zh)

Similar Documents

Publication Publication Date Title
US20070276969A1 (en) Method and device for controlling an access to peripherals
JP5500458B2 (ja) プロセッサメインメモリのメモリコンテンツのセキュリティ保護
US8751813B2 (en) Cross validation of data using multiple subsystems
US9514305B2 (en) Code pointer authentication for hardware flow control
CN103093150B (zh) 一种基于可信芯片的动态完整性保护方法
US7849315B2 (en) Method for managing operability of on-chip debug capability
JP6984710B2 (ja) コンピュータ装置およびメモリ管理方法
CN110532767B (zh) 面向sgx安全应用的内部隔离方法
JP6370098B2 (ja) 情報処理装置、情報処理監視方法、プログラム、及び記録媒体
JP2009509269A (ja) ハードウェア支援されたデバイス設定検出
JP2011525653A (ja) 安全なメモリ管理システム及び方法
CN112818327A (zh) 基于TrustZone的用户级代码和数据安全可信保护方法及装置
US20130124845A1 (en) Embedded device and control method thereof
CN109472172B (zh) 用于防止来自存储器的未授权数据访问的方法
CN112434286A (zh) 动态库的调用方法、装置、电子装置和存储介质
US7950057B1 (en) Driver load manager and method
Nagarajan et al. Dynamic information flow tracking on multicores
CN112558884B (zh) 数据保护方法以及基于NVMe的存储设备
EP1843250B1 (en) System and method for checking the integrity of computer program code
WO2023045744A1 (zh) 加固方法、注册方法、运行方法、电子设备和存储介质
CN116956302A (zh) 一种基于嵌入式存储系统的内核模块完整性保护系统
CN118245275A (zh) 选择性存储器重复控制
CN115964758A (zh) 一种基于TrustZone的内核数据完整性保护方法
CN114329490A (zh) Mcu中软件自启动方法、装置及终端
KR102019483B1 (ko) 이동식 저장 장치 및 그의 보안 방법

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