安全检查列表 security-checklist

CAUTION
AEM 6.4已结束扩展支持,本文档将不再更新。 有关更多详细信息,请参阅 技术支助期. 查找支持的版本 此处.

本节介绍您应采取的各种步骤,以确保AEM安装在部署时是安全的。 核对清单应自上而下应用。

NOTE
还有一些其他 安全注意事项 于开发阶段适用。

主要安全措施 main-security-measures

在生产就绪模式下运行AEM run-aem-in-production-ready-mode

有关更多信息,请参阅 在生产就绪模式下运行AEM.

为传输层安全性启用 HTTPS enable-https-for-transport-layer-security

对于具有安全实例,必须在创作实例和发布实例上启用HTTPS传输层。

NOTE
请参阅 启用HTTP Over SSL 的子菜单。

安装安全修补程序 install-security-hotfixes

确保您已安装最新的 由Adobe提供的安全修补程序.

更改AEM和OSGi Console管理帐户的默认密码 change-default-passwords-for-the-aem-and-osgi-console-admin-accounts

Adobe强烈建议在安装后更改特权用户的密码 AEM admin 帐户 (在所有情况下)。

这些帐户包括:

  • AEM admin 帐户

    更改AEM管理员帐户的密码后,您在访问CRX时将需要使用新密码。

  • admin OSGi Web控制台的密码

    此更改也将应用于用于访问Web控制台的管理员帐户,因此在访问该控制台时,您将需要使用相同的密码。

这两个帐户使用不同的凭据,并且每个帐户具有不同的强密码对于安全部署至关重要。

更改AEM管理员密码 changing-the-aem-admin-password

AEM管理员帐户的密码可以通过 Granite操作 — 用户 控制台。

在此,您可以编辑 admin 帐户和 更改密码.

NOTE
更改管理员帐户也会更改OSGi Web控制台帐户。 更改管理员帐户后,您应将OSGi帐户更改为其他内容。

更改OSGi Web控制台密码的重要性 importance-of-changing-the-osgi-web-console-password

除了AEM admin 帐户,如果无法更改OSGi Web控制台密码的默认密码,则可能会导致:

  • 在启动和关闭期间使用默认密码暴露服务器(对于大型服务器,这可能需要几分钟);
  • 当存储库关闭/重新启动包且OSGI正在运行时,服务器的暴露。

有关更改Web控制台密码的详细信息,请参阅 更改OSGi Web控制台管理员密码 下。

更改OSGi Web控制台管理员密码 changing-the-osgi-web-console-admin-password

您还必须更改用于访问Web控制台的密码。 这可以通过配置 Apache Felix OSGi管理控制台:

用户名密码,用于访问Apache Felix Web Management Console本身的凭据。
初始安装后必须更改密码,以确保实例的安全性。

要执行此操作:

  1. 导航到位于 <server>:<port>/system/console/configMgr.

  2. 导航至 ​ Apache Felix OSGi管理控制台 ​并更改 用户名密码.

    chlimage_1-166

  3. 单击“保存”。

实施自定义错误处理程序 implement-custom-error-handler

Adobe建议定义自定义错误处理程序页面,尤其是404和500 HTTP响应代码的页面,以防止信息泄露。

NOTE
请参阅 如何创建自定义脚本或错误处理程序 知识库文章以了解更多详细信息。

完整的Dispatcher安全检查列表 complete-dispatcher-security-checklist

AEM Dispatcher是您基础架构的关键部分。 Adobe强烈建议您完成 调度程序安全检查表.

CAUTION
使用调度程序,您必须禁用“.form”选择器。

验证步骤 verification-steps

配置复制和传输用户 configure-replication-and-transport-users

AEM的标准安装指定 admin 用作默认内传输凭据的用户 复制代理. 此外,管理员用户还用于在创作系统上源复制。

出于安全考虑,应当对这两点进行更改,以反映手头的特定用例,同时考虑到以下两个方面:

  • 运输用户 不应是管理员用户。 而是在发布系统上设置一个用户,该用户仅对发布系统的相关部分具有访问权限,并使用该用户的凭据进行传输。

    您可以从捆绑的复制接收器用户开始,并配置此用户的访问权限以匹配您的情况

  • 复制用户代理用户Id 也不应是管理员用户,而应是只能查看应复制内容的用户。 复制用户用于在将内容发送到发布者之前收集要在创作系统上复制的内容。

