So sánh các phương pháp tiếp cận bảo mật runtime trong Kubernetes
Vào lúc 2:15 sáng thứ Ba tuần trước, kênh cảnh báo của chúng tôi đã đánh thức toàn bộ đội ngũ trực on-call. Kẻ tấn công đã khai thác lỗ hổng path traversal trong một dịch vụ tiếp nhận người dùng, mở một phiên bash tương tác bên trong một pod không có đặc quyền và bắt đầu quét Nmap trên toàn bộ dải mạng CIDR pod 10.244.0.0/16.
Trivy vừa quét và xác nhận an toàn cho chính image đó chỉ hai giờ trước đó với không một mã CVE nghiêm trọng nào. Quét tĩnh (static scanning) cho bạn biết những lỗ hổng phần mềm nào tồn tại trên ổ đĩa, còn giám sát runtime cho bạn biết kẻ tấn công đang thực thi những gì trong bộ nhớ.
Các nhóm kỹ thuật khi xây dựng hệ thống phòng thủ runtime cho container thường đánh giá ba kiến trúc khác nhau:
- Thực thi profile và LSM (AppArmor / Seccomp): Giới hạn trước các syscall và Linux capability bằng cách gắn trực tiếp các profile tĩnh vào context bảo mật (security context) của container.
- Thu thập Kubernetes Audit Log: Truyền phát (stream) các sự kiện kube-apiserver về OpenSearch hoặc Datadog để ghi nhận các thay đổi mang tính quản trị trên toàn bộ control plane.
- Công cụ theo dõi kernel (Falco / eBPF): Hook trực tiếp vào các system call của kernel để kiểm tra tiến trình, việc tạo socket và các thao tác ghi filesystem ngay khi chúng vừa diễn ra.
Đánh đổi giữa các phương pháp
1. AppArmor và Seccomp
Ưu điểm: Thực thi quy tắc mà không tốn chi phí dữ liệu đo lường (telemetry). Chặn đứng hoàn toàn các syscall trái phép thay vì chỉ gửi cảnh báo về kênh thông báo.
Nhược điểm: Việc quản lý các profile tùy chỉnh cho hơn 80 microservice liên tục thay đổi tiêu tốn rất nhiều thời gian của đội ngũ kỹ sư. Chỉ cần chặn nhầm một syscall clone3 hoặc epoll_pwait ngoài dự kiến, pod production của bạn sẽ bị sập âm thầm khi lưu lượng truy cập tăng đột biến.
2. Thu nạp Kubernetes Audit Log
Ưu điểm: Hoạt động hoàn toàn tách biệt (out of band). Phương pháp này không tạo thêm bất kỳ overhead nào từ agent lên các worker node, đồng thời theo dõi đáng tin cậy việc leo thang quyền RBAC và thao tác đọc Secret.
Nhược điểm: Hoàn toàn không nắm bắt được những gì diễn ra bên trong workload. Khi kẻ tấn công đưa một file thực thi (binary) vào thông qua một kết nối TCP hiện có và chạy nó, Kubernetes control plane sẽ không ghi nhận bất cứ điều gì.
3. Theo dõi kernel với Falco (eBPF)
Ưu điểm: Mang lại khả năng quan sát chi tiết từng sự kiện hệ thống thô như execve, connect và openat. Falco bổ sung metadata của Kubernetes vào từng sự kiện, bao gồm namespace, tên pod và mã hash của container. Nhờ đó, công cụ có thể phát hiện các cuộc tấn công zero-day mà quy trình quét CI tĩnh không thể lường trước.
Nhược điểm: Đòi hỏi quyền can thiệp vào kernel ở cấp độ node và quyền daemon có đặc quyền (privileged). Nếu bộ lọc không được tinh chỉnh kỹ lưỡng, mức tiêu thụ bộ nhớ của node có thể tăng đột biến.
Kiến trúc đề xuất: DaemonSet modern eBPF kết hợp Falcosidekick
Các kernel module truyền thống trước đây thường gây ra nhiều phiền toái. Một bản vá kernel nhỏ trên Ubuntu hoặc Amazon Linux thường xuyên làm lỗi quá trình biên dịch driver khi cụm node tự động mở rộng (auto-scaling), đôi khi còn gây ra lỗi kernel panic khi I/O tăng cao. Probe modern eBPF giải quyết triệt để vấn đề này. Nó sử dụng BTF (BPF Type Format) và CO-RE (Compile Once – Run Everywhere) trên các kernel Linux 5.8 trở lên. Nhờ đó, bạn có được tốc độ khởi động gần như tức thì, khả năng theo dõi ổn định cùng mức tiêu thụ tài nguyên dự đoán được dưới 1.5% CPU và 150MB RAM trên mỗi worker node.
Falco đóng vai trò là engine cảm biến trên từng node. Falcosidekick chạy song song như một bộ điều phối (multiplexer) gọn nhẹ, chuyển tiếp các sự kiện bảo mật có cấu trúc đến Slack, PagerDuty hoặc các data lake bảo mật.
Trước khi cài đặt các agent runtime, hãy đảm bảo quyền truy cập host cơ sở đã được khóa chặt chẽ. Để thiết lập quyền truy cập root khẩn cấp và cấu hình jump-host, bạn có thể tạo thông tin đăng nhập node an toàn bằng công cụ tạo mật khẩu phía client tại toolcraft.app/vi/tools/security/password-generator. Công cụ này tính toán mật khẩu hoàn toàn ngay trên trình duyệt mà không truyền entropy qua mạng. Khi quyền truy cập cơ bản đã được bảo vệ vững chắc, Falco sẽ tóm gọn bất kỳ mối đe dọa nào lọt qua được vành đai bảo vệ.
Hướng dẫn triển khai: Cài đặt và tinh chỉnh Falco
Bước 1: Đăng ký Helm Repository của Falco
Lấy chart chính thức và cập nhật bộ nhớ đệm index cục bộ:
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
Bước 2: Cấu hình Helm Values
Tạo file falco-values.yaml. Cấu hình probe modern eBPF, bật định dạng JSON có cấu trúc và chuyển hướng cảnh báo đến các kênh của nhóm qua Falcosidekick:
driver:
kind: modern_ebpf
falco:
json_output: true
log_stderr: true
log_level: notice
priority: notice
rules_file:
- /etc/falco/falco_rules.yaml
- /etc/falco/falco_rules.local.yaml
- /etc/falco/rules.d
falcosidekick:
enabled: true
webui:
enabled: true
config:
slack:
webhookurl: "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
minimumpriority: "warning"
Bước 3: Triển khai DaemonSet
Cài đặt chart vào một namespace riêng biệt:
kubectl create namespace falco
helm install falco falcosecurity/falco \
--namespace falco \
--values falco-values.yaml
Xác nhận rằng mọi worker node đều đã được lập lịch một probe pod đang hoạt động:
kubectl get pods -n falco -o wide
Bước 4: Xây dựng quy tắc nhắm mục tiêu cho các namespace production
Các quy tắc cộng đồng mặc định sẽ gắn cờ mọi phiên terminal shell trên toàn cụm. Trong thực tế, các CI runner chạy ngầm, script đồng bộ hóa sidecar và các tác vụ bảo trì định kỳ sẽ kích hoạt hàng chục cảnh báo giả mỗi ngày. Thay vào đó, hãy nhắm mục tiêu vào các môi trường có giá trị cao, chẳng hạn như tầng xử lý giao dịch hoặc cơ sở dữ liệu.
Định nghĩa các cấu hình ghi đè trong custom-rules.yaml:
customRules:
rules-payments.yaml: |-
- rule: Shell trái phép trong Payment Namespace
desc: Kích hoạt khi có bất kỳ tiến trình shell nào khởi chạy trong phạm vi workload payments
condition: >
spawned_process and
container and
k8s.ns.name = "payments" and
shell_procs
output: >
CRITICAL: Đã khởi chạy shell trong workload bị giới hạn
(user=%user.name cmd=%proc.cmdline pod=%k8s.pod.name
ns=%k8s.ns.name container=%container.name image=%container.image.repository)
priority: CRITICAL
tags: [container, execution, pci_dss]
Đẩy cấu hình đã cập nhật lên bằng lệnh Helm upgrade:
helm upgrade falco falcosecurity/falco \
--namespace falco \
--reuse-values \
-f custom-rules.yaml
Bước 5: Xác minh khả năng phát hiện mối đe dọa
Đừng bao giờ mặc định pipeline cảnh báo đang hoạt động cho đến khi bạn thấy nó kích hoạt thực tế. Hãy khởi tạo một container thử nghiệm nhẹ bên trong namespace mục tiêu và mở một phiên shell:
kubectl run validation-target --image=alpine:3.19 --namespace payments -- sleep 600
kubectl exec -it validation-target --namespace payments -- /bin/sh
Theo dõi luồng log Falco đang hoạt động từ cửa sổ shell thứ hai:
kubectl logs -n falco -l app.kubernetes.io/name=falco -c falco --tail=10
Falco phát hiện và trả về sự kiện trong vòng 15 mili-giây, định dạng output thành JSON rõ ràng:
{
"output": "CRITICAL: Đã khởi chạy shell trong workload bị giới hạn (user=root cmd=/bin/sh pod=validation-target ns=payments container=validation-target image=alpine:3.19)",
"priority": "Critical",
"rule": "Shell trái phép trong Payment Namespace",
"time": "2026-10-25T02:18:12.312918451Z"
}
Bước 6: Loại bỏ tình trạng quá tải cảnh báo bằng macro ngoại lệ
Các công cụ bảo mật tạo ra quá nhiều báo động rác thường sẽ bị tắt thông báo. Nếu một CronJob sao lưu tự động chạy script shell hợp lệ vào lúc 3:00 sáng, đừng tắt bỏ quy tắc phát hiện. Hãy thêm một macro lọc để loại trừ binary và đường dẫn thực thi cụ thể:
- macro: allowed_backup_executions
condition: >
(proc.cmdline startswith "/opt/scripts/backup.sh" and
k8s.pod.name startswith "postgres-backup-")
- rule: Shell trái phép trong Payment Namespace
condition: >
spawned_process and
container and
k8s.ns.name = "payments" and
shell_procs and
not allowed_backup_executions
Hãy xem lại các cảnh báo hàng ngày trong hai tuần đầu tiên. Việc tinh chỉnh ranh giới macro sẽ biến Falco từ một công cụ sinh log ồn ào thành một rào chắn phát hiện xâm nhập có độ trễ thấp và chuẩn xác cao.

