BIOS Rootkit实现分析与检测技术研究系列之--绪论
本节目录:
1. 引言
2. 知识准备
3. 小结
4. 参考文献
引言
《BIOS Rootkit实现分析与检测技术研究》是我的毕业论文研究课题。陆陆续续从收集资料到实际测试,前后也有大半年的时间。由于论文还没有发表,所以我将在这个系列完成以后在附送论文的doc资料,望大家体谅。
这个研究系列,我会把在研究过程中收集的资料、研究心得和实验步骤进行详细描述。希望对进行BIOS Rootkit研究的朋友们,能起到抛砖引玉的作用。也希望通过这些心得,交到更多有共同兴趣的朋友。
闲话少说,进入正题。
BIOS Rootkit技术充满着各种神秘色彩。自2007年,IceLord一篇关于BIOS Rootkit实现的文章,一石激起千层浪。使得许多关于BIOS Rootkit的猜测变成了现实。我的心得也是从分析IceLord开始,从分析BIOS Rootkit实现的方方面面,进而讨论检测BIOS Rootkit的可能性和局限性。文章主要针对Award BIOS来进行讨论,相应技术可以应用到其他BIOS类型。
文章基于许多研究人员的研究成果,如果涉及相关作者的利益,请通知我,我会把相关部分删除。另外,文章中提到的一些技术存在很大安全风险,希望大家从探讨技术角度出发,不要利用文中的技术进行触犯法律的行为。
知识准备
1. BIOS是什么?
BIOS是“Basic Input/Output System”的缩写,中文译名为“基本输入输出系统”。
BIOS是一组固化到计算机主板上ROM芯片上的程序(这里指主板BIOS,更多BIOS类型后面描述),其保存有计算机启动需要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自举程序。可以说,BIOS是一个软硬件的结合体。它为主板部件和主要外围设备服务。从结构上说,BIOS是连在南桥芯片组上的内存芯片,保存所有的微程序和部分配置信息。剩余的信息则保存在由电池供电的CMOS芯片上。
以上资料来自网络和Kris Kaspersky(罗爱国 郑艳杰 等翻译)的《Shellcoder 编程揭秘》一书,这也是这个系列文章主要参考的资料之一。
2. BIOS分类
BIOS就用途来说,一般根据其所在硬件位置来区分。如存在于主板中的BIOS,一般称之为System BIOS或Mainboard BIOS,它负责整个主板的运行;而嵌入在显示适配器(显卡)中的BIOS就称之为Video BIOS;网络适配器(网卡)中的BIOS就称之为Netcard BIOS。其他还有SCSI控制卡和磁盘附加卡中都存在相应的BIOS芯片。本文主要讨论存在于主板中的BIOS类型,以下相关的所有研究都基于主板BIOS展开。
BIOS就硬件芯片类型来分,又可分为PROM(Programmable ROM)可编程存储器、Mask ROM、EPROM(Erasable PROM)、FlashROM等。目前绝大部分的BIOS都采用EPROM和FlashROM芯片类型。这些类型的芯片最大的特点,就是能够进行编程写入。这也是BIOS Rootkit实现的前提。而写入过程一般称为“BIOS刷写”,通常需要借助特定刷写程序来完成。
3. BIOS运行过程
当计算机从开机的一瞬间开始,硬件特性就由CPU从主板的BIOS芯片内取得程序代码,用BIOS内部的程序代码获得控制权并且发挥作用。从CPU内外部的检测设置、激活DRAM以及针对芯片组与各种外围设备做初始化设置之后,最后驱动软盘或硬盘,直到把操作系统(如DOS,Win98/NT/2000/XP,Linux)加载成功,BIOS的开机引导工作就此告一段落,转向从事幕后的支持、协调工作,并帮助操作系统或应用程序,来处理外围设备沟通的细部操作。
BIOS分类和运行过程的描述来自陈文钦的专著《BIOS研发技术剖析》。在该书中详细描述了BIOS发展的历史和相关概念,对于理解BIOS Rootkit有很大参考价值。
4. 研究工具介绍
工欲善其事、必先利其器。我们先来看一下做实验需要的工具,如下:
Award BIOS 模块修改工具介绍
BIOS文件以模块化方式组成(3.2节介绍)。因此,BIOS文件的模块化修改工具成为BIOS Rootkit实现的基本工具之一。以下主要介绍Award BIOS的模块修改工具。
1). cbrom
cbrom程序由Phoenix公司研发。它可以对BIOS文件进行显示、导入、导出和修改的操作。Cbrom运行于DOS操作系统,较常用版本为V1.30B或V1.30C,目前最新版本为V2.20。
cbrom使用帮助如下(程序自带帮助):
CBROM V2.20 (C)Phoenix Technologies, Ltd 2001 All Rights Reserved.
Syntax:
D:\...\CBROM.EXE InputFile [/other] [8000:0] [RomFile|Release|Extract]
D:\...\CBROM.EXE InputFile [/D|logo|vga....] [RomFile|Release|Extract]
InputFile : System BIOS to be added with Option ROMs
/D : For display all combined ROMs informations in BIOS
/epa|epa1-7 : Add EPA LOGO BitMap to System BIOS
/logo|logo1-7 : Add OEM LOGO BitMap to System BIOS
/oem0-7 : Add special OEM ROM to System BIOS
/err : Return error code after executed
/btvga : Add VGA ROM to Boot Rom Block Area.
/isa : Add ISA BIOS ROM to System BIOS.
(/isa Filename [xxxx:0])
/vga, /logo, /pci, /awdflash, /cpucode, /epa, /acpitbl, /vsa, /hpm
/hpc, /fnt0 - 5, /ros, /nnoprom, /mib, /group, /NoCompress
RomFile : File name of option ROM to add-in
Release : Release option ROM in current system BIOS
Extract : Extract option ROM to File in current system BIOS
<<< Examples >>>
D:\...\CBROM.EXE 2a4ib000.bin /D
D:\...\CBROM.EXE 2a4ib000.bin /VGA filename
D:\...\CBROM.EXE 2a4ib000.bin /VGA filename /ERR
其中主要的选项有4个:
/D 代表查看BIOS文件中的模块信息。
/isa 可以把我们编写的模块以ISA方式插入到BIOS文件中。
Release
Extract
2). Award BIOS Editor 1.0
Award BIOS Editor 1.0 是一个开源的BIOS模块编辑工具,有Mike Tedder开发。
Award BIOS Editor 1.0是Windows操作系统下运行的BIOS文件模块编辑工具。它的功能和cbrom类似,但可视化程度更高,容易使用。
Award BIOS 刷新工具介绍
BIOS刷新技术成熟已久。从上个世纪CIH病毒爆发以来,许多的厂商和个人都相继研发出许多供BIOS刷新、备份和还原的软硬件技术和工具。对于Award BIOS来说,主要有两个:AwardBIOS Flash Utility和WinFlash。
1). AwardBIOS Flash Utility
AwardBIOS Flash Utility由Phoenix公司研发,文中使用的版本为v8.80。AwardBIOS Flash Utility是一个DOS操作系统下运行的Award BIOS刷新、备份和还原工具。它可以把我们的BIOS Rootkit直接写入BIOS可擦写芯片中。
2). WinFlash
WinFlash同样由BIOS研发巨头Phoenix公司研发。与AwardBIOS Flash Utility不同的是,WinFlash运行于Windows操作系统,可以直接对BIOS进行备份、刷写的操作。这对于只能在DOS实模式下进行的BIOS刷新操作技术来说,是一个不小的进步。
反汇编器 IDA Pro 不用多介绍了吧。
编译器 NASM
NASM(Netwide Assembler)是一款免费、开源、跨平台的汇编语言编译器[12]。他编译出的程序可以运行于Windows 16位、32位、64位运行环境以及Linux和*BSD等系统环境。目前的最新版本为 v2.03.01。
NASM和微软的MASM语法类似,但其语法更适合进行BIOS Rootkit的开发,如times和$、$$指令。times指令进行字节的重复操作;$指令代表当前位置;$$代表一个节(section)的开始处被汇编后的地址。“times 510-($-$$) db 0”这个语句就表示将剩余空间填充为0,直到程序有510个字节为止。这样的语法非常利于BIOS Rootkit的编写工作。
另外,NASM的跨平台性,将来也可以把本文针对DOS、Windows操作系统的BIOS Rootkit代码更方便的移植到其他平台上。
虚拟机 Bochs
Bochs是一个开源的系统模拟器,目前最新版本为v2.3.7。它能够完全模拟x86的硬件以及一些外围设备,如CPU、I/O设备以及BIOS。Bochs的模拟是所有操作都交由真实硬件执行而实现的模拟,因此执行速度较慢。它和流行的虚拟机VMware和VirtualPC的模拟加虚拟技术不同,Bochs是完全模拟机器的硬件执行,而其它两个则不同程度的利用自身机制进行系统虚拟操作(不是由真实硬件执行)。
Bochs能够通过特定选项对BIOS的ISA/PCI模块进行模拟测试。它独一无二的调试功能甚至能够调试BIOS的执行。这两个特性使得Bochs成为我们开发BIOS Rootkit的首选工具。
16进制磁盘编辑器WinHex
WinHex是由X-Ways公司出品的一款著名的16进制磁盘和文件编辑器。它运行于Windows系统,能够对绝大部分的文件格式进行16进制编辑操作。本文使用的版本为v13.6 SR-2。
小节
该系列的绪论部分基本是些相关概念的堆砌,主要是介绍一些相关知识链接。别着急,下一篇我们进入正题。
参考文献
这里列出了一些大家可能感兴趣的链接,也是这个系列的相关知识来源。
[1] 陈文钦. BIOS研发技术剖析.
[2] Greg Hoglund, James Butler. (著) 韩智文(译) ROOTKITS--Windows内核的安全防护
[3] Kris Kaspersky. (著) 罗爱国 郑艳杰 等(译) Shellcoder 编程揭秘
[4] John Heasman. Implementing and Detecting a PCI Rootkit
[5] Darmawan M S a.k.a Pinczakko. Pinczakko's Guide to Award BIOS Reverse Engineering
[6] PCI Special Interest Group. PCI BIOS Specification Revision 2.1.
[7] Compaq, Phoenix, Intel . BIOS Boot Specification, V1.01 .
[8] Award BIOS Editor 1.0. http://awdbedit.sourceforge.net/
[9] DataRescue IDA Pro. http://www.datarescue.com/
[10] 段钢. 加密与解密 第三版.
[11] Netwide Assembler. http://sourceforge.net/projects/nasm
[12] Bochs. http://bochs.sourceforge.net
[13] John Heasman. Implementing and Detecting an ACPI BIOS Rootkit.
[14] ACPI Specification. http://www.acpi.info/
[15] Martin. The ROMOS Project. http://rayer.ic.cz/romos/romos.htm
[16] Intel Corporation. Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1
[17] 王爽. 汇编语言(第二版).
[18] 张银奎. 软件调试. 电子工业出版社
[19] 李彦昌. 80x86保护模式系列教程
[20] IceLord. BIOS RootKit:Welcome Home,My Lord!. http://blog.csdn.net/icelord/
[21] Matt Pietrek. An In-Depth Look into the Win32 Portable Executable File Format, Part 2. http://msdn.microsoft.com/msdnmag/issues/02/03/default.aspx.
[22] Microsoft Corporation. The Common Object File Format (COFF).
[23] Toshifumi Yamamoto. eXeScope v6.5.
[24] [美]Charles Petzold. Windows程序设计(第5版).
[25] 张帆 史彩成 等. Windows驱动开发技术详解.
[26] 谭安 张雪兰. Windows汇编语言程序设计教程.
[27] 沈美明 温冬婵. IBM PC汇编语言程序设计.
[28] 于渊. 自己动手写操作系统.
[29] Mark E. Russinovich, David A. Solomon. Microsoft Windows Internals, Fourth Edition: Microsoft Windows Server 2003, Windows XP, and Windows 2000. Microsoft Press.
[30] NTLDR分析. http://bbs.pediy.com/.
[31] Jason C. Locke. The NTLDR Hacking Guide. http://www.tburke.net/info/ntldr/.
[32] 于. 用Bochs调试NTLDR. http://www.xfocus.net/.
[33] Derek Soeder, Ryan Permeh. eEye BootRoot Project.
[34] Intel Corporation. Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture.
[35] 涂彦晖 戴士剑. 数据安全与编程技术.
[36] MSDN Microsoft Developer Network. Microsoft Corporation. http://msdn2.microsoft.com/.
[37] 火翼. 如何在windows程序中读取bios内容. VC知识库 http://www.vckbase.com/.
[38] Nir Sofer. HashMyFiles v 1.37. http://www.nirsoft.net/.
[39] 飞思科技产品研发中心. Delphi下深入Windows核心编程.
[40] TS多功能编程器. http://shop151741.taobao.com/.
[41] Mike Coates. Willem Eprom Programmer Software v0.97ja.
[42] PCI-SIG. PCI Local Bus Specification Revision 3.0.
[43] Ralf Brown's Interrupt List. http://www.cs.cmu.edu/~ralf/ .
待续...