Comando e controllo: esecuzione di codice codificato con pipe

Questo documento descrive un tipo di risultato di minaccia in Security Command Center. I risultati delle minacce vengono generati dai rilevatori di minacce quando rilevano una potenziale minaccia nelle tue risorse cloud. Per un elenco completo dei risultati relativi alle minacce disponibili, consulta l'Indice dei risultati relativi alle minacce.

Panoramica

Command and Control: Piped Encoded Code Execution rileva quando l'output di un comando base64 --decode viene inviato direttamente a un interprete della shell come python, perl, php, ruby o ssh.

Quando viene rilevata una minaccia al di fuori di un carico di lavoro previsto, ad esempio una pipeline CI/CD, questo è un forte segnale di attività dannosa. I malintenzionati utilizzano regolarmente questo metodo per eseguire script o comandi offuscati. La codifica Base64 nasconde il codice effettivo in esecuzione e il piping diretto a un interprete consente l'esecuzione immediata senza scrivere lo script decodificato su disco, rendendolo più furtivo.

Ti consigliamo di intervenire sempre immediatamente su questo risultato quando si verifica in un carico di lavoro imprevisto. I carichi di lavoro benigni utilizzano la codifica base64 principalmente per trasferire in modo sicuro dati binari o dati contenenti caratteri speciali tramite sistemi e protocolli basati su testo che altrimenti potrebbero danneggiare i dati. Tuttavia, qualsiasi esecuzione di codice può influire direttamente sul sistema e comprometterlo ulteriormente, quindi assicurati di trattare sempre questo risultato come dannoso fino a prova contraria.

Container Threat Detection è l'origine di questo risultato.

Come rispondere

Per rispondere a questo risultato:

Passaggio 1: esamina i dettagli del risultato

  1. Apri un risultato Command and Control: Piped Encoded Code Execution come indicato in Revisione dei risultati. Il riquadro dei dettagli del risultato si apre nella scheda Riepilogo.

  2. Nella scheda Riepilogo, esamina le informazioni nelle seguenti sezioni:

    • Che cosa è stato rilevato, in particolare i seguenti campi:
      • Programma binario: il percorso assoluto del binario eseguito.
      • Argomenti: gli argomenti passati durante l'esecuzione del binario.
    • Risorsa interessata, in particolare i seguenti campi:
      • Nome completo della risorsa: il nome completo della risorsa del cluster, inclusi il numero di progetto, la località e il nome del cluster.
  3. Nella visualizzazione dettagliata del risultato, fai clic sulla scheda JSON.

  4. Nel JSON, prendi nota dei seguenti campi.

    • resource:
      • project_display_name: il nome del progetto che contiene il cluster.
    • finding:
      • processes:
      • binary:
        • path: il percorso completo del file binario eseguito.
      • args: gli argomenti forniti durante l'esecuzione del file binario.
    • sourceProperties:
      • Pod_Namespace: il nome dello spazio dei nomi Kubernetes del pod.
      • Pod_Name: il nome del pod GKE.
      • Container_Name: il nome del container interessato.
      • Container_Image_Uri: il nome dell'immagine del container di cui viene eseguito il deployment.
      • VM_Instance_Name: il nome del nodo GKE in cui è stato eseguito il pod.
  5. Identifica altri risultati che si sono verificati in un momento simile per questo container. I risultati correlati potrebbero indicare che questa attività era dannosa, anziché un mancato rispetto delle best practice.

Passaggio 2: esamina il cluster e il nodo

  1. Nella console Google Cloud , vai alla pagina Cluster Kubernetes.

    Vai a Cluster Kubernetes

  2. Nella barra degli strumenti della console Google Cloud , seleziona il progetto elencato inresource.project_display_name, se necessario.

  3. Seleziona il cluster elencato nella riga Nome completo risorsa nella scheda Riepilogo dei dettagli del risultato. Prendi nota di eventuali metadati sul cluster e sul suo proprietario.

  4. Fai clic sulla scheda Nodi. Seleziona il nodo elencato in VM_Instance_Name.

  5. Fai clic sulla scheda Dettagli e prendi nota dell'annotazione container.googleapis.com/instance_id.

Passaggio 3: rivedi il pod

  1. Nella console Google Cloud , vai alla pagina Workload Kubernetes.

    Vai a Carichi di lavoro Kubernetes

  2. Nella barra degli strumenti della console Google Cloud , seleziona il progetto elencato inresource.project_display_name, se necessario.

  3. Filtra in base al cluster specificato nella riga Nome completo risorsa della scheda Riepilogo nei dettagli del problema e, se necessario, in base allo spazio dei nomi del pod elencato in Pod_Namespace.

  4. Seleziona il pod elencato in Pod_Name. Prendi nota di eventuali metadati relativi al pod e al suo proprietario.

Passaggio 4: controlla i log

  1. Nella console Google Cloud , vai a Esplora log.

    Vai a Esplora log

  2. Nella barra degli strumenti della console Google Cloud , seleziona il progetto elencato inresource.project_display_name, se necessario.

  3. Imposta Seleziona intervallo di tempo sul periodo di interesse.

  4. Nella pagina che viene caricata, segui questi passaggi:

    1. Trova i log dei pod per Pod_Name utilizzando il seguente filtro:
      • 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. Trova gli audit log del cluster utilizzando il seguente filtro:
      • 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. Trova i log della console dei nodi GKE utilizzando il seguente filtro:
      • resource.type="gce_instance"
      • resource.labels.instance_id="INSTANCE_ID"

Passaggio 5: esamina il contenitore in esecuzione

Se il container è ancora in esecuzione, potrebbe essere possibile esaminare direttamente l'ambiente del container.

  1. Vai alla console Google Cloud .

    Apri la Google Cloud console

  2. Nella barra degli strumenti della console Google Cloud , seleziona il progetto elencato inresource.project_display_name, se necessario.

  3. Fai clic su Attiva Cloud Shell

  4. Ottieni le credenziali GKE per il tuo cluster eseguendo i seguenti comandi.

    Per i cluster di zona:

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

    Per i cluster regionali:

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

Sostituisci quanto segue:

  • CLUSTER_NAME: il cluster elencato in resource.labels.cluster_name
  • LOCATION: la posizione elencata in resource.labels.location
  • PROJECT_NAME: il nome del progetto elencato in resource.project_display_name
  1. Recupera il file binario eseguito:

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

    Sostituisci LOCAL_FILE con un percorso locale per archiviare il file binario scaricato.

  2. Connettiti all'ambiente container eseguendo il seguente comando:

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

    Questo comando richiede che nel contenitore sia installata una shell in /bin/sh.

Passaggio 6: ricerca di metodi di attacco e risposta

  1. Esamina le voci del framework MITRE ATT&CK per questo tipo di risultato: Command and Control.
  2. Per sviluppare un piano di risposta, combina i risultati dell'indagine con la ricerca MITRE.

Passaggio 7: implementa la risposta

Il seguente piano di risposta potrebbe essere appropriato per questo risultato, ma potrebbe anche influire sulle operazioni. Valuta attentamente le informazioni raccolte durante l'indagine per determinare il modo migliore per risolvere i risultati.

  • Contatta il proprietario del progetto che contiene il container compromesso.
  • Interrompi o elimina il container compromesso e sostituiscilo con un nuovo container.

Passaggi successivi