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/ . 
 
    
待续...