Cách hack Kubernetes để tìm mật khẩu được lưu trong tài nguyên Secret
(insight.infograb.net)- 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àoetcd - 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
etcdnơ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
- Khi người dùng khai báo tài nguyên bằng lệnh
- 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, podapp1, podapp2
- Tạo cluster bằng
- Hack
etcdetcd: 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ứuetcd- 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ácetcdthuận tiện
- Xem manifest của
- 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ẩups aux | grep etcd- lấy PID củaetcdll /proc/<pid>/fdsẽ thấy tệp liên kết có ghidb- Dùng lệnh
cat /proc/<pid>fd/<db> | grep -A10 -B10 credit-cardđể tìm mật khẩu đã tạo trước đó
- Tìm tiến trình đang chạy
- 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
- Nếu có quyền phù hợp để truy vấn Kubernetes, có thể lấy mật khẩu bằng lệnh
- 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 containercrictl pods- tìm Pod ID củaapp1crictl ps- tìm container tương ứng với Pod IDcrictl 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
- Lấy bằng
- 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
etcdthông qua tài nguyênEncryptionConfiguration
Chưa có bình luận nào.