WEB开发网
开发学院操作系统Linux/Unix 了解 AIX V6 中的可信执行环境 阅读

了解 AIX V6 中的可信执行环境

 2008-09-16 08:24:09 来源:WEB开发网   
核心提示:引言在系统安全性方面,内部威胁被认为比外部威胁具有更高的严重度,了解 AIX V6 中的可信执行环境,系统中存在需要 root 权限才能执行的系统命令、内核扩展模块和文件,所有这些内容控制着系统的总体安全模型,本文介绍了该功能的基本要素,涵盖基本的功能和示例,这些文件是系统关键型文件,它们失去完整性会威胁到总体系统安全

引言

在系统安全性方面,内部威胁被认为比外部威胁具有更高的严重度。系统中存在需要 root 权限才能执行的系统命令、内核扩展模块和文件。所有这些内容控制着系统的总体安全模型。这些文件是系统关键型文件,它们失去完整性会威胁到总体系统安全性。

失去完整性可能导致您在执行 ls 命令时,不是列出该目录的内容,而是删除了目录中存在的所有文件。还有更糟糕的情况,当您运行完整性受到破坏的 telnet 命令时,该命令打开到远程计算机的 telnet 会话,但是在同时,该命令存储了您的凭据(用户名和密码),并将它们发送到第三方。

这些场景提高了对安全操作系统的要求,其中只有可信的二进制文件(或 libraries/scripts/shells)才允许运行。AIX V6.1 提供了这样一个安全功能,即可信执行(Trusted Execution,TE)环境。

什么是可信执行环境?

可以将可信执行视为一组监督系统完整性的功能集合。可信执行环境维护一个可信数据库,其中存储有系统关键型文件的信任值。除了这个数据库以外,TE 还实现了安全策略,从而增添了另一个级别的系统安全性。本文稍后的各个部分将详细介绍这些功能。

可信执行环境与可信计算基础之比较

可信计算基础(Trusted Computing Base,TCB)是 4.1 版以后的 IBM AIX 版本提供的安全功能。可信计算基础涉及到定期检查系统的完整性(这是使用 cron 作业机制来实现的),以便在特定的时间间隔之后检查系统的完整性。

在运行时检查文件的完整性是非常关键的;因此,建议使用可信执行。运行时可信执行在每次执行命令时检查命令的各个重要属性。

可信执行环境是 IBM AIX V6.1 的高级安全功能,相对于 TCB 提供了以下优点:

可信计算基础只是一个安装时选项,并且若要在现有的 AIX 计算机上启用 TCB,您需要重新安装整个 AIX 操作系统。然而,TE 允许在任何时候启用或禁用完整性检查功能。

可信执行支持在每当执行任何命令的时候执行运行时完整性检查,而 TCB 主要执行定期的系统完整性检查。

总而言之,与 TCB 提供的功能相比,TE 具有更多的功能。

如何启用可信执行环境

可信执行环境功能要求将 AIX V6.1 作为操作系统。它是基本操作系统文件集 bos.rte.security 的一部分。此外,还要确保在该操作系统上安装 CryptoLite for C Library (CLiC) 及其关联的内核扩展。TE 需要这些文件集才能工作。使用以下 lslpp 命令来检查 CLiC 及其内核扩展是否已安装:bash-2.05b# lslpp -l "clic*"
Fileset           Level State   Description
---------------------------------------------------------------------
Path: /usr/lib/objrepos
clic.rte.includes     4.3.0.0 COMMITTED CryptoLite for C Library
Include File
clic.rte.kernext      4.3.0.0 COMMITTED CryptoLite for C Kernel
clic.rte.lib        4.3.0.0 COMMITTED CryptoLite for C Library
clic.rte.pkcs11      4.3.0.0 COMMITTED PKCS11 Software Token Support
Path: /etc/objrepos
clic.rte.kernext      4.3.0.0 COMMITTED CryptoLite for C Kernel

如果未安装,则使用 smitty 命令来安装它们。您可以从 AIX Expansion Pack CD 获得这些文件集,或者通过 AIX Web Download Pack 计划(请参阅参考资料以获得链接)进行下载。在系统上安装这些文件集以后,使用以下命令将它们加载到内核中:bash-2.05b# /usr/lib/methods/loadkclic

完成此任务之后,运行以下命令来启用可信执行。bash-2.05b# trustchk -p te=on

可信执行环境的功能

可信签名数据库 (TSD)

