Show Menu
THEMEN×

Beheben von Serialisierungsproblemen in AEM

Übersicht

Das AEM-Team von Adobe arbeitet eng mit dem Open-Source-Projekt NotSoSerial zusammen, um Sie bei der Behandlung der in CVE-2015-7501 beschriebenen Sicherheitsrisiken zu unterstützen. NotSoSerial ist unter der Apache 2-Lizenz lizenziert und beinhaltet ASM-Code, der unter der eigenen BSD-ähnlichen Lizenz lizenziert ist.
Bei der in diesem Paket enthaltenen Agent-JAR-Datei handelt es sich um die modifizierte NotSoSerial-Distribution von Adobe.
NotSoSerial ist eine Lösung auf Java-Ebene für ein Problem auf Java-Ebene und nicht AEM-spezifisch. Sie fügt einem Deserialisierungsversuch für ein Objekt eine Preflight-Prüfung hinzu. Mit dieser Prüfung wird ein Klassenname gegen eine Firewall-ähnliche zulassungsliste und/oder blockierungsliste getestet. Aufgrund der begrenzten Anzahl von Klassen im Standard-blockierungsliste ist es unwahrscheinlich, dass sich dies auf Ihre Systeme oder Ihren Code auswirkt.
Standardmäßig führt der Agent eine blockierungsliste-Prüfung für aktuelle bekannte verwundbare Klassen durch. Diese blockierungsliste soll Sie vor der aktuellen Liste von Exploits schützen, die diese Art von Verwundbarkeit nutzen.
The block list and allow list can be configured by following the instructions in the Configuring the Agent section of this article.
Der Agent unterstützt Sie bei der Behandlung der neuesten bekannten Klassen mit Sicherheitsrisiko. Wenn Ihr Projekt nicht vertrauenswürdige Daten deserialisiert, ist es unter Umständen weiterhin anfällig für Denial-of-Service-Angriffe, Out-of-Memory-Angriffe und bislang noch unbekannte Deserialisierungs-Exploits.
Adobe unterstützt offiziell Java 6, 7 und 8. Nach unserem Kenntnisstand unterstützt NotSoSerial aber auch Java 5.

Installieren des Agents

Falls Sie bereits das Serialisierungshotfix für AEM 6.1 installiert haben, entfernen Sie die Startbefehle für den Agent aus Ihrer Java-Ausführungszeile.
  1. Installieren Sie das Bundle com.adobe.cq.cq-serialization-tester .
  2. Go to the Bundle Web Console at https://server:port/system/console/bundles
  3. Suchen Sie nach dem Serialisierungsbundle und starten Sie es. Daraufhin wird der NotSoSerial-Agent automatisch dynamisch geladen.

Installieren des Agents auf Anwendungsservern

Der NotSoSerial-Agent ist nicht in der Standardverteilung von AEM für Anwendungsserver enthalten. Sie können ihn jedoch aus der AEM-JAR-Distribution extrahieren und mit Ihrer Anwendungsservereinrichtung verwenden:
  1. Laden Sie zuerst die AEM-Schnellstartdatei herunter und extrahieren Sie sie:
    java -jar aem-quickstart-6.2.0.jar -unpack
    
    
  2. Go to the location of the newly unzipped AEM quickstart, and copy the crx-quickstart/opt/notsoserial/ folder to the crx-quickstart folder of the AEM application server installation.
  3. Change the ownership of /opt to the user running the server:
    chown -R opt <user running the server>
    
    
  4. Konfigurieren Sie den Agent und vergewissern Sie sich, dass er ordnungsgemäß aktiviert wurde, wie in den folgenden Abschnitten dieses Artikels gezeigt.

Konfigurieren des Agents

Die Standardkonfiguration ist für die meisten Installationen ausreichend. Dies umfasst eine blockierungsliste von bekannten, durch entfernte Ausführung gefährdeten Klassen und eine zulassungsliste von Paketen, bei denen die Deserialisierung von vertrauenswürdigen Daten relativ sicher sein sollte.
Die Firewallkonfiguration ist dynamisch und kann jederzeit wie folgt geändert werden:
  1. Going to the Web Console at https://server:port/system/console/configMgr
  2. Suchen Sie nach Deserialization Firewall Configuration und klicken Sie darauf.
    Die Konfigurationsseite kann auch direkt über die URL aufgerufen werden:
    • https://server:port/system/console/configMgr/com.adobe.cq.deserfw.impl.DeserializationFirewallImpl
