6


审计系统安全性

本章介绍如何使用 Solaris Security Toolkit 软件审计(验证)系统的安全性。使用本章中的信息和过程在加强安全性运行操作之后维护已创建的安全性配置文件。对于经过部署的系统,在加强安全性之前需要使用本章中的信息对安全性进行评估。



注 - 本章和本书中使用的术语审计 是 Solaris Security Toolkit 软件对安全性状态的自动化验证过程,方法是与预先定义的安全性配置文件相比较。本出版物中使用此术语,并不表示在使用审计选项后便可保证系统的绝对安全。



本章包含以下主题:


维护安全性

维护安全性是一个进行中的过程,必须定期检查及访问。维护系统安全性需要警惕性,因为任何系统缺省的安全性配置会随着时间的逝去而愈加趋向公开。(有关维护安全性的更多信息,请参阅维护系统安全。)

基于用户的经验和要求,我们为 Solaris Security Toolkit 软件开发了一种自动方法,通过确定与指定的安全性配置文件的兼容水平来审计系统安全性状态。



注 - 本方法仅能用于使用 jass-execute -a 命令的独立模式下,而不能在 JumpStart 安装过程中使用。



定期审计系统的安全性状态,既可以通过手工方式也可以通过自动方式(例如,通过cron(时钟守护进程)作业或 rc 脚本)。例如,在加强一个全新安装系统的安全性之后,请在五天后执行 Solaris Security Toolkit 软件审计命令 (jass-execute -a driver-name) 以确定系统安全性是否已更改(与安全性配置文件所定义的状态不同)。

审计安全性的频繁程度取决于环境的紧急程度与安全策略。有些用户每小时、每天或者每月进行一次审计运行操作。而有些用户每小时运行一次最小扫描(仅检查有限数量),每天运行一次完整扫描(进行全部检查)。

审计重要组件以维护已部署系统的安全性状态。如果不定期审计安全性状态,则由于平均信息量或者修改会不知不觉或恶意地更改所需的安全性状态,导致配置随之变化。如果不进行定期检查,则不会发现这些更改并采取相应的纠正措施。这将导致系统的安全性降低,更容易受攻击。

除了定期审计之外,在升级、安装修补程序与其他的重要系统配置发生更改后也需要进行审计。


执行加强操作之前检查安全性

在某些情况下,会发现在加强已部署系统的安全性之前 检查其安全性状态是有用的。例如,如果接管之前由他人管理的已部署系统,则应检测系统以了解其状态,如果必要的话可以使它们与其他系统所使用的相同安全性配置文件相兼容。


定制安全性审计

审计选项为评估系统状态提供了一种高度灵活与可扩展的机制。像加强安全性脚本一样,也可以定制 audit 脚本的操作。例如,可以定制环境变量、定制框架与助手功能、添加新的检查和为审计框架添加功能。

大部分用户会发现标准的或产品专用的 audit 脚本可以作为自己定制 audit 脚本的模板。对于这种情形,可以通过驱动程序、 finish 脚本、环境变量与文件模板定制 audit 脚本。只需很少的工作即可完成这些定制更改,且无需修改代码。进行审计时,Solaris Security Toolkit 软件可自动了解加强安全性运行操作中所做的任何更改。

有时候,需要添加 Solaris Security Toolkit 软件未提供的检查或功能。对于这种情形,请向 audit 脚本中添加检查或者新的功能。(您或许会在相应的 finish 脚本中做相关更改。)在某些情况下,可能需要修改代码。在添加和修改代码时需要格外慎重以避免引入错误及故障。

有些用户需要创建全新所有权的或站点专用的驱动程序和脚本。使用模板和样例作为编写新驱动程序和脚本代码的准则。请注意,使用审计选项时 Solaris Security Toolkit 软件无法 自动了解站点专用的驱动程序、 finish 脚本、变量与功能。例如,如果添加了一个名为 abcc-nj-secure.driver 的站点专用驱动程序,且该驱动程序包含站点专用的 finish 脚本 abcc-nj-install-foo.fin,则需要创建一个站点专用的 audit 脚本 abcc-nj-install-foo.aud。同样地,如果仅启动 audit 脚本,则应当创建与之匹配的 finish 脚本。

要定制或创建新的驱动程序、脚本、变量和功能,请参阅《Solaris Security Toolkit 4.1 Reference Manual》

