Umgehung von Abwehrmaßnahmen: Base64-codierte ELF-Cmdline-Datei

In diesem Dokument wird ein Typ von Bedrohungsergebnissen in Security Command Center beschrieben. Bedrohungsergebnisse werden von Bedrohungsdetektoren generiert, wenn sie eine potenzielle Bedrohung in Ihren Cloud-Ressourcen erkennen. Eine vollständige Liste der verfügbaren Bedrohungsergebnisse finden Sie im Index der Bedrohungsergebnisse.

Übersicht

Es wurde ein Prozess ausgeführt, der ein Argument enthält, das eine ELF-Datei (Executable and Linkable Format) ist. Wenn die Ausführung einer codierten ELF-Datei erkannt wird, ist das ein Signal dafür, dass ein Angreifer versucht, Binärdaten für die Übertragung an reine ASCII-Befehlszeilen zu codieren. Angreifer können diese Technik verwenden, um die Erkennung zu umgehen und bösartigen Code auszuführen, der in eine ELF-Datei eingebettet ist.

So reagieren Sie

Gehen Sie folgendermaßen vor, um auf dieses Ergebnis zu reagieren:

Schritt 1: Ergebnisdetails prüfen

  1. Öffnen Sie ein Defense Evasion: Base64 ELF File Command Line-Ergebnis, wie unter Ergebnisse prüfen beschrieben. Der Detailbereich für das Ergebnis wird geöffnet und der Tab Zusammenfassung wird angezeigt.

  2. Sehen Sie sich auf dem Tab Zusammenfassung die Informationen in den folgenden Abschnitten an:

    • Was wurde erkannt?, insbesondere die folgenden Felder:
      • Programmbinärdatei: der absolute Pfad der ausgeführten Binärdatei.
      • Argumente: Die Argumente, die während der Ausführung der Binärdatei übergeben werden.
    • Betroffene Ressource, insbesondere die folgenden Felder:
  3. Klicken Sie in der Detailansicht des Ergebnisses auf den Tab JSON.

  4. Achten Sie in der JSON-Datei auf die folgenden Felder.

    • resource:
      • project_display_name: der Name des Projekts, das den Cluster enthält.
    • finding:
      • processes:
      • binary:
        • path: der vollständige Pfad der ausgeführten Binärdatei.
      • args: die Argumente, die beim Ausführen der Binärdatei angegeben wurden.
    • sourceProperties:
      • Pod_Namespace: der Name des Kubernetes-Namespace des Pods.
      • Pod_Name: der Name des GKE-Pods.
      • Container_Name: der Name des betroffenen Containers.
      • Container_Image_Uri: der Name des bereitgestellten Container-Images.
      • VM_Instance_Name: der Name des GKE-Knotens, auf dem der Pod ausgeführt wurde.
  5. Suchen Sie nach anderen Ergebnissen, die für diesen Container zu einem ähnlichen Zeitpunkt aufgetreten sind. Zugehörige Ergebnisse deuten möglicherweise darauf hin, dass diese Aktivität böswillig war und nicht auf einem Verstoß gegen Best Practices beruht.

Schritt 2: Cluster und Knoten prüfen

  1. Rufen Sie in der Google Cloud Console die Seite Kubernetes-Cluster auf.

    Zur Seite „Kubernetes-Cluster“

  2. Wählen Sie in der Symbolleiste der Google Cloud Console bei Bedarf das in resource.project_display_name aufgeführte Projekt aus.

  3. Wählen Sie den Cluster aus, der in den Ergebnisdetails auf dem Tab Zusammenfassung in der Zeile Vollständiger Ressourcenname aufgeführt ist. Notieren Sie sich alle Metadaten zum Cluster und zu seinem Inhaber.

  4. Klicken Sie auf den Tab Knoten. Wählen Sie den in VM_Instance_Name aufgeführten Knoten aus.

  5. Klicken Sie auf den Tab Details und notieren Sie sich die Annotation container.googleapis.com/instance_id.

Schritt 3: Pod überprüfen

  1. Rufen Sie in der Google Cloud Console die Seite Kubernetes-Arbeitslasten auf.

    Zur Seite „Kubernetes-Arbeitslasten“

  2. Wählen Sie in der Symbolleiste der Google Cloud Console bei Bedarf das in resource.project_display_name aufgeführte Projekt aus.

  3. Filtern Sie bei Bedarf nach dem Cluster, der in der Zeile Vollständiger Ressourcenname auf dem Tab Zusammenfassung der Ergebnisdetails aufgeführt ist, und dem in Pod_Namespace aufgeführten Pod-Namespace.

  4. Wählen Sie den in Pod_Name aufgeführten Pod aus. Notieren Sie sich alle Metadaten zum Pod und zu seinem Inhaber.

