已阅读5页,还剩59页未读, 继续免费阅读
(计算机系统结构专业论文)可扩展固件接口(efi)在嵌入式平台上的应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
i 可扩展固件接口(efi)在嵌入式平台上的应用 摘 要 随着嵌入式技术的发展,智能手持设备日益普及,其安全问题 也逐渐引起人们的关注。针对各种安全威胁,目前已经开发出了多 种手段进行防护,如用户认证,病毒扫描,数据加密等。但我们注 意到,现有的各种安全措施基本是在操作系统环境中实现的,大多 依赖于操作系统的正常工作。而从系统平台上电或复位开始,到操 作系统接管控制之间,还有一段启动加载程序,负责初始化平台硬 件和引导操作系统。 这部分的程序的安全问题没有引起足够的重视, 可能成为嵌入式系统安全的薄弱环节。 可扩展固件接口 efi 的出现,为实现嵌入式平台上的安全启动 提供了一种可能的解决方案。efi 是下一代 bios 的工业标准,描述 了操作系统和平台固件之间的接口。它独立于硬件平台的架构,基 于驱动模型,可以进行二进制目标文件级的连接。efi 规范是一个 开放的标准, efi framework 是英特尔公司建立的 efi 实现框架, 其 代码称为 tiano。 本文在深入分析智能手持设备启动过程的安全风险和 efi 规范 的基础上,提出了在智能手持设备上使用 efi framework 建立操作 系统启动前环境的安全启动方案。这一方案的核心在于利用 efi framework 的分层结构建立信任链,在驱动执行环境 dxe 中实现 usbkey 认证功能,从而在启动引导过程中建立起一套可靠的可执 ii 行模块验证和用户身份认证机制, 与操作系统的安全防护措施一起, 构成完整的嵌入式系统安全体系。 目前,efi 主要应用于服务器和桌面电脑平台,尚无嵌入式系 统上使用的先例。本文最后以一个采用 xscale pxa27x 处理器的智 能手机开发平台为基础,详细讨论了 tiano 内核在该平台上的移植 过程, 为进一步实现基于 efi framework 的安全启动方案打下基础。 关键词:可扩展固件接口,嵌入式系统,安全启动,基本输入 输出系统,移植 iii application of the extensible firmware interface on embedded platform abstract along with the development of embedded system, smart handheld devices get more and more popular and people concern more about their security. to protect the system, multiple methods can be used include user authentication, anti-virus software, data encryption, etc. however, we notice that most of the safety precautions available now are operating system (os) dependent which mean they can only safeguard the system when os is working orderly. while before the os taking control of the platform there is software running on the platform which is responsible for initializing the hardware and boots the os. the security of this software on embedded system is almost neglected which maybe cause security problem of the whole system. extensible firmware interface (efi) provides an opportunity to get a security solution to booting process on embedded system. efi is the industry standard of the next generation bios. it defines the interface between os and platform firmware. efi is independent of hardware architecture. it is based on driver model and multiple modules can link together at binary level. efi specification is open to any implementation and intel efi innovation framework (ab. efi framework) is one of the instances. the code name of efi framework is tiano. in the paper, we propose a solution to secure booting with efi framework on smart handheld. we also give an analysis of the security risk faced by smart handheld together with an introduction to the efi specification. the main idea of this solution is to build a trust chain with efi framework and implement a usbkey authentication mechanism in the booting system of the embedded system. together with the security software in os, this solution will make the system secure. nowadays, efi is applied on server and pc platforms other than embedded system. to implement the secure booting solution, the paper also gives a detail discuss on the porting of tiano core to an xscale pxa27x processor based smartphone developing board. key words: efi, embedded system, secure booting, bios, porting 上海交通大学上海交通大学 学位论文原创性声明学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下, 独立进行研究工作所取得的成果。除文中已经注明引用的内容外, 本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。 对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式 标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名:王毅鹏 日期: 2006 年 1 月 19 日 上海交通大学上海交通大学 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、 使用学位论文的规定, 同意学校保留并向国家有关部门或机构送交论文的复印件和电子 版,允许论文被查阅和借阅。本人授权上海交通大学可以将本学位 论文的全部或部分内容编入有关数据库进行检索,可以采用影印、 缩印或扫描等复制手段保存和汇编本学位论文。 保密保密,在 年解密后适用本授权书。 本学位论文属于 不保密 不保密。 (请在以上方框内打“” ) 学位论文作者签名:王毅鹏 指导教师签名:陈进 日期:2006 年 1 月 19 日 日期:2006 年 1 月 19 日 1 1 绪论 1.1 智能手持设备面临的安全威胁 截至 2005 年 10 月,全球手机用户已达 20 亿,中国用户已达 3.98 亿。随 着科技进步和人们需求的增长,智能手持设备(智能手机,pda 等)所占比重 逐步增大。 统计表明, 2004 年中国智能手机用户已占手机总数的 3.11%, 到 2007 年将有望升至 20%。如图 1 所示,为近年来智能手持设备的发展趋势1。 0 100 200 300 400 500 600 700 20022003200420052006 2g2.5g3g smart phone 读 cp15,寄存器 1 and r0, r0, #0 xfffffff0 ; 关闭 mmu mcr p15, 0, r0, c1, c0, 0 ; 写 cp15,寄存器 1 cpwait ; 等待命令生效 使用协处理器 cp14 时钟配置寄存器 cclkcfg 配置核心时钟频率,其命 令是: mcr p14, 0, rd, c6, c0, 0 ;rd 中为所设置的频率 初始化 gpio 时需要注意使能 gpio 输入需要清除电源管理睡眠状态寄存 器pssrrdh位。 rdh在上电和系统复位或睡眠状态下置位, 这时所有的gpio 输入操作被关闭。因此需要通过程序打开 gpio 输入功能。 cken 寄存器用来控制系统外设的时钟。在系统初始化阶段可以只打开几 个必要的启动设备如内存控制器、内部存储器、uart 等,以降低功耗。 4.2.2 实现 cpu 架构协议 在 dxe 驱动层,需要实现 cpu 架构协议 efi_cpu_arch_protocol。 该协议抽象了处理器相关函数,包括清空 cache,使能和关闭中断,读处理器 42 定时器,处理器复位,设置处理器频率等。 cpu 架构协议的原型如下: typedef struct _efi_cpu_arch_protocol efi_cpu_flush_data_cache flushdatacache; efi_cpu_enable_interrupt enableinterrupt; efi_cpu_disable_interrupt disableinterrupt; efi_cpu_get_interrupt_state getinterruptstate; efi_cpu_init init; efi_cpu_register_interrupt_handler registerinterrupthandler; efi_cpu_get_timer_value gettimervalue; efi_cpu_set_attributes setmemoryattributes; uint32 numberoftimers; uint32 dmabufferalignment; efi_cpu_arch_protocol; 该协议移植的关键是 cache 和中断的处理。协处理器 cp15 的寄存器 7 用 于实现数据和指令 cache 的控制, 通过 mcr 和 mrc 命令访问协处理器。 其中 清空 d-cache 的命令如下: mcr p15, 0, rd, c7, c6, 0 ; 清空数据 cache cpwait efi 系统通过定时器实现系统的通知事件机制,没有使能外设中断。因此, 需要保留定时器中断,屏蔽所有其他中断。此架构协议中的中断开关 enableinterrupt 和 disableinterrupt 主要用来实现优先级调度功能 raisetpl()和 restoretpl()。 xscale 的中断屏蔽寄存器是 icmr, 其复位状态是关闭所有中断。 4.3 存储器模块的移植与实现 与存储器相关的移植主要包括临时内存的建立,固件设备驱动和 sdram 的初始化,下面分别进行介绍。 4.3.1 建立临时内存 在 xscale 系统中采用 sdram 作为主存,其初始化相对比较复杂,efi 中 pei 阶段的工作就是初始化 sdram 供后续阶段使用。而在 pei 初始化并安装 好主存之前,所有的程序代码是在没有主存的条件下在 flash 设备上 xip 运行 的。这时,为了运行 c 程序,就需要建立一个临时内存区域作为数据堆栈,这 部分工作是在 sec 阶段完成的。 43 在 xscale 上,有两种方式可以建立临时内存,下面分别进行讨论。 1设置处理器 cache 作为临时内存(cache as ram,car) pxa27x 处理器内含 32kb 指令 cache(i-cache)和 32kb 数据 cache (d-cache) ,以及 2kb 的 mini-icache 和 2kb 的 mini-dcache。通过内部协处 理器的支持可以将数据锁存在 d-cache 中,最多可以支持 28 行 cache。 mini-dcache 不支持锁存。 xscale 支持两种 cache 数据锁存的方法。第一种用来将外存中的数据锁入 d-cache 中,第二种用来将 cache 重新配置为数据 ram。我们可以使用第二种 方法将 d-cache 配置为临时存储区。 协处理器cp15的第7个寄存器可以进行cache的一些基本操作如使cache 行无效,清空 cache,在数据 cache 中分配一行等。下面是 car 的方法: 使 d-cache 进入锁存模式: mcr p15, 0, rd, c9, c2, 0 在数据 cache 中分配一行: mcr p15, 0, rd, c7, c2, 5 这里将分配的内存映射到 rd 所指的地址空间。这个 cache 映射为临时内 存的地址需要另外设置页表项,以实现访问权限的控制。 在加锁之前,应该确保目标数据区的数据不在 cache 中,否则这些数据将 不会重新锁入 cache。因此,在进行锁存操作前清空 cache 将会防止出现这种 情况。 2使用内部 sram 作为临时内存 建立临时内存的第二种方法是使用内部 sram。pxa271 芯片内部集成了 一块 256kb 的 sram,分为 4 个 bank,每个 bank 为 64kb,支持字节写入操 作。该 sram 没有控制寄存器,映射到 0 x5c00_00000 x5c03_fffc 的地址空 间中。 临时内存初始化好之后,sec 将临时内存的起始地址和大小传递给 pei 内 核,并引导 pei 开始运行。 sec 装入 pei 内核的函数接口是: void secloadfromcore ( in uintn largestregion, / 临时内存起始地址 in uintn largestregionsize, / 临时内存大小 in uintn bootfirmwarevolumebase, / 启动固件卷地址 in void *peicorepe32file / pei 内核文件位置 44 ); sec 装入 pei 内核的调用代码如下所示,如果调用成功将不再返回。 secloadfromcore (uintn) initialstackmemory, (uintn) initialstackmemorysize, (uintn) bfvbase, peicorefile); 上面代码中,如果使用 cache 作为临时内存,那么 initialstackmemory 和 initialstackmemorysize 应分别设置为临时内存映射的地址和大小,其中临时内 存映射地址应该是在处理器保留的地址空间内, 以避免发生冲突; 如果是sram 设置的临时内存, 则前两个参数应该分别为 sram 的起始物理地址和设为临时 内存的大小。 4.3.2 实现固件卷驱动 在 tiano 实现中,所有的驱动模块以文件的形式组织在固件文件系统 ffs (firmware file system)中。固件文件系统的基础是固件设备 fd(firmware device) ,每个 fd 在又分为多个固件卷 fv(firmware volume) 。这里 fv 是一 个逻辑上的概念,它可能是某个物理 flash 设备上的若干个块(block) ,也可 能是多个物理flash设备组合成的一个集合。 fv又分为基本的块fvb (firmware volume block) ,它基本上对应于物理 flash 设备的块。 efi 关于 fv 的协议分层实现了固件的驱动,最大化了可移植性。其协议 栈结构如下图所示: 图 14 固件卷协议栈结构 fig 14 firmware volume protocol stack 在固件卷协议栈中,fv 协议驱动抽象了固件设备的格式化操作,fvb 协 议驱动抽象了具体的硬件设备和分区。 fvb 协议的原型如下: 45 typedef efi_fvb_get_attributes getattributes; efi_fvb_set_attributes setattributes; efi_fvb_get_physical_address getphysicaladdress; efi_fvb_get_block_size getblocksize; efi_fvb_read read; efi_fvb_write write; efi_fvb_erase_blocks eraseblocks; efi_handle parenthandle; efi_firmware_volume_block_protocol; pxa271 处理器整合了一块 64mb 的 strataflash,其物理地址映射在 0 x0 处,也就成为了 efi 系统中的启动固件卷 bfv(boot firmware volume) 。整个 flash 分为若干个 block,每个 block 又分为若干扇区。在逻辑上,每个 flash 的 block 是由许多页面组成,每个页面包括扇区数据和扇区信息。 xscale 中 flash 设备通过内存控制器 (memory controller) 进行配置。 nor flash 驱动的实现包括 flash 初始化,扇区读,扇区写,块删除等等。这里简要 讨论一下读写操作的实现。 nor flash 是按字节编址的,但其逻辑上读写的基本单位仍然是扇区。在 默认情况下,nor flash 是配置成读阵列模式,可以直接进行读操作。在处理 读数据请求时,首先找到目标地址对应的扇区,然后根据扇区内的偏移量得到 具体的数据。 flash 的写操作也是以扇区为单位进行的。这里需要注意的是,flash 默认 处在读阵列模式,进行写操作需要先改变其运行模式。同时,写操作需要按照 扇区边界对齐,可以使用 strataflash 的写缓冲提高写操作的性能。 4.3.3 初始化 sdram 上电复位时,xscale 的 sdram 初始化过程如下: 1. 延时 100200us 的上电等待阶段,以使 sdclk 时钟达到稳定。 2. 保持存储器控制寄存器 mdcnfgdex位为禁止状态,设置 sdram 的配置寄存器。 3. 配置同步静态存储配置寄存器 sxcnfg,控制所有的静态内存。包括 cas,burst mode,使能状态等。 4. 配置 mdrefr 改变 sdram 控制器的状态。 5. 配置协处理器,关闭 dcache 和 icache。 6. 向禁止的 sdram 块发读写命令,以触发对所有 sdram 块的刷新操 作。 46 7. 打开 dcache。 8. 使能 sdram,也就是打开 mdcnfgdex位。 9. 更新 sdram 模式寄存器控制寄存器 mdmrs。 在 efi 中,sdram 的初始化是在一个特殊的 peim 中完成的。这个 peim 需要实现以下的内存服务 ppi: pei_base_memory_test_ppi pei_platform_memory_range_ppi pei_sdram_memory_init_policy_ppi pei_sdr_ddr_memory_controller_ppi pei_sdr_ddr_clock_generator_ppi tiano 初始化内存的功能主要是在 sdrddrmemoryinit 驱动中实现的。该驱 动调用(*peiservices)- installpeimemory(),实现以下的功能: a 将临时内存中的 hob 移动到永久存储中 b初始化新的内存指针 c 重定位 ppi 列表指针 d设置堆栈切换信号,通知 peim 分配器切换到新的内核堆栈。 主存初始化好之后,程序应该尽快切换到主存中执行,以提高效率。pei 分配器的分配算法保证了在主存成功安装后,马上进行堆栈切换,程序有临时 内存转入主存执行。 图 15 是 pei 分配器的执行流程。从图中可以看出,pei 分配器在 fv 中查 找尚未分配的 peim,并在每次执行完成一个 peim 后检查是否主存已经安装。 如果主内安装好,则马上切换到主存中继续分配剩余的 peim。 47 find next peim dispatched depex satisfied pei load image vefify peim peim entry find fv all peims dispatched pei report status code set dispatched process notify list sys memory installed switch core stacks end any depex satisfied process notify list start ny y y n n y y n n y n n y 图 15 pei 分配器执行流程 fig 15 pei dispatcher execution flow 转移到主存中执行的时候,需要将之前建立的 hob 列表从临时内存拷贝 到主存中。而临时内存中的其他数据将被丢弃,pei 分配器调用堆栈切换函数 继续在主存中运行。 堆栈切换的 c 函数原型是: void switchcorestacks ( in void *entrypoint, in uintn parameter1, in uintn parameter2, in void *newstack ); 由于堆栈切换与处理器结构相关,这部分功能需要使用汇编语言实现。主 48 要部分如下: mov r0, entrypoint mov r1, parameter1 mov r2, parameter2 mov sp, newstack stmia sp! , r1, r2 ;模块参数压入新栈 b r0 ;跳转到模块入口 4.4 输入输出模块的移植与实现 efi 的控制台 i/o 建立在简单文本输入输出协议基础之上。在 efi 启动服 务环境中,控制台 i/o 协议提供了一种系统与用户交互的手段。在 efi 协议中, 没有对接口设备进行硬性的规定,可以通过键盘、显示器作为输入输出设备, 也可以使用串口等其他方式与系统交互,采用何种方式通信是由用户决定的。 本课题中,我们选择了基于 uart 的简单文本输入输出。因此,首先需要实现 的是 serialio 协议。 4.4.1 实现 serialio 协议 在 efi 1.10 协议中,串行输入/输出协议接口的原型如下: typedef struct uint32 revision; efi_serial_reset reset; efi_serial_set_attributes setattributes; efi_serial_set_control_bits setcontrol; efi_serial_get_control_bits getcontrol; efi_serial_write write; efi_serial_read read; serial_io_mode *mode; serial_io_interface; serial i/o 协议用来与 uart 串口通信,可以控制字节 i/o 设备。默认的 uart 设备属性是 115200 的波特率,一个字节的 fifo,每个字符 1,000,000 微 秒的超时, 没有奇偶校验位, 8 个数据位, 1 个停止位。 软件可以通过 getcontrol() 和 setcontrol()进行流控。 pxa271 上有三个 uart 端口, 分别为全功能 uart ffuart, 蓝牙 uart btuart 和标准 uart stuart,所有的 uart 端口使用相同的编程模型。 我们选用 ffuart 作为串行输出端口。这个端口具有 modem 控制能力, 49 最高波特率为 921,600。有两个 fifo:一个传输 fifo 和一个接收 fifo。传输 fifo 的深度为 64 字节,宽度为 8 位。接收 fifo 是 64 字节深,11 位宽,其中 有 3 个位用来跟踪出错信息。 下面简要介绍一下几个主要接口函数的实现方法。 串口复位的协议接口如下: efi_status (efiapi *efi_serial_reset) ( in serial_io_interface *this ); 在复位时,uart 是处于关闭状态。使能 uart 的方法是控制 gpio 寄存 器,并置位 ieruue。uart 的复位的过程如下: 1. 配置 uart 端口 gpio; 2. 使能 uart,置位 ieruue; 3. 设置 lcr 为合适的数据格式; 4. 设置自动流控; 5. 设置波特率为 115200; 6. 使能传输和接收 fifo,并清空 fifo; 由于 efi 驱动是通过论询的方式工作的,在传送大量数据的时候可能会有 数据的丢失。所以软件设计时应该保证足够的查询频率,这个可以根据串口设 置的波特率和接收 fifo 的深度进行计算。使能 fifo 后,清除 ierdmae和 ier4:0将串口置于 fifo 轮询模式。 这里最重要的寄存器是串口的状态寄存器 lsr,其位图如下: 图 16 lsr 寄存器位图 fig 16 lsr bit map 在 fifo 模式下,几个关键位的意义是: dr 表示数据准备好; tdrq 表示 uart 准备好传输下一个数据; temt 表示传输器的缓存或 fifo 或移位寄存器是否均为空; 50 其他几位和数据错误有关。 uart 发送数据的接口原型如下: efi_status (efiapi *efi_serial_write) ( in serial_io_interface *this, in out uintn *buffersize, in void *buffer ); 当 uart 中断使能寄存器中的 ieruue位设置后,uart 端口进入工作 状态。传输器查询传输保持寄存器 th 中是否有数据发送及缓存是否准备好, 然后开始发送。在 fifo 模式,数据从 fifo 传入 th 寄存器,处理发送直到最 后一个缓存字符。 发送数据时,处理器检查“数据传输请求”位 lsrtdrq,传输器需要数 据的时候将这个位置 1。处理器还可以检查“传输器空”位 lsrtemt,它在传 输 fifo 为空的时候置位。 关闭 uart 时,传输器完成当前传输的字节后不再继续传输。但是 fifo 中的内容仍会保留,当 uart 再次使能的时候,传输会继续进行。 uart 接收数据的接口原型如下: efi_status (efiapi *efi_serial_read) ( in serial_io_interface *this, in out uintn *buffersize, out void *buffer ); 接收数据时,处理器检查“数据准备好”位 lsrdr,在接收 fifo 或接 收缓冲 rbr 收到数据后会将这个位置 1。 4.4.2 实现简单文本输入/输出协议 简单输入协议定义了支持控制台输入设备的最低要求。其接口原型如下: typedef struct _simple_input_interface efi_input_reset reset; efi_input_read_key readkeystroke; efi_event waitforkey; simple_input_interface; 简单文本输出协议用来控制基于文本的输出设备。其接口原型如下: typedef struct _simple_text_output_interface 51 efi_text_reset reset; efi_text_string outputstring; efi_text_test_string teststring; efi_text_query_mode querymode; efi_text_set_mode setmode; efi_text_set_attribute setattribute; efi_text_clear_screen clearscreen; efi_text_set_cursor_position setcursorposition; efi_text_enable_cursor enablecursor; simple_text_output_mode *mode; simple_text_output_interface; 实现简单文本输入输出协议的关键是定向文本的输入设备和输出设备。如 果采用键盘lcd 的输入输入方式, 则相应的需要实现键盘驱动和 lcd 驱动。 采用串口作为输入输出设备,则文本的输入和输出定向到 uart,可以在主机 上通过超级终端等实现与系统的通信。 在 tiano 中,定义了一个终端设备的抽象结构 terminal_dev,其向下 的接口就是 serialio 协议。terminal_dev 的数据结构如下: typedef struct uintn signature; efi_handle handle; uint8 terminaltype; efi_serial_io_protocol *serialio; efi_device_path_protocol *devicepath; vendor_device_path node; efi_simple_text_in_protocol simpleinput; efi_simple_text_out_protocol simpletextoutput; efi_simple_text_output_mode simpletextoutputmode; uintn serialintimeout; raw_data_fifo rawfifo; unicode_fifo unicodefifo; efi_key_fifo efikeyfifo; efi_unicode_string_table *controllernametable; efi_event twosecondtimeout; uint32 inputstate; uint32 resetstate; 52 boolean outputescchar; terminal_dev; 在terminal_dev的 驱 动 中 , 实 现 了terminalconinreset , terminalconinreadkeystroke 等协议接口,并且不包含平台相关代码,因此只 需要将其源码在重新编译即可应用于 xscale 平台。 terminal_dev 驱动是控 制台驱动的依赖基础。因此,实现了终端设备驱动,也就能够很方便的将 efi 控制台移植到系统中,实现用户与平台的之间的交互。 4.5 代码优化 4.5.1 减少不必要的模块 并非所有平台硬件的初始化在系统启动时都时必要的,去掉不必要的 peim 或 dxe 驱动能够有效的减小代码的体积,同时也降低了安全风险。因为 代码越多,引入安全漏洞的可能性也越大。 目前 tiano 的开源代码是基于 nt32 仿真环境的,针对嵌入式平台的实际 情况,tiano 代码中的很多部分可以进行裁减。比如关于 pci、isa 等总线的驱 动,csm 驱动,hotplug 驱动等都可以去掉。基本方法是在 dsc 文件中找到相 应的驱动程序并将其注释掉。 4.5.2 使用 edk 服务和库函数 edk 中提供了很多的核心服务,应该尽量使用这些服务函数,因为他们都 是经过了测试和优化的, 效率较高。 这些函数包括内存操作函数如 copymem(), setmem(),efiliballocatepool()等。 对于有些常用的函数应该将他们写成库函数的形式,使不同的模块能够更 加方便的调用。同时,使用库函数在代码优化方面的优点是比较明显的:对库 函数的优化将自动应用到所有调用该函数的模块中,将优化的效果十分容易的 扩展到了整个系统。 4.6 本章小结 本文第三章提出了在智能手持设备上利用 efi 实现安全启动的方案。这一 方案的实现基础是在嵌入式平台上建立一个符合 efi 规范的操作系统启动前环 境。本章详细讨论了 efi framework 内核在嵌入式平台上移植的过程。 本课题的研究基于由英特尔公司建立的 efi 开放源代码项目,其代号为 “tiano” 。所有 efi 开发者可以在该项目的网站上下载 efi framework 核心的最 53 新源代码。目前,这部分开源代码的内容主要是 edk(efi developer kit)和 efi shell。 在基于 xscale pxa27x 处理器的嵌入式平台上移植 tiano 核心代码的工作 包括:处理器相关模块的初始化,实现 cpu 架构协议;建立临时内存;初始化 永久内存;实现 flash 驱动和固件卷协议;通过串口驱动实现简单文本输入输 出协议等。 在移植的过程中,应该对基于 nt32 架构的代码进行裁减,尽量去掉不必 要的模块。合理的裁减能在减小代码体积的同时降低出现安全漏洞的可能。使 用 edk 服务和库函数能够提高系统的执行效率。 54 5 总结与展望 5.1 主要结论 本文在深入分析智能手持设备启动过程的安全风险和 efi 规范的基础上, 提出了在智能手持设备上使用 efi framework 建立操作系统启动前环境的安全 启动方案,并实现了 tiano 内核在 pxa27x 平台上的移植。 随着嵌入式技术的发展,各种智能手持设备日益普及。在给人们带来方便 的同时,也对数据安全构成了挑战。目前嵌入式系统上的安全防护机制仍然很 不健全,用户认证、病毒防护等工具大多基于操作系统环境。从嵌入式系统的 整体来看,操作系统启动前需要使用 bootloader 初始化平台硬件,装载操作系 统映像,这部分的安全性与整个系统的安全密切相关。但目前的嵌入式系统开 发中 bootloader 基本不具备安全防护的能力,难以实现复杂的代码验证和用户 认证功能,成为系统安全的薄弱环节。 可扩展固件接口 efi 是下一代 bios 的规范,解决了传统 bios 的许多问 题。由于架构上的局限性,传统 bios 工作在实模式下,而不是保护模式;其 代码和堆栈通常受限于 1mb 的空间;系统状态保存在 cmos 中,只有 256b 的容量;汇编语言编写的代码难以实现复杂的算法;只有少数公司掌握 bios 技术,改进相当困难。 efi 是一个纯接口规范,描述了操作系统和平台固件之间的接口。它独立 于硬件平台的架构,基于驱动模型,可以进行二进制目标文件级的连接。efi framework 是英特尔公司建立的 efi 实现框架。除起始部分少量汇编代码外, 绝大部分代码采用高级语言(c 语言)开发,代码的架构规划清晰,更易于维护。 基于 efi framework 架构上的优越性,本文提出了应用 efi framework 代 替 bootloader,在 efi framework 框架下建立安全验证机制的方案。 在 efi framework 的 sec 阶段,设计预验证模块,对早期的 cpu 初始化 和验证模块本身进行验证。pei 和 dxe 阶段将继承 sec 验证模块,由分配器 对 peim 或 dxe 驱动进行预验证, 只有通过验证的模块才能继续装入执行。 如 果模块验证失败,系统将自动启动失效恢复机制,从备份存储或安全主机进行 恢复启动。 模块验证机制从系统上电或复位开始到操作系统正常启动,保持了信任链 的完整性,能够有效的防止对启动过程的未经授权的修改或升级。 55 系统中还设计了基于 usbkey 的用户认证机制。用户需要插入 usbkey 和输入正确的 pin 码才能引导操作系统,并正常使用。usbkey 的驱动和认证 功能是在 dxe 阶段实现的。 目前 efi 主要应用在基于 ia64 或 ia32 架构的平台上,其开放源代码是针 对 nt32 仿真环境的。因此,实现基于 efi framework 的安全启动首先需要将 其移植到嵌入式平台上。本文以一个采用 xscale pxa27x 处理器的智能手机开 发平台为基础,详细讨论了处理器相关模块、存储器相关模块和输入输出相关 模块的移植和实现过程,初步实现了嵌入式平台上的 efi 启动框架。 5.2 研究展望 本文提出了应用 efi 解决智能手持设备安全启动问题的方案。这一方案的 具体实现主要涉及两方面的工作,即 efi framework 在嵌入式平台上的移植和 安全验证模块的整合。由于时间及精力所限,本文初步实现了 efi framework 内核在 xscale 平台上的移植,进一步的工作包括: 1. 开发代码验证模块和 usbkey 认证模块。 代码的验证可以通过数字签名技术实现。 应该考虑操作系统启动前环境 中资源仍然比较有限的条件,选择合适算法。 对于 usbkey 驱动有两种实现方案。 一种是选择某种 usbkey 移植其 基于 windows 的驱动的办法,但由于 usbkey 种类很多,接口并不统一, 所以实现起来有一定难度。另外一种方案是向 usbkey 的设计厂商定制, 由他们提供 efi 驱动模块,与系统其他部分进行二进制代码级的链接。 2. 实现安全启动系统原型。 在移植 efi framework 内核的基础上,需要整合代码验证算法、 usbkey 驱动和操作系统运行时监控软件, 建立完整的安全启动系统原型 并进行测试。 56 参考文献 1 易观国际,智能手机市场年度报告(2005) ,2005 2 palm one inc, white paper: handheld and smartphone security for mobile business,2004 3 cyber risk consulting, white paper: smartphone security issues, blackhat briefings europe 2004,2004 4 douglas dedo,windows mobile-based devices and security: protecting sensitive business information,microsoft ,april, 2004 5 william a. arbaugh, david j.farber, and jonathan m. smith. a secure and reliable bootstrap architecture. in 1997 ieee symposium on security and privacy, oakland,ca, may 1997 6 s.m. bellovin, m.merritt, limitations of the kerberos authentication system. in proceedings of the winter 1991 usenix conference, jan 1991 7 eric brewer, paul gauthier, ian godberg, david wanger. basic flaws in internet security and commerce,1995. 8 ian goldberg, david wagner, randi thomas, eric brewer. a secure environment for untrusted helper applications. in proceedings
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文档管理员招聘面试参考题库及答案
- 2025年销售培训师招聘面试参考题库及答案
- 2025年技术文档撰写专员招聘面试题库及参考答案
- 2025年私募投资助理招聘面试参考题库及答案
- 2025年医药研发专员招聘面试参考题库及答案
- 2025年月饼设计师招聘面试题库及参考答案
- 2025年社交媒体内容策划招聘面试参考题库及答案
- 2025年风险咨询师招聘面试参考题库及答案
- 2025年产业经济学家招聘面试题库及参考答案
- 2025年思想库研究员招聘面试参考题库及答案
- 口腔门诊护士培训课件
- 电力施工安全风险评估报告
- 牡丹江市烟草公司2025秋招综合管理类岗位面试模拟题及答案
- 轮机安全操作培训内容课件
- 标本错误不良事件课件
- 废品回收消防安全培训课件
- trips协定课件教学课件
- 2025西安市简约租房合同范本下载
- 2025年沈阳市事业单位教师招聘考试教育心理学试题
- 民警法制培训课件
- 湖北省武汉市武珞路中学2023-2024学年八年级上学期期中考试物理试卷(含答案)
评论
0/150
提交评论