例如,若要添加一个 Solaris Security Toolkit 软件没有安装的修补程序。则既可以扩展标准的或者产品专用的模板,也可以创建自己的模板。创建自己的模板时,请创建用来添加修补程序的 finish 脚本,然后创建相应的 audit 脚本以检查修补程序的安装。


审计安全性的准备工作

为使用本章的指导和准则,您需要一个安全性配置文件。有关开发与实现安全性配置文件的信息,请参阅第 2 章

许多安全性配置文件模板包含在 Solaris Security Toolkit 附带的驱动程序内。正如本书前面所述,缺省的安全性配置文件和由驱动程序提供的更改很可能并不适用于您的系统。通常情况下,这些驱动程序实现的安全性配置文件是安全性的“水印上限”标记。意思是,它们能够禁用不需要的服务并启用缺省情况下禁用的可选安全性功能。

许多 Solaris Security Toolkit 软件用户发现标准的和产品专用的安全性配置文件模板适用于他们的环境。如果您遇到这种情形,请确定与安全性状态最接近的安全性配置文件,并将其用于评估和加强系统的安全性。

为您的环境检查并定制安全性配置文件或者开发新的文件。定制安全性配置文件的技巧和指导在《Solaris Security Toolkit 4.1 Reference Manual》中进行了介绍。此方法提供了为您的组织定制的安全性状态,并且可以将安全性评估过程中返回的故障错误减至最少。例如,如果需要启用 Telnet,则可以定制安全性配置文件,使其在安全性评估过程中不会将 Telnet 视为攻击。例如,一个使用 Telnet 和 Kerbero(用于验证和加密)的站点不会将使用 Telnet 视为攻击。


使用选项和控制审计输出

本节介绍了执行审计运行操作的可用选项和控制输出的选项。本节包含以下主题:

命令行选项

根据安全性配置文件审计系统的用法实例:


# jass-execute -a driver [ -V [0-4]] [ -q | -o output-file ] [ -m email-address ]

 

当执行 Solaris Security Toolkit 软件审计命令时,可以使用表 6-1 中所列的以下选项。


表 6-1 将命令行选项与审计命令结合使用

选项

说明

-a

确定系统与其安全性配置文件是否相符。

-h

显示 jass-execute 帮助消息,提供了可用选项的概述。

-m

将输出发送到一个电子邮件地址。

-o

定向输出到一个文件。

-q

禁止将输出显示到屏幕上。又称为静止选项。

-V

指定审计运行操作的冗长级别。


 

有关 jass-execute -a 命令可用选项的详细信息,请参阅以下几节:

显示帮助选项

-h 选项显示 jass-execute 帮助消息,提供了可用选项的概述。

-h 选项产生的输出与以下内容相似:


代码示例 6-1 -h 选项输出样例

# ./jass-execute -h
 
To apply this Toolkit to a system, using the syntax:
  jass-execute [-r root_directory -p os_version ]
  [ -q | -o output_file ] [ -m e-mail_address ]
  [ -V [3|4] ] [ -d ] driver
 
To undo a previous application of the Toolkit from a system:
  jass-execute -u [ -b | -f | -k ] [ -q | -o output_file ]
     [ -m e-mail_address ] [ -V [3|4] ]
 
To audit a system against a pre-defined profile:
  jass-execute -a driver [ -V [0-4] ] [ -q | -o output_file ]
     [ -m e-mail_address ]
 
To display the history of Toolkit applications on a system:
  jass-execute -H
 
To display the last application of the Toolkit on a system:
  jass-execute -l
 
To display this help message:
  jass-execute -h
  jass-execute -?
 
To display version information for this program:
  jass-execute -v 

 

电子邮件通知选项

-m email-address 选项提供了一种机制,通过该机制,Solaris Security Toolkit 软件的审计运行操作完成后可使用电子邮件将输出自动发送出去。使用其他选项除了可在系统上生成日志外,还可生成电子邮件报告。

使用电子邮件选项调用 sunfire_15k_sc-config.driver 的 Solaris Security Toolkit 运行操作类似于以下内容:


# ./jass-execute -m root -a sunfire_15k_sc-config.driver 
[...]

 

输出文件选项

-o output-file 选项将 jass-execute 运行操作的控制台输出重新定向到一个单独的文件 (output-file)。

