Perintah dan Kontrol: Eksekusi Kode yang Dikodekan dengan Pipa

Dokumen ini menjelaskan jenis temuan ancaman di Security Command Center. Temuan ancaman dihasilkan oleh detektor ancaman saat mendeteksi potensi ancaman di resource cloud Anda. Untuk daftar lengkap temuan ancaman yang tersedia, lihat Indeks temuan ancaman.

Ringkasan

Command and Control: Piped Encoded Code Execution mendeteksi saat output perintah base64 --decode langsung di-pipe ke interpreter shell seperti python, perl, php, ruby, atau ssh.

Jika ancaman ditemukan di luar workload yang diharapkan, seperti pipeline CI/CD, hal ini merupakan indikasi kuat aktivitas berbahaya. Penyerang biasanya menggunakan metode ini untuk menjalankan skrip atau perintah yang di-obfuscate. Encoding base64 menyembunyikan kode sebenarnya yang dijalankan, dan langsung me-pipe-nya ke interpreter memungkinkan eksekusi langsung tanpa menulis skrip yang didekode ke disk, sehingga lebih tersembunyi.

Sebaiknya selalu segera ambil tindakan atas temuan ini jika terjadi pada workload yang tidak terduga. Workload yang tidak berbahaya menggunakan encoding base64 terutama untuk mentransfer data biner atau data yang berisi karakter khusus secara aman melalui sistem dan protokol berbasis teks yang mungkin merusak data. Namun, setiap eksekusi kode dapat secara langsung memengaruhi dan membahayakan sistem Anda lebih lanjut, jadi pastikan Anda selalu memperlakukan temuan ini sebagai berbahaya hingga terbukti sebaliknya.

Container Threat Detection adalah sumber temuan ini.

Cara merespons

Untuk merespons temuan ini, lakukan hal berikut:

Langkah 1: Tinjau detail temuan

  1. Buka temuan Command and Control: Piped Encoded Code Execution seperti yang diarahkan dalam Meninjau temuan. Panel detail untuk temuan akan terbuka di tab Ringkasan.

  2. Di tab Ringkasan, tinjau informasi di bagian berikut:

    • Yang terdeteksi, terutama kolom berikut:
      • Biner program: jalur absolut biner yang dieksekusi.
      • Argumen: argumen yang diteruskan selama eksekusi biner.
    • Resource yang terpengaruh, terutama kolom berikut:
      • Nama lengkap resource: nama lengkap resource cluster yang mencakup nomor project, lokasi, dan nama cluster.
  3. Di tampilan detail temuan, klik tab JSON.

  4. Dalam JSON, perhatikan kolom berikut.

    • resource:
      • project_display_name: nama project yang berisi cluster.
    • finding:
      • processes:
      • binary:
        • path: jalur lengkap biner yang dieksekusi.
      • args: argumen yang diberikan saat menjalankan biner.
    • sourceProperties:
      • Pod_Namespace: nama namespace Kubernetes Pod.
      • Pod_Name: nama Pod GKE.
      • Container_Name: nama container yang terpengaruh.
      • Container_Image_Uri: nama image container yang di-deploy.
      • VM_Instance_Name: nama node GKE tempat Pod dieksekusi.
  5. Identifikasi temuan lain yang terjadi pada waktu yang sama untuk container ini. Temuan terkait mungkin menunjukkan bahwa aktivitas ini berbahaya, bukan kegagalan untuk mengikuti praktik terbaik.

Langkah 2: Tinjau cluster dan node

  1. Di Google Cloud konsol, buka halaman Cluster Kubernetes.

    Buka cluster Kubernetes

  2. Di toolbar konsol, pilih project yang tercantum di resource.project_display_name, jika perlu. Google Cloud

  3. Pilih cluster yang tercantum di baris Nama lengkap resource di tab Ringkasan detail temuan. Catat metadata apa pun tentang cluster dan pemiliknya.

  4. Klik tab Node. Pilih node yang tercantum di VM_Instance_Name.

  5. Klik tab Detail dan catat anotasi container.googleapis.com/instance_id.

Langkah 3: Tinjau Pod

  1. Di Google Cloud konsol, buka halaman Workload Kubernetes.

    Buka Workload Kubernetes

  2. Di toolbar konsol, pilih project yang tercantum di resource.project_display_name, jika perlu. Google Cloud

  3. Filter berdasarkan cluster yang ditentukan di baris Nama lengkap resource pada tab Ringkasan di detail temuan dan, jika perlu, berdasarkan namespace Pod yang tercantum di Pod_Namespace.

  4. Pilih Pod yang tercantum di Pod_Name. Catat metadata apa pun tentang Pod dan pemiliknya.

Langkah 4: Periksa log

  1. Di Google Cloud konsol, buka Logs Explorer.

    Buka Logs Explorer

  2. Di toolbar konsol, pilih project yang tercantum di resource.project_display_name, jika perlu. Google Cloud

  3. Tetapkan Pilih rentang waktu ke periode yang diinginkan.

  4. Di halaman yang dimuat, lakukan hal berikut:

    1. Temukan log Pod untuk Pod_Name menggunakan filter berikut:
      • 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. Temukan log audit cluster menggunakan filter berikut:
      • 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. Temukan log konsol node GKE menggunakan filter berikut:
      • resource.type="gce_instance"
      • resource.labels.instance_id="INSTANCE_ID"

Langkah 5: Selidiki container yang sedang berjalan

Jika container masih berjalan, Anda mungkin dapat menyelidiki lingkungan container secara langsung.

  1. Buka konsol Google Cloud .

    Buka Google Cloud konsol

  2. Di toolbar konsol, pilih project yang tercantum di resource.project_display_name, jika perlu. Google Cloud

  3. Klik Aktifkan Cloud Shell

  4. Dapatkan kredensial GKE untuk cluster Anda dengan menjalankan perintah berikut.

    Untuk cluster zona:

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

    Untuk cluster regional:

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

Ganti kode berikut:

  • CLUSTER_NAME: cluster yang tercantum di resource.labels.cluster_name
  • LOCATION: lokasi yang tercantum di resource.labels.location
  • PROJECT_NAME: nama project yang tercantum di resource.project_display_name
  1. Ambil biner yang dieksekusi:

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

    Ganti LOCAL_FILE dengan jalur lokal untuk menyimpan program biner yang didownload.

  2. Hubungkan ke lingkungan container dengan menjalankan perintah berikut:

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

    Perintah ini mengharuskan container memiliki shell yang diinstal di /bin/sh.

Langkah 6: Teliti metode serangan dan respons

  1. Tinjau entri framework MITRE ATT&CK untuk jenis temuan ini: Perintah dan Kontrol.
  2. Untuk mengembangkan rencana respons, gabungkan hasil penyelidikan Anda dengan penelitian MITRE.

Langkah 7: Terapkan respons Anda

Rencana respons berikut mungkin sesuai untuk temuan ini, tetapi juga dapat memengaruhi operasi. Evaluasi dengan cermat informasi yang Anda kumpulkan dalam penyelidikan untuk menentukan cara terbaik dalam menyelesaikan temuan.

  • Hubungi pemilik project yang berisi container yang terpengaruh.
  • Hentikan atau hapus container yang terpengaruh dan ganti dengan container baru.

Langkah berikutnya