Bảo mật Kernel Linux: Hướng dẫn cấu hình IMA thực tế

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Bảo mật cốt lõi: Tại sao tính toàn vẹn của tệp lại quan trọng

Sau khi chứng kiến một botnet tự động tấn công server của mình với hơn 5.000 lần đăng nhập SSH chỉ trong một giờ, tôi đã ngừng coi bảo mật chỉ là vấn đề ở lớp biên. Đêm đó đã dạy tôi một bài học đắt giá: ngăn chặn xâm nhập chỉ là thử thách đầu tiên. Nếu kẻ tấn công lọt qua được, bước tiếp theo của chúng gần như luôn là sửa đổi các tệp thực thi hệ thống hoặc cài đặt một backdoor để duy trì quyền truy cập. Các công cụ bảo mật thông thường thường bỏ lỡ những thay đổi nhỏ này cho đến khi thiệt hại đã xảy ra.

Linux Integrity Measurement Architecture (IMA) thay đổi cuộc chơi bằng cách đưa việc phát hiện vào chính kernel. Không giống như các trình quét ở user-space chạy theo lịch trình, IMA đóng vai trò như một người gác cổng. Nó đo lường (measure) mọi tệp trước khi hệ thống thực thi hoặc mở nó, duy trì một bản log trực tiếp về trạng thái của hệ thống. Nếu một tệp cốt lõi bị can thiệp, IMA sẽ phát hiện ngay tại miligiây nó được truy cập.

So sánh các phương pháp: IMA và các công cụ kiểm tra tính toàn vẹn truyền thống

Khi lần đầu tìm hiểu về tính toàn vẹn của tệp, tôi đã sử dụng các công cụ như AIDE hoặc Tripwire. Chúng là những công cụ tốt, nhưng có một “điểm mù” cố hữu về thời gian. Dưới đây là cách chúng so sánh với phương pháp tiếp cận ở cấp độ kernel:

Quét ở User-Space (AIDE, Tripwire)

  • Quy trình làm việc: Các công cụ này so sánh hệ thống tệp của bạn với một cơ sở dữ liệu hash đã lưu thông qua các cron job.
  • Khoảng trống: Chúng mang tính phản ứng (reactive). Nếu kẻ tấn công sửa đổi /usr/bin/sudo lúc 2:05 chiều và bản quét của bạn chạy lúc 3:00 chiều, kẻ xâm nhập có 55 phút tự do mà không bị phát hiện.
  • Lỗ hổng: Một kẻ tấn công thông minh có thể dễ dàng sửa đổi chính tệp thực thi của trình quét hoặc cơ sở dữ liệu cục bộ của nó để xóa dấu vết.

Đo lường cấp độ Kernel (IMA)

  • Quy trình làm việc: Kernel tính toán mã hash của tệp theo thời gian thực ngay khi tệp được truy cập.
  • Khoảng trống: Không có. Việc đo lường diễn ra chính xác tại thời điểm thực thi hoặc đọc tệp.
  • Lỗ hổng: Việc vượt qua IMA là cực kỳ khó khăn. Logic nằm trong kernel và có thể được khóa chặt bằng bảo mật phần cứng như Trusted Platform Module (TPM).

Ưu và nhược điểm khi sử dụng Linux IMA

Chuyển sang kiến trúc “Zero Trust” ở cấp độ tệp là một thắng lợi lớn về bảo mật, nhưng nó không miễn phí. Bạn phải cân bằng giữa khả năng bảo vệ cấp cao và tài nguyên hệ thống.

Ưu điểm

  • Bằng chứng bất biến: Bạn có một bản log mật mã của mọi tệp thực thi từng được chạy.
  • Tin cậy phần cứng: IMA có thể “mở rộng” (extend) các phép đo lường tới TPM. Điều này khiến ngay cả kẻ tấn công có quyền root cũng không thể làm giả log mà không xóa các thanh ghi phần cứng.
  • Kiểm soát chi tiết: Bạn không bị bó buộc trong cách tiếp cận “tất cả hoặc không có gì”. Bạn có thể viết các chính sách (policy) để chỉ đo lường các tệp có rủi ro cao, chẳng hạn như những tệp thuộc sở hữu của root.

Thách thức

  • Chi phí hiệu năng: Việc hash tệp tiêu tốn chu kỳ CPU. Trên các máy chủ cơ sở dữ liệu tải cao, hãy dự kiến mức tăng sử dụng CPU từ 2% đến 5% trong các hoạt động I/O nặng.
  • Rủi ro cấu hình: IMA rất nhạy cảm. Một sai sót nhỏ trong chính sách có thể khiến hệ thống bị treo hoặc từ chối khởi động các dịch vụ thiết yếu.
  • Tăng trưởng log: Trên một hệ thống bận rộn, log của IMA tăng lên rất nhanh. Bạn cần có kế hoạch xoay vòng (rotate) hoặc chuyển dữ liệu này sang một máy chủ log từ xa.

Thiết lập được khuyến nghị: IMA kết hợp với TPM

