- Nội dung này nhằm nhấn mạnh tầm quan trọng của bảo mật Kubernetes
- Nơi lưu trữ Secret
- Khi người dùng khai báo tài nguyên bằng lệnh
kubectl, Kubernetes sẽ tạo tệp manifest định nghĩa tài nguyên đó và lưu vào etcd
- Khi người dùng khai báo tài nguyên Secret, Secret cũng được lưu trong
etcd
- Khi người dùng tạo pod đọc Secret dưới dạng volume hoặc biến môi trường, Secret sẽ được lưu trong pod đó
- Nếu
etcd nơi lưu Secret và pod đang sử dụng Secret bị hack, có thể biết được mật khẩu được lưu trong Secret
- Chuẩn bị trước
- Tạo cluster bằng
kubeadm
- Để thực hành, tạo sẵn ba tài nguyên: Secret
credit-card, pod app1, pod app2
- Hack
etcd
etcd: kho dữ liệu key-value lưu trạng thái của cluster Kubernetes. Mọi thông tin được khai báo trong Kubernetes đều được lưu ở đây. Có thể xem Secret bằng cách tra cứu etcd
- 1.1 Tìm mật khẩu bằng
etcdctl
- Xem manifest của
kube-apiserver để lấy certificate authority, khóa công khai và khóa riêng của máy chủ etcd
- Tìm mật khẩu thông qua lệnh
etcdctl, công cụ thao tác etcd thuận tiện
- 1.2 Truy cập trực tiếp DB
etcd để lấy
- Tìm tiến trình đang chạy
etcd, duyệt toàn bộ dữ liệu của tiến trình đó và tìm mật khẩu
ps aux | grep etcd - lấy PID của etcd
ll /proc/<pid>/fd sẽ thấy tệp liên kết có ghi db
- Dùng lệnh
cat /proc/<pid>fd/<db> | grep -A10 -B10 credit-card để tìm mật khẩu đã tạo trước đó
- Hack pod
- Lấy bằng
kubectl exec
- Nếu có quyền phù hợp để truy vấn Kubernetes, có thể lấy mật khẩu bằng lệnh
kubectl
- Truy cập trực tiếp container để lấy
- Nếu có thể tự do dùng lệnh Docker trên worker node thì có thể lấy cắp mật khẩu
- Có thể tìm container trên worker node nơi pod
app1 được schedule và trích xuất danh sách biến môi trường đã đăng ký cho container
crictl pods - tìm Pod ID của app1
crictl ps - tìm container tương ứng với Pod ID
crictl inspect <container id> | grep -A16 env - xem chi tiết container đó để trích xuất biến môi trường
- Lấy bằng ServiceAccount có quyền truy cập Secret
- Nếu ServiceAccount của pod có quyền truy cập Secret, có thể tìm mật khẩu bằng cách gọi API từ bên trong pod
- Cách ngăn chặn các kiểu hack đã mô tả ở trên
- Theo nguyên tắc đặc quyền tối thiểu, không tạo service account có quyền không cần thiết
- Đề phòng các mối đe dọa như social engineering, không để lộ credential của người dùng
- Mã hóa
etcd thông qua tài nguyên EncryptionConfiguration
Chưa có bình luận nào.