检查操作仪表板安全运行状况检查 check-the-operations-dashboard-security-health-checks

AEM 6引入了新的操作仪表板,旨在帮助系统操作员解决问题并监视实例的运行状况。

仪表板还附带一组安全运行状况检查。 建议您在生产实例上线之前检查所有安全运行状况检查的状态。 有关更多信息,请参阅 操作功能板文档.

检查示例内容是否存在 check-if-example-content-is-present

所有示例内容和用户(例如,Geometrixx项目及其组件)都应在生产系统上完全卸载和删除,然后才能公开访问。

NOTE
如果此实例在中运行,则We.Retail示例应用程序将被删除 生产就绪模式. 如果由于任何原因,情况并非如此,您可以通过转到包管理器来卸载示例内容,然后搜索并卸载所有We.Retail包。 有关更多信息,请参阅 如何使用包.

检查CRX开发包是否存在 check-if-the-crx-development-bundles-are-present

应先在创作和发布生产系统上卸载这些开发OSGi包,然后再使其可以访问。

  • AdobeCRXDE支持(com.adobe.granite.crxde-support)
  • AdobeGranite CRX Explorer(com.adobe.granite.crx-explorer)
  • AdobeGraniteCRXDE Lite(com.adobe.granite.crxde-lite)

检查Sling开发包是否存在 check-if-the-sling-development-bundle-is-present

AEM Developer Tools for Eclipse 部署Apache Sling工具支持安装(org.apache.sling.tooliges.support.install)。

应在创作和发布生产系统上卸载此OSGi包,然后才能使其可访问。

Protect防止跨站点请求伪造 protect-against-cross-site-request-forgery

CSRF保护框架 the-csrf-protection-framework

AEM 6.1附带一种有助于防止跨站点请求伪造攻击的机制,称为 CSRF保护框架. 有关如何使用该插件的更多信息,请参阅 文档.

Sling反向链接过滤器 the-sling-referrer-filter

要解决CRX WebDAV和Apache Sling中跨站点请求伪造(CSRF)的已知安全问题,您需要为反向链接过滤器添加配置才能使用该过滤器。

反向链接过滤器服务是一种OSGi服务,可用于配置:

  • 应筛选哪些http方法

  • 是否允许空反向链接标头

  • 以及除服务器主机外允许的服务器列表。

    默认情况下,服务器绑定的所有本地主机和当前主机名变体都在列表中。

