Chặn đứng phần mềm lạ trên Fedora Server với fapolicyd: Bảo mật kiểu Whitelisting

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Khi quyền Root là chưa đủ để bảo vệ hệ thống

Dù bạn đã thiết lập Firewall tầng tầng lớp lớp, bật SELinux Enforcing và vá lỗi hàng tuần, hệ thống vẫn tồn tại một kẽ hở chí mạng. Chỉ cần một user hoặc một dịch vụ bị chiếm quyền tải script lạ vào /tmp, cấp quyền +x và thực thi, rủi ro sẽ ập đến ngay lập tức. SELinux có thể hạn chế thiệt hại, nhưng ngăn chặn ngay từ bước thực thi (execution) mới là cách tiếp cận triệt để.

Sau 2 năm dùng Fedora cho các dự án quan trọng, mình nhận ra rằng môi trường Production cần một cơ chế “Zero Trust” cho file thực thi. Nguyên tắc rất đơn giản: Chỉ những gì được phép mới được chạy, còn lại cấm hết. Đây chính là lúc fapolicyd (File Access Policy Daemon) phát huy sức mạnh trên Fedora Server.

Tại sao không dùng các phương pháp truyền thống?

Trước khi cấu hình, hãy nhìn qua lý do tại sao các giải pháp cũ thường thất bại trong việc ngăn chặn attacker chuyên nghiệp.

1. Mount Options (noexec)

Nhiều admin thường mount /tmp hoặc /home với tùy chọn noexec. Tuy nhiên, kỹ thuật này rất dễ bị bypass. Attacker chỉ cần gọi trực tiếp trình thông dịch như python3 script.py hoặc dùng ld-linux.so để nạp binary là có thể lách luật dễ dàng.

2. SELinux Policies

SELinux cực kỳ mạnh mẽ nhưng nó tập trung vào việc ứng dụng làm được gì sau khi đã chạy. Việc viết policy để chặn thực thi ở mọi ngóc ngách là một cực hình về kỹ thuật, dễ gây treo hệ thống nếu bạn không phải chuyên gia.

3. fapolicyd – Giải pháp hiện đại

Công cụ này hoạt động ở tầng Kernel thông qua fanotify. Điểm khác biệt lớn nhất là nó tích hợp trực tiếp với cơ sở dữ liệu RPM của Fedora. Nó mặc định tin tưởng mọi phần mềm bạn cài qua dnf và tự động chặn mọi thứ cài cắm thủ công từ bên ngoài.

Lợi ích thực tế trên Fedora Server

Triển khai fapolicyd trên Fedora mang lại sự nhàn hạ hiếm thấy cho quản trị viên. Hệ thống tự động quét DB của RPM để xác định “hàng chính hãng”.

  • Hiệu năng: Mức chiếm dụng CPU thường dưới 1% trong điều kiện vận hành bình thường.
  • Độ tin cậy: Giảm thiểu 90% nguy cơ từ các cuộc tấn công dạng “Living off the land” (tận dụng công cụ có sẵn để phá hoại).
  • Phiền phức có ích: Bạn sẽ bị chặn nếu chạy script dạo. Trên Server, sự phiền phức này chính là lớp bảo mật đáng giá nhất.

Hướng dẫn cài đặt và cấu hình fapolicyd

Mình sẽ thực hiện các bước này trên Fedora Server phiên bản mới nhất. Hãy đảm bảo bạn đang có quyền sudo.

Bước 1: Cài đặt gói

Chạy lệnh sau để cài đặt daemon:

sudo dnf install fapolicyd -y

Lưu ý quan trọng: Đừng bật dịch vụ ngay lập tức. Nếu cấu hình sai, bạn có thể tự khóa mình khỏi các công cụ quản trị hệ thống.

Bước 2: Cập nhật danh sách tin cậy

Đầu tiên, fapolicyd cần đồng bộ danh sách các file được phép dựa trên database của RPM:

sudo fapolicyd-cli --update

Sau đó, kích hoạt dịch vụ để bắt đầu giám sát:

sudo systemctl enable --now fapolicyd

Kiểm tra trạng thái để đảm bảo mọi thứ ổn định:

sudo systemctl status fapolicyd

Bước 3: Thử nghiệm thực tế

Hãy thử tạo một script đơn giản trong thư mục /tmp để xem nó hoạt động gắt thế nào:

echo -e "#!/bin/bash\necho 'Hacker script'" > /tmp/malware.sh
chmod +x /tmp/malware.sh
/tmp/malware.sh

Hệ thống sẽ trả về lỗi: Operation not permitted. Ngay cả khi bạn cố tình lách bằng lệnh bash /tmp/malware.sh, fapolicyd vẫn sẽ chặn đứng vì nó giám sát cả các trình thông dịch (interpreters).

Cách thêm ứng dụng nội bộ vào Whitelist

Trong thực tế, bạn luôn có những script hoặc binary tự viết không nằm trong RPM. Đừng sửa file cấu hình gốc /etc/fapolicyd/fapolicyd.rules. Thay vào đó, hãy tạo file riêng trong rules.d.

Ví dụ: Cho phép Tool quản trị riêng

Giả sử bạn có tool tại /opt/admin-tools/sync-data. Hãy tạo file rule mới:

sudo nano /etc/fapolicyd/rules.d/90-admin-tools.rules

Thêm dòng sau để cho phép thực thi:

allow perm=any obj=/opt/admin-tools/sync-data

Cuối cùng, nạp lại rule và cập nhật database để áp dụng thay đổi:

sudo fagenrules --load
sudo systemctl restart fapolicyd

Kiểm soát tính toàn vẹn với Integrity Check

Một tính năng mình cực kỳ thích là kiểm tra mã hash SHA256. Hacker có thể ghi đè mã độc vào một file đã được whitelist. Để chống lại điều này, fapolicyd có thể đối chiếu mã hash của file trước khi cho phép chạy. Nếu mã hash không khớp với khai báo, hành động thực thi sẽ bị từ chối ngay lập tức.

Kinh nghiệm vận hành để tránh “gậy ông đập lưng ông”

Khi mới triển khai, mình từng làm sập một service vì nó tạo file thực thi tạm thời. Để tránh thảm họa, bạn nên áp dụng 3 quy tắc sau:

  1. Chế độ Debug: Chạy sudo fapolicyd --debug để quan sát thực tế những gì đang bị chặn trước khi áp dụng cứng.
  2. Soi Log hệ thống: Sử dụng lệnh journalctl -u fapolicyd | grep deny thường xuyên trong tuần đầu tiên triển khai.
  3. Ưu tiên Whitelist theo Path: Đối với các thư mục chứa nhiều script tin cậy, hãy whitelist cả thư mục nhưng phải kiểm soát quyền ghi (write permission) chặt chẽ.

Lời khuyên cuối cùng

Sử dụng fapolicyd trên Fedora Server là bước chuyển mình từ phòng thủ bị động sang kiểm soát chủ động. Ban đầu, việc tinh chỉnh rule có thể tốn của bạn khoảng 30-60 phút. Tuy nhiên, sự an tâm khi biết rằng không một phần mềm lạ nào có thể chạy trên server là phần thưởng hoàn toàn xứng đáng.

Share: