Vì sao log hệ thống truyền thống thường ‘bó tay’?
Hãy tưởng tượng server của bạn bị brute-force SSH lúc 2 giờ sáng. Sau khi chặn IP thành công, bạn kiểm tra log nhưng chỉ thấy thông tin login/logout. Nếu hacker đã kịp cài “fileless malware” chạy trực tiếp trên RAM hoặc tạo một reverse shell từ sâu trong Container, các công cụ giám sát truyền thống thường sẽ để lọt lưới.
Tôi từng rơi vào tình huống đó và nhận ra mình cần một giải pháp nhìn thấu mọi ngóc ngách hệ thống mà không làm server bị treo. Câu trả lời chính là Tracee từ nhà Aqua Security. Công cụ này tận dụng eBPF (extended Berkeley Packet Filter) để chạy các chương trình nhỏ ngay trong nhân Linux (Kernel). Nó giám sát mọi syscall và hành vi mạng với độ trễ cực thấp.
Nếu bạn đang vận hành Kubernetes, Tracee giống như một dàn camera hồng ngoại. Nó giúp bạn phát hiện những hành vi mờ ám nhất mà hacker cố tình che giấu.
Quick Start: Trải nghiệm Tracee trong 5 phút
Để bắt đầu nhanh nhất, bạn hãy sử dụng Docker. Yêu cầu duy nhất là một server Linux (ưu tiên Ubuntu 20.04 trở lên, Kernel 5.4+) đã cài sẵn Docker engine.
docker run --name tracee --rm -it \
--privileged \
--pid=host \
-v /lib/modules:/lib/modules:ro \
-v /usr/src:/usr/src:ro \
-v /tmp/tracee:/tmp/tracee \
aquasec/tracee:latest
Giải mã các tham số quan trọng:
--privileged: Cấp quyền để Tracee nạp mã eBPF trực tiếp vào Kernel.--pid=host: Giúp Tracee “nhìn” thấy toàn bộ tiến trình đang chạy trên máy chủ vật lý.-v /lib/modules...: Ánh xạ thư mục kernel để Tracee hiểu cấu trúc hệ thống hiện tại.
Ngay khi lệnh chạy, một dòng thác sự kiện sẽ hiện ra. Thử mở một terminal khác và gõ whoami. Bạn sẽ thấy Tracee bắt trọn syscall execve của lệnh đó ngay lập tức.
Tại sao eBPF lại là ‘vũ khí’ tối thượng?
Trước đây, chúng ta thường dùng auditd hoặc ptrace. Tuy nhiên, chúng thường gây tốn tài nguyên hoặc làm ứng dụng bị chậm (overhead) đáng kể. eBPF thay đổi hoàn toàn cuộc chơi nhờ ba yếu tố:
- Độ an toàn tuyệt đối: Mã eBPF phải vượt qua bộ kiểm tra (verifier) trước khi chạy, đảm bảo không bao giờ làm crash Kernel.
- Hiệu năng ấn tượng: Nó xử lý dữ liệu ở tầng thấp nhất, giảm overhead xuống dưới 5% trong hầu hết các kịch bản.
- Khả năng can thiệp sâu: Theo dõi được từ việc mở file, kết nối mạng đến các hành vi nạp module lạ.
Tracee không chỉ dừng lại ở việc liệt kê log thô. Nó sở hữu bộ Signatures thông minh. Bộ lọc này tự động cảnh báo khi phát hiện dấu hiệu tấn công như: ghi đè file hệ thống hoặc cố gắng thoát khỏi container (container escape).
Cấu hình thực chiến: Tập trung vào mục tiêu quan trọng
Chạy Tracee mặc định sẽ khiến bạn ngập trong “rác” dữ liệu. Để hiệu quả, chúng ta cần lọc (filter) các sự kiện thực sự có giá trị bảo mật.
1. Giám sát đích danh Container
Nếu bạn chỉ nghi ngờ một ứng dụng Web đang bị tấn công, hãy dùng flag --scope để thu hẹp phạm vi:
# Chỉ theo dõi các sự kiện phát sinh từ container 'my_web_app'
docker run --rm --privileged -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro aquasec/tracee:latest \
--scope container=my_web_app
2. Kích hoạt chế độ phát hiện tấn công (Security Policies)
Đây là tính năng đáng tiền nhất của Tracee. Bạn có thể yêu cầu nó cảnh báo khi có ai đó thực hiện lệnh insmod để nạp module lạ vào nhân hệ thống.
docker run --rm --privileged -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro aquasec/tracee:latest \
--policy /tracee/policies/default.yaml
3. Xuất dữ liệu JSON cho hệ thống SIEM
Để tích hợp với ELK, Splunk hoặc Wazuh, hãy chuyển log sang định dạng JSON. Điều này giúp việc parse dữ liệu tự động trở nên dễ dàng hơn.
docker run --rm --privileged -v /lib/modules:/lib/modules:ro -v /usr/src:/usr/src:ro aquasec/tracee:latest \
--output json
Bài học rút ra từ thực tế triển khai
Sau một thời gian vận hành Tracee trên các hệ thống lớn, tôi có vài lưu ý quan trọng dành cho bạn:
Cẩn thận với việc ‘Full Logging’
eBPF rất nhanh nhưng dữ liệu sinh ra có thể làm đầy ổ cứng cực tốc độ. Một server bận rộn có thể tạo ra hàng GB log mỗi giờ nếu bạn bật --event any. Hãy chỉ tập trung vào các sự kiện nhạy cảm như execve, mem_prot_alert hoặc security_file_open.
Kiểm soát False Positives
Mới đầu, Tracee có thể báo động nhầm. Ví dụ: script backup định kỳ của bạn dùng tar có thể bị coi là hành vi đọc file hàng loạt đáng nghi. Hãy dành 1 tuần đầu để quan sát và đưa các tiến trình hợp lệ vào whitelist.
Triển khai trên Kubernetes
Đừng chạy thủ công từng container trên K8s. Hãy sử dụng tracee-operator. Nó triển khai dưới dạng DaemonSet, tự động gắn nhãn Pod và Namespace vào log, giúp việc truy vết sự cố nhanh hơn gấp 10 lần.
Kết hợp với hệ thống cảnh báo (Alerting)
Log chỉ có giá trị khi bạn đọc được nó kịp thời. Tôi thường dùng một script Python đơn giản để lọc log JSON từ Tracee. Nếu thấy sự kiện mức High hoặc Critical, script sẽ bắn ngay thông báo qua Telegram hoặc Slack.
Lời kết
Bảo mật server hiện đại không chỉ là dựng tường lửa hay cài Antivirus. Kẻ tấn công ngày nay rất tinh vi, buộc chúng ta phải có những công cụ quan sát sâu hơn. Tracee và eBPF chính là cặp bài trùng giúp bạn làm chủ hoàn toàn những gì đang diễn ra bên dưới “nắp ca-pô” của hệ thống Linux.
Hãy thử cài đặt Tracee ngay hôm nay để tự mình trải nghiệm sức mạnh của nó. Chúc các bạn xây dựng được hệ thống vững chãi!

