远程计算机固件攻击系统研究

2017-09-05 16:47王冠康晋菊孙亮
软件导刊 2017年7期
关键词:固件信息安全

王冠+康晋菊+孙亮

摘 要:随着计算机软硬件及网络的迅猛发展,互联网用户不断增长,各类应用软件在给广大用户带来便利的同时,信息安全问题成为一个巨大隐患。目前,基于网络漏洞的信息窃取技术已经被黑客利用,基于计算机固件漏洞的攻击也时有发生。基于计算机固件的攻击具有隐蔽性强、难以清除且先于操作系统被加载的特征,给计算机固件带来致命性灾难。从攻击者角度出发,研究了攻击计算机固件的方法,发现固件存在的安全漏洞,开发了一个计算机固件远程攻击系统,该系统可用于计算机固件被攻击的漏洞研究,从而提升计算机固件的安全性能。

关键词:固件;固件攻击;远程攻击;信息安全

DOIDOI:10.11907/rjdk.171213

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2017)007-0096-04

0 引言

计算机技术的飞速发展,尤其是Internet互联网技术的发展,使得计算机用户迅速增长,基于计算机网络的各种应用软件不断推出。而网络自身及应用软件存在不可避免的安全漏洞,致使信息泄露、钓鱼网站、木马病毒等安全事件频发。随着统一可扩展固件接口(UEFI BIOS)的出现,对BIOS的编程相比之前更加简洁规范,但却给计算机带来了新的安全问题。对计算机固件的攻击成为一种新的攻击方式,如CERT团队已经证实苹果和戴尔设备存在BIOS写保护漏洞,还有联想笔记本存在的流氓BIOS更新机制漏洞等。

针对底层计算机固件的攻击是致命的,因为一旦BIOS被攻击,一般用户及杀毒软件无法清除被植入到BIOS中的病毒,固化在flash rom中的BIOS程序是计算机加电后最先执行的代码,而在引导操作系统加载后便进入休眠状态。BIOS(Basic Input Output System)基本输入输出系统,是一组被固化到计算机主板上的一个ROM(现在基本都是NORFlash)芯片中的程序代码,保存了计算机最重要的基本输入输出程序、开机后自检程序和系统自启动程序。计算机上电后,首先会加载BIOS程序,为计算机提供最底层、最直接的硬件设置和控制,是计算机系统不可或缺的部分[1]。

本文研究计算机固件攻击方法以及如何通过远程方式进行攻击,同时对固件状态进行监测,判断固件是否被攻击,并设计一个基于远程的计算机固件攻击演示系统,用于计算机固件远程攻击的研究分析。

1 总体设計

远程计算机固件攻击分为控制端(本地计算机)和被控端(被攻击的远程计算机)两部分。控制端通过远程控制软件来操控被控端计算机,远程控制软件客户端应安装在控制端,而被控端需要安装服务端程序。远程计算机可以通过对客户端软件界面的操作,如简单的选择和单击等控制目标计算机完成相应功能。图1是该系统整体架构。

2 远程控制客户端程序设计

远程控制中控制端和被控端的连接有主动型和被动型两种方式。主动型是控制端主动发送连接请求与被控端建立连接,被动型是利用安装在被控计算机上的服务器程序主动向控制端发送连接请求。远程控制系统采用现在流行的被动型方式,可在不知道对方IP地址的情况下建立连接。

远程控制的客户端程序安装在本地计算机,作为控制端对远程计算机进行监测控制。客户端主要提供界面操作,向被控端发送控制命令,控制端在收到命令后需要执行相应操作,同时客户端程序需要显示从被控端发送来的执行结果。客户端程序工作流程如图2所示。

客户端程序类似于网络通信的Server端,客户端程序启动后绑定自己的IP地址和端口号后就进入监听状态,等待被控端的连接请求。在监听端口收到连接请求并建立连接后,本地计算机就可利用该连接控制远程计算机。首先控制端需要获取文件管理权限,将计算机固件攻击工具传送到远程计算机(该攻击工具是实现BIOS攻击不可缺少的程序),攻击工具发送到远程计算机后,需要重命名与系统易混淆的文件名,并将文件隐藏使用户不易发现。接下来控制端向被控端发送控制命令,本系统终端输入的命令实际是在远程计算机上执行。远程计算机在执行相应任务后通过服务端程序将运行结果发送给本地计算机。客户端程序要接收发送到监听端口的数据,在控制端得到需要的数据。