Tôi luôn khuyên bạn nên gắn IMA với một chip TPM. Nếu không có sự tích hợp phần cứng, danh sách IMA sẽ nằm trong RAM, nơi một kernel rootkit tinh vi có khả năng thay đổi nó. Khi bạn sử dụng TPM, kernel sẽ gửi hash của mỗi tệp tới PCR 10 (Platform Configuration Register). Điều này tạo ra một chuỗi tin cậy (chain of trust) có thể được xác thực bởi một máy chủ từ xa, đảm bảo rằng log không bị sửa đổi hay xóa sạch.

Hướng dẫn triển khai: Cấu hình IMA

Hầu hết các bản phân phối hiện đại như Ubuntu, RHEL hoặc Debian đều đi kèm with hỗ trợ IMA trong kernel. Tuy nhiên, nó thường ở trạng thái ngủ đông. Đây là quy trình tôi sử dụng để kích hoạt nó.

1. Kiểm tra hỗ trợ của Kernel

Kiểm tra xem kernel của bạn đã sẵn sàng cho IMA chưa. Chạy lệnh này để kiểm tra cấu hình boot của bạn:

grep CONFIG_IMA /boot/config-$(uname -r)

Tìm dòng CONFIG_IMA=y. Nếu bạn thấy ‘n’, bạn sẽ cần chuyển sang một kernel khác hoặc biên dịch lại, mặc dù điều này hiếm khi xảy ra trên các image cloud hiện đại.

2. Kích hoạt IMA qua tham số Boot

IMA yêu cầu các chỉ dẫn cụ thể tại thời điểm boot. Mở tệp cấu hình GRUB của bạn:

sudo nano /etc/default/grub

Tìm dòng GRUB_CMDLINE_LINUX_DEFAULT. Thêm chính sách tcb (Trusted Computing Base) và thiết lập thuật toán hash. Tôi khuyên dùng SHA256 thay vì SHA1 cũ:

GRUB_CMDLINE_LINUX_DEFAULT="... ima_policy=tcb ima_hash=sha256"

Chính sách tcb là một điểm khởi đầu tuyệt vời. Nó đo lường tất cả các chương trình được thực thi và tất cả các tệp được mở để đọc bởi root. Áp dụng các thay đổi và khởi động lại:

sudo update-grub
sudo reboot

3. Kiểm tra danh sách đo lường

Khi hệ thống khởi động lại, IMA sẽ bắt đầu ghi lại ngay lập tức. Bạn có thể xem danh sách đo lường trực tiếp tại đây:

sudo cat /sys/kernel/security/ima/ascii_runtime_measurements | head -n 15

Đầu ra cung cấp chỉ số PCR, hash mẫu và đường dẫn tệp. Nó trông như thế này:

10 4967... ima-ng sha256:e3b0c442... /usr/bin/ls
10 5a2d... ima-ng sha256:f72a12b... /etc/shadow

4. Chuyển sang Chính sách tùy chỉnh

Chính sách tcb có thể tạo ra quá nhiều log không cần thiết. Trong môi trường production, tôi thường thu hẹp phạm vi để giảm tác động hiệu năng. Bạn có thể định nghĩa một chính sách tùy chỉnh trong tệp có tên ima_policy:

# Đo lường tất cả các tệp thực thi trước khi chạy
measure func=BPRM_CHECK
# Đo lường mọi thứ mà root chạm vào
measure func=FILE_CHECK mask=MAY_READ subj_user=root
# Đo lường các module kernel
measure func=MODULE_CHECK

Để tải nó, bạn phải chuyển hướng nội dung vào security filesystem. Hãy cẩn thận: lỗi trong tệp này có thể dẫn đến treo hệ thống.

sudo cp ima_policy /sys/kernel/security/ima/policy

Các thực hành tốt nhất cho Production

Thiết lập IMA trong môi trường thử nghiệm khá đơn giản, nhưng production đòi hỏi sự kỷ luật cao hơn. Đây là những quy tắc vàng của tôi:

  • Bỏ SHA1: Nhiều hướng dẫn cũ vẫn sử dụng SHA1. Nó đã yếu về mặt mật mã. Luôn đặt rõ ràng ima_hash=sha256 trong các tham số boot của bạn.
  • Theo dõi bộ nhớ: Danh sách đo lường nằm trong bộ nhớ kernel và chỉ reset khi khởi động lại. Nếu máy chủ của bạn hoạt động liên tục hơn 500 ngày và thực thi hàng triệu script duy nhất, hãy theo dõi mức sử dụng RAM.
  • Sử dụng Remote Attestation: Log cục bộ có thể bị xem trộm, nhưng remote attestation (xác thực từ xa) chứng minh chúng là thật. Các công cụ như Keylime có thể giám sát các phép đo TPM của bạn từ một máy chủ an toàn riêng biệt.
  • Kết hợp với EVM: IMA đo lường nội dung tệp, nhưng Extended Verification Module (EVM) bảo vệ siêu dữ liệu (metadata) như quyền hạn và quyền sở hữu. Hãy sử dụng chúng cùng nhau để đạt hiệu quả phòng thủ tối đa.

Cấu hình IMA ban đầu có vẻ giống như một công việc tẻ nhạt. Tuy nhiên, hiệu quả bảo mật (ROI) mang lại là không thể phủ nhận. Biết rằng kernel của bạn đang tích cực kiểm soát mọi hoạt động thực thi mang lại cho bạn mức độ tin cậy mà không công cụ user-space nào có thể sánh kịp.

Share: