Beheben von Serialisierungsproblemen in AEM

Überblick

Das AEM-Team in der Adobe arbeitete eng mit dem Open-Source-Projekt zusammen NotSoSerial zur Behebung der in CVE-2015-7501. 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 Java™-Level-Lösung für ein Java™-Level-Problem und ist nicht AEM-spezifisch. Sie fügt einem Deserialisierungsversuch für ein Objekt eine Preflight-Prüfung hinzu. Diese Prüfung testet einen Klassennamen anhand einer Zulassungsliste im Firewall-Stil, einer Blockierungsliste oder beidem. Aufgrund der begrenzten Anzahl von Klassen in der standardmäßigen Blockierungsliste ist es unwahrscheinlich, dass dieser Test Auswirkungen auf Ihre Systeme oder Ihren Code hat.

Standardmäßig führt der Agent eine Überprüfung der Blockierungsliste anhand der aktuellen bekannten anfälligen Klassen durch. Diese Blockierungsliste soll Sie vor der aktuellen Liste der Exploits schützen, die diese Art von Verwundbarkeit nutzen.

Die Blockierungsliste- und Zulassungsliste-Konfiguration kann gemäß den Anweisungen im Abschnitt Konfigurieren des Agenten Abschnitt dieses Artikels.

Der Agent soll dazu beitragen, die neuesten bekannten gefährdeten Klassen zu reduzieren. Wenn Ihr Projekt nicht vertrauenswürdige Daten deserialisiert, kann es dennoch anfällig für Denial-of-Service-Angriffe, Speicherangriffe und unbekannte zukünftige Deserialisierungs-Exploits sein.

Adobe unterstützt offiziell Java™ 6, 7 und 8. Nach Auffassung der Adobe unterstützt NotSoSerial jedoch auch Java™ 5.

Installieren des Agenten

HINWEIS

