安全检查列表

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

注意

还提供了关于Open Web应用程序安全项目(OWASP)发布的最危险安全威胁的更多信息。

注意

开发阶段还适用一些其他的安全注意事项

主要安全措施

在生产就绪模式下运行AEM

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

为传输层安全性启用 HTTPS

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

注意

有关更多信息,请参阅启用HTTP Over SSL部分。

安装安全修补程序

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

更改AEM和OSGi Console管理帐户的默认密码

Adobe强烈建议在安装后更改特权​AEM admin帐户的密码(在所有实例上)。

这些帐户包括:

  • AEM admin帐户

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

  • OSGi Web控制台的admin密码

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

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

更改AEM管理员密码

可以通过Granite Operations - Users控制台更改AEM管理员帐户的密码。

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

注意

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

更改OSGi Web控制台密码的重要性

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

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

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

更改OSGi Web控制台管理员密码

您还必须更改用于访问Web控制台的密码。 这是通过配置Apache Felix OSGi管理控制台的以下属性来完成的:

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

要执行此操作:

  1. 导航到位于<server>:<port>/system/console/configMgr的Web控制台。

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

    chlimage_1-166

  3. 单击​保存

实施自定义错误处理程序

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

注意

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

完整的Dispatcher安全检查列表

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

注意

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

验证步骤

配置复制和传输用户

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

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

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

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

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

检查操作仪表板安全运行状况检查

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

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

检查示例内容是否存在

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

注意

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

检查CRX开发包是否存在

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

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

检查Sling开发包是否存在

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

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

Protect防止跨站点请求伪造

CSRF保护框架

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

Sling反向链接过滤器

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

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

  • 应筛选哪些http方法

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

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

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

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

  1. 在以下位置打开Apache Felix控制台(Configurations):

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

  2. admin身份登录。

  3. 在​Configurations​菜单中,选择:

    Apache Sling Referrer Filter

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

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

    例如:

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

    注意

    建议在使用命令行工具(如cURL)时提供反向链接,而不是允许空值,因为该值可能会使您的系统遭受CSRF攻击。

  6. 编辑此过滤器应用于检查Filter Methods字段的方法。

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

OSGI设置

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

注意

除​Day CQ WCM Debug Filter​之外的所有以下设置都会自动被生产就绪模式覆盖。 因此,我们建议先查看所有设置,然后再在生产环境中部署实例。

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

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

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

进一步读数

缓解拒绝服务(DoS)攻击

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

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

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

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

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

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

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

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

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

配置Sling以阻止DoS

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

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

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来执行此操作。

    注意

    请勿禁用JSON渲染器,这是AEM正常操作所必需的。

  3. 使用防火墙过滤对实例的访问。

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

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

注意

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

由于AEM不为FormChooserServlet提供现成的索引,因此在查询中使用表单选择器将触发成本高昂的存储库遍历,通常会使AEM实例停止。 表单选择器可通过存在​&ast;.form来检测。查询中的&ast;​字符串。

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

  1. 通过将您的浏览器指向​https://<serveraddress>:<serverport>/system/console/configMgr,转到Web控制台

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

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

  4. 单击​保存

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

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

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

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

禁用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. 单击停止按钮以停止此包。

    注意

    无需重新启动AEM。

确认您未在用户主页路径中披露个人身份信息

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

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

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

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

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

    您还可以通过在OSGi配置中查找​org.apache.jackrabbit.oak.security.internal.SecurityProviderRegistration PID来找到Oak安全提供程序。

  2. 从Web控制台中删除​Apache Jackrabbit Oak Random Authorizable Node Name OSGi配置。

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

注意

有关更多信息,请参阅可授权节点名称生成上的Oak文档。

防御点击劫持攻击

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

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

确保在需要时正确复制加密密钥

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

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

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

复制AEM 6.3的密钥

而在较旧版本中,复制密钥存储在存储库中,从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. 如果目标实 例已在运行,请刷新Crypto Bundle。

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

注意

您可以在首次安装AEM时通过添加以下参数,还原到6.3之前存储密钥的方法:

-Dcom.adobe.granite.crypto.file.disable=true

复制AEM 6.2及更低版本的密钥

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

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

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

执行渗透测试

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

开发最佳实践

新开发必须遵循安全最佳实践,以确保AEM环境安全。

在此页面上