- Tujuan konten ini adalah untuk mengingatkan pentingnya keamanan Kubernetes
- Lokasi penyimpanan Secret
- Saat pengguna mendeklarasikan resource melalui perintah
kubectl, Kubernetes membuat file manifest yang mendefinisikan resource tersebut lalu menyimpannya ke etcd
- Saat pengguna mendeklarasikan resource Secret, Secret juga disimpan di etcd
- Saat pengguna membuat pod yang membaca Secret sebagai volume atau variabel lingkungan, Secret disimpan pada pod tersebut
- Jika etcd tempat Secret disimpan dan pod yang menggunakan Secret diretas, kata sandi yang disimpan di Secret bisa diketahui
- Persiapan awal
- Membuat cluster dengan kubeadm
- Untuk praktik, tiga resource dibuat terlebih dahulu: Secret
credit-card, pod app1, pod app2
- Meretas etcd
- etcd: penyimpanan data key-value yang menyimpan status cluster Kubernetes. Semua informasi yang dideklarasikan di Kubernetes disimpan di sini. Secret juga bisa diketahui dengan memeriksa etcd
- 1.1 Mencari kata sandi dengan etcdctl
- Memeriksa manifest
kube-apiserver untuk mengambil certificate authority, kunci publik, dan kunci privat server etcd
- Menemukan kata sandi melalui perintah
etcdctl, yang memudahkan manipulasi etcd
- 1.2 Mengambilnya dengan mengakses langsung DB etcd
- Menemukan proses tempat etcd berjalan, lalu menelusuri seluruh data proses tersebut untuk mencari kata sandi
ps aux | grep etcd - mengambil PID etcd
ll /proc/<pid>/fd lalu akan terlihat file link bertuliskan db
cat /proc/<pid>fd/<db> | grep -A10 -B10 credit-card melalui perintah ini kata sandi yang dibuat sebelumnya dapat ditemukan
- Meretas pod
- Mengambilnya melalui
kubectl exec
- Jika memiliki izin yang sesuai untuk melihat Kubernetes, kata sandi bisa diambil melalui perintah
kubectl
- Mengambilnya dengan mengakses langsung kontainer
- Jika dapat bebas menggunakan perintah Docker pada worker node, kata sandi bisa diekstrak
- Pada worker node tempat pod
app1 dijadwalkan, kontainer dapat ditemukan dan daftar variabel lingkungan yang terdaftar pada kontainer dapat diekstrak
crictl pods - mencari Pod ID milik app1
crictl ps - mencari kontainer yang sesuai dengan Pod ID
crictl inspect <container id> | grep -A16 env - melihat detail kontainer tersebut untuk mengekstrak variabel lingkungan
- Mengambilnya dengan ServiceAccount yang memiliki izin akses ke Secret
- Jika ServiceAccount milik Pod memiliki izin untuk mengakses Secret, kata sandi dapat ditemukan dari dalam pod melalui pemanggilan API
- Cara mencegah peretasan yang dijelaskan di atas
- Mengikuti 'prinsip hak akses minimum' dan tidak membuat service account dengan izin yang tidak perlu
- Mencegah kredensial pengguna terekspos untuk menghadapi ancaman seperti rekayasa sosial
- Mengenkripsi etcd melalui resource
EncryptionConfiguration
Belum ada komentar.