缓解AEM Forms JEE中的序列化问题 mitigating-serialization-issues-in-aem-forms-jee
AEM Forms JEE包含一个反序列化防火墙,该防火墙在尝试反序列化对象之前添加预检检查。 此检查针对防火墙样式的允许列表和/或序列化测试类名,并拒绝已知可通过Java™反序列化攻击攻击的类。 基础代理是Adobe修改的开源NotSoSerial项目分发,根据Apache 2许可证授予许可。
在运行 JDK 11或更高版本 的安装中,此保护由平台的本机序列化过滤激活,无需手动步骤。 在运行 JDK 8 的安装上,本机序列化筛选无效,因此代理必须在启动时显式附加到JVM。 本文介绍了如何这样做。
开始之前 before-you-begin
确认应用程序服务器用于运行的Java™版本:
java -version
如果报告的版本为1.8.x (JDK 8),则应用本文中的步骤。 如果是11或更高版本,则无需手动操作;请使用验证代理的激活中所述的运行状况检查来验证保护。
在接下来的步骤中,<jee-installation-directory>将引用AEM Forms JEE安装的根目录。
应用代理 applying-the-agent
-
验证当前状态。 浏览到反序列化过滤器运行状况检查:
code language-text https://<server>:<port>/system/console/healthcheck?tags=deserialization如果检查报告为活动,则实例已受保护,无需执行进一步操作。 如果失败,请继续执行以下步骤。
-
验证代理JAR是否已存在。 检查以下位置中的
notsoserial.jar:code language-text <jee-installation-directory>/crx-quickstart/opt/notsoserial/ -
如果缺少JAR,请添加它。 下载
notsoserial.jar并将其复制到每个实例上的上述文件夹中:code language-text <jee-installation-directory>/crx-quickstart/opt/notsoserial/notsoserial.jarnote NOTE 在发布之前,请将此步骤替换为代理的Forms JEE分发的官方Adobe下载位置。 -
更新应用服务器的JVM启动参数以附加代理。 将以下选项添加到Java™运行行:
code language-shell -javaagent:<jee-installation-directory>/crx-quickstart/opt/notsoserial/notsoserial.jarJava™运行行的确切位置取决于您的应用程序服务器(例如,JBoss、WebLogic或WebSphere®)。 将选项添加到用于启动AEM Forms JEE应用程序服务器的JVM选项。
-
重新启动JEE服务器,以便在JVM启动时加载代理。
-
重新验证。 再次浏览运行状况检查:
code language-text https://<server>:<port>/system/console/healthcheck?tags=deserialization运行状况检查现在应报告为正常。
验证代理的激活 verifying-the-agents-activation
您可以随时通过浏览到以下URL来验证反序列化代理的配置:
https://<server>:<port>/system/console/healthcheck?tags=deserialization
将显示与代理相关的运行状况检查列表。 如果检查通过,则代理将被正确激活。 如果它们在JDK 8实例上失败,则代理尚未加载,您必须使用应用代理中的步骤手动附加该代理。
配置代理 configuring-the-agent
如果应用程序服务器的Java™版本使用JDK 8运行,则以下步骤适用。 在附加代理后可以使用应用代理中的步骤对其进行配置。
对于大多数安装,默认配置已足够。 它包括已知可远程攻击的类的阻止列表以及可安全反序列化受信任数据的包的序列。 阻止列表在任何条目之前应用。
防火墙配置是动态的,可以随时更改:
-
转到位于
https://<server>:<port>/system/console/configMgr的Web控制台。 -
搜索并单击反序列化防火墙配置。
此配置包含允许列表、阻止列表和诊断日志记录选项:
- 允许列表 — 允许反序列化的类或包前缀。 如果您反序列化自己的类,请在此处添加相关的类或包。
- 阻止列表 — 不允许反序列化的类。 初始集仅限于发现易受远程执行攻击的类。
- 诊断日志记录 — 进行反序列化时要记录的选项。 默认 class-name-only 报告正在反序列化的类。 全栈栈选项记录第一次反序列化尝试的Java™栈栈,这有助于在您的使用中查找和删除不受信任的反序列化。 这些选项仅在首次使用时记录。
其他注意事项 other-considerations
- 该代理用于缓解当前已知的易受攻击的类。 如果项目反序列化不受信任的数据,则它仍可能会遭受拒绝服务、内存不足或未知的未来反序列化攻击。
- 如果在JRE (Java™运行时环境)而不是JDK (Java™开发工具包)上运行,则动态代理加载所需的工具不可用,并且必须在启动时手动附加代理,如应用代理中所述。
- 如果您在® JVM上运行,请查看有关Java™附加API支持的文档。