此数据库存储了有关系统关键型文件的所有必要信息,这些文件包括内核执行模块或需要 root 权限才能执行的文件。此数据库缺省位于 /etc/security/tsd/tsd.dat。

在 TSD 中存在其条目的实体 (command / binary / library / script / shell) 称为可信实体,对于这样的可信实体,同时还存储了一个唯一的加密散列和数字签名。加密散列是使用 SHA-256 算法来计算的,数字签名是使用 RSA 算法来生成的。

对于这样的可信实体,对应的散列值和签名是作为其 AIX 可安装文件的一部分进行计算和分发的,并存储在目标系统上的 TSD 中。

下面让我们看看其中一个可信文件的节:bash-2.05b# /usr/sbin/trustchk -q /usr/bin/chown
/usr/bin/chown:
owner = root
group = bin
mode = 555
type = FILE
hardlinks =
symlinks =
size = 9598
cert_tag = 00af4b62b878aa47f7
signature = 4f5c5a0438148947b716a8fb744f50913f89c1fb38246e8cdcd017533a103aec
7ecc43b31c210b69b7915f961b440bc94124d198bfc6ef1594c62b0cdeedb8917cc08969a460
f686c8abda4cab15ccaf29a2740e5c42c862320a8a88e5073143466738affecbb3129a1689a0
d91cd1da98582425f23512dffa7590113cbca753
hash_value = 2c4e3308996ea6846e67847c47009e0d5d0516b4fed37a0e673c4b835f58958
cd91cd1da98582425f23512dffa7590113cbca753
minslabel =
maxslabel =
intlabel =
accessauths = aix.fs.object.owner
innateprivs = PV_DAC_O,PV_DAC_X,PV_FS_CHOWN
inheritprivs =
authprivs =
secflags = FSF_EPS
t_innateprivs = PV_MAC_R,PV_MAC_W,PV_MIC

由于可信文件的所有上述信息都存储在 TSD 中,因此保护 TSD 至关重要。为了 TSD 的安全性,可以使用以下命令来锁定该数据库:bash-2.05b# /usr/sbin/trustchk -p tsd_lock=on

除了缺省的 TSD 文件 (/etc/security/tsd/tsd.dat) 以外,还可以参考一个替代数据库来检查可信文件完整性(在上面的命令中使用 -F 选项),该数据库可以保存在某个安全的位置。

审核 TSD 的完整性(系统完整性检查)

为了执行系统完整性检查,可以使用 /usr/sbin/trustchk 命令将实际文件属性值(例如签名、散列等等)与该数据库中的值进行匹配,从而检查所有可信文件的完整性。/usr/sbin/trustchk [-l] [-r] {-n | -t | -y}
{filename...| ALL}

–n在这种审核模式下,对于指定的单个可信文件或所有文件,将报告而不是修复实际值与 TSD 中存储的值之间的所有差异。
–t在这种审核模式下,对于指定的单个可信文件或所有文件,将报告所有差异并提示是否要修复错误。
–y在这种审核模式下,对于指定的单个可信文件或所有文件,将修复并报告差异。只有一些常见差异才能修复,并非所有差异都能修复。例如,如果散列值不匹配,则这种模式将不修复该差异;相反,它将使该文件不可访问。这种模式应该慎用,因为如果发现任何严重差异,它可能使文件不可访问。

对于所有这些选项,可以使用关键字 ALL 来检查 TSD 中的所有条目。

此功能基本上就是系统审核,可以由系统管理员定期执行。

在下面的示例中,我们将检查 /usr/bin/hostname 命令的完整性,这是一个系统命令,其条目已经在 TSD 中。-bash-2.05b# ls -l /usr/bin/hostname
-r-xr-xr-x  1 bin   bin      4288 Oct 05 2007 /usr/bin/hostname
-bash-2.05b# trustchk -y /usr/bin/hostname
-bash-2.05b#

请注意,trustchk -y 在上述执行过程中没有给出任何消息,这意味着该命令的完整性得到了保护。

下面将 /usr/bin/hostname 命令替换为 /usr/bin/cd 命令,然后尝试检查完整性:-bash-2.05b# cp /usr/bin/hostname /usr/bin/hostname.orig
-bash-2.05b# cp /usr/bin/cd /usr/bin/hostname
-bash-2.05b# /usr/sbin/trustchk -y /usr/bin/hostname
Verification of attributes failed: size
Verification of attributes failed: hash
Verification of attributes failed: signature
Verification of stanza failed: /usr/bin/hostname
-bash-2.05b#  

