Bảo vệ hệ thống tệp tin khỏi những mối nguy tiềm ẩn
Tôi vẫn nhớ cảm giác hoảng loạn khi phát hiện một cuộc tấn công brute-force SSH vào lúc 2 giờ sáng trên một trong những node production của mình. Ngay cả sau khi chặn IP đó, một câu hỏi vẫn luôn ám ảnh: họ đã chạm vào những gì? Một khi kẻ tấn công đã xâm nhập được, chúng thường để lại cửa sau (back door) hoặc chỉnh sửa các tệp thực thi hệ thống để ẩn mình. Bạn không thể chỉ dựa vào mốc thời gian (timestamp) của tệp tin. Một kẻ tấn công tinh vi sẽ sử dụng lệnh touch để đặt lại thời gian truy cập, khiến tệp tin trông như chưa từng bị đụng đến bằng mắt thường.
Đó là lý do tại sao tôi tin dùng Giám sát tính toàn vẹn tệp tin (File Integrity Monitoring – FIM). Tôi sử dụng AIDE (Advanced Intrusion Detection Environment) để tạo ra một “dấu vân tay số” cho mọi tệp tin quan trọng trên hệ thống. Nếu chỉ một bit trong tệp thực thi thay đổi, AIDE sẽ gắn cờ cảnh báo ngay lập tức. Hãy coi nó như một hệ thống “bẫy dây” công nghệ cao cho hệ thống tệp tin Linux của bạn.
FIM và Nhật ký hệ thống tiêu chuẩn: Vị trí của AIDE
Giám sát bảo mật không phải là một giải pháp vạn năng. Để xây dựng một hệ thống phòng thủ vững chắc, bạn cần hiểu cách các công cụ khác nhau bổ trợ cho nhau.
Nhật ký tiêu chuẩn (Syslog/Journald)
Nhật ký (logs) kể câu chuyện về các sự kiện. Chúng ghi lại khi nào người dùng đăng nhập hoặc khi một dịch vụ bị lỗi. Tuy nhiên, một kẻ tấn công có quyền root có thể dễ dàng xóa sạch các nhật ký này hoặc dừng hoàn toàn dịch vụ ghi nhật ký. Nhật ký hiếm khi cho bạn biết liệu tệp thực thi /usr/bin/ls có bị tráo đổi bằng một phiên bản độc hại hay không.
Giám sát thời gian thực (Auditd/Inotify)
Các công cụ như auditd theo dõi các lệnh gọi hệ thống (system calls) ngay khi chúng xảy ra. Chúng rất xuất sắc trong việc xác định ai đã sửa đổi tệp tin vào lúc 10:15 tối. Đổi lại, hiệu suất sẽ bị ảnh hưởng. Trên một máy chủ web bận rộn, auditd có thể tạo ra hàng gigabyte dữ liệu mỗi giờ, điều này nhanh chóng trở thành một cơn ác mộng khi phân tích.
FIM dựa trên bản chụp (AIDE)
AIDE thực hiện một cách tiếp cận khác. Nó tạo ra một cơ sở dữ liệu gốc (baseline) về các thuộc tính tệp tin, bao gồm quyền hạn, kích thước và các mã băm mật mã như SHA-512. Khi bạn chạy kiểm tra, AIDE so sánh trạng thái đĩa hiện tại với bản chụp chuẩn đã biết. Đây là tiêu chuẩn vàng cho phân tích pháp chứng (forensic) vì nó xác định chính xác những gì đã thay đổi, ngay cả khi nhật ký đã bị xóa.
Thực tế khi sử dụng AIDE
Trước khi triển khai AIDE trên toàn bộ hạ tầng, bạn nên cân nhắc giữa chi phí vận hành và lợi ích bảo mật.
Lợi ích
- Không gây nhiễu nền: AIDE không phải là một daemon chạy ngầm. Nó tiêu tốn 0% CPU và RAM cho đến khi bạn kích hoạt kiểm tra, khiến nó trở nên hoàn hảo cho các thực thể VPS tài nguyên thấp.
- Độ tin cậy mật mã: Bằng cách sử dụng nhiều thuật toán băm, về mặt thống kê, kẻ tấn công không thể sửa đổi tệp tin mà không kích hoạt cảnh báo.
- Kiểm soát chi tiết: Bạn có thể loại trừ các thư mục biến động như
/var/logtrong khi vẫn duy trì sự giám sát nghiêm ngặt đối với/etc/shadow.
Thách thức
- Chi phí bảo trì: Mỗi khi bạn chạy
apt upgrade, bạn phải cập nhật cơ sở dữ liệu AIDE. Nếu quên, báo cáo tiếp theo của bạn sẽ hiển thị hàng trăm “cảnh báo giả” từ các bản cập nhật phần mềm hợp lệ. - Phát hiện thụ động: AIDE là một công cụ thám tử, không phải công cụ ngăn chặn. Nó không ngăn cản tệp tin bị sửa đổi; nó chỉ cảnh báo bạn sau khi thiệt hại đã xảy ra.
- Bảo mật cơ sở dữ liệu: Nếu kẻ tấn công sửa đổi tệp của bạn rồi chạy
aide --update, cơ sở dữ liệu gốc của bạn sẽ bị xâm phạm. Bạn phải lưu trữ cơ sở dữ liệu trên một hệ thống từ xa, chỉ đọc để thực sự an toàn.
Chiến lược triển khai Production
Nếu bạn đang triển khai hệ thống này trong môi trường production, đừng cố gắng giám sát mọi thứ cùng một lúc. Hãy bắt đầu với một chính sách tập trung để tránh tình trạng quá tải cảnh báo.
- Tập trung vào tệp thực thi và cấu hình: Giám sát
/etc,/bin,/sbin, và/usr/bin. Tránh/var/tmphoặc/hometrừ khi bạn có lý do cụ thể để theo dõi chúng. - Lưu trữ bên ngoài (Off-site): Ngay lập tức di chuyển cơ sở dữ liệu của bạn sang một máy chủ bảo mật từ xa hoặc một ổ đĩa chỉ đọc sau khi khởi tạo.
- Báo cáo tự động: Lập lịch một cron job hàng ngày để gửi tóm tắt qua email cho đội ngũ bảo mật của bạn, để bạn không cần phải nhớ kiểm tra thủ công.
Hướng dẫn triển khai từng bước
Hướng dẫn này sử dụng Ubuntu 22.04, nhưng các lệnh gần như tương tự cho các bản phân phối dựa trên Debian khác và rất giống với RHEL.
Bước 1: Cài đặt AIDE
Bắt đầu bằng cách cập nhật danh mục gói phần mềm địa phương và cài đặt công cụ.
sudo apt update
sudo apt install aide -y
Trong quá trình này, bạn có thể thấy một lời nhắc về cấu hình thư (mail). Hầu hết các quản trị viên chọn “Internet Site” để cho phép máy chủ gửi báo cáo qua một SMTP relay.
Bước 2: Khởi tạo cơ sở dữ liệu gốc
Tiếp theo, bạn cần ghi lại trạng thái hiện tại của hệ thống. Đây là cơ sở dữ liệu gốc “chuẩn” của bạn.
sudo aideinit
Trên một ổ SSD 50GB tiêu chuẩn với khoảng 20% dung lượng đã sử dụng, việc này thường mất từ 3 đến 5 phút. Lệnh này tạo ra một tệp cơ sở dữ liệu mới tại /var/lib/aide/aide.db.new.gz.
Bước 3: Kích hoạt cơ sở dữ liệu
AIDE tìm kiếm tệp aide.db.gz để thực hiện kiểm tra. Vì quá trình khởi tạo tạo ra tệp .new, bạn phải đổi tên nó để kích hoạt.
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
Tôi thực sự khuyên bạn nên sao chép tệp này sang một máy riêng biệt, bảo mật ngay bây giờ. Nếu máy chủ bị xâm nhập, tệp này là cách duy nhất để bạn chứng minh những gì đã thay đổi.
Bước 4: Mô phỏng một cuộc xâm nhập
Để thấy nó hoạt động, hãy mô phỏng một hành động phổ biến của kẻ tấn công: thêm một người dùng cửa sau vào hệ thống.
echo "tempadmin:x:0:0:tempadmin:/root:/bin/bash" | sudo tee -a /etc/passwd
sudo aide --check
AIDE sẽ tạo ra một báo cáo chi tiết. Nó sẽ cho thấy /etc/passwd đã bị sửa đổi và liệt kê các thay đổi cụ thể về kích thước tệp và giá trị băm SHA-512.
Bước 5: Tùy chỉnh các quy tắc của bạn
Nếu AIDE quá nhiễu, bạn có thể tinh chỉnh những gì nó theo dõi. Trên Ubuntu, cấu hình được quản lý trong /etc/aide/aide.conf hoặc các tệp trong /etc/aide/aide.conf.d/.
Để giám sát một thư mục cụ thể như thư mục gốc của trang web với các thiết lập bảo mật cao, hãy thêm một quy tắc tùy chỉnh:
# Định nghĩa quy tắc: p (quyền), i (inode), n (liên kết), u (người dùng), g (nhóm), s (kích thước), m (mtime), c (ctime), sha512 (mã băm)
WebRule = p+i+n+u+g+s+m+c+sha512
/var/www/html WebRule
Bước 6: Cập nhật sau khi thay đổi phần mềm
Khi bạn thực hiện bảo trì hợp lệ, như chạy apt upgrade, AIDE sẽ xác định chính xác đây là các thay đổi. Để thiết lập một cơ sở dữ liệu gốc mới, hãy cập nhật cơ sở dữ liệu:
sudo aide --update
sudo cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
Bước 7: Tự động hóa kiểm tra hàng ngày
Việc kiểm tra thủ công rất dễ bị lãng quên. Tôi thường đặt một script vào /etc/cron.daily/aide-check để tự động hóa quy trình:
#!/bin/bash
# Chạy kiểm tra và gửi kết quả qua email
/usr/bin/aide --check | mail -s "Báo cáo AIDE cho $(hostname)" [email protected]
Đảm bảo script có quyền thực thi:
sudo chmod +x /etc/cron.daily/aide-check
Suy nghĩ cuối cùng về tính toàn vẹn của cơ sở dữ liệu
Rủi ro lớn nhất với AIDE chính là bản thân cơ sở dữ liệu. Nếu tôi là một kẻ tấn công có quyền root, động thái đầu tiên của tôi sẽ là chạy aide --update để xóa dấu vết. Để ngăn chặn điều này, một số quản trị viên hệ thống lưu trữ cơ sở dữ liệu trên một thẻ USB chỉ đọc. Những người khác sử dụng một máy chủ trung tâm để đẩy cơ sở dữ liệu xuống node, chạy kiểm tra và ngay lập tức xóa bản sao cục bộ. Bảo mật không bao giờ là một công việc “thiết lập rồi quên đi”, nhưng AIDE cung cấp cho bạn khả năng hiển thị cần thiết để tin tưởng lại hệ thống tệp tin của chính mình.

