Tentang seccomp di GKE


Halaman ini memberikan informasi tentang mode komputasi aman (seccomp) Linux di Google Kubernetes Engine (GKE). Gunakan informasi ini untuk memahami tindakan yang dapat dilakukan aplikasi dalam container di virtual machine (VM) host yang mendukung node Anda.

Apa itu seccomp?

Mode komputasi aman, atau seccomp, adalah kemampuan keamanan di Linux yang memungkinkan Anda membatasi panggilan sistem (syscall) yang dapat dilakukan oleh suatu proses ke kernel Linux.

Secara default, node GKE menggunakan sistem operasi Container-Optimized OS dengan runtime container containerd. containerd melindungi kernel Linux dengan membatasi kemampuan Linux yang diizinkan ke daftar default. Anda juga dapat membatasi lebih lanjut syscall yang diizinkan dengan profil seccomp. containerd memiliki profil seccomp default yang tersedia. Penerapan profil seccomp default oleh GKE untuk Anda tergantung pada mode cluster yang Anda gunakan:

  • Autopilot (direkomendasikan): GKE menerapkan profil seccomp default containerd ke semua beban kerja secara otomatis.
  • Standard: GKE tidak menerapkan profil seccomp default containerd ke semua workload secara otomatis. Sebaiknya terapkan profil seccomp default atau profil seccomp kustom ke workload Anda.

Profil seccomp containerd default menyediakan hardening dasar sekaligus mempertahankan kompatibilitas dengan sebagian besar workload. Definisi profil seccomp lengkap untuk containerd tersedia di GitHub.

Kemampuan dan syscall Linux

Proses non-root yang berjalan di sistem Linux mungkin memerlukan hak istimewa khusus untuk melakukan tindakan sebagai pengguna root. Linux menggunakan kemampuan untuk membagi hak istimewa yang tersedia menjadi beberapa grup, sehingga proses non-root dapat melakukan tindakan tertentu tanpa diberi semua hak istimewa. Agar suatu proses berhasil membuat syscall tertentu, proses tersebut harus memiliki hak istimewa yang sesuai yang diberikan oleh kemampuan.

Untuk daftar semua kemampuan Linux, lihat capabilities .

Syscall yang ditolak di profil seccomp GKE default

Profil seccomp default containerd memblokir semua syscall, lalu secara selektif mengizinkan syscall tertentu, yang beberapa di antaranya bergantung pada arsitektur CPU dari VM node dan versi kernel. Variabel syscalls dalam fungsi DefaultProfile mencantumkan syscall yang diizinkan untuk semua arsitektur.

Profil seccomp default memblokir syscall yang dapat digunakan untuk mengabaikan batas isolasi container dan mengizinkan akses hak istimewa ke node atau ke container lainnya. Tabel berikut mendeskripsikan beberapa syscall signifikan yang ditolak oleh profil seccomp default:

Syscall yang ditolak
mount, umount, umount2, fsmount, mount_setattr

Membatasi proses agar tidak mengakses atau memanipulasi sistem file node di luar batas container.

Juga ditolak karena kemampuan CAP_SYS_ADMIN dihapus.

bpf

Membatasi proses agar tidak membuat program eBPF di kernel, yang dapat menyebabkan eskalasi hak istimewa pada node. Misalnya, CVE-2021-3490 menggunakan syscall bpf.

Juga ditolak karena kemampuan CAP_SYS_ADMIN dihapus.

clone, clone3, unshare

Membatasi proses agar tidak membuat proses baru di namespace baru yang mungkin berada di luar namespace yang dibatasi milik container. Proses baru ini mungkin memiliki izin dan kemampuan yang ditingkatkan. Misalnya, CVE-2022-0185 menggunakan syscall unshare.

Juga ditolak karena kemampuan CAP_SYS_ADMIN dihapus.

reboot

Membatasi proses agar tidak memulai ulang node.

Juga ditolak karena kemampuan CAP_SYS_BOOT dihapus.

open_by_handle_at, name_to_handle_at

Membatasi akses ke file di luar container. Syscall ini digunakan di salah satu eksploit container escape Docker paling awal.

Juga ditolak karena kemampuan CAP_DAC_READ_SEARCH dan kemampuan CAP_SYS_ADMIN dihapus.

Cara menggunakan seccomp di GKE

Dalam cluster Autopilot, GKE otomatis menerapkan profil seccomp default containerd ke semua workload Anda. Tidak diperlukan tindakan lebih lanjut. Upaya untuk membuat syscall terbatas gagal. Autopilot tidak mengizinkan profil seccomp kustom karena GKE mengelola node.

Di cluster Standard, Anda harus menerapkan profil seccomp secara manual. GKE tidak menerapkan profil untuk Anda.

Mengaktifkan seccomp di cluster Standard

Terapkan profil seccomp secara manual dengan menetapkan Konteks Keamanan Pod atau container menggunakan kolom spec.securityContext.seccompProfile dalam spesifikasi Pod, seperti dalam contoh berikut. Sebaiknya gunakan profil seccomp untuk workload, kecuali jika kasus penggunaan Anda memerlukan penggunaan syscall yang dibatasi. Dua jenis seccompProfile yang didukung adalah sebagai berikut:

Contoh manifes berikut menetapkan profil seccomp ke profil default runtime:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: default-pod
spec:
  replicas: 3
  selector:
    matchLabels:
      app: default-pod
  template:
    metadata:
      labels:
        app: default-pod
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      containers:
      - name: seccomp-test
        image: nginx

Saat Anda men-deploy manifes ini, jika container di Pod mencoba membuat syscall yang melanggar profil seccomp default runtime, Pod atau workload mungkin akan mengalami perilaku yang tidak terduga. Misalnya, Pod yang membuat syscall yang dibatasi selama proses mulai sistem akan gagal dimulai. Jika aplikasi mencoba membuat syscall yang dibatasi saat Pod sedang berjalan, Anda mungkin melihat error dalam container. Tingkat keparahan kegagalan syscall bergantung pada cara aplikasi menangani error.

Menggunakan profil seccomp kustom di cluster Standard

Jika profil seccomp default runtime terlalu ketat untuk aplikasi (atau tidak cukup ketat), Anda dapat menerapkan profil seccomp kustom ke Pod di cluster Standard. Proses ini memerlukan akses ke sistem file pada node. Untuk tutorial tentang cara memuat dan menggunakan profil seccomp kustom, lihat Membatasi Syscall Container dengan seccomp.

Langkah berikutnya