緩解AEM中的序列化問題

概觀

Adobe的AEM團隊與開放原始碼專案密切合作 NotSoSerial 以協助緩解中所述的弱點 CVE-2015-7501. NotSoSerial授權於 Apache 2授權 並包含自行授權的ASM程式碼 BSD授權.

此封裝包含的代理程式jar是Adobe修改過的NotSoSerial發佈。

NotSoSerial是Java™層級問題的Java™層級解決方案,不是AEM專屬的解決方案。 它會新增預檢檢查來嘗試還原序列化物件。 此檢查會針對防火牆樣式的允許清單、封鎖清單或兩者來測試類別名稱。 由於預設封鎖清單中的類別數量有限,此測試不太可能對您的系統或程式碼造成影響。

依預設,代理程式會針對目前已知的易受攻擊類別執行封鎖清單檢查。 此封鎖清單旨在保護您免受目前使用這類漏洞的利用漏洞清單攻擊。

封鎖清單和允許清單可依照以下說明進行設定: 設定代理程式 章節。

此代理程式旨在協助緩解最新已知的易受攻擊類別。 如果您的專案正在還原序列化不受信任的資料,它仍可能容易受到拒絕服務攻擊、記憶體不足攻擊和未知的未來還原序列化攻擊。

Adobe正式支援Java™ 6、7和8。 不過,Adobe的理解是NotSoSerial也支援Java™ 5。

安裝代理程式

注意

如果您先前已安裝AEM 6.1的序列化Hotfix,請從Java™執行行移除代理程式啟動命令。

  1. 安裝 com.adobe.cq.cq-serialization-tester 套件組合。

  2. 前往套件Web主控台: https://server:port/system/console/bundles

  3. 尋找序列化套件組合併加以啟動。 這樣做會動態自動載入NotSoSerial代理程式。

在應用程式伺服器上安裝代理程式

NotSoSerial代理程式不包含在應用程式伺服器的AEM標準散發中。 不過,您可以從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. 前往網頁主控台: https://server:port/system/console/configMgr

  2. 搜尋並按一下 還原序列化防火牆設定。

    注意

    您也可以透過存取URL來直接存取設定頁面:

    • https://server:port/system/console/configMgr/com.adobe.cq.deserfw.impl.DeserializationFirewallImpl

此設定包含允許清單、封鎖清單和反序列化記錄。

允許清單

在允許清單區段中,這些清單是允許還原序列化的類別或套件首碼。 如果您要還原序列化自己的類別,請將類別或套件新增至此允許清單。

封鎖清單

在區塊清單區段中,為永遠不允許還原序列化的類別。 這些類別的初始集僅限於已發現易受遠端執行攻擊的類別。 封鎖清單會在任何允許清單專案之前套用。

診斷記錄

在診斷記錄區段中,您可以選擇數個選項,以便在還原序列化進行時記錄。 這些選項僅會在第一次使用時記錄,而不會在後續使用時再次記錄。

的預設值 class-name-only 通知您正在還原序列化的類別。

您也可以設定 完整棧疊 此選項會記錄第一次還原序列化嘗試的Java™棧疊,以通知您還原序列化發生的位置。 此選項對於在使用中尋找和移除還原序列化相當實用。

驗證代理程式的啟用

您可以瀏覽至下列URL來驗證還原序列化代理程式的設定:

  • https://server:port/system/console/healthcheck?tags=deserialization

存取URL後,會顯示與代理程式相關的健康情況檢查清單。 您可以透過驗證健康情況檢查是否通過來判斷代理程式是否已正確啟動。 如果失敗,您必須手動載入代理程式。

如需有關疑難排解代理程式問題的詳細資訊,請參閱 處理動態代理程式載入的錯誤 下方的。

注意

如果您新增 org.apache.commons.collections.functors 對於允許清單,健康情況檢查總是會失敗。

處理動態代理程式載入的錯誤

如果記錄中顯示錯誤,或驗證步驟偵測到載入代理程式的問題,請手動載入代理程式。 如果您使用JRE (Java™ Runtime Environment)而不是JDK (Java™ Development Toolkit),也建議使用此工作流程,因為動態載入工具無法使用。

若要手動載入代理程式,請執行下列動作:

  1. 編輯CQ jar的JVM啟動引數,新增以下選項:

    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    注意

    您也必須使用 — nofork CQ/AEM選項以及適當的JVM記憶體設定,因為代理程式並未在分支JVM上啟用。

    注意

    NotSoSerial代理程式jar的Adobe散發可在以下網址找到: crx-quickstart/opt/notsoserial/ AEM安裝的資料夾。

  2. 停止並重新啟動JVM;

  3. 請依照中所述步驟,再次驗證代理程式的啟用 驗證代理程式的啟用.

其他考量

如果您正在IBM® JVM上執行,請檢閱支援的Java™ Attach API檔案,網址為 此位置.

本頁內容