要配置反向链接过滤器服务,请执行以下操作:

  1. 打开Apache Felix控制台(配置):

    https://<server>:<port_number>/system/console/configMgr

  2. 登录方式 admin.

  3. 配置 菜单,选择

    Apache Sling Referrer Filter

  4. Allow Hosts 字段中,输入允许作为反向链接的所有主机。 每个条目必须是格式

    <protocol>://<server>:<port>

    例如:

    • https://allowed.server:80 允许来自此服务器的所有具有给定端口的请求。
    • 如果您还希望允许https请求,则必须输入第二行。
    • 如果允许来自该服务器的所有端口,则可以使用 0 作为端口号。
  5. 检查 Allow Empty 字段中,以检查反向链接标题是否为空/缺少。

    note caution
    CAUTION
    在使用命令行工具(例如 cURL 而不是允许空值,因为它可能会使您的系统遭受CSRF攻击。
  6. 编辑此过滤器应用于检查的方法 Filter Methods 字段。

  7. 单击 保存 以保存更改。

OSGI设置 osgi-settings

默认情况下,会设置一些OSGi设置,以便更轻松地调试应用程序。 需要在您的发布和创作生产实例中更改这些内容,以避免内部信息泄露给公众。

NOTE
以下所有设置( Day CQ WCM Debug Filter(日CQ WCM调试过滤器) 自动被 生产就绪模式. 因此,我们建议先查看所有设置,然后再在生产环境中部署实例。

对于以下每项服务,需要更改指定的设置:

有关更多详细信息,请参阅 OSGi配置设置.

使用AEM时,可通过多种方法来管理此类服务的配置设置;请参阅 配置OSGi 以了解更多详细信息和建议的实践。

进一步读数 further-readings

缓解拒绝服务(DoS)攻击 mitigate-denial-of-service-dos-attacks

拒绝服务 (DoS) 攻击是一种试图让计算机资源对其目标用户不可用的攻击。这通常是通过超载资源来完成的;例如:

  • 来自外部源的大量请求。

  • 请求的信息比系统成功交付的信息要多。

    例如,整个存储库的JSON表示形式。

  • 通过请求URL数量不限的内容页面,URL可以包含句柄、一些选择器、扩展和后缀 — 其中的任意一个都可以修改。

    例如, .../en.html 也可以请求为:

    • .../en.ExtensionDosAttack
    • .../en.SelectorDosAttack.html
    • .../en.html/SuffixDosAttack

    所有有效变量(例如,返回 200 响应和配置为缓存)将由调度程序缓存,最终导致完整文件系统,并且不提供用于进一步请求的服务。

有许多配置点可用于防止此类攻击,这里我们只讨论与AEM直接相关的攻击。

配置Sling以阻止DoS

Sling是 以内容为中心. 这意味着当每个(HTTP)请求以JCR资源(存储库节点)的形式映射到内容时,处理重点会放在内容上:

  • 第一个目标是保存内容的资源(JCR节点)。
  • 其次,渲染器或脚本是与请求的某些部分(例如,选择器和/或扩展)组合从资源属性中找到的。
NOTE
这在 Sling请求处理.

这种方法使Sling非常强大且非常灵活,但与往常一样,需要仔细管理其灵活性。

为帮助防止DoS滥用,您可以:

  1. 在应用程序级别纳入控制;由于变量数可能存在,默认配置不可行。

    在您的应用程序中,您应该:

    • 控制应用程序中的选择器,以便您 提供所需的显式选择器并返回 404 为其他人。
    • 阻止输出无限数量的内容节点。
  2. 检查默认渲染器的配置,这可能是一个问题区域。

    • 特别是可以跨多个级别横移树结构的JSON渲染器。

      例如,请求:

      http://localhost:4502/.json

      可以将整个存储库转储为JSON表示形式。 这会导致严重的服务器问题。 因此,Sling会设置最大结果数的限制。 要限制JSON渲染的深度,您可以为:

      JSON最大结果 ( json.maximumresults)

      的配置 Apache SlingGETServlet. 超过此限制时,呈现将折叠。 AEM中Sling的默认值为 1000.

    • 作为一种预防性措施,可禁用其他默认渲染器(HTML、纯文本、XML)。 通过配置 Apache SlingGETServlet.

    note caution
    CAUTION
    请勿禁用JSON渲染器,这是AEM正常操作所必需的。
  3. 使用防火墙过滤对实例的访问。

    • 必须使用操作系统级别的防火墙才能过滤对实例中可能导致拒绝服务攻击(如果未受保护)的点的访问。

缓解使用表单选择器导致的DoS问题

NOTE
此缓解措施应仅在未使用Forms的AEM环境中执行。

由于AEM不为 FormChooserServlet,在查询中使用表单选择器将触发代价高昂的存储库遍历,通常会使AEM实例停止。 表单选择器可通过 *.form。* 字符串。

要缓解此问题,请执行以下步骤:

  1. 通过将浏览器指向 https://<serveraddress>:<serverport>/system/console/configMgr

  2. 搜索 Day CQ WCM表单选择器Servlet

  3. 单击该条目后,禁用 高级搜索要求 在以下窗口中。

  4. 单击“保存”。

缓解由资产下载Servlet导致的DoS问题

AEM中的默认资产下载Servlet允许经过身份验证的用户发出任意大的并发下载请求,以创建对他们可见的资产的ZIP文件,这些文件可能会使服务器和/或网络过载。

要降低此功能所导致的潜在DoS风险, AssetDownloadServlet 对于最新AEM版本上的发布实例,默认情况下会禁用OSGi组件。

如果您的设置要求启用资产下载服务器,请参阅 本文 以了解更多信息。

禁用WebDAV disable-webdav

应在创作和发布环境中都禁用WebDAV。 可通过停止相应的OSGi包来完成此操作。

  1. 连接到 Felix管理控制台 运行于:

    https://<*host*>:<*port*>/system/console

    例如 http://localhost:4503/system/console/bundles

  2. 在包列表中,找到名为的包:

    Apache Sling Simple WebDAV Access to repositories (org.apache.sling.jcr.webdav)

  3. 单击停止按钮(在“操作”(Actions)列中)以停止此包。

  4. 再次在包列表中,找到名为的包:

    Apache Sling DavEx Access to repositories (org.apache.sling.jcr.davex)

  5. 单击停止按钮以停止此包。

    note note
    NOTE
    无需重新启动AEM。

确认您未在用户主页路径中披露个人身份信息 verify-that-you-are-not-disclosing-personally-identifiable-information-in-the-users-home-path

通过确保不会在存储库用户主页路径中显示任何个人不可识别的信息,来保护用户,这一点很重要。

自AEM 6.1起,用户(也称为可授权)ID节点名称的存储方式将通过 AuthorizableNodeName 界面。 新界面将不再在节点名称中显示用户ID,而是将生成一个随机名称。

无需执行任何配置即可启用它,因为这现在是在AEM中生成可授权ID的默认方式。

虽然不建议这样做,但您可以在需要旧实施以与现有应用程序进行向后兼容性时将其禁用。 为此,您需要:

  1. 转到Web控制台,并从属性中删除 ​ org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName ​条目 requiredServicePids in Apache Jackrabbit Oak SecurityProvider.

    您还可以通过查找 org.apache.jackrabbit.oak.security.internal.SecurityProviderRegistration OSGi配置中的PID。

  2. 删除 Apache Jackrabbit Oak可随机授权的节点名称 从Web控制台进行OSGi配置。

    为便于查找,请注意,此配置的PID为 org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName.

NOTE
有关更多信息,请参阅Oak文档(位于 可授权的节点名称生成.

防御点击劫持攻击 prevent-clickjacking

要防御点击劫持攻击,建议您将 Web 服务器配置为将 X-FRAME-OPTIONS HTTP 标头集提供给 SAMEORIGIN

有关点击劫持攻击的更多信息,请参阅 OWASP 网站

确保在需要时正确复制加密密钥 make-sure-you-properly-replicate-encryption-keys-when-needed

某些AEM功能和身份验证方案要求您在所有AEM实例中复制加密密钥。

在执行此操作之前,请注意,密钥复制在不同版本之间的操作方式不同,因为6.3及更低版本的密钥存储方式不同。

有关更多信息,请参阅下文。

复制AEM 6.3的密钥 replicating-keys-for-aem

而在较旧版本中,复制密钥存储在存储库中,从AEM 6.3开始,它们存储在文件系统中。

因此,要在实例之间复制密钥,您需要将它们从源实例复制到文件系统上目标实例的位置。

更具体地说,您需要:

  1. 访问包含要复制的关键材料的AEM实例,通常是创作实例;

  2. 在本地文件系统中找到com.adobe.granite.crypto.file包。 例如,在以下路径下:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21

    bundle.info 每个文件夹中的文件将标识包名称。

  3. 导航到数据文件夹。 例如:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  4. 复制HMAC和主控文件。

  5. 然后,转到要将HMAC密钥复制到的目标实例,然后导航到数据文件夹。 例如:

    • <publish-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  6. 粘贴您之前复制的两个文件。

  7. 刷新加密包 目标实例已在运行时。

  8. 对要将密钥复制到的所有实例重复上述步骤。

NOTE
您可以在首次安装AEM时通过添加以下参数,还原到6.3之前存储密钥的方法:
-Dcom.adobe.granite.crypto.file.disable=true

复制AEM 6.2及更低版本的密钥 replicating-keys-for-aem-and-older-versions

在AEM 6.2及更低版本中,键存储在 /etc/key 节点。

在实例中安全复制密钥的推荐方法是仅复制此节点。 您可以通过CRXDE Lite有选择地复制节点:

  1. 打开CRXDE Lite,方法是:转到 https://<serrveraddress>:4502/crx/de/index.jsp
  2. 选择 /etc/key 节点。
  3. 转到 复制 选项卡。
  4. 复制 按钮。

执行渗透测试 perform-a-penetration-test

Adobe 强烈建议您在开始生产之前对 AEM 基础架构执行渗透测试。

开发最佳实践 development-best-practices

新发展必须遵循 安全最佳实践 以确保您的AEM环境安全。

recommendation-more-help
5ce3024a-cbea-458b-8b2f-f9b8dda516e8