4.4. 通过 AppArmor 限制特权

许多安全漏洞是可信赖程序中的错误产生的。可信赖程序运行时具有某些攻击者想获取的特权,如果程序中存在的错误导致攻击者得到了此特权,则程序丧失了可信赖性。

NovellŪ AppArmor 是一套应用程序安全解决方案,专门设计用于为可疑程序提供最低的特权限制。AppArmor 允许管理员指定程序可执行活动的域,方法是为该应用程序构建一个安全配置文件文件该程序可访问的文件列表和可执行的操作。

计算机系统的有效强化要求您将可调解特权的程序数目降至最低,然后尽可能保护程序的安全。通过 Novell AppArmor,您只需对环境中易受攻击的程序构建配置文件,这大大减轻了对计算机进行强化所需要的工作量。AppArmor 配置文件强制执行策略,以确保程序不会执行预期操作之外的任何操作。

管理员只需注意易受攻击的应用程序并生成它们的配置文件。这样系统的强化可归结为构建和维护 AppArmor 配置文件集并监视 AppArmor 报告功能记录的策略违反或异常。

构建 AppArmor 配置文件以限制应用程序的操作非常简单直观。AppArmor 附带一些工具,可协助您创建配置文件。AppArmor 不需要您编程或处理脚本。需要管理员做的唯一任务是为每个需要强化的应用程序确定一个最严格访问和执行权限的策略。

只有在软件配置或所需的活动范围发生变化时才有必要更新或修改应用程序配置文件。AppArmor 提供直观的工具来处理配置文件的更新或修改。

用户完全不会觉察到 AppArmor。它在“后台”运行,无需任何用户交互操作。AppArmor 不会显著影响系统性能。如果应用程序的某些活动没有包含在 AppArmor 配置文件中,或者应用程序的某些活动被 AppArmor 阻止,管理员必须调整此应用程序的配置文件以包括此类行为。

本指南简要介绍为了有效强化系统需要通过 AppArmor 执行的基本任务。要深入了解有关详细信息,请参见 Novell AppArmor 2.0 管理指南

4.4.1. 安装 Novell AppArmor

安装了 GNOME 或 KDE 桌面选项的用户可跳过本节,因为默认情况下 Novell AppArmor 已作为这些选项的一部分安装在系统中。

如果未安装这些桌面,甚至选择了完全基于文本的环境,请执行以下操作以使用 YaST 包管理器安装需要的软件包。

  1. 作为 root 登录并启动 YaST。

  2. 在 YaST 控制中心,选择软件+软件管理

  3. 使用 YaST 的搜索功能(关键词为 “AppArmor”)来安装以下包:

    • apparmor-parser

    • libapparmor

    • apparmor-docs

    • yast2-apparmor

    • apparmor-profiles

    • apparmor-utils

  4. 选择安装所有这些软件包,然后选择接受。YaST 将解析依赖性并安装所有包。

  5. 在 YaST 完成系统配置的更新后,请选择完成退出包管理器。

4.4.2. 启用 Novell AppArmor

安装 Novell AppArmor 后,请明确地启用它以确保每次引导系统时都会启动它。使用 YaST 系统服务(运行级)模块来执行此任务:

  1. 作为 root 登录并启动 YaST。

  2. 启动系统+系统服务(运行级)

  3. 在显示的服务列表中,选择 apparmor。请参见 图 4.3 “用 YaST 启用 Novell AppArmor”

  4. 单击启用以永久启用 AppArmor。

  5. 单击结束接受您的设置。

图 4.3. 用 YaST 启用 Novell AppArmor

用 YaST 启用 Novell AppArmor

通过使用 YaST 运行级工具,您可以永久启用服务 - 这些设置在系统重引导后仍然有效。要暂时启用 AppArmor 一个会话的持续时间请执行以下操作:

  1. 作为 root 登录并启动 YaST。

  2. 启动 Novell AppArmor+AppArmor 控制面板

  3. AppArmor 状态设置为 AppArmor 已启用,方法是单击配置+启用+确定

  4. 单击完成应用您的设置。

4.4.3. 构建应用程序的配置文件入门

