Bối cảnh: Vì sao Giám sát toàn vẹn file (FIM) lại cần thiết?
Khi quản lý server Linux, bảo mật luôn là ưu tiên hàng đầu của mình. Chúng ta không thể lường trước mọi cuộc tấn công hay những thay đổi trái phép trên hệ thống. Kẻ xấu có thể cài đặt phần mềm độc hại, sửa đổi cấu hình hoặc chèn rootkit để ẩn mình.
Mình vẫn nhớ lần server bị brute-force SSH và phải xử lý gấp lúc nửa đêm. Cảm giác căng thẳng đó thật sự khó tả. Từ trải nghiệm đó, mình luôn tâm niệm phải thiết lập bảo mật ngay từ đầu, và giám sát toàn vẹn file (File Integrity Monitoring – FIM) là một trong những lớp phòng thủ không thể thiếu. FIM không chỉ giúp phát hiện những thay đổi bất thường mà còn cung cấp bằng chứng quan trọng khi điều tra sự cố bảo mật.
Chỉ dựa vào tường lửa hay các công cụ phát hiện xâm nhập mạng (IDS/IPS) thôi thì chưa đủ. Một khi kẻ xấu đã vượt qua lớp phòng thủ bên ngoài và xâm nhập được vào server, chúng có thể âm thầm thay đổi các file hệ thống. Việc này tạo ra cửa hậu mà không ai hay biết. Đó là lúc FIM phát huy hiệu quả tối đa. Công cụ này giúp chúng ta “soi” được từng ngóc ngách của hệ thống file, phát hiện bất kỳ dấu hiệu giả mạo hay xâm nhập nào.
Khi nhắc đến FIM trên Linux, AIDE (Advanced Intrusion Detection Environment) là cái tên mình tin tưởng. AIDE là phần mềm mã nguồn mở rất hiệu quả, cho phép bạn tạo một “ảnh chụp nhanh” (snapshot) trạng thái mong muốn của hệ thống file. Sau đó, AIDE liên tục so sánh với trạng thái hiện tại để phát hiện những thay đổi không mong muốn.
Cài đặt AIDE trên các bản phân phối Linux phổ biến
Việc cài đặt AIDE khá đơn giản và thực hiện nhanh chóng trên hầu hết các bản phân phối Linux.
Cài đặt trên Ubuntu/Debian
Với các hệ thống dựa trên Debian hoặc Ubuntu, bạn có thể cài đặt AIDE bằng lệnh sau:
sudo apt update
sudo apt install aide aide-common
aide-common chứa các script và cấu hình mặc định. Còn aide là chính công cụ thực hiện kiểm tra.
Cài đặt trên CentOS/RHEL/Fedora
Với các hệ thống Red Hat Enterprise Linux, CentOS hoặc Fedora, dùng yum hoặc dnf:
sudo yum install aide
# Hoặc với các phiên bản mới hơn:
sudo dnf install aide
Sau khi cài đặt xong, chúng ta đã sẵn sàng cấu hình AIDE.
Cấu hình chi tiết AIDE: Xây dựng “quy tắc vàng” cho hệ thống
Sức mạnh của AIDE nằm ở khả năng tùy biến cấu hình cao. File cấu hình chính thường là /etc/aide/aide.conf. Mình khuyên bạn nên sao lưu file này trước khi chỉnh sửa:
sudo cp /etc/aide/aide.conf /etc/aide/aide.conf.bak
Tìm hiểu các Quy tắc (Rules)
Trong aide.conf, bạn sẽ thấy nhiều dòng bắt đầu bằng Perms, Normal, Static, Log… Đây là các tập hợp quy tắc định nghĩa thuộc tính của file hoặc thư mục mà AIDE sẽ giám sát. Mình thường dùng các quy tắc sau:
Perms = p+i+u+g+acl+selinux+xattrs: Giám sát quyền, inode, user/group owner, ACLs, SELinux context và các thuộc tính mở rộng. Quy tắc này lý tưởng cho các thư mục có nội dung thay đổi thường xuyên nhưng quyền truy cập thì không.Static = p+i+u+g+s+b+md5+sha256+rmd160+tgr+m+c+acl+selinux+xattrs: Đây là quy tắc toàn diện nhất. Nó kiểm tra mọi thứ từ quyền, chủ sở hữu đến kích thước, số block và đặc biệt là các hàm băm (checksum) như MD5, SHA256, RMD160, TIGER. Quy tắc này cực kỳ hữu ích cho các file hệ thống quan trọng, đặc biệt là các binary không nên thay đổi.Log = p+u+g+s+grow: Dùng cho các file log. Nó chỉ giám sát quyền, chủ sở hữu, kích thước (s) và đặc biệt là sự tăng trưởng kích thước (grow) của file. Mình không muốn AIDE báo động mỗi khi log file được ghi thêm dữ liệu. Thay vào đó, mình chỉ quan tâm nếu quyền hay chủ sở hữu bị đổi, hoặc file đột ngột bị thu nhỏ/xóa.Databases = p+u+g+acl+xattrs: Quy tắc này thường áp dụng cho các thư mục chứa cơ sở dữ liệu hoặc dữ liệu ứng dụng. Mình chỉ quan tâm đến quyền và chủ sở hữu, không quan tâm nội dung vì chúng thường xuyên thay đổi.
Mình thường định nghĩa các quy tắc tùy chỉnh ở đầu file aide.conf để dễ quản lý.
Chọn thư mục cần giám sát và loại trừ
Phần quan trọng nhất là chỉ định AIDE nên giám sát những thư mục nào và bỏ qua những thư mục nào. Bạn sẽ dùng cú pháp như sau:
# Các thư mục hệ thống quan trọng, áp dụng quy tắc Static
/boot Static
/bin Static
/sbin Static
/usr/bin Static
/usr/sbin Static
# Thư mục cấu hình, nơi lưu trữ nhiều file quan trọng
/etc Static
# Thư mục chứa các thư viện và module của kernel
/lib Static
/lib64 Static
/usr/lib Static
/usr/lib64 Static
# Các file log, chỉ giám sát quyền và sự tăng trưởng kích thước
/var/log Log
# Loại trừ các thư mục ảo, tạm thời và không cần giám sát
!/proc
!/sys
!/dev
!/tmp
!/var/tmp
!/var/run
!/var/spool
!/var/cache
# Ví dụ loại trừ một thư mục con cụ thể trong /etc nếu nó quá động
!/etc/mtab
!/etc/ssh/ssh_host_*
Lưu ý dấu ! để loại trừ thư mục. Mình thường loại trừ /proc, /sys, /dev vì chúng là các file hệ thống ảo và luôn thay đổi. Tương tự, /tmp và /var/tmp chứa file tạm thời nên cũng không cần giám sát.
Với /etc, đôi khi có những file như mtab hay các khóa SSH tạm thời (ssh_host_*) thay đổi thường xuyên, gây ra báo động giả. Mình thường loại trừ chúng nếu không thực sự cần giám sát chi tiết.
Khởi tạo Database lần đầu
Sau khi cấu hình xong aide.conf, bước tiếp theo là tạo cơ sở dữ liệu ban đầu. Đây là “ảnh chụp nhanh” đầu tiên của hệ thống, làm mốc so sánh cho AIDE.
sudo aide --init
Lệnh này sẽ quét toàn bộ các file và thư mục đã chỉ định trong cấu hình, sau đó tạo file aide.db.new.gz (thường ở /var/lib/aide/). Khi quá trình này hoàn tất, bạn cần đổi tên nó thành aide.db.gz để AIDE sử dụng cho các lần kiểm tra sau.
sudo mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
Cực kỳ quan trọng: File aide.db.gz này phải được bảo vệ nghiêm ngặt. Nếu kẻ tấn công có thể thay đổi file này, chúng sẽ che giấu được dấu vết của mình. Mình thường cân nhắc lưu bản sao database này trên một thiết bị lưu trữ chỉ đọc (read-only) hoặc một phân vùng được mã hóa, hoặc ít nhất là đảm bảo quyền truy cập file cực kỳ hạn chế.
Kiểm tra và giám sát AIDE: Luôn trong tư thế sẵn sàng
Khi database đã được khởi tạo, AIDE sẵn sàng bắt đầu công việc giám sát.
Kiểm tra thủ công
Để chạy một lần kiểm tra và xem báo cáo, bạn chỉ cần dùng lệnh:
sudo aide --check
AIDE sẽ so sánh trạng thái hiện tại của hệ thống file với database aide.db.gz. Sau đó, nó in ra một báo cáo chi tiết về bất kỳ thay đổi nào:
# Ví dụ output khi có thay đổi
Start timestamp: 2024-03-21 09:00:00
AIDE found differences between database and filesystem.
Summary:
Total number of entries: 123456
Added entries: 2
Removed entries:

