Contournement des défenses : ligne de commande avec fichier ELF en base64

Ce document décrit un type de résultat de menace dans Security Command Center. Les résultats de menace sont générés par les détecteurs de menaces lorsqu'ils détectent une menace potentielle dans vos ressources cloud. Pour obtenir la liste complète des résultats de menace disponibles, consultez l'index des résultats de menace.

Présentation

Un processus a été exécuté et contient un argument qui est un fichier ELF (Executable and Linkable Format). Si l'exécution d'un fichier ELF encodé est détectée, cela indique qu'un pirate informatique tente d'encoder des données binaires pour les transférer vers des lignes de commande ASCII uniquement. Les pirates informatiques peuvent utiliser cette technique pour échapper à la détection et exécuter du code malveillant intégré dans un fichier ELF.

Comment répondre

Pour répondre à ce résultat, procédez comme suit :

Étape 1 : Examiner les détails du résultat

  1. Ouvrez un résultat Defense Evasion: Base64 ELF File Command Line comme indiqué dans la section Examiner les résultats. Le panneau d'informations sur le résultat s'ouvre dans l'onglet Résumé.

  2. Dans l'onglet Récapitulatif, examinez les informations des sections suivantes :

    • Ce qui a été détecté, en particulier les champs suivants :
      • Binaire du programme : chemin d'accès absolu du binaire exécuté.
      • Arguments : arguments transmis lors de l'exécution du binaire.
    • Ressource concernée, en particulier les champs suivants :
      • Nom complet de la ressource : nom complet de la ressource du cluster, y compris le numéro de projet, l'emplacement et le nom du cluster.
  3. Dans la vue détaillée du résultat, cliquez sur l'onglet JSON.

  4. Dans le fichier JSON, notez les champs suivants.

    • resource :
      • project_display_name : nom du projet contenant le cluster.
    • finding :
      • processes :
      • binary :
        • path : chemin d'accès complet du binaire exécuté.
      • args : arguments fournis lors de l'exécution du binaire.
    • sourceProperties :
      • Pod_Namespace : nom de l'espace de noms Kubernetes du pod.
      • Pod_Name : nom du pod GKE.
      • Container_Name : nom du conteneur concerné.
      • Container_Image_Uri : nom de l'image de conteneur en cours de déploiement.
      • VM_Instance_Name : nom du nœud GKE sur lequel le pod a été exécuté.
  5. Identifiez d'autres résultats qui se sont produits à une période similaire pour ce conteneur. Les résultats associés peuvent indiquer que cette activité était malveillante, plutôt qu'un manquement aux bonnes pratiques.

Étape 2 : Vérifier le cluster et le nœud

  1. Dans la console Google Cloud , accédez à la page Clusters Kubernetes.

    Accéder à la page "Clusters Kubernetes"

  2. Dans la barre d'outils de la console Google Cloud , sélectionnez le projet listé dans resource.project_display_name, si nécessaire.

  3. Sélectionnez le cluster listé sur la ligne Nom complet de la ressource dans l'onglet Résumé des détails du résultat. Notez toutes les métadonnées concernant le cluster et son propriétaire.

  4. Cliquez sur l'onglet Nœuds. Sélectionnez le nœud répertorié dans VM_Instance_Name.

  5. Cliquez sur l'onglet Détails et notez l'annotation container.googleapis.com/instance_id.

Étape 3 : Examiner le pod

  1. Dans la console Google Cloud , accédez à la page Charges de travail Kubernetes.

    Accéder à la page "Charges de travail Kubernetes"

  2. Dans la barre d'outils de la console Google Cloud , sélectionnez le projet listé dans resource.project_display_name, si nécessaire.

  3. Filtrez le cluster listé dans la ligne Nom complet de la ressource de l'onglet Résumé des détails du résultat et l'espace de noms du pod listé dans Pod_Namespace, si nécessaire.

  4. Sélectionnez le pod répertorié dans Pod_Name. Notez les métadonnées concernant le pod et son propriétaire.

Étape 4 : Vérifier les journaux

  1. Dans la console Google Cloud , accédez à l'explorateur de journaux.

    Accéder à l'explorateur de journaux

  2. Dans la barre d'outils de la console Google Cloud , sélectionnez le projet listé dans resource.project_display_name, si nécessaire.

  3. Définissez Sélectionner une période sur la période qui vous intéresse.

  4. Sur la page qui s'affiche, procédez comme suit :

    1. Recherchez Pod_Name dans les journaux des pods à l'aide du filtre suivant :
      • 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. Recherchez les journaux d'audit du cluster à l'aide du filtre suivant :
      • 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. Recherchez les journaux de la console de nœud GKE à l'aide du filtre suivant :
      • resource.type="gce_instance"
      • resource.labels.instance_id="INSTANCE_ID"

Étape 5 : Examiner le conteneur en cours d'exécution

Si le conteneur est toujours en cours d'exécution, il peut être possible d'analyser directement l'environnement du conteneur.

  1. Accédez à la console Google Cloud .

    Ouvrir la console Google Cloud

  2. Dans la barre d'outils de la console Google Cloud , sélectionnez le projet listé dans resource.project_display_name, si nécessaire.

  3. Cliquez sur Activer Cloud Shell.

  4. Obtenez les identifiants GKE pour votre cluster en exécutant les commandes suivantes.

    Pour les clusters zonaux :

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

    Pour les clusters régionaux :

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

    Remplacez les éléments suivants :

    • CLUSTER_NAME : cluster répertorié dans resource.labels.cluster_name
    • LOCATION : emplacement répertorié dans resource.labels.location
    • PROJECT_NAME : nom du projet répertorié dans resource.project_display_name
  5. Récupérez le binaire exécuté :

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

    Remplacez local_file par un chemin d'accès au fichier local pour stocker le binaire ajouté.

  6. Connectez-vous à l'environnement de conteneur en exécutant la commande suivante :

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

    Pour ce faire, une interface système est installée sur le conteneur à l'adresse /bin/sh.

Étape 6 : Étudier les méthodes d'attaque et de réponse

  1. Examinez les entrées du framework MITRE ATT&CK pour ce type de résultat : Évasion des défenses : fichiers ou informations obscurcis.
  2. Pour élaborer un plan de réponse, combinez les résultats de vos enquêtes avec la recherche MITRE.

Étape 7 : Mettre en œuvre votre réponse

Le plan de réponse suivant peut être adapté à ce résultat, mais peut également avoir une incidence sur les opérations. Évaluez soigneusement les informations que vous collectez dans votre enquête pour déterminer la meilleure façon de solutionner les menaces détectées.

  • Contactez le propriétaire du projet contenant le conteneur compromis.
  • Arrêtez ou supprimez le conteneur compromis et remplacez-le par un nouveau conteneur.

Étapes suivantes