Schritt 4: Protokolle prüfen

  1. Rufen Sie in der Google Cloud Console den Log-Explorer auf.

    Zum Log-Explorer

  2. Wählen Sie in der Symbolleiste der Google Cloud Console bei Bedarf das in resource.project_display_name aufgeführte Projekt aus.

  3. Wählen Sie für Zeitraum auswählen den gewünschten Zeitraum aus.

  4. Gehen Sie auf der Seite, die geladen wird, so vor:

    1. Suchen Sie mit dem folgenden Filter Pod-Logs für Pod_Name:
      • resource.type="k8s_container"
      • resource.labels.project_id="RESOURCE.PROJECT_DISPLAY_NAME"
      • resource.labels.location="LOCATION"
      • resource.labels.cluster_name="CLUSTER_NAME"
      • resource.labels.namespace_name="POD_NAMESPACE"
      • resource.labels.pod_name="POD_NAME"
    2. Suchen Sie mit dem folgenden Filter Cluster-Audit-Logs:
      • logName="projects/RESOURCE.PROJECT_DISPLAY_NAME/logs/cloudaudit.googleapis.com%2Factivity"
      • resource.type="k8s_cluster"
      • resource.labels.project_id="RESOURCE.PROJECT_DISPLAY_NAME"
      • resource.labels.location="LOCATION"
      • resource.labels.cluster_name="CLUSTER_NAME"
      • POD_NAME
    3. Suchen Sie nach Logs der GKE-Knotenkonsole mit dem folgenden Filter:
      • resource.type="gce_instance"
      • resource.labels.instance_id="INSTANCE_ID"

Schritt 5: Laufenden Container prüfen

Wenn der Container noch ausgeführt wird, können Sie die Containerumgebung möglicherweise direkt untersuchen.

  1. Rufen Sie die Google Cloud Console auf.

    Google Cloud Konsole öffnen

  2. Wählen Sie in der Symbolleiste der Google Cloud Console bei Bedarf das in resource.project_display_name aufgeführte Projekt aus.

  3. Klicken Sie auf Cloud Shell aktivieren .

  4. Rufen Sie die GKE-Anmeldedaten für Ihren Cluster ab, indem Sie die folgenden Befehle ausführen.

    Für zonale Cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
          --zone LOCATION \
          --project PROJECT_NAME
    

    Für regionale Cluster:

    gcloud container clusters get-credentials CLUSTER_NAME \
          --region LOCATION \
          --project PROJECT_NAME
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: der in resource.labels.cluster_name aufgeführte Cluster
    • LOCATION: der in resource.labels.location aufgeführte Standort
    • PROJECT_NAME: der in resource.project_display_name aufgeführte Projektname
  5. Rufen Sie die ausgeführte Binärdatei ab:

    kubectl cp \
          POD_NAMESPACE/POD_NAME:PROCESS_BINARY_FULLPATH \
          -c CONTAINER_NAME \
          LOCAL_FILE
    

    Ersetzen Sie local_file durch einen lokalen Dateipfad zum Speichern der hinzugefügten Binärdatei.

  6. Stellen Sie eine Verbindung zur Containerumgebung her, indem Sie den folgenden Befehl ausführen:

    kubectl exec \
          --namespace=POD_NAMESPACE \
          -ti POD_NAME \
          -c CONTAINER_NAME \
          -- /bin/sh
    

    Bei diesem Befehl muss für den Container eine Shell unter /bin/sh installiert sein.

Schritt 6: Forschungsangriffs- und Reaktionsmethoden

  1. Prüfen Sie die MITRE-ATT&CK-Framework-Einträge für diesen Ergebnistyp: Defense Evasion: Obfuscated Files or Information.
  2. Um einen Antwortplan zu entwickeln, kombinieren Sie Ihre Prüfungsergebnisse mit der MITRE-Studie.

Schritt 7: Antwort implementieren

Der folgende Antwortplan ist möglicherweise für dieses Ergebnis geeignet, kann sich jedoch auch auf Vorgänge auswirken. Prüfen Sie die Informationen, die Sie im Rahmen Ihrer Untersuchung erfasst haben, sorgfältig, um die beste Lösung für die Ergebnisse zu ermitteln.

  • Wenden Sie sich an den Inhaber des Projekts mit dem manipulierten Container.
  • Beenden oder löschen Sie den manipulierten Container und ersetzen Sie ihn durch einen neuen Container.

Nächste Schritte