请仔细考虑以下事项以系统上准备 Novell AppArmor 的成功部署:

  1. 确定要构建配置文件的应用程序。有关详细信息,请参见第 4.4.3.1 节 “选择要构建配置文件的应用程序”

  2. 根据第 4.4.3.2 节 “构建和修改配置文件”中的简要说明构建需要的配置文件。检查结果并在必要时调整配置文件。

  3. 运行 AppArmor 报告并处理安全事件以跟踪系统上发生的事件。请参见 第 4.4.3.3 节 “配置 Novell AppArmor 事件通知和报告”

  4. 环境发生变化或者需要对 AppArmor 报告工具记录的安全事件作出反应时,更新您的配置文件。请参见 第 4.4.3.4 节 “更新您的配置文件”

4.4.3.1. 选择要构建配置文件的应用程序

您只需保护在您的特定设置中会受到攻击的程序,因此只需为真正运行的程序使用配置文件。使用以下列表来确定最可能的候选程序:

网络代理

程序(服务器和客户程序)具有开放的网络端口,网络代理是响应这些网络端口的服务器程序。用户客户程序(如邮件客户程序和万维网浏览器)也具有网络端口并能够调解特权。

万维网应用程序

CGI Perl 脚本、PHP 页面以及更复杂的万维网应用程序可以通过万维网浏览器调用。

Cron 作业

cron 守护程序定期运行的程序从多个来源读取输入。

要了解哪些进程当前以开放网络端口运行并且可能需要配置文件来进行限制,请作为 root 运行 unconfined

例 4.1. unconfined 的输出

19848 /usr/sbin/cupsd not confined
19887 /usr/sbin/sshd not confined
19947 /usr/lib/postfix/master not confined
29205 /usr/sbin/sshd confined by '/usr/sbin/sshd (enforce)'

上例中标注为 not confined 的每个进程都可能需要定制的配置文件来进行限制。标注为 confined by 的进程已受 AppArmor 保护。

[Tip]参考信息

有关选择要构建配置文件的正确应用程序的详细信息,请参见选择要进行免疫的程序一章(Novell AppArmor 2.0 管理指南)。

4.4.3.2. 构建和修改配置文件

SUSE Linux 上的 Novell AppArmor 附带预配置的配置文件集,用于最重要的应用程序。除此之外,您还可以使用 AppArmor 在 /etc/apparmor/README.profiles 中为一组定义的应用程序创建自己的配置文件。

管理配置文件有两种方式。一种是使用 YaST Novell AppArmor 模块提供的图形化前端,另一种是使用 AppArmor 套件自身提供的命令行工具。这两种方式的工作方式基本相同。

第 4.4.3.1 节 “选择要构建配置文件的应用程序” 说明运行 unconfined 运行会确定一个可能需要配置文件以在安全模式下运行的应用程序列表。

对每个应用程序执行以下步骤以创建配置文件:

  1. root 身份运行 genprof programname,让 AppArmor 创建应用程序配置文件的大致轮廓。

    运行 YaST+Novell AppArmor+添加配置文件向导并指定要构建配置文件的应用程序的完整路径。

    此时大致构建了一个基本的配置文件,同时 AppArmor 进入学习模式,这意味这它会记录您正在执行的程序的每个活动,但目前还不进行限制。

  2. 运行应用程序的所有操作,让 AppArmor 了解程序的每个活动。

  3. 让 AppArmor 分析在 步骤 2 中生成的日志文件。要执行此操作,请在 genprof 中输入 S

    添加配置文件向导中单击扫描 AppArmor 事件的系统日志,然后执行向导中提示的操作直到完成配置文件。

    AppArmor 扫描在程序运行期间记录的日志,然后请求您为每个记录的事件设置访问权限。请对每个文件进行设置或使用通配。

  4. 设置所有访问权限后,您的配置文件将被设置为强制模式。配置文件将被应用,AppArmor 根据刚创建的配置文件对应用程序进行限制。

    如果某应用程序的现有配置文件处于提示模式,对此应用程序启动 genprof 时,它的配置文件将在退出此学习周期后仍保留在学习模式下。有关更改配置文件模式的详细信息,请参见提示或学习模式一节(第 3 章 构建 Novell AppArmor 配置文件Novell AppArmor 2.0 管理指南)和强制模式一节(第 3 章 构建 Novell AppArmor 配置文件Novell AppArmor 2.0 管理指南)。

