验证系统完整性:AIX 6.1 和 Trusted Execution 帮助确保系统安全
2010-02-24 00:00:00 来源:WEB开发网保障系统完整性
系统完整性涉及以一种不可修改的形式捕获系统的良好状态,并将其用作定期检查系统状态的参照。一个良好的系统完整性工具的要求可以列示如下:
完整性测量:向管理员提供一些用于检测系统更改的工具。这些更改通过比较当前状态和一个已知的先前状态(也称为基线)确定。
锁定:向管理员提供一些方法来锁定作为基线建立的信息。这种锁定将阻止入侵者修改系统状态并重新创建基线,导致管理员此后不能检测到更改。
监控和保护:提供一种方法来监控可执行文件、库、内核扩展等的执行。
AIX 6.1 引入的一个关键安全特性是 Trusted Execution (TE)。TE 满足上述所有要求,并提供离线和运行时控制机制来保护系统安全。
TE 架构建立基线
AIX 6.1 对 AIX OS 中的重要系统文件提供由 IBM 签署的签名。这些签名被填充到一个名为 Trusted Signature Database (TSD) 的数据库中。这个 TSD 形成基线的一个组件。在一个完全安装的 AIX 系统上,TSD 针对多数 AIX 文件填充,并做好准备以用于完整性检查。管理员在构建他们的生产系统时,能够在 TSD 中为他们计划部署的自定义工具和任何商业中间件或应用程序添加条目。生产级 TSD 建立后,它就能用作环境中所有相似系统的参考基线。参见图 1。
图 1.完整性量度
AIX 上的 TE 功能和策略通过一个名为 trustchk 的命令行接口支持。这个命令管理 TE 策略和 TSD 数据库,它还能执行离线系统完整性验证并生成一个报告。例如,要获取一个系统安全性报告,您可以运行命令:trustchk -n ALL。
任何完整性验证要获得成功,都需要为系统建立一个清晰的基线。有一点很重要:基线应该针对生产级服务器建立,此后,对基线的任何更改都应该受到严格控制。默认情况下,AIX 将与基线相关的信息存储在这个 TSD 数据库文件中: /etc/security/tsd/tsd.dat。
TE 对服务器基线信息的建立和管理提供很好的支持。
对于对系统操作很关键并因此需要受到监控的各种系统文件,AIX 自带 SHA256 散列表和签名。这些散列表/签名(和其他文件安全属性)以及签名验证需要的签名和对应的数字证书将在各种包的安装期间自动包含并捕获到 TSD 中。
trustchk 能够向 TSD 添加/修改/删除条目。例如,如果管理员需要监控几个与某个应用程序或中间件相关的文件,那么管理员可以在 TSD 中插入一些条目。与此同时,管理员能够提供他们自己的私有 “密匙/证书” 对来签署与应用程序/中间件相关的散列表。
管理员可以选择锁定一个生产系统中的基线文件,这意味着任何人(包括根用户)都不能修改该系统中的基线。
TSD 数据库拥有一个有限的条目集,这些条目根据每个文件的安全属性添加。例如,如果一个文件拥有 SUID 位集(bit set),那么它将拥有一个 TSD 条目。管理员必须确定一个他们希望在 TSD 中拥有的确切条目集。例如,TSD 可以配置为只允许一小组 DB2 应用程序在系统上运行。
AIX 为 ISV 提供一个框架,用于在他们的软件包中包含完整性信息。这种经过适当格式化的完整性信息可以通过 AIX 上的 installp 命令识别,完整性信息将自动填充到基线数据库中。
使用自定义密匙
TE 要求提供私有密匙和对应的证书,以便为 tsd.dat 基线文件中的条目生成签名。默认的 AIX 条目附带了 IBM 密匙已经生成的签名。对于新条目(特别是第三方应用程序)的签署,您也可以使用自己的密匙,这些密匙通过使用 OpenSSL 工具生成,具体步骤如下:
1. 安装 openssl(OpenSSL 是 AIX 扩展包的一部分)
2. 创建一个私有密匙(密匙将以 PEM 格式创建):openssl genrsa -out TSDprivkey.pem 2048
3. 以 DER 格式创建对应的证书(有效期为 3650 天/10 年):openssl req -new -x509 -key TSDprivkey.pem -outform DER -out TSDcertificate.der -days 3650
4. 将私有密匙格式从 PEM 转化为 DER:openssl pkcs8 -inform PEM -in TSDprivkey.pem -topk8 -nocrypt -outform DER -out TSDprivkey.der
5. 调用 trustchk 为文件 /usr/bin/yourfile 包含一个条目:trustchk -s TSDprivkey.der -v TSDcertificate.der -a /usr/bin/yourfile
通过锁定保护数据库
成功实现完整性测量的关键是防止任何入侵者修改基线本身。操作方法有很多,最简单的方法是使用一次性写入的媒介(如 CD R/DVD R)来存储 TSD 并使用这个 CD/DVD 作为定期检查完整性的参照。另一种防止 TSD 被修改的方法是在 AIX 6.1 TE 中使用锁定策略,这将禁止对 TSD 进行任何写操作。
有一点很关键:TSD 应该在站点/机构级别上进行管理和维护。在一个生产系统上创建基线,然后在任何地方使用该基线进行验证。如果一个恶意用户闯入根帐户,那么他就能够关闭 TE 策略并修改系统配置,甚至还能修改 TSD 数据库内容。因此,TE 提供锁定功能来阻止系统遭受这样的损害(见表 1)。
表 1.TE 锁定策略
TSD_LOCK 值:ON/OFF | 保护 TSD 数据库本身。如果值为 ON,则禁止对 /etc/security/tsd/tsd.dat 进行任何修改。 |
TSD_FILES_LOCK 值:ON/OFF | 防止所有可信文件受到修改。禁止对可信文件执行 unlink、rename、write 或 mount 操作。 |
LOCK_KERN_POLICIES 值:ON/OFF | 禁止关闭其他 TE 策略。一旦启用这个策略,则其他任何策略都不能设置为 OFF。但是,它们总是可以被设置为 ON。这个策略基于这样的假设:安全总是可以被扩展,但绝不能被损害。如果这个策略为 ON 但另一个策略必须关闭,那么首先关闭 LOCK_KERN_POLICIES 并重新启动系统,这样其他策略就可以被修改了。 |
TE 监控
TE 在恶意程序能够损害系统之前监控并终止它们,如图 2 所示。TE 将被配置为监控内核扩展、程序、shell 脚本和库的加载。当这些文件实际加载时,TE 使用 TSD 中的基线散列表来验证这些文件的散列值。如果验证失败,则文件执行将被终止。TE 还在加载期间执行所有者、组和模式等其他属性的运行时验证。参见表 2 了解 TE 运行时验证策略。
图 2.TE 加载过程
表 2. TE 运行时验证策略
TE 值:ON/OFF | 启用/禁用 TE。所有策略只有在 TE 选项设置为 ON 时才能激活。 |
CHKEXEC 值:ON/OFF | 确保在加载期间检查可信库的完整性。 |
CHKSHLIB 值:ON/OFF | 在可信共享库加载到内存以便执行之前检查其完整性。 |
CHKSCRIPT 值:ON/OFF | 在可信 shell 脚本加载到内存之前检查其完整性。 |
CHKKERNEXT 值:ON/OFF | 在内核扩展加载到内存之前检查其完整性。 |
STOP_ON_CHKFAIL 值:ON/OFF | 在完整性检查失败时终止可信文件的加载。这个策略与 CHK* 策略联合使用,例如,如果 CHKEXEC=ON 且 STOP_ON_CHKFAIL=ON,则完整性检查失败的任何可执行文件将不会被加载。 |
可修改的文件:良好的系统基线不仅包含与系统相关的可执行文件、内核扩展和库,还包含对正确的系统操作至关重要的其他重要文件。包括多个安全设置在内的大量系统设置将被捕获到配置文件中。与可执行文件等不同,这些配置文件可以在系统生命周期中受到更改。例如,/etc/passwd 文件就是用于捕获用户配置的重要系统文件。尽管监控这个文件很重要,但监控的项目不能包括文件大小和散列值等因素。/etc/passwd 这样的文件称为系统中的可修改文件(volatile file)。完整性验证需要监控这类文件的所有者和权限位(permission bit)等文件属性,而不是监控文件大小、散列值或签名。AIX 在 TSD 中包含了大量 /etc/passwd 之类的系统文件,并将它们标记为可修改文件。
特洛伊检测:trustchk 命令支持扫描 AIX 6 TL4 中的特洛伊木马。当 trustchk 通过适当的选项调用时,它将扫描特定的目标文件系统中的所有文件,寻找不包含在 TSD 中且从特权提升角度看比较可疑的任何程序。要进行运行时监控,可以通过将 STOP_UNTRUSTED 策略的值设置为TROJAN 来设置这个选项(参见表 3)。
表 3.TE Stop_Untrusted 文件策略
STOP_UNTRUSTED 值:ON/OFF/TROJAN | 终止不属于 TSD 的文件的加载。因此,这个策略与 CHK* 策略联合使用。例如,如果 CHKSCRIPT=ON 且 STOP_UNTRUSTED=ON,则那些不属于 TSD 的脚本将不会执行。TROJAN:停止加载不属于 TSD 且满足前面 “特洛伊检测” 小节中描述的特征的文件。 |
TE 路径:TE 可以用于定义一组路径,该路径中包含可以运行的可信二进制文件。如果一个二进制文件即将加载,TE 将检查该文件是否属于已定义的Trusted Paths。如果不是,则 TE 将阻止其执行,参见表 4。
表 4.TEP 和 TLP 策略
TEP 值:ON/OFF | 规定只有来自 TE Path 中列示的目录的二进制文件可以被加载。TE path 是一个用逗号分隔的目录路径列表。 |
TLP 值:ON/OFF | 规定只有 Trusted Library Path (TLP) 中包含的库才能被加载。与 TE Path 一样,您可以使用这个策略来设置 TLP 值,启用它或禁用它。TLP 是以逗号分隔的目录路径。 |
改进 Trusted Computing Base
AIX 此前通过 Trusted Computing Base (TCB) 来支持完整性监控。一个 TCB 组件就是一个 tcbck 程序,它主要支持完整性验证。要使用 tcbck 程序,客户需要在安装期间选择 TCB 安装选项。这将导致对各种 AIX 文件执行 checksums 计算,计算结果作为与 TCB 相关的数据库的一部分(名为 sysck.cfg)捕获。完整性测量通过使用 checksums 完成,这不能提供高程度的修改防护。TE 不需要单独的安装选项。TE 的相关数据库 TSD 在各种包的安装过程中创建,不会向安装添加明显的开销。另外,TE 基于 SHA256 散列表和相关的签名。而且,TE 还提供许多更积极的监控特性。对于系统管理员而言,trustchk 用起来更加便利,它将替代 tcbck 成为总体 TCB 特性的一部分。表 5 列示了 tcbck 和 trustchk 之间的一些关键区别。
表 5. TE 和 TCB 的比较
TCB | TE |
只支持离线完整性验证 | - 支持离线和运行时完整性验证 - Trusted Paths - 锁定模式和其他策略 |
验证 checksums | 验证数字签名和 SHA256 散列表 |
tcbck | trustchk (支持 tcbck 的多数特性) |
/etc/security/sysck.cfg | /etc/security/tsd/tsd.dat |
LDAP 上的 TE 数据库和策略
TE 支持在一个中央轻量级目录访问协议(Lightweight Directory-Access Protocol,LDAP)上托管 TSD 数据库和策略。这个特性将在 AIX 6 TL4 中受到支持。一个 LDAP 服务器将托管多个客户机的 TSD 数据库和策略文件,这有助于实现中央管理。这些中央策略可以在离线验证期间用作主副本。将有两个版本的 TSD 和 TE 策略文件,一个用于本地(/etc/security/tsd/),另一个用于 LDAP(/etc/security/tsd/ldap)。/etc/nscontrol.conf 文件可以用于指定 LDAP 版本;在某些操作(比如添加/修改/验证属性)的执行期间,trustchk 命令必须引用 LDAP 版本号。这样,系统管理员只需更改 LDAP 上的策略文件就可以在不同的客户机上执行 TE 策略。
TE 使安全问题更简单
如您所见,TE 满足一个良好的系统安全工具的所有要求;它提供完整性测量、锁定、监控和保护。在一个安全的环境中,TE 向系统管理员提供了巨大的灵活性,允许他们针对特定的应用程序环境配置系统。
更多精彩
赞助商链接