4.2. BIOS 和引导装载程序的安全性

使用口令保护 BIOS(或相当于 BIOS 的系统)和引导装载程序可以防止能够物理进入系统的未经授权的用户使用可移介质来引导或通过单用户模式来获得根权限。但是防御这类攻击的安全措施既依赖于工作站上信息的保密程度,也依赖于机器的地点。

例如,如果机器在展销会上被使用,并且不包含任何保密信息,可能防御这类攻击就不那么重要。然而,如果在同一个展销会上,某个雇员的便携电脑无人看管,但是其中含有到公司网络的未加密的 SSH 密钥,它就可能会导致影响整个公司的重大安全问题。

从另一方面考虑,如果工作站位于只有被授权或被信任的人员才能进入的地方,那么保卫 BIOS 或引导装载程序的安全性可能就根本不必要。

4.2.1. BIOS 口令

以下是使用口令来保护计算机 BIOS[1]的两个主要原因:

  1. 防止对 BIOS 设置的改变 — 如果入侵者可以进入 BIOS,他们就可以把它设置为从软盘或光盘引导。这就使他们能够进入救援模式或单用户模式,从而允许他们在系统上放置恶意程序或复制保密数据。

  2. 防止系统被引导 — 某些 BIOS 允许你使用口令来保护引导进程。当激活时,攻击者在 BIOS 启动引导装载程序前就不得不输入口令。

因为设置 BIOS 口令的方法因计算机厂商而各有不同,请参考你的计算机手册来获得特有说明。

如果你忘记了 BIOS 口令,它可以通过母板上的跳线或断开 CMOS 电池的连接来重设。由于这个原因,在可能的时候最好能锁住电脑。不过,这么做之前,请先参考一下计算机或母板的说明手册。

4.2.1.1. 保护非 x86 平台的安全

其它平台使用不同的程序来执行和 x86 系统上的 BIOS 基本相似的低级任务。例如,Intel® Itanium™ 计算机使用可扩展固件界面(Extensible Firmware InterfaceEFI)Shell。

关于使用口令来保护其它体系上的 BIOS 类程序的说明,请参阅厂商的说明。

4.2.2. 引导装载程序口令

以下是使用口令来保护 Linux 引导装载程序的主要原因:

  1. 防止进入单用户模式 — 如果攻击者能够引导入单用户模式,他就可以成为根用户。

  2. 防止进入 GRUB 控制台 — 如果机器使用 GRUB 作为引导装载程序,攻击者可以使用 GRUB 编辑界面来改变它的配置或使用 cat 命令来收集信息。

  3. 防止进入非安全的操作系统 — 如果它是双引导系统,攻击者可以在引导时选择操作系统,例如 DOS,它会忽略存取控制和文件权限。

红帽企业 Linux 为 x86 平台包括了两个引导装载程序:GRUB 和 LILO。要详细查看这两个引导装载程序,请参考《红帽企业 Linux 参考指南》中的“引导装载程序”这一章。

4.2.2.1. 用口令保护 GRUB

GRUB 可以通过在它的配置文件中添加一个口令(password)指令来解决第 4.2.2 节中列举的前两个问题。要这么做,首先决定要使用什么口令,然后打开 shell 提示,登录为根用户,键入:

/sbin/grub-md5-crypt

在提示时,键入 GRUB 口令,然后按[Enter]。这会返回一个口令的 MD5 散列。

下一步,编辑 GRUB 配置文件 /boot/grub/grub.conf。打开文件,在主体的 timeout 行下添加以下行:

password --md5 <password-hash>

<password-hash> 替换成 /sbin/grub-md5-crypt[2] 返回的值:

下次系统引导时,如果你不首先按 [p] 和 GRUB 口令,GRUB 菜单就不会允许你进入编辑器或命令界面。

不幸的是,这个办法并不能防止攻击者在双引导环境中引导不安全的操作系统。要解决这个问题,你必须编辑 /boot/grub/grub.conf 文件中的另一个部分。

寻找不安全操作系统的 title 行,然后紧跟在下面添加一行 lock

对于 DOS 系统,该实例应该和以下的启动方式相似:

title DOS
lock

警告警告
 

/boot/grub/grub.conf 文件的主体中必须有 password 行才能使这种方法正确运行。否则,攻击者就可以进入 GRUB 编辑器界面,然后删除 lock 行。

要为某个特定内核或操作系统创建不同的口令,在那个实例中添加一个 lock 行,再紧跟一行 password。

每个使用独特口令来保护的实例开头都应该和以下相似:

title DOS
lock
password --md5 <password-hash>

4.2.2.2. 用口令保护 LILO

LILO 是一个比 GRUB 简单的引导装载程序,它不提供命令界面,因此攻击者在内核被载入前无法获得到系统的互动存取。不过,攻击者仍能够引导单用户模式或不安全的操作系统。

使用口令保护 LILO 可以通过在配置文件的全局部分添加一个口令指令来达到。要这么做,打开一个 shell 提示,登录为根用户,编辑 /etc/lilo.conf 文件。在第一个 image 实例前,添加一个和以下相似的口令指令:

password=<password>

在上面的指令中,把 <password> 替换成 LILO 的口令。

重要重要
 

在编辑 /etc/lilo.conf 时,你必须运行 /sbin/lilo -v -v 命令来使改变生效。如果口令被配置了,除了根用户外的所有人都可以读取这个文件,LILO 会正确安装,但是它会通知用户该配置文件的权限没有被正确设置。

如果不想使用一个全局口令,口令指令可以被添加到和内核及操作系统相应的实例中。要这么做,把口令指令添加到紧跟在 image 下的一行。完成后,使用口令保护的实例的开头就和以下相似:

image=/boot/vmlinuz-<version>
        password=<password>

在前面的例子中,使用内核版本替换 <version>,使用该内核的 LILO 口令替换 <password>

你还有可能在防止用户不使用口令而指定参数的同时不进行口令校验而允许引导内核或操作系统。要做到它,在实例内的 password 行下面添加 restricted 指令。此类实例的开头和以下相仿:

image=/boot/vmlinuz-<version>
        password=<password>
        restricted

<version> 替换成内核版本,把 <password> 替换成该内核的 LILO 口令。

若使用 restricted 指令,在实例内还必须有一个 password 行。

警告警告
 

/etc/lilo.conf 文件是全局可读的。如果你要使用口令来保护 LILO,只允许根用户读取和编辑该文件是一项基本要求,因为所有的口令都是纯文本的。要做到它,作为根用户键入以下命令:

chmod 600  /etc/lilo.conf

[1]

因为系统 BIOS 因厂商而各异,某些可能不支持任何类型的口令保护,某些可能会只支持一种而不支持另一种。

[2]

GRUB 还接受不加密的口令,但是推荐你使用 md5 散列来增加其安全性。