Diese Konfiguration enthält die Protokollierung von zulassungsliste, blockierungsliste und Deserialisierung.
Listen zulassen
Im Abschnitt Listen zulassen sind dies Klassen oder Paket-Präfixe, die zur Deserialisierung zugelassen werden. Es ist wichtig zu beachten, dass Sie, wenn Sie eigene Klassen deserialisieren, entweder die Klassen oder Pakete zu dieser zulassungsliste hinzufügen müssen.
Blockliste
Im Abschnitt Blockauflistungen finden Sie Klassen, die niemals deserialisiert werden dürfen. Standardmäßig umfasst die Liste nur Klassen, die für Remoteausführungsangriffe anfällig sind. Die blockierungsliste wird vor allen zulässigen Einträgen angewendet.
Diagnoseprotokollierung
Im Abschnitt zur Diagnoseprotokollierung können Sie mehrere Optionen auswählen, die protokolliert werden sollen, wenn eine Deserialisierung stattfindet. Diese werden nur bei der ersten Verwendung protokolliert. Bei erneuter Verwendung findet keine erneute Protokollierung statt.
Der Standardwert class-name-only gibt Aufschluss über die Klassen, die deserialisiert werden.
Sie können auch die Option full-stack festlegen. In diesem Fall wird ein Java-Stack des ersten Deserialisierungsversuchs protokolliert, um Sie darüber zu informieren, wo Ihre Deserialisierung stattfindet. Dies kann hilfreich sein, um Deserialisierungsvorkommen zu ermitteln und zu entfernen.

Überprüfen der Agent-Aktivierung

Die Konfiguration des Deserialisierungs-Agents kann unter folgender URL geprüft werden:
  • https://server:port/system/console/healthcheck?tags=deserialization
Unter der URL wird eine Liste mit Integritätsprüfungen für den Agent angezeigt. Sind die Integritätsprüfungen erfolgreich, wurde der Agent ordnungsgemäß aktiviert. Im Falle eines Fehlers muss der Agent ggf. manuell geladen werden.
Weitere Informationen zum Behandeln von Problemen mit dem Agent finden Sie weiter unten unter Behandeln von Fehlern beim dynamischen Laden des Agents .
If you add org.apache.commons.collections.functors to the allow list, the health check will always fail.

Behandeln von Fehlern beim dynamischen Laden des Agents

Wenn das Protokoll Fehler enthält oder bei den Überprüfungsschritten ein Ladeproblem für den Agent festgestellt wird, muss der Agent ggf. manuell geladen werden. Dies empfiehlt sich auch, wenn Sie anstelle eines JDK (Java Development Kit) eine JRE (Java Runtime Environment) verwenden, da in diesem Fall die Tools für dynamisches Laden nicht zur Verfügung stehen.
Gehen Sie zum manuellen Laden des Agents wie folgt vor:
  1. Ändern Sie die JVM-Startparameter der CQ-JAR-Datei, indem Sie folgende Option hinzufügen:
    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    
    Dies erfordert auch die Verwendung der Option „-nofork CQ/AEM“ und der entsprechenden JVM-Arbeitsspeichereinstellungen, da der Agent für eine geforkte JVM-Instanz nicht aktiviert wird.
    The Adobe distribution of the NotSoSerial agent jar can be found in the crx-quickstart/opt/notsoserial/ folder of your AEM installation.
  2. Beenden Sie die JVM-Instanz und starten Sie sie neu.
  3. Überprüfen Sie mithilfe der unter Überprüfen der Agent-Aktivierung beschriebenen Schritte erneut die Aktivierung des Agents.

Weitere Überlegungen

Lesen Sie bei Verwendung einer JVM von IBM die Dokumentation zur Unterstützung der Java Attach-API. Diese finden Sie hier .