此选项对于JASS_REPOSITORY 目录内的日志无效。此选项可用于连接缓慢的终端,因为 Solaris Security Toolkit 运行操作会产生大量的输出。

此选项可与 -d-u-a 选项一起使用。

-o 选项产生的输出与以下内容相似:


代码示例 6-2 -o 选项输出样例

# ./jass-execute -o jass-output.txt -a secure.driver 
[NOTE] Executing driver, secure.driver
[NOTE] Recording output to jass-output.txt
#

 

静止选项

-q 选项禁止 Solaris Security Toolkit软件在执行加强安全性运行操作时输出到标准输入输出 (stdio) 流。

此选项不影响 JASS_REPOSITORY 目录中的日志。与 -o 选项相似,此选项特别有助于通过 cron(时钟守护进程)作业或在较慢的网络连接上运行 Solaris Security Toolkit 软件。

此选项可与 -d-u-a 选项一起使用。

-q 选项产生的输出与以下内容相似:


代码示例 6-3 -q 选项输出样例

# ./jass-execute -q -a secure.driver
[NOTE] Executing driver, secure.driver

 

冗长选项

-V 选项指定了审计运行操作的冗长级别。此选项仅可用于审计。冗长级别为显示审计运行操作结果提供了高度灵活的方式。例如,如果要审计 100 台计算机,您需要将每台计算机的输出限制到单独一行,以便容易确定哪些计算机通过审计而哪些计算机没有通过审计。然后对于没有通过审计的计算机,可能需要进行一个能够提供扩展输出的审计以将注意力集中到有问题的区域。

-V 选项控制五个冗长级别(0 到 4)。每个递增的级别都提供了附加细节,可用它来更加完整地了解哪些检查通过而哪些检查没有通过。表 6-2 介绍了冗长级别。


表 6-2 审计冗长级别

级别

输出

0

单独行,表明通过或者没有通过审计。

1

对于每个脚本,单独一行表明通过或者没有通过审计。在所有脚本行下面有一个重要的总分数行。

2

对于每个脚本,提供了所有检查的结果。

3

提供完整输出的多行,包括标题与标题消息。

4

多行(所有级别 3 中提供的数据)加上 logDebug 日志功能产生的所有项。本级别用于调试。


 

注 - jass-execute -V 命令缺省的冗长级别为 3。



有关冗长级别的完整说明,请参阅《Solaris Security Toolkit 4.1 Reference Manual》

标题与消息输出

可以配置 Solaris Security Toolkit 审计选项以报告或者忽略标题和消息。 JASS_LOG_BANNER 变量不能用于冗长级别 0-2。这些输出选项适用于冗长级别 3 和 4。例如,您可能要从输出中忽略掉通过的消息(JASS_LOG_SUCCESS 变量)以便报告并且仅将注意力集中到没有通过的消息上(JASS_LOG_FAILURE 变量)。

表 6-3 列出了能够通过日志变量控制的标题和消息。(有关日志变量的详细信息,请参阅《Solaris Security Toolkit 4.1 Reference Manual》。) 如果日志变量设置为 0,则不会产生这种类型消息的任何输出。相反,如果日志变量设置为 1,那么会显示出消息。每个变量缺省的操作是显示输出。表 6-3 介绍了日志变量。


表 6-3 在审计输出中显示标题和消息

日志变量

日志前缀

说明

JASS_LOG_BANNER

所有标题输出

此参数控制标题消息的显示。这些消息周围通常都是由等号 ("=") 或者破折号 ('-') 组成的分隔符。

JASS_LOG_ERROR

[ERR]

此参数控制错误消息的显示。如果设置为 0,则不会产生任何错误消息。

JASS_LOG_FAILURE

[FAIL]

此参数控制失败消息的显示。如果设置为 0,则不会产生任何失败消息。

JASS_LOG_NOTICE

[NOTE]

此参数控制通知消息的显示。如果设置为 0,则不会产生任何通知消息。

JASS_LOG_SUCCESS

[PASS]

此参数控制成功或者通过状态消息的显示。如果设置为 0,则不会产生任何成功消息。

JASS_LOG_WARNING

[WARN]

此参数控制警告消息的显示。如果设置为 0,则不会产生任何警告消息。


 

仅当需要查看特定消息时使用这些选项是非常有用的。通过设置这些选项,能够最小化输出,并仍然将注意力集中到您认为重要的地方。例如,除了 JASS_LOG_FAILURE(保留其缺省值 1)将所有登录变量设置为 0,运行 logFailure 功能只会产生有关失败的审计报告。