3 远程控制服务端程序设计

3.1 服务端程序功能

服务端程序是实现远程控制的核心模块,远程控制软件通过调用服务端程序功能模块实现对计算机的远程控制。服务端程序主要包括自启动模块、主动发送连接请求模块、文件管理功能模块、超级终端模块、回传数据模块,如图3所示。

(1)自动启动模块。服务端程序只有启动后才能发挥作用,而对远程计算机而言服务端程序是一个恶意程序,用户不会手动运行该程序,服务端程序必须隐藏启动,即所谓的自动启动。本系统将服务端程序设置为一个系统服务程序,并在/etc/rc.d/init.d目录下添加相应的Shell命令脚本实现开机时自动启动。

(2)发送连接请求模块。要进行远程控制首先需要在双方之间建立连接,本系统采用被动型远程控制方式,服务端程序在运行后能主动向控制端发送连接请求。因此,服务端程序必须知道控制端的IP地址和端口号,如果控制端计算机的IP地址是固定的,可以将该固定的IP地址直接写入服务端程序中。通常本地计算机(控制端)的IP地址是动态分配的,计算机每次开机后IP地址与上次不一定相同。解决IP地址动态变化问题有两种方法:①给本地计算机申请一个域名,域名固定不变,根据域名不变原理可以将服务器程序中的地址设置为域名;②申请一块免费的FTP空间,FTP空间有自己的空间地址而且固定不变,本地计算机在每次开机后将当前的IP地址和端口号更新到该FTP空间中,因此可以将服务器程序中的地址设置为固定的FTP空间地址。服务器程序启动后,首先根据FTP地址读取FTP空间内容,获取控制端动态的IP地址和端口号,然后向该地址发送连接请求。endprint

(3)文件管理模块。文件管理模块用于对远程计算机中的文件进行查看、修改、删除以及上传下载。通过文件管理模块将攻击计算机固件的程序传送到被控端计算机的硬盘中。文件管理通常有两种方法:①将被控端的硬盘进行共享便可对该硬盘中的文件进行任意操作;②将本地计算机配置成一个FTP服务器,控制端控制远程计算机访问该FTP服务器进行文件上传和下载等操作。

(4)超级终端模块。计算机固件攻击工具的调用需要在终端执行命令,所以服务端程序还要具有超级终端功能。超级终端能够使在本计算机上的操作实际是在被控端计算机上执行。超级终端的原理是将控制端输入的信息及时发送给被控端,并且控制端将显示被控端执行命令后发回给该控制端端口信息。

(5)回传数据模块。远程控制不仅要向远程计算机发送控制命令,还需要从被控端获取信息以及监控被控端命令的执行情况。实现数据回传方式有多种,可以利用FTP协议实现,还可以在被控端建立一个临时文件来存放需要回传的数据,设计一个时间戳,每隔一段时间就将临时文件中的数据发送给控制端。

服务端程序工作流程见图4。在启动服务端程序后,将主动向控制端发送连接请求,在客户端程序(控制端)接受该连接请求后进入连接状态,等待控制端发送控制命令。一旦接收到控制端的执行命令,服务端程序便调用相应文件执行该命令。该命令执行后需要及时将结果发送给控制端程序以实现监控目的,即回传执行结果。整个过程要接收和发送多次数据,为了避免数据混乱,每一过程都要建立一个新的线程。最后在客户端断开连接控制后,服务端程序也需要将连接断开,释放系统资源。

3.2 服务端程序植入和隐藏

服务端程序需要将自己伪装来吸引用户下载使用,可将该服务端程序隐藏到图片、Word文档中,或将其隐藏到使用频率高的软件中。本系统作为一个演示系统,选择使用比较简单的软件捆绑方式实现服务端程序隐藏,从网络站点下载一个使用频率高的软件,如Office软件,将服务端的可执行程序捆绑到Office安装软件中,并将服务端程序设置为隐藏安装,服务端程序捆绑到Office软件并进行相关设置后,将新生成的可执行文件(文件名仍是Office安装包)上传到安全检查不严格的网络站点上,等待用户下载安装。为增加该软件被下载的概率,可以在论坛上写一篇有关软件的文档,并将该软件地址附在文档中。一旦有用户下载并安装该软件则服务端程序也被安装。