上面的消息表明,命令 /usr/bin/hostname 已经被破坏。

还要务必注意的是,/usr/bin/hostname 命令的模式已经更改,并且已经变得不可访问。发生这种情况是因为使用了“-y”标志。唯一的解决办法是删除坏的命令二进制并复制新的二进制。-bash-2.05b# ls -l /usr/bin/hostname
---------T  1 bin   bin      1457 May 29 08:09 /usr/bin/hostname
-bash-2.05b#

通过配置安全策略来执行运行时完整性检查

可信执行的至关重要功能之一是在运行时检查可信文件的完整性。启用运行时完整性检查以后,在执行命令时将完成以下步骤。

在二进制加载期间,系统加载程序调用 TE 子系统,并使用 SHA-256 散列算法来计算散列值。

现在对于这同一个二进制,将提取 TSD 中存储的散列值并与运行时计算的散列值进行匹配。

如果两个值匹配,则允许该二进制执行。

如果两个值不匹配,则意味着该文件已被篡改或更改。在这种情况下,将根据所配置的策略来采取行动。

运行时完整性检查是使用 trustchk 命令的 -p 选项来配置的。请参考以下语法:trustchk -p {
 [ TE [= ON | OFF ] ]
 [ CHKEXEC [=ON | OFF ] ]
 [ CHKSHLIB [ =ON | OFF ] ]
 [ CHKSCRIPT [ =ON | OFF ] ]
 [ CHKKERNEXT [ = ON | OFF ] ]
 [ STOP_UNTRUSTD [ = ON | OFF ] ]
 [ STOP_ON_CHKFAIL [ = ON | OFF ] ]
 [ TEP [ = ON | OFF | PathList ] ]
 [ TLP [ = ON | OFF | PathList ] ]
 [ TSD_FILES_LOCK [ = ON | OFF ] ]
 [ TSD_LOCK [ = ON | OFF ] ] }

IBM AIX V6.1 提供了某些可配置用于运行时完整性检查的策略。当 binaries/libraries/scripts 和内核扩展的完整性检查已失败时,这些策略将决定其命运。

可以配置以下策略:

TE 这是启用或禁用可信执行功能的主策略。只有启用此策略之后,才能实现其他策略。

要激活 TE 策略,可以执行以下命令:bash-2.05b# /usr/sbin/trustchk -p te=on

CHKEXEC 此策略确保在加载时检查可信二进制文件的完整性。 CHKSHLIB 在将可信共享库加载到内存中执行之前检查它们的完整性。 CHKSCRIPT 在将可信 Shell 脚本加载到内存中之前检查它们的完整性。 CHKKERNEXt 在将内核扩展加载到内存中之前检查它们的完整性。 STOP_UNTRUSTED 此策略阻止对不在 TSD 中的实体(可以是 executable/libraries/scripts 或内核扩展)进行加载。因此,此策略与 CHK* 策略协同工作。例如,如果 CHKSCRIPT=ON 并且 STOP_UNTRUSTED=ON,则不属于 TSD 的脚本将不会执行。 STOP_ON_CHKFAIL 此策略在可信文件(与上面的实体相同)的完整性检查失败时停止那些文件的加载。此策略与 CHK* 策略协同工作。例如,如果 CHKEXEC=ON 并且 STOP_ON_CHKFAIL=ON,则不会加载任何完整性检查失败的可执行文件。 TSD_LOCK 此策略将锁定 TSD,然后将无法通过 /usr/sbin/trustchk 命令来操作 TSD。 TSD_FILES_LOCK 锁定所有的可信文件,一旦实现了此策略,则不能对那些文件做出任何更改。 TEP 使用此策略,我们可以设置 TE 路径的值,启用该值,或者禁用该值。TE 路径是冒号分隔的目录路径列表。一旦配置了此策略,则只有属于设定的路径的可执行文件才允许执行。 TLP 与 TEP 一样,可以使用此策略来设置可信库路径的值,以及启用或禁用该值。TLP 是冒号分隔的目录路径。一旦启用此策略,则只有属于 TLP 的库才会加载到内存中。

TEP 和 TLP 是 TE 策略;它们与下一部分将要介绍的“可信执行路径”和“可信库路径”功能不同。为了使用这些策略,您需要启用主 TE 策略。

