目前,由于计算机技术的迅速发展,其相关产品越来越多地应用于社会的各行各业,因此随之而生的主机安全防护功能要求逐渐成为各个部门极为关心的问题。针对不同的安全威胁,目前存在多种主机安全技术和相关安全产品,如防病毒技术、个人防火墙、安全应用程序(如文件加密程序)、安全操作系统等。这些技术和产品在一定程度上满足人们的安全需求,却没有很好地解决以下两个问题:
1.系统访问,即开机时的保护问题,目前普遍采用的是基于口令的弱身份认证技术,很容易被攻破而造成泄密;
2.运行时保护(runtime protection),即在合法用户进入系统后因某种原因暂时离开计算机,此时任何人员均可在此系统之上进行操作,从而造成泄密。
本文采用BIOS和操作系统安全增强技术,利用USBKEY提供的高强度密码算法和独立于操作系统安全运算环境,实现了开机时的强身份认证和系统状态的实时监控和保护,有效解决了上述安全问题,目前已在“便携式专用嵌入式安全计算平台”系统中得到了应用。
本机安全解决方案 在实际应用过程中,使用系统所带来的安全与性能问题主要集中在三个方面,即BIOS安全、系统本身安全与人为因素。因此如何正确有效地将这三个问题予以解决是本机安全的关键所在。考虑到正常的系统引导过程以及如何解决性能与安全的平衡,然后根据对这些相关难点的研究,我们认为将硬件引入到软件设计中来,可有效地增强系统本身的安全性,并可最大限度地防止软件运行所带来的安全隐患。对于这些问题,主要的解决方法如下:
1.基于USBKEY的BIOS安全机制
BIOS安全是目前信息安全领域研究的一个热点。BIOS作为固化在主板上ROM芯片中的一段软件代码,主要包括基本硬件驱动与初始化启动及引导部分代码,因此可在基本硬件检测完毕后,在初始化代码中要求插入正确的USBKEY,实现在BIOS层的身份认证。另外,已出现的BIOS病毒主要表现在感染引导代码,而大部分感染的情况下是非法用户恶意造成的,因此在BIOS进行引导之前就进行合法用户的身份识别,也可有效防止BIOS所带来的安全隐患。
众所周知,在某些领域如嵌入式系统领域中使用计算机,大量的BIOS功能设置与代码都逐渐显得多余,而且不合适的操作会严重影响系统性能,因此在重构BIOS的同时,也应根据具体的需求对BIOS相关冗余代码进行必要的优化,这在许多专用的系统中就显得尤为重要。
因此在BIOS中加入安全机制,主要包括三个方面,一是根据需求将代码尽量优化并裁减,减少漏洞;二是利用硬件(USBKEY)在BIOS层进行身份认证机制,在载入操作系统之前就确定用户身份,这样即保证了BIOS的安全性,又避免了脆弱的引导程序受恶意攻击;最后一个方面就是在BIOS中规定对操作系统的一定约束条件,从而使整个系统的安全性得到增强。
2.根据人为因素引入的安全机制
目前,针对各种操作系统所提出的安全方案层出不穷,这些方案的实现大大提高了系统本身的安全性能。然而,在实际应用时,大量的安全问题来源于使用人员本身,例如合法用户通过各种安全验证和手段后已经进入系统后短暂离开,这时的系统就已经成为没有任何安全防护措施的系统了,这就是所谓的人为因素。
可以想象,在合法用户使用系统期间,重新启动或者开关防护程序必然会增大时间和工作量的负荷。因此,可以考虑在系统运行期间使用实时监控,且软硬件结合的手段,即根据USBKEY的插拨以及引入的相关密码算法进行结合,从而可实时地对系统进行监控,做到可实时解决本机系统的安全问题。
根据以上关键问题的分析,可以对整个单机系统的运行确定一套基于USBKEY的安全机制,其设计方案如图所示。
系统工作流程的重点在于:从系统开机起,要保证正常工作必须始终插入正确USBKEY;BIOS引导时必须插入正确USBKEY;在进入系统后,要启动监控程序,可直接拨出USBKEY。当合法用户需立即使用系统时,可随时插入正确USBKEY,系统将继续正常工作;当USBKEY损坏或者丢失时,可启动超级口令机制,只能一次进入系统进行必要备份或其他处理工作,然后进行下一步安全处理。
在整个系统运行过程中,主要是围绕USBKEY进行安全机制设计的,这是考虑到USBKEY使用方便且可以加入软件算法,这里我们采用的容量为128K的ATMEL USBKEY(基于7816标准),其中协处理器专门负责进行运算,速度较快,可以适用于我们使用的复杂算法,因此是完全可满足本方案的要求。另外,在进入系统后的三次超级口令安全机制主要是考虑到USBKEY本身可能出现的硬件问题,以及合法用户使用问题而采取的补救措施,在出现这些问题时,可输入事先设置好的超级口令,只能进入系统一次,可方便合法用户进行相关备份和其它操作等等。
图:基于USBKEY的本机安全解决方案工程实现中技术难题的解决 在对以上所述的交叉设计方案进行具体实现时,其主要难点在于BIOS安全机制及实时监控的相关问题,考虑到系统安全性与运行性能的平衡以及代码的优化程度,我们尽可能地对这些问题采取比较合适的处理方法。总的来说,最终系统运行时工作正常稳定且安全可靠,很好地达到了预期效果。
1.BIOS安全机制实现
BIOS的构建主要是根据本单位自行研制的LinuxBIOS进行改造的,它的最初功能是专用于快速引导嵌入式Linux操作系统,通过使用SiS公司芯片微代码及采用M-Sys公司的基于DOC(DiskOnChip)的嵌入式技术,尽最大限度地裁减冗余代码,且在硬件检测过程中加入控制字,从而对其基本的硬件检测流程进行预想的控制。
在实际的实现过程中,由于使用的嵌入式Linux操作系统本身就能初始化和检测很多硬件设备,并能自身产生中断向量表,因此在BIOS中可对这两部分进行裁减,例如,首先去掉关于中断向量表生成及处理的部分。然后再对必要的硬件设备进行初始化,在保证系统可被引导及正确运行的前提下进行硬件检测部分的优化,最终生成的设备检测主要包括:SuperIO、SDRAM、ROM及其缓冲区定义、PCI桥的基本刷新、PC80键盘初始化、南北桥初始化部分(关键部分,包括IPL控制的重新定义)、主板整体的部分初始化(直接提供的IRQ表,主板维护接口和SDRCLK/SDWCLK的定义)以及CPU检测及初始化部分。
由于BIOS在初始化时只能识别硬件的物理地址,因此可在USB某一指定地址空间中提取连续的8比特进行特定的混合编码,再加上对厂商号与设备ID号进行规定,因此从硬件上可以达到安全性能较高的BIOS身份认证功能。
另外,系统引导部分是最容易受到攻击的部分。因此,我们在文件分区表中的结束(55 AA处)前加入一特定标志“FLG”,通过比较内核参数,例如大小及文件头信息等,从而达到保证引导区不被恶意修改。
2.实时监控时效率问题的解决
在实现实时监控部分时,主要目标在于代码优化、使用方便及尽量不影响系统运行效率这三个方面。其中代码优化主要是在编程实时尽量依赖于C/C++标准,不过多进行复杂运算而占用CPU资源等等;使用方便的考虑就是在系统启动时启动一个权限最高的后台进程,对用户透明且能达到实时监控的目的。
另外,通过大量调研和实时系统的开发惯例,我们认为在系统中10个IDLE为用户可接受的等待范围。因此,在进行了大量测试后,我们设定监控程序检测周期为8个IDLE。其中USBKEY为可插拔设备,通过硬件读而不是置USB文件系统的方式,这样能更好地延长USBKEY使用时间和被读写次数。
本文小结 “基于USBKEY的BIOS安全解决方案”的实现很好地解决了本机系统的主要安全问题,对于如何解决因人为因素导致的安全隐患提出了很好的实例。当然,本系统的实现依然存在一些安全隐患,例如在系统正常运行时,合法用户在进行操作时可能会将USBKEY的地址进行改写或将USBKEY设备头信息区覆盖,从而造成USBKEY不可用等等,因此这些问题需进一步进行解决。
作者:
徐宁、赵彬 (解放军信息工程大学电子技术学院研究所 )