代码示例 6-4 仅报告审计失败的输出样例

# JASS_LOG_FAILURE=1
# export JASS_LOG_FAILURE
[setting of other parameters to 0 omitted]
# ./jass-execute -a secure.driver -V 2
update-at-deny        [FAIL] User test is not listed in 
   /etc/cron.d/at.deny.
update-at-deny        [FAIL] Audit Check Total : 1 Error(s)
update-inetd-conf     [FAIL] Service ftp is enabled in 
   /etc/inet/inetd.conf.
update-inetd-conf     [FAIL] Service telnet is enabled in 
   /etc/inet/inetd.conf.
update-inetd-conf     [FAIL] Service rstatd is enabled in 
   /etc/inet/inetd.conf.
update-inetd-conf     [FAIL] Audit Check Total : 3 Error(s)

 

主机名称、脚本名称和时间戳输出

可以配置 Solaris Security Toolkit 审计选项以包含主机名称、脚本名称和冗长级别为 0 - 2 的时间戳信息。例如,如果有许多待审计的计算机,可能希望能够通过主机名称、脚本名称或者时间戳对输出进行排序。表 6-4 列出了变量。


表 6-4 显示主机名称、脚本名称和时间戳审计输出

变量名称

变量说明

JASS_DISPLAY_HOSTNAME

将此参数设置为 1 会使 Solaris Security Toolkit 软件将每个日志条目附加在系统的主机名称之前。此信息基于JASS_HOSTNAME 参数。缺省情况下,该参数为空,因此 Toolkit 不会显示此信息。

JASS_DISPLAY_SCRIPTNAME

缺省情况下,此参数值设置为 1,因此 Solaris Security Toolkit 软件会将每个日志附加在 audit 脚本名称之前。将该参数设定为其他任何值都会使 Toolkit 不显示此信息。

JASS_DISPLAY_TIMESTAMP

将该参数设置为 1 使 Solaris Security Toolkit 软件将每个日志附加在与审计运行操作相关的时间戳之前。此信息基于JASS_TIMESTAMP 参数。缺省情况下,该参数为空,因此软件不会显示此信息。


 

通过配置 Solaris Security Toolkit 软件来附加主机、脚本和时间戳信息,可以将单个系统或者一组系统中的许多运行操作结合起来并按照关键数据对它们进行排序。可以使用此信息查找跨越几个系统的或者是在配置过程中有症状的问题。例如,以这种方式使用信息,管理员会能够辨别使用了给定进程的每个系统版本是否总是具有同样的故障检查。

例如,通过将 JASS_DISPLAY_TIMESTAMP 参数设置为 1 并将 JASS_DISPLAY_SCRIPTNAME 值设置为 0,会产生与以下相似的输出。


代码示例 6-5 审计日志条目的输出样例

# JASS_DISPLAY_SCRIPTNAME=0
# JASS_DISPLAY_TIMESTAMP=1
# export JASS_DISPLAY_SCRIPTNAME JASS_DISPLAY_TIMESTAMP
# ./jass-execute -a secure.driver -V 2
20030101233525 [FAIL] User test is not listed in 
   /etc/cron.d/at.deny.
20030101233525 [FAIL] Audit Check Total : 1 Error(s)
20030101233525 [FAIL] Service ftp is enabled in 
   /etc/inet/inetd.conf.
20030101233525 [FAIL] Service telnet is enabled in 
   /etc/inet/inetd.conf.
20030101233525 [FAIL] Service rstatd is enabled in 
   /etc/inet/inetd.conf.
20030101233525 [FAIL] Audit Check Total : 3 Error(s)

 


进行安全性审计

在系统上定期进行安全性评估可提供一个基准,以判断安全性与所执行的安全性配置文件的匹配接近程度。安全性评估最通常的情形是在加强一个新安装的系统的安全性之后,作为一项安全性维护任务进行。安全评估选项可使您简化操作(对驱动程序使用和系统一致的安全性加强操作)。而现在可使用 -a 选项与加强安全性过程中执行的安全性配置文件相比较以检查当前的状态。该设计消除了复杂性并提供了灵活性。例如,当升级安全性配置文件时,后续的安全性评估会使用更新的安全性配置文件。