下面看一个关于如何通过配置策略 TE、CHKEXEC 和 STOP_ON_CHKFAIL 来启用运行时完整性检查的示例。首先,我们将检查策略的当前状态,然后启用这些策略。-bash-2.05b# /usr/sbin/trustchk -p TE CHKEXEC STOP_ON_CHKFAIL
TE=OFF
CHKEXEC=OFF
STOP_ON_CHKFAIL=OFF
-bash-2.05b# /usr/sbin/trustchk -p TE=ON CHKEXEC=ON STOP_ON_CHKFAIL=ON
-bash-2.05b# /usr/sbin/trustchk -p TE CHKEXEC STOP_ON_CHKFAIL
TE=ON
CHKEXEC=ON
STOP_ON_CHKFAIL=ON
-bash-2.05b#

下面,我们将运行 /usr/bin/ls 命令(其条目已经在 TSD 中),目的只是为了确保允许执行该命令。-bash-2.05b# /usr/bin/ls
.bash_history   bin        mnt        tftpboot
.profile     dev        opt        tmp
.rnd       etc        proc       u
.sh_history    home       sbin       unix
.vi_history    lib        smit.log     usr
admin       lost+found    smit.script    var
audit       lpp        smit.transaction
-bash-2.05b#

将 /usr/bin/ls 二进制文件替换为 /usr/bin/chmod 二进制文件。尝试运行 /usr/bin/ls 命令。这一次,执行应该会失败。请参见下面的序列:-bash-2.05b# cp /usr/bin/ls /usr/bin/ls.orig
-bash-2.05b# cp /usr/bin/chmod /usr/bin/ls
-bash-2.05b# /usr/bin/ls
-bash: /usr/bin/ls: Cannot run the specified program in a trusted environment.
-bash-2.05b#

因此,运行时完整性检查在该系统上有效。如果任何特洛伊木马或其他病毒更改了任何二进制文件,则该二进制文件的执行将被拒绝。

可信执行路径和可信库路径

除了可信命令以外,TE 环境还支持可信执行路径和可信库路径。此外,与在可信计算基础中一样,TE 环境还支持可信 Shell 和安全注意键(Secure Attention Key,SAK)的概念。

可信执行路径(Trusted Execution Path,TEP)指定可信目录路径的列表。只有属于这些路径的可执行文件才允许执行。

要检查当前的可信路径列表和 TEP 的状态,可以运行以下命令:bash-2.05b# /usr/sbin/trustchk -p tep
TEP=OFF
TEP=/usr/bin:/usr/sbin:/etc:/bin:/sbin:/sbin/helpers/jfs2:/usr/lib/instl:/usr/ccs/bin

要启用 TEP,可以执行以下命令:bash-2.05b# /usr/sbin/trustchk -p tep=on

一旦启用了 TEP,则应该显示类似如下的内容:bash-2.05b# /usr/sbin/trustchk -p tep
TEP=ON
TEP=/usr/bin:/usr/sbin:/etc:/bin:/sbin:/sbin/helpers/jfs2:/usr/lib/instl:/usr/ccs/bin

可信库路径(Trusted Library Path,TLP)指定可信目录路径的列表。只有在 TLP 中的库才加载到内存中用于执行。可以使用如下命令检查 TLP 的状态:bash-2.05b# /usr/sbin/trustchk -p tlp
TLP=OFF
TLP=/usr/lib:/usr/ccs/lib:/lib:/var/lib

要启用 TLP,可以执行以下命令:bash-2.05b# /usr/sbin/trustchk -p tep=on

启用 TLP 以后,应该显示类似如下的状态:bash-2.05b# /usr/sbin/trustchk -p tlp
TLP=ON
TLP=/usr/lib:/usr/ccs/lib:/lib:/var/lib

可信执行是如何工作的?

图 1. 可信命令的实时可信执行概述

了解 AIX V6 中的可信执行环境

可以在可信命令的实时执行环境中运用可信执行。每当在命令提示符下输入(或由某个脚本调用)某个可信命令,首先将由操作系统计算散列值(请参见图中的 2),并从 TSD 中提取可信命令的实际散列值 (3)。仅当两个散列值匹配时,才允许执行该命令。

结束语

可信执行环境是 IBM AIX V6.1 中提供的期待已久的安全功能。本文介绍了该功能的基本要素,涵盖基本的功能和示例。该功能使 AIX 系统管理员可以训练他们的安全技能以进一步利用该功能。

Tags:了解 AIX 可信

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接