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

了解如何配置和使用 IBM AIX 6.1 的可信执行环境以确保系统完整性

本文介绍 IBM® AIX® V6.1 的高级安全功能,即可信执行环境(trusted execution environment)。本文旨在为 AIX 系统管理员提供有关如何在运行时以及待机时确保系统完整性的介绍。作为了解可信执行环境的起点,本文还将介绍最常用的命令和示例。

Vipin Rathor, 系统软件工程师, IBM

http://www.ibm.com/developerworks/i/p-vrathor.jpgVipin Rathor 已经在 IBM India Software Lab 工作了两年,目前主要从事 IBM Network Authentication Service (IBM Kerberos) 的支持和开发活动。他的研究领域主要包括 Kerberos 和 LDAP 集成、网络安全、身份验证协议和 PKI。


developerWorks 投稿作者

Sandeep Singh, 系统软件工程师, IBM

http://www.ibm.com/developerworks/i/p-ssingh.jpgSandeep Singh 在 IBM India Software Lab 工作。他目前正在从事 IBM 网络身份验证服务第三级支持和开发活动。他感兴趣的领域包括网络安全和 UNIX 内幕。他拥有印度浦那大学的学士学位。



2008 年 9 月 11 日

您可以访问“AIX 6 资源中心”了解更多的 AIX 6 的新特性:

引言

在系统安全性方面,内部威胁被认为比外部威胁具有更高的严重度。系统中存在需要 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

可信执行环境的功能

/usr/sbin/trustchk 命令用于管理可信签名数据库(Trusted Signature Database,TSD)和可信执行功能。有关更多信息,请参阅该命令的手册页。

  1. 可信签名数据库 (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 选项),该数据库可以保存在某个安全的位置。

  2. 审核 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#
  3. 通过配置安全策略来执行运行时完整性检查

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

    1. 在二进制加载期间,系统加载程序调用 TE 子系统,并使用 SHA-256 散列算法来计算散列值。
    2. 现在对于这同一个二进制,将提取 TSD 中存储的散列值并与运行时计算的散列值进行匹配。
    3. 如果两个值匹配,则允许该二进制执行。
    4. 如果两个值不匹配,则意味着该文件已被篡改或更改。在这种情况下,将根据所配置的策略来采取行动。

    运行时完整性检查是使用 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#

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

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

    除了可信命令以外,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. 可信命令的实时可信执行概述
可信命令的实时可信执行概述

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

结束语

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

参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • 请查看下列 IBM 红皮书:
    The AIX 6 Advanced Security Features, Introduction and Configuration Guide”:强调并解释了 AIX 6.1 的增强安全功能。
    Elements of Security:AIX 4.1”:获取有关 AIX 的可信计算基础功能的更多信息。
  • developerWorks 技术事件和网络广播:了解最新的 developerWorks 技术事件和网络广播。
  • AIX:访问此 AIX 相关技术信息的协作环境。
  • Podcast:收听 Podcast 并与 IBM 技术专家保持同步。

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=337341
ArticleTitle=了解 AIX V6 中的可信执行环境
publish-date=09112008