收藏 分销(赏)

可扩展固件接口(EFI)在嵌入式平台上的应用.pdf

上传人:曲**** 文档编号:5431344 上传时间:2024-10-31 格式:PDF 页数:56 大小:2.20MB
下载 相关 举报
可扩展固件接口(EFI)在嵌入式平台上的应用.pdf_第1页
第1页 / 共56页
可扩展固件接口(EFI)在嵌入式平台上的应用.pdf_第2页
第2页 / 共56页
点击查看更多>>
资源描述
1绪论1.1 智能手持设备面临的安全威胁截至2005年10月,全球手机用户已达20亿,中国用户已达3.98亿。随 着科技进步和人们需求的增长,智能手持设备(智能手机,PDA等)所占比重 逐步增大。统计表明,2004年中国智能手机用户已占手机总数的3.11%,到2007 年将有望升至20%。如图1所示,为近年来智能手持设备的发展趋势1。2G2.5G3GSmart phone&PDAFunctional phone voice phone20022003200420052006图1智能式手持设备的发展Figi Development of Smart Handheld以智能手机为例,从功能上它早已超越了传统手机的简单话音通信功能,各种结合声音、图像、数据的新技术层出不穷,成为一个融合通讯、个人业务 处理、娱乐为一体的强大个人终端。随着个人业务更多的在手机终端上进行,个人数据更多存储于个人手机终端,其安全问题也引起了广泛的关注。基于智能手持设备的特点,它的安全性问题主要包括如下几个方面3:1.1.1 数据安全由于存储容量大,携带方便,智能手持设备越来越普遍地用于记录一些个 人信息和商业数据。有些数据可能非常敏感,如银行帐号、用户密码、客户资 料、产品信息等,一旦泄漏将给用户引起不可估量的损失。因此,智能手持设 备的数据安全性成为用户首要关注的性能。与台式机或笔记本电脑等其他电子设备相比,智能手持设备体积更小,便 携性更强,很容易遗失或遭窃。这种情况下,财产的损失可能并非最重要的方 面,而如何保证内部敏感数据的安全却是用户最为关心的。1另一方面,随着智能手持设备功能的日益完善,通过它可以完成的数据交 换越来越频繁,智能手持设备不再只是用于记录个人数据的载体。例如,通过 无线网络功能,智能手持设备可以方便地接入企业内部局域网中,完成数据传 输。因此,如果非法用户控制了智能手持设备,可能通过它窃取商业机密,给 企业带来重大损失。从这个角度来讲,除了需要保证数据的安全外,还需要实 现对设备使用者身份合法性的认证。1.1.2 恶意代码攻击恶意代码的形式包括病毒、蠕虫、木马程序等。当被感染的程序执行时,病毒可以将自身代码加入到程序中,并进行复制和传播。一般来说,常见的病 毒都是在PC机和互联网上传播,嵌入式系统很少与病毒联系上。但智能手持 设备出现后,操作系统越来越标准化,联网能力大大增强,也为病毒的传播提 供了条件。无论智能手持设备上安装的是哪种操作系统,如Symbian、Windows CE Linux等,都会引入一些安全漏洞,因此不可避免地成为恶意代码攻击的目标。恶意代码可以借助收发动态内容的多媒体短信,在目标设备中植入木马程序,盗取用户的私人信息;或者执行自动的破坏性操作,例如自动拨号等操作,造 成用户在财务或个人信用方面的损失。自从2004年6月,第一个针对手机的病 毒Cabir出现后,智能手持设备的安全问题日益严峻。现在,每个星期都有一 种新的手机病毒产生,而且呈现加速增长的趋势。表1所示为近年出现的一些 手机病毒。表1智能手持设备病毒种类名称发现时 感染系统传播方式说明间Cabir 2004.6 Symbian 60蓝牙 第一个手机病毒。Win CEDustWin CEBrador2004.7 Windows CE2004.8 Windows CE共享文件 或 email发作时,手机屏幕上会出现一 个包含病毒名称,作者名字首 写字母的对话框。显示对话框下载文件读取本地主机IP地址,并将其发至病毒作者。然后打开一个TCP端口,开始准备接收命令。Qdial 2004.8 Symbian 60下载游戏 发送SMS消息并收取费用 Skulls 2004.11 Symbian 60下载 将应用图标变成头骨图形。Velaso 2004.12 Symbian 60蓝牙 寻找其他蓝牙设备并感染之Lockunt 2005.1 Symbian 60下载 伪装成Symbian补丁程序,禁 止电话功能Comwar 2005.3 Symbian 60蓝牙 通过MMS复制和传播2智能手持设备的安全问题还包括无线网络安全、数据传输安全等方面,不 在本文讨论范围之列。1.2 嵌入式系统的安全防护面对智能手持设备安全性需求,目前普遍采用的解决方案包括:1.2.1 用户身份认证与用户权限设置:有很多方法可以实现用户身份认证,以防止未授权的用户进入系统。如图 2所示,包括:设置登录密码、签字识别、指纹识别、使用智能认证卡等4。Setup InstallPeiMemoryO,实现以下的功能:a.将临时内存中的HOB移动到永久存储中b.初始化新的内存指针c.重定位PPI列表指针d.设置堆栈切换信号,通知PEIM分配器切换到新的内核堆栈。主存初始化好之后,程序应该尽快切换到主存中执行,以提高效率。PEI 分配器的分配算法保证了在主存成功安装后,马上进行堆栈切换,程序有临时 内存转入主存执行。图15是PEI分配器的执行流程。从图中可以看出,PEI分配器在FV中查 找尚未分配的PEIM,并在每次执行完成一个PEIM后检查是否主存已经安装。如果主内安装好,则马上切换到主存中继续分配剩余的PEIM。46STARTFind NextPEIMNYFindFVYNYDispatchedPEI reportStatus CodeNN DepexSet DispatchedAll PEIMsNSatisfieddispatchedYProcess NotifyYListPEI load ImageNAny depexSys MemoryNsatisfiedVefify PEIMInstalledYYPEIM EntrySwitch Core StacksProcess Notify ListEND图15 PEI分配器执行流程Fig 15 PEI dispatcher execution flow转移到主存中执行的时候,需要将之前建立的HOB列表从临时内存拷贝 到主存中。而临时内存中的其他数据将被丢弃,PEI分配器调用堆栈切换函数 继续在主存中运行。堆栈切换的C函数原型是:VOIDSwitchCoreStacks(IN VOID*EntryPoint,IN UINTN Parameter 1,IN UINTN Parameter2,IN VOID*NewStack);由于堆栈切换与处理器结构相关,这部分功能需要使用汇编语言实现。主 47要部分如下:MOV RO,EntryPointMOV RI,Parameter 1MOV R2,Parameter2MOV SP,NewStackSTMIA SP!,R1,R2;模块参数压入新栈B RO;跳转到模块入口4.4输入输出模块的移植与实现EFI的控制台I/O建立在简单文本输入输出协议基础之上。在EFI启动服 务环境中,控制台I/O协议提供了一种系统与用户交互的手段。在EFI协议中,没有对接口设备进行硬性的规定,可以通过键盘、显示器作为输入输出设备,也可以使用串口等其他方式与系统交互,采用何种方式通信是由用户决定的。本课题中,我们选择了基于UART的简单文本输入输出。因此,首先需要实现 的是SeriallO协议。4.4.1 实现 SeriallO 协议在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控制能力,48最高波特率为921,600。有两个FIFO:一个传输FIFO和一个接收FIFO。传输 FIFO的深度为64字节,宽度为8位。接收FIFO是64字节深,11位宽,其中 有3个位用来跟踪出错信息。下面简要介绍一下几个主要接口函数的实现方法。串口复位的协议接口如下:EFI_STATUS(EFIAPI*EFI_SERIAL_RESET)(IN SERIALONTERFACE*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,其位图如下:图16LSR寄存器位图Fig 16 LSR bit map在FIFO模式下,几个关键位的意义是:DR表示数据准备好;TDRQ表示UART准备好传输下一个数据;TEMT表示传输器的缓存或FIFO或移位寄存器是否均为空;49其他几位和数据错误有关。UART发送数据的接口原型如下:EFI_STATUS(EFIAPI*EFI_SERIAL_WRITE)(IN SERIALONTERFACE*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 SERIALONTERFACE*This,IN OUT UINTN*BufferSize,OUT VOID*Buffer);接收数据时,处理器检查“数据准备好”位LSRDR,在接收FIFO或接 收缓冲RBR收到数据后会将这个位置1 o4.4.2实现简单文本输入/输出协议简单输入协议定义了支持控制台输入设备的最低要求。其接口原型如下:typedef struct _SIMPLE_INPUT_INTERFACE EFINPUT_RESET Reset;EFINPUT_READ_KEY ReadKeyStroke;EH_EVENT WaitForKey;SIMPLENPUTNTERFACE;简单文本输出协议用来控制基于文本的输出设备。其接口原型如下:typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE 50EFI_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,其向下 的接口就是SeriallO协议。TERMINAL_DEV的数据结构如下:typedef struct UINTNSignature;EFI_HANDLEUINT8Handle;TerminalType;EFI_SERIAL_IO_PROTOCOLEFI_DEVICE_PATH_PROTOCOLVENDOR_DEVICE_PATH*Seriallo;*DevicePath;Node;EFI_SIMPLE_TEXT_IN_PROTOCOL Simpleinput;EFI_SIMPLE_TEXT_OUT_PROTOCOL SimpleTextOutput;EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutputMode;UINTNSeriallnTimeOut;RAW_DATA_FIFOUNICODE_FIFORawFiFo;UnicodeFiFo;EFI_KEY_FIFOEFI_UNICODE_STRING_TABLEEFI_EVENTUINT32EfiKeyFiFo;*ControllerNameTable;TwoSecondTimeOut;InputState;UINT32ResetState;51BOOLEAN OutputEscChar;TERMINAL_DEV;在TERMINAL_DEV的驱动中,实现了TerminalConlnReset,TerminalConlnReadKeyStroke等协议接口,并且不包含平台相关代码,因此只 需要将其源码在重新编译即可应用于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(),SetMemQ,EfiLibAllocatePool。等。对于有些常用的函数应该将他们写成库函数的形式,使不同的模块能够更 加方便的调用。同时,使用库函数在代码优化方面的优点是比较明显的:对库 函数的优化将自动应用到所有调用该函数的模块中,将优化的效果十分容易的 扩展到了整个系统。4.6 本章小结本文第三章提出了在智能手持设备上利用EFI实现安全启动的方案。这一 方案的实现基础是在嵌入式平台上建立一个符合EFI规范的操作系统启动前环 境。本章详细讨论了EFI Framework内核在嵌入式平台上移植的过程。本课题的研究基于由英特尔公司建立的EFI开放源代码项目,其代号为“Tiano。所有EFI开发者可以在该项目的网站上下载EFIFramework核心的最52新源代码。目前,这部分开源代码的内容主要是EDK(EFI Developer Kit)和 EFI Shello在基于XScale PXA27x处理器的嵌入式平台上移植Tiano核心代码的工作 包括:处理器相关模块的初始化,实现CPU架构协议;建立临时内存;初始化 永久内存;实现Flash驱动和固件卷协议;通过串口驱动实现简单文本输入输 出协议等。在移植的过程中,应该对基于NT32架构的代码进行裁减,尽量去掉不必 要的模块。合理的裁减能在减小代码体积的同时降低出现安全漏洞的可能。使 用EDK服务和库函数能够提高系统的执行效率。535总结与展望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驱动进行预验证,只有通过验证的模块才能继续装入执行。如 果模块验证失败,系统将自动启动失效恢复机制,从备份存储或安全主机进行 恢复启动。模块验证机制从系统上电或复位开始到操作系统正常启动,保持了信任链 的完整性,能够有效的防止对启动过程的未经授权的修改或升级。54系统中还设计了基于USBKEY的用户认证机制。用户需要插入USBKEY 和输入正确的PIN码才能引导操作系统,并正常使用。USBKEY的驱动和认证 功能是在DXE阶段实现的。目前EFI主要应用在基于IA64或IA32架构的平台上,其开放源代码是针 对NT32仿真环境的。因此,实现基于EFIFramework的安全启动首先需要将 其移植到嵌入式平台上。本文以一个采用XScale PXA27x处理器的智能手机开 发平台为基础,详细讨论了处理器相关模块、存储器相关模块和输入输出相关 模块的移植和实现过程,初步实现了嵌入式平台上的EFI启动框架。5.2 研究展望本文提出了应用EFI解决智能手持设备安全启动问题的方案。这一方案的 具体实现主要涉及两方面的工作,即EFI Framework在嵌入式平台上的移植和 安全验证模块的整合。由于时间及精力所限,本文初步实现了EFI Framework 内核在XScale平台上的移植,进一步的工作包括:1.开发代码验证模块和USBKEY认证模块。代码的验证可以通过数字签名技术实现。应该考虑操作系统启动前环境 中资源仍然比较有限的条件,选择合适算法。对于USBKEY驱动有两种实现方案。一种是选择某种USBKEY移植其 基于Windows的驱动的办法,但由于USBKEY种类很多,接口并不统一,所以实现起来有一定难度。另外一种方案是向USBKEY的设计厂商定制,由他们提供EFI驱动模块,与系统其他部分进行二进制代码级的链接。2.实现安全启动系统原型。在移植EFI Framework内核的基础上,需要整合代码验证算法、USBKEY驱动和操作系统运行时监控软件,建立完整的安全启动系统原型 并进行测试。55参考文献1易观国际,智能手机市场年度报告(2005),20052 Palm One Inc,White Paper:Handheld and Smartphone Security for Mobile Business,20043 Cyber Risk Consulting,White Paper:Smartphone Security Issues,Blackhat Briefings Europe 2004,20044 Douglas Dedo,Windows Mobile-Based Devices and Security:Protecting Sensitive Business Information,Microsoft,April,20045 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 19976 S.M.Bellovin,M.Merritt,Limitations of the Kerberos authentication system.In Proceedings of the Winter 1991 Usenix Conference,Jan 19917 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 of 6th USENIX unix Security Symposium,July 19969 N.Itoi,W.A.Arbaugh,S.J.Pollack and D.M.Reeves.Personal secure booting.In Proceedings of ACISP 2001,Syndney,Australia,July 200110 P.C.Clark,L.J.Hoffman.BITS:A smartcard protected operating system.Communications of the ACM,37(11);66-70,199411 C.E.Landwehr.Protecting unattended computers without softward.In Proceedings of the 13th Annual Computer Security Applications Conference,P274-283,San Diego,CA,Dec 199712 W.A.Arbaugh.Chaining Layered Integrity Checks.PhD thesis.University of Pennsylvania,Philadelphia,1999.13 Intel Corporation,Extensible Firmware Interface Specification version 1.10,200214 Intel Corporation,Intel Platform Innovation Framework for EFI Architecture Specification version 0.9,200315 Intel Corporation,EFI 1.10 Driver Writers Guide,200416 Intel Corporation,Intel XScale Core Developers Manual,200417 Intel Corporation,Intel PXA27x Processor Family Developers Manual,200418 Intel Corporation,Intel PXA27x Processor Family Design Guide,200419 Brian Richardson,Robert P.Hale,BIOS Compatibility within the Intel Platform Innovation Framework for EFI,200320 Mark Doran,Mike Richmond,Introducing:Intel Platform Innovation Framework for EFI,IDF,200321 Brian Richardson,OEM Firmware Development using the Intel Platform Innovation Framework for EFI,200456
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服