Cú sốc 2 giờ sáng và sự bất lực trước đống log trống trơn
Tưởng tượng 2 giờ sáng, điện thoại bạn báo động liên hồi vì server bị brute-force SSH với tốc độ 5.000 request mỗi phút. Bạn vội vàng login để điều tra nhưng cảm giác lúc đó cực kỳ tệ: /var/log/auth.log hay history đã bị kẻ gian xóa sạch. Những công cụ mặc định chỉ cho biết ai đã vào, nhưng hoàn toàn “mù tịt” về việc họ đã làm gì với file hệ thống hay đã cài cắm tiến trình ngầm nào.
Log mặc định trên Linux quá sơ sài cho mục đích điều tra (forensics). Khi một file config trong /etc bị sửa, bạn không thể biết ai làm nếu thiếu hệ thống giám sát ở tầng nhân (kernel). Đây là lý do bạn cần một chiếc “hộp đen” đúng nghĩa cho server của mình.
Tại sao nhật ký hệ thống thông thường thường xuyên “bó tay”?
Đa số anh em mới quản trị thường tin tưởng tuyệt đối vào syslog hoặc journald. Thực tế, các dịch vụ này chỉ chạy ở tầng ứng dụng (user-space). Nếu hacker chiếm được quyền root, họ dễ dàng tắt dịch vụ hoặc chỉnh sửa file log chỉ trong một nốt nhạc.
Nguyên nhân là các công cụ này bỏ qua System Calls (syscalls) — ngôn ngữ giao tiếp trực tiếp giữa phần mềm và nhân hệ điều hành. Ví dụ, khi một file bị xóa, syscall unlink sẽ được thực thi. Nếu không bắt được syscall này, bạn sẽ chẳng bao giờ tìm thấy bằng chứng xác thực về thủ phạm. Ngoài ra, việc thiếu tính năng gắn nhãn (tagging) khiến việc lọc log giữa hàng triệu dòng dữ liệu trở thành ác mộng.
Các phương án giám sát: Từ cưỡi ngựa xem hoa đến soi kính hiển vi
Để truy vết hiệu quả, mình từng thử qua nhiều cách khác nhau:
- Dùng lệnh
lastvàhistory: Cách này chỉ dùng để quản lý người dùng nội bộ. Hacker chỉ cần dùngunset HISTFILElà bạn mất dấu hoàn toàn. - Dùng IDS (như Suricata hay Lynis): Rất tốt để quét lỗ hổng nhưng không mạnh trong việc ghi lại hành vi người dùng theo thời gian thực.
- Cấu hình Auditd: Đây là tiêu chuẩn vàng trong bảo mật Linux. Nó can thiệp trực tiếp vào kernel để “chụp” lại mọi sự kiện bạn yêu cầu.
Auditd – Giải pháp tối ưu để giám sát mọi hành vi trên Linux
Auditd (Linux Audit Daemon) hoạt động như một kế toán viên mẫn cán cho server. Nó ghi lại mọi thứ: từ thay đổi quyền file đến thực thi các lệnh nhạy cảm. Dưới đây là cách mình triển khai trên các hệ thống thực tế.
1. Cài đặt Auditd nhanh gọn
Việc cài đặt trên các distro phổ biến cực kỳ đơn giản, chỉ mất chưa đầy 30 giây:
# Cho Ubuntu/Debian
sudo apt update && sudo apt install auditd audispd-plugins -y
# Cho CentOS/RHEL/Fedora
sudo yum install audit -y
sudo systemctl enable auditd --now
2. Thiết lập bộ quy tắc (Rules) “thực chiến”
Mặc định Auditd ghi lại rất ít. Bạn cần định nghĩa quy tắc trong file /etc/audit/rules.d/audit.rules. Mình thường tập trung vào 3 nhóm: giám sát file, lệnh admin và syscall xóa dữ liệu.
Mở file cấu hình:
sudo nano /etc/audit/rules.d/audit.rules
Thêm các dòng sau để bảo vệ những khu vực trọng yếu nhất:
# Giám sát việc sửa user/password
-w /etc/passwd -p wa -k user-modify
-w /etc/shadow -p wa -k user-modify
# Giám sát file cấu hình mạng
-w /etc/network/ -p wa -k network-config
# Ghi lại hành vi dùng lệnh sudo
-w /usr/bin/sudo -p x -k privileged-access
# Bắt quả tang hành vi xóa hoặc đổi tên file
-a always,exit -S unlink -S unlinkat -S rename -S renameat -k delete-activity
Giải thích nhanh thông số:
-w: Đường dẫn cần theo dõi.-p wa: Theo dõi quyền ghi (write) và thay đổi thuộc tính (attribute).-k: Gán nhãn (key) để sau này tìm kiếm log trong nháy mắt.-S: Tên của syscall cần bắt.
Sau khi lưu, hãy khởi động lại service:
sudo service auditd restart
3. Truy vấn log thần tốc khi có biến
Đừng bao giờ dùng cat để đọc audit.log vì bạn sẽ bị lạc trong mê trận dữ liệu. Hãy dùng ausearch — công cụ lọc log cực mạnh.
Ví dụ, để tìm xem ai đã đụng vào file /etc/passwd:
sudo ausearch -k user-modify
Nếu muốn xem báo cáo tổng quát về các vụ xâm nhập thất bại trong ngày:
sudo aureport -f -i --failed
Kinh nghiệm xương máu: Đừng để log “nuốt chửng” ổ cứng
Sai lầm lớn nhất của mình là từng cấu hình quá tham lam. Việc theo dõi mọi syscall read trên một database server bận rộn có thể tạo ra 50GB log chỉ trong 2 tiếng, làm treo đứng server ngay lập tức.
Lời khuyên cho anh em:
- Chỉ giám sát những gì thực sự quan trọng: file config, lệnh admin và quyền sở hữu.
- Thiết lập xoay vòng log (log rotation) trong
/etc/audit/auditd.confđể tránh tràn ổ đĩa:
max_log_file = 100 # File đạt 100MB thì xoay vòng
num_logs = 10 # Giữ tối đa 10 file cũ nhất
max_log_file_action = ROTATE
Cài đặt Auditd có thể tốn thêm 1-3% CPU, nhưng cái giá này quá rẻ so với việc mất trắng dữ liệu mà không có manh mối. Nếu anh em đang chạy hệ thống Production hoặc cần tuân thủ PCI-DSS, Auditd là thứ bắt buộc phải có. Nếu Rule nào khó viết quá, anh em cứ comment phía dưới mình hỗ trợ nhé!