在服务端程序安装过程中还需要完成自动启动和进行隐藏两个任务。服务端程序对计算机而言是恶意程序,不能依靠用户启动该服務,需要自己悄无声息启动,通过设置开机自启动实现。服务端程序要想长期驻留在被控端计算机中,必须具有良好的隐蔽性,本系统将服务端程序设置为系统服务进行隐藏,即将文件名改为和系统文件容易混淆的名字,如将“I”替换为“1”,将“o”替换成“0”等相似字符,使用户难以察觉,同时将某些文件设置为隐藏属性。服务端程序的植入和隐藏是实现远程控制的关键,高端的植入和隐藏手段可以使服务端程序在被控计算机中长时间驻留。

4 固件攻击工具设计

计算机固件攻击工具是本系统核心部分。计算机固件主要指BIOS芯片,它是计算机中最底层的软件程序,与处于偏上层的操作系统和上层的应用程序不同,不能通过简单的函数调用实现对相应资源的访问,所以需要设计专门的工具来访问计算机固件。图5是固件攻击工具整体架构。

从图5可以看出,当控制端发送攻击BIOS的命令后,调用被控端计算机硬盘中存放的固件攻击工具,利用Kernel层中的flash.ko模块触发高级别的系统管理中断SMI#,CPU对现场进行保护后进入SMM(系统管理模式),在该模式下可实现对BIOS芯片的读写操作。在刷写BIOS芯片的过程中,被控端需要将执行进度传送给控制端,并在控制端显示攻击过程。

攻击工具包括获取BIOS映像、将恶意代码写入BIOS映像、刷写BIOS三个模块,如图6所示。要对BIOS进行攻击植入恶意代码,首先需要获取计算机当前BIOS芯片中的BIOS映像文件,在现有BIOS文件的基础上进行修改以保障计算机正常启动,然后对BIOS芯片重新刷写,将恶意代码固化到BIOS芯片中。

攻击工具的设计中需要对BIOS进行读写操作,计算机加电后会首先执行BIOS中的代码,在操作系统启动后BIOS就进入休眠状态,在计算机启动过程中会将BIOS文件映射到物理内存的高端地址。但在操作系统正常运行的保护模式下,物理内存地址对操作系统上层的应用程序是透明的,无法直接访问BIOS文件被映射到的物理内存地址块。不过在Intel 386SL之后的X86架构CUP中引入了一种特殊的SMM模式,在该模式下系统完全在自然环境下执行,没有逻辑地址,所有地址都是物理地址,这个模式为OS实现平台指定的功能(比如电源管理或系统安全)提供了一种透明机制,操作系统无法感知CPU什么时候进入系统管理模式,也不知道执行过SMM模式。该模式下可以对硬件进行I/O操作,可以执行一切特权指令,一切内存保护均失效。

为了实现SMM,Intel在其CPU上增加了一个SMI# PIN引脚。当外部的SMM interrupt pin(SMI#)被激活或从APIC(Advanced Programming Interrupt Controller)收到一个SMI时,处理器将进入SMM。在SMM下,可以对BIOS代码进行操作,此时操作系统相关的执行流程将被挂起,转而执行BIOS中注册的ISR。SMM是一种特殊的工作模式,它不依赖于具体的操作系统,完全由固件来控制。SMM只能通过系统管理中断SMI进入。SMI中断的触发有硬件方式和软件方式。硬件方式是使中断pin电平发生变化(一般是将电平拉低);软件方式是通过向B2H写入数值进入SMI中断。

(1)获取BIOS映像文件。由于是通过重新刷写BIOS的方式来达到攻击目的,所以先要取得厂商提供的无差错BIOS镜像文件。BIOS程序在计算机启动过程中映射到了物理内存最高端的8M区域(本系统设计采用昆仑固件,其BIOS容量是8M),在SMM模式下,通过读取物理内存最高端8M的地址空间获取BIOS映像文件。endprint