使用您刚限制的应用程序执行您需要的每一项任务以测试您的配置文件设置。被限制的应用程序通常会顺利运行,您完全不会察觉到 AppArmor 活动。但是,如果您注意到应用程序行为失常,请检查系统日志以查看 AppArmor 对应用程序的限制是否太过严格。在 /var/log/messages 中查找相应的日志并运行 dmesg

类似于以下示例的输出都表示 AppArmor 对应用程序的限制太过严格:

AppArmor: REJECTING w access to /var/run/nscd/socket (traceroute(2050) profile
/usr/sbin/traceroute active /usr/sbin/traceroute)

要调整配置文件,请按照上述操作重新运行添加配置文件向导,让它分析与此特定应用程序相关的日志消息。YaST 发出提示时,请确定访问权限或限制。

[Tip]参考信息

有关构建和管理配置文件的详细信息,请参见构建 Novell AppArmor 配置文件一章(Novell AppArmor 2.0 管理指南)。

4.4.3.3. 配置 Novell AppArmor 事件通知和报告

请在 Novell AppArmor 中设置事件通知,这样您可以查看安全事件。事件通知是一项 Novell AppArmor 功能,可在发生所选严重性级别的系统 Novell AppArmor 活动时通知指定的电子邮件收件人。此功能当前通过 YaST 界面可用。

要在 YaST 中设置事件通知,请执行以下操作:

  1. 确保您的系统上运行着用于传递事件通知的邮件服务器。

  2. 作为 root 登录并启动 YaST。随后选择 Novell AppArmor+AppArmor 控制面板)。

  3. 启用安全事件通知区中选择 配置

  4. 为每种记录类型(简要汇总详细)设置报告频率、输入收件人的电子邮件地址并确定要记录事件的严重性。若要将未知事件包含在事件报告中,请选择包含未知严重性的事件

    [Note]注意

    除非您对 AppArmor 的事件分类非常熟悉,否则选择通知所有安全级别的事件。

  5. 选择确定+完成退出此对话框以应用您的设置。

配置 Novell AppArmor 报告。通过使用报告,您可以阅读日志文件中报告的重要 Novell AppArmor 安全事件,而不必手动筛选只对 logprof 有用的繁杂消息。您可以按照日期范围或程序名称对报告进行过滤,以减小报告的大小。

要配置 AppArmor 报告,请执行如下操作:

  1. 作为 root 登录并启动 YaST。选择 Novell AppArmor +AppArmor 报告

  2. 执行安全摘要应用程序审计安全事件报告中选择要检查或配置的报告类型。

  3. 选择编辑并提供请求的数据,以编辑报告生成频率、电子邮件地址、导出格式和报告位置。

  4. 要运行所选类型的报告,请单击立即运行

  5. 选择查看档案并指定报告类型,以在给定类型的存档报告中浏览。

    删除不需要的报告或添加新报告。

[Tip]参考信息

有关在 Novell AppArmor 中配置事件通知的详细信息,请参见“设置事件通知”一节(第 4 章,管理已构建配置文件的应用程序Novell AppArmor 2.0 管理指南)。有关报告配置的更多信息,请参见“报告”一节(第 4 章,管理已构建配置文件的应用程序Novell AppArmor 2.0 管理指南)。

4.4.3.4. 更新您的配置文件

软件和系统配置会随着时间的流逝而更改。因此您经常需要对 AppArmor 的配置文件设置进行微调。 会检查系统日志以查找策略冲突或其它 AppArmor 事件,允许您对配置文件作相应的调整。您也可以使用更新配置文件向导解决应用程序行为超出配置文件定义的问题。

要更新配置文件集,请执行以下操作:

  1. 作为 root 登录并启动 YaST。

  2. 启动 Novell AppArmor+更新配置文件向导

  3. 对于记录的任意资源或可执行文件,根据提示调整其访问或执行权限。

  4. 回答所有问题后离开 YaST。您的更改将被应用到对应的配置文件中。

[Tip]参考信息

有关通过系统日志更新配置文件的详细信息,请参见“通过 Syslog 条目更新配置文件”一节(第 3 章,构建 Novell AppArmor 配置文件Novell AppArmor 2.0 管理指南)。