在另外的可能情形中,可能应该对经过部署的系统安全性负责。在加强它们的安全性之前,需要进行安全性评估。在这种情形中,需要定义自己的安全性配置文件,定制一个 Solaris Security Toolkit 安全性配置文件模板或者按原样使用其中一个安全性配置文件模板。


procedure icon  进行安全性审计

在进行审计之前,需要定义或者选择一个安全性配置文件。有关更多信息,请参阅审计安全性的准备工作



caution icon

注意 - 对已部署但尚未加强安全性的系统进行安全性评估时,请首先对计算机进行备份并重新引导以验证计算机处于一个已知、工作且一致的配置下。进行安全性评估之前,预备的重新引导过程中所遇的任何错误与警告都应得到更正并进行记录。



1. 选择要使用的安全性配置文件(加强安全性驱动程序):

例如,secure.driver

例如,secure.driver 或者 abccorp-secure.driver

有关可用驱动程序的完整且最新的列表,请从以下网站下载 Solaris Security Toolkit 软件的最新版本。

http://www.sun.com/security/jass

有关标准的和产品专用的驱动程序的信息,请参阅《Solaris Security Toolkit 4.1 Reference Manual》。有关驱动程序的最新列表,请参见 Drivers 目录。

2. 确定所需的命令行选项和控制输出的方式。

请参阅使用选项和控制审计输出

3. 输入 jass-execute -a 命令、安全性配置文件名称和所需的选项。

以下是一个使用 sunfire_15k_sc-secure.driver 的审计运行操作样例。


代码示例 6-6 审计运行操作的输出样例

# ./jass-execute -a sunfire_15k_sc-secure.driver
[NOTE] Executing driver, sunfire_15k_sc-secure.driver
 
[...]
 
================================================================
sunfire_15k_sc-secure.driver: Audit script: enable-rfc1948.aud
================================================================
 
#---------------------------------------------------------------
# RFC 1948 Sequence Number Generation
# 
# Rationale for Audit:
# 
# The purpose of this script is to audit that the system is
# configured and is in fact using RFC 1948 for its TCP sequence
# number generation algorithm (unique-per-connection ID). This is
# configured by setting the 'TCP_STRONG_ISS' parameter to '2' in
# the /etc/default/inetinit file.
#
# Determination of Compliance:
#
[...]
#---------------------------------------------------------------
 
[PASS] TCP_STRONG_ISS is set to '2' in /etc/default/inetinit.
[PASS] System is running with tcp_strong_iss=2.
 
# The following is the vulnerability total for this audit script.
 
[PASS] Audit Check Total : 0 Error(s)
 
================================================================
 
# The following is the vulnerability total for this driver profile.
 
[PASS] Driver Total : 0 Error(s)
 
================================================================
sunfire_15k_sc-secure.driver: Driver finished.
================================================================
 
[PASS] Grand Total : 0 Error(s)

 

审计运行操作启动后,Solaris Security Toolkit 软件从 JASS_HOME_DIR/Audit 目录中访问文件。虽然在 JASS_HOME_DIR/AuditJASS_HOME_DIR/Finish 目录下的文件具有同样的基本文件名,但它们有不同的文件名后缀。通过将后缀从 .fin 更改为 .auddriver.run 脚本将 JASS_SCRIPTS 变量定义的 finish 脚本自动转换为 audit 脚本。

审计运行操作启动并初始化了 Solaris Security Toolkit 软件的状态。运行中所访问的每个驱动程序对所有文件模板与 audit 脚本的状态进行评估。每个检查会产生一个成功或者失败的结果,分别由攻击值 0 或者非 0 来代表。在大多数情况下,失败由数字 1 代表。每个运行脚本都根据脚本中包含的每次检查的攻击值的总和来产生总的安全性分数。此外,由每个驱动程序引起的攻击值总和会在每一个驱动程序评估完成时显示。运行结束时会显示重要的所有分数总和。

安全性评估选项提供了一个在评估运行操作启动后对系统状态的概述。Solaris Security Toolkit 软件通过检查配置文件来检查已存储的系统状态,并通过检查进程表信息、设备驱动程序信息等来检查正在运行的系统状态。Solaris Security Toolkit 软件检查每个文件及服务的存在性,并且检查与服务相关的软件是否已经安装、配置、启用和运行。 此方法为系统当前状态生成了一个准确的快照。