(2)将恶意代码封装到BIOS文件。BIOS程序是按模块来开发的,每个模块都是一个独立部分,受BIOS芯片存储空间的限制,在将程序写入BIOS的Flash ROM芯片时,先将各个模块分别进行压缩,然后将压缩后的模块再做一次整体压缩,最终存储到Flash ROM中。所以获得的BIOS镜像文件首先要对其进行解压缩,并将各个模块分离开,将恶意代码隐藏到ISA模块、ACPI模块以及PCI模块中,其中ISA、ACPI模块中加载恶意代码需要CMOS中没有设置禁止加载模块,PCI模块中加载恶意代码只在装有TPM的计算机才能检测到。现在使用的BIOS芯片程序只占芯片容量的60%~70%,剩余部分供UEFI BIOS功能扩展使用。本系统所使用的昆仑BIOS也预留了空白容量,所以该演示系统将恶意代码存放到BIOS的空白区域,并将该地址链接到UEFI系统表中,再将BIOS文件进行各模块和整体的压缩打包。

(3)刷写BIOS。在完成上述操作后就可用新生成的BIOS映像文件替换原来的BIOS映像,对BIOS芯片刷写仍然需要在SMM下进行,只有在该模式下才能对硬件及芯片进行I/O操作。在SMM下直接对8M大小的整个BIOS Flash芯片进行重写,携带恶意代码的BIOS映像文件就写入到BIOS芯片中。

5 结语

BIOS作為计算机主板的一部分,在计算机中占据着很重要的位置,BIOS程序是计算机加电后CPU最先执行的代码,若BIOS已经不安全,则后续的一切操作都会使计算机处于更危险的状态。BIOS安全是计算机安全的前提,所以研究计算机固件攻击对加强计算机信息安全具有重大意义。

本文从攻击者角度出发,对 UEFI 原理、BIOS技术及源代码进行了深入研究,并且对BIOS攻击机理和远程攻击技术进行了透彻分析,在此基础上,设计并实现远程计算机固件攻击系统。本研究一方面能够促进固件技术的发展,使其逐步完善,另一方面对完善固件层的安全性具有一定的研究价值与意义。本文提出了通过远程操控技术对计算机固件进行攻击,并具体阐述了实现思路和方法。基于远程的计算机固件攻击系统模拟了针对计算机BIOS攻击的整个流程,便于发现BIOS存在的漏洞,进一步研究如何修补该漏洞,从而加强计算机固件的安全性能。

参考文献:

[1]周振柳.计算机固件安全技术[M]. 北京:清华大学出版社,2012.

[2]池亚平,许盛伟,方勇. BIOS木马机理分析与防护[J].计算机工程,2011(13):122-125.

[3]高飞.基于木马的计算机远程控制及隐藏技术分析[J].信息通信,2014(12):150-152.

[4]张智,袁庆霓. BIOS安全检查系统设计与实现[J].计算机技术与发展,2012(22):172-178.

[5]王晓箴,刘宝,旭潘林.BIOS恶意代码实现及其检测系统设计[J].计算机工程,2010(36):17-20.

[6]刘博.BIOS安全等级划分建议[J].信息技术与标准化,2013(3):47-50.

[7]王吉发.基于UEFI的病毒扫描引擎的设计与实现[D].哈尔滨:哈尔滨工程大学,2011.

[8]张德平.基于BOOTKIT原理恶意代码控制技术研究[J].柳州职业技术学院学报,2011(11):28-35.

[9]JOHN BUTTERWORTH, COREY KALLENBERG, XENO KOVAH, et al. BIOS chronomancy: fixing the core root of trust for measurement[J].ACM,2013(13):25-36.

[10]YANLIN LI, JONATHAN M MCCUNE, ADRIAN PERRIG. VIPER: verifying the integrity of PERipherals' firmware [J]. ACM,2011(11):3-16.

[11]SUNHA AHN, SHARAD MALIK. Automated firmware testing using firmware-hardware interaction patterns [J]. ACM,2014(14):1-10.

[12]DAVID HAUWEELE. Tracking inefficient power usages in WSN by monitoring the network firmware: Ph.D. forum abstract [J]. IEEE Press,2016(16):5-6.

[13]PETRA R MAIER, VEIT KLEEBERGER, DANIEL MUELLER-GRITSCHNEDER,et al. Fault injection at host-compiled level with static fault set reduction for SoC firmware robustness testing [J].ACM,2016(16):25-27.endprint

猜你喜欢
固件信息安全
《信息安全与通信保密》征稿函
信息安全专业人才培养探索与实践
保护信息安全要滴水不漏
高校信息安全防护
基于SHA1的SCADA系统PLC固件完整性验证方法
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
保护个人信息安全刻不容缓
信息安全
一种通过USB接口的可靠固件升级技术