Wenn Sie den Serialisierungs-Hotfix für AEM 6.1 bereits installiert haben, entfernen Sie die Befehle zum Starten des Agenten aus Ihrer Java™-Ausführungszeile.

  1. Installieren Sie das Bundle com.adobe.cq.cq-serialization-tester.

  2. Navigieren Sie zur Bundle-Web-Konsole (https://server:port/system/console/bundles).

  3. Suchen Sie nach dem Serialisierungs-Bundle und starten Sie es. Dadurch wird der NotSoSerial-Agent dynamisch automatisch geladen.

Installieren des Agenten auf Anwendungs-Servern

Der NotSoSerial-Agent ist nicht in der AEM-Standarddistribution für Anwendungs-Server enthalten. Sie können es jedoch aus der AEM JAR-Distribution extrahieren und mit Ihrem Anwendungsserver-Setup verwenden:

  1. Laden Sie zunächst die AEM Schnellstartdatei herunter und extrahieren Sie sie:

    java -jar aem-quickstart-6.2.0.jar -unpack
    
  2. Navigieren Sie zum Speicherort des gerade entpackten Schnellstarts und kopieren Sie den Ordner crx-quickstart/opt/notsoserial/ in den Ordner crx-quickstart der AEM-Anwendungs-Server-Installation.

  3. Legen Sie den Benutzer, der den Server betreibt, als Besitzer von /opt fest:

    chown -R opt <user running the server>
    
  4. Konfigurieren Sie den Agenten und vergewissern Sie sich, dass er ordnungsgemäß aktiviert wurde, wie in den folgenden Abschnitten dieses Artikels gezeigt.

Konfigurieren des Agenten

Die Standardkonfiguration ist für die meisten Installationen ausreichend. Diese Konfiguration umfasst eine Blockierungsliste bekannter anfälliger Remote-Klassen und eine Zulassungsliste von Paketen, in denen die Deserialisierung vertrauenswürdiger Daten sicher ist.

Die Firewall-Konfiguration ist dynamisch und kann jederzeit wie folgt geändert werden:

  1. Wechseln zur Web-Konsole unter https://server:port/system/console/configMgr

  2. Suchen nach und Klicken Deserialisierungs-Firewall-Konfiguration.

    HINWEIS

    Sie können die Konfigurationsseite auch direkt erreichen, indem Sie auf die URL zugreifen:

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

Diese Konfiguration enthält die Zulassungsliste, die Blockierungsliste und die Deserialisierungs-Protokollierung.

Zulassungslisten

Im Abschnitt zur Zulassungsauflistung sind diese Auflistungen Klassen oder Paketpräfixe, die zur Deserialisierung zugelassen sind. Wenn Sie eigene Klassen deserialisieren, fügen Sie entweder die Klassen oder Pakete zu dieser Zulassungsliste hinzu.

Blockierungslisten

Im Abschnitt zur Blockierungsauflistung finden Sie Klassen, die nie zur Deserialisierung zugelassen werden. Standardmäßig umfasst die Liste nur Klassen, die für Remoteausführungsangriffe anfällig sind. Die Blockierungsliste ""wird vor allen in der Zulassungsliste aufgeführten Einträgen angewendet.

Diagnostische Protokollierung

Im Abschnitt zur Diagnoseprotokollierung können Sie mehrere Optionen auswählen, die protokolliert werden sollen, wenn eine Deserialisierung stattfindet. Diese Optionen werden nur bei der ersten Verwendung protokolliert und bei nachfolgenden Verwendungen nicht erneut protokolliert.

Der Standardwert von class-name-only informiert Sie über die Klassen, die deserialisiert werden.

Sie können auch die Vollstapel -Option, die einen Java™-Stapel des ersten Deserialisierungsversuchs protokolliert, um Sie darüber zu informieren, wo Ihre Deserialisierung stattfindet. Diese Option ist nützlich, um Deserialisierungen aus Ihrer Verwendung zu finden und zu entfernen.

Überprüfen der Agenten-Aktivierung

Die Konfiguration des Deserialisierungs-Agenten kann unter folgender URL geprüft werden:

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

Nachdem Sie auf die URL zugegriffen haben, wird eine Liste mit Konsistenzprüfungen im Zusammenhang mit dem Agenten angezeigt. Sie können feststellen, ob der Agent ordnungsgemäß aktiviert ist, indem Sie überprüfen, ob die Konsistenzprüfungen erfolgreich sind. Wenn sie fehlschlagen, müssen Sie den Agenten manuell laden.

Weitere Informationen zum Behandeln von Problemen mit dem Agenten finden Sie weiter unten unter Behandeln von Fehlern beim dynamischen Laden des Agenten.

HINWEIS

Wenn Sie org.apache.commons.collections.functors auf die Zulassungsliste klicken, schlägt die Konsistenzprüfung immer fehl.

Behandeln von Fehlern beim dynamischen Laden des Agenten

Wenn Fehler im Protokoll angezeigt werden oder die Überprüfungsschritte ein Problem beim Laden des Agenten erkennen, laden Sie den Agenten manuell. Dieser Workflow wird auch empfohlen, wenn Sie JRE (Java™ Runtime Environment) anstelle eines JDK (Java™ Development Toolkit) verwenden, da die Tools für das dynamische Laden nicht verfügbar sind.

Gehen Sie wie folgt vor, um den Agenten manuell zu laden:

  1. Bearbeiten Sie die JVM-Startparameter der CQ-JAR-Datei und fügen Sie die folgende Option hinzu:

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

    Erfordert, dass Sie auch die Option -nofork CQ/AEM zusammen mit den entsprechenden JVM-Speichereinstellungen verwenden, da der Agent auf einer abgespalteten JVM nicht aktiviert ist.

    HINWEIS

    Die Adobe-Distribution der JAR-Datei des NotSoSerial-Agenten finden Sie im Ordner crx-quickstart/opt/notsoserial/ Ihrer AEM-Installation.

  2. Beenden Sie die JVM-Instanz und starten Sie sie neu.

  3. Überprüfen Sie mithilfe der unter Überprüfen der Agenten-Aktivierung beschriebenen Schritte erneut die Aktivierung des Agenten.

Weitere Überlegungen

Wenn Sie mit einer IBM® JVM arbeiten, lesen Sie die Dokumentation zur Unterstützung der Java™ Attach-API unter dieser Speicherort.

Auf dieser Seite