Show Menu
主题×

缓解AEM中的序列化问题

概述

Adobe的AEM团队一直与开放源项目NotSoSerial紧密合 ,以帮助缓解CVE-2015- 7501中描述的漏洞 。 NotSoSerial根据Apache 2许 可证授予许可 ,并包含根据其自己的类似BSD的许 可证授予许可的ASM代码
此包中包含的代理jar是Adobe修改的NotSoSerial分发。
NotSoSerial是解决Java级别问题的Java级解决方案,并非特定于AEM。 它将预检检查添加到尝试反序列化对象。 此检查将针对防火墙样式的允许列表和/或阻止列表测试类名称。 由于默认块列表中类的数量有限,这不太可能影响您的系统或代码。
默认情况下,代理将针对当前已知的易受攻击类执行块列表检查。 此块列表旨在保护您免受当前使用此类漏洞的利用列表的影响。
可以按照本文“配置代理”部分中的说明配 置块列表 和允许列表。
代理旨在帮助减轻最新已知的易受攻击类。 如果您的项目正在反序列化不受信任的数据,它仍可能易受拒绝服务攻击、内存不足攻击和未知的未来反序列化利用攻击。
Adobe正式支持Java 6、7和8,但我们了解NotSoSerial也支持Java 5。

安装代理

如果您之前已安装AEM 6.1的序列化修补程序,请从java执行行中删除代理开始命令。
  1. 安装com.adobe.cq.cq -serialization-tester捆绑
  2. 转到Bundle Web Console,网址为 https://server:port/system/console/bundles
  3. 查找序列化捆绑并开始它。 这应动态自动加载NotSoSerial代理。

在应用程序服务器上安装代理

AEM的应用程序服务器标准分发中不包含NotSoSerial代理。 但是,您可以从AEM jar分发中提取它并将其与应用程序服务器设置一起使用:
  1. 首先,下载AEM快速启动文件并将其解压:
    java -jar aem-quickstart-6.2.0.jar -unpack
    
    
  2. 转到新解压的AEM快速启动的位置,并将该文 crx-quickstart/opt/notsoserial/ 件夹复制到 crx-quickstart AEM应用程序服务器安装的文件夹。
  3. 更改运行服 /opt 务器的用户的所有权:
    chown -R opt <user running the server>
    
    
  4. 配置并检查代理是否已正确激活,如本文的下几节所示。

配置代理

默认配置适用于大多数安装。 这包括已知远程执行易受攻击类的块列表和允许包列表,其中可信任数据的反序列化应相对安全。
防火墙配置是动态的,可以随时通过以下方式进行更改:
  1. 转到Web控制台,网址为 https://server:port/system/console/configMgr
  2. 搜索并单击反序列化 防火墙配置。
    您也可以通过访问URL(网址为:
    • https://server:port/system/console/configMgr/com.adobe.cq.deserfw.impl.DeserializationFirewallImpl
此配置包含允许列表、块列表和反序列化日志记录。
允许列表
在“允许列表”部分,这些是允许反序列化的类或包前缀。 请注意,如果要反序列化自己的类,您需要将类或包添加到此允许列表。
块列表
在块列表部分中,不允许反序列化类。 这些类的初始集仅限于已发现易受远程执行攻击的类。 在允许列出任何条目之前应用块列表。
诊断日志记录
在诊断日志记录部分,可以选择在进行反序列化时要记录的多个选项。 它们仅在首次使用时登录,而在后续使用时不再登录。
仅类名 的默认值将通知 正在反序列化的类。
您还可以设置 完整堆栈选项 ,该选项将记录第一次反序列化尝试的Java堆栈,以通知您反序列化的发生位置。 这对于从使用中查找和删除反序列化非常有用。

验证代理的激活

您可以通过浏览到以下URL验证反序列化代理的配置:
  • https://server:port/system/console/healthcheck?tags=deserialization
访问URL后,将显示与代理相关的运行状况检查列表。 您可以通过验证运行状况检查是否已通过来确定代理是否已正确激活。 如果故障发生,您可能需要手动加载代理。
有关代理问题疑难解答的详细信息,请参 阅以下处理动态代理加载错误
如果添加 org.apache.commons.collections.functors 到允许列表,运行状况检查将始终失败。

处理动态代理加载时的错误

如果日志中显示错误,或验证步骤检测到加载代理时出现问题,则可能需要手动加载代理。 如果您使用的是JRE(Java运行时环境)而不是JDK(Java开发工具包),则还建议使用它,因为没有用于动态加载的工具。
要手动加载代理,请按照以下说明操作:
  1. 修改CQ jar的JVM启动参数,添加以下选项:
    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    
    这要求使用-nofork CQ/AEM选项以及相应的JVM内存设置,因为在已分类的JVM上不启用代理。
    可以在AEM安装的文件夹中找到NotSoSerial代理程 crx-quickstart/opt/notsoserial/ 序jar的Adobe分发。
  2. 停止并重新启动JVM;
  3. 按照验证代理激活中所述的步骤再 次验证代理激活

其他注意事项

如果您正在IBM JVM上运行,请查看有关此位置支持Java Attach API的 文档