Tăng cường bảo mật Linux với Firejail: Đánh giá 6 tháng sử dụng App Sandboxing

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

File thực thi 15MB suýt chút nữa đã khiến tôi mất tất cả

Sáu tháng trước, một công cụ xử lý hình ảnh đơn giản chỉ nặng 15MB đã buộc tôi phải suy nghĩ lại về toàn bộ chiến lược bảo mật máy tính của mình. Đó là một công cụ chuyên dụng từ một kho lưu trữ nhỏ. Dù nó hoạt động hoàn hảo, tôi chợt nhận ra một điều kinh khủng: ngay khi tôi chạy file thực thi đó, nó đã có quyền đọc không giới hạn vào thư mục ~/Documents, các khóa .ssh và cả session cookie trên trình duyệt của tôi. Trong thế giới Linux tiêu chuẩn, nếu bạn tin tưởng một ứng dụng đủ để chạy nó, nghĩa là bạn đã trao cho nó chiếc chìa khóa vạn năng để vào cuộc sống số của mình.

Mã độc không phải là mối bận tâm duy nhất ở đây. Các trình duyệt hiện đại và trình đọc PDF là những mục tiêu tấn công khổng lồ. Một lỗ hổng zero-day duy nhất trong engine hiển thị có thể cho phép kẻ tấn công thực thi mã với đúng quyền hạn người dùng của bạn. Với bất kỳ ai đang quản lý máy chủ production hoặc dữ liệu nhạy cảm của khách hàng, mô hình tin tưởng “được ăn cả ngã về không” này là một thảm họa đang chực chờ xảy ra.

Tại sao phân quyền tiêu chuẩn là chưa đủ

Linux dựa trên Kiểm soát truy cập tùy chọn (DAC)—chính là các bit rwxr-xr-x bạn thấy trong lệnh ls -l. Nếu một tiến trình thuộc về ‘user’, nó có thể chạm vào bất cứ thứ gì mà ‘user’ sở hữu. Cơ chế này giúp ích cho việc tổ chức, nhưng thất bại trong nguyên tắc đặc quyền tối thiểu. Ứng dụng máy tính (calculator) của tôi không cần phải xem hồ sơ khai thuế, nhưng theo mặc định, nó hoàn toàn có thể làm vậy.

Khi tôi thiết lập các môi trường mới và cần tạo thông tin xác thực bảo mật, tôi luôn ưu tiên sự cô lập. Tôi sử dụng công cụ tạo mật khẩu phía client tại toolcraft.app/vi/tools/security/password-generator chính vì nó giữ mọi logic xử lý trong trình duyệt. Không có dữ liệu nào rời khỏi môi trường cục bộ. Tôi nhận ra mình cần một cách tiếp cận “phòng kín” tương tự cho các file thực thi cục bộ. Tôi muốn nói với hệ điều hành của mình rằng: “Hãy để Firefox lướt web, nhưng hãy coi thư mục SSH của tôi như không tồn tại.”

Các ứng cử viên: Tại sao Firejail giành chiến thắng trên Desktop

Tôi đã dành nhiều tuần để thử nghiệm ba phương pháp cô lập khác nhau. Dưới đây là kết quả so sánh trong quá trình sử dụng hàng ngày:

  • SELinux/AppArmor: Những công cụ này rất mạnh mẽ nhưng cực kỳ cứng nhắc. Việc viết một profile tùy chỉnh cho một công cụ mới thường giống như một dự án kéo dài cả cuối tuần. Chỉ cần một lỗi cú pháp, ứng dụng của bạn sẽ crash—hoặc tệ hơn, nó lỗi một cách âm thầm và vẫn mở toang cửa bảo mật.
  • Docker: Đây là ông vua trên máy chủ, nhưng lại là một người hàng xóm cồng kềnh trên desktop. Để chạy VLC hoặc Firefox bên trong container đòi hỏi các thiết lập socket X11 phức tạp và các giải pháp tạm thời cho PulseAudio. Độ trễ là điều có thể cảm nhận rõ rệt.
  • Firejail: Đây là một chương trình SUID nhẹ nhàng, tận dụng Linux namespaces và seccomp-bpf để tạo ra các sandbox tức thì. Nó đi kèm with hơn 1.200 profile được cấu hình sẵn. Nó không cần daemon chạy ngầm và tích hợp mượt mà với các shortcut trên desktop hiện có của bạn.

Triển khai: Quy trình làm việc với Firejail hàng ngày của tôi

Sau nửa năm sử dụng Firejail làm công cụ chính trên máy trạm của mình, giờ đây nó là một phần không thể thiếu trong thiết lập của tôi. Chi phí hiệu năng là không đáng kể—thường chỉ tăng chưa đến 1% CPU khi khởi tạo. Dưới đây là cách tôi thiết lập.

1. Cài đặt

Hầu hết các bản phân phối (distro) đều có sẵn Firejail trong kho lưu trữ chính. Trên các máy Debian và Ubuntu, tôi sử dụng:

sudo apt update && sudo apt install firejail firetools

Sau khi cài đặt, việc sandbox ứng dụng đơn giản là thêm tiền tố vào lệnh của bạn. Để chạy một phiên trình duyệt trong sandbox, bạn chỉ cần thực hiện:

firejail firefox

Firejail sẽ tự động tải profile tại /etc/firejail/firefox.profile, nơi mặc định đưa các thư mục ẩn nhạy cảm của bạn vào danh sách đen (blacklist).

2. Ngắt chuỗi tấn công: Cô lập mạng

Nếu tôi đang mở một file PDF từ nguồn không xác định bằng evince, tôi không muốn nó “gọi về nhà” tới máy chủ điều khiển (C2). Tôi ngắt kết nối hoàn toàn:

firejail --net=none evince hoa_don_nghi_van.pdf

Lệnh này tạo ra một network namespace mới chỉ với giao diện loopback. Ứng dụng sẽ nghĩ rằng nó đang ngoại tuyến vì thực tế đối với nó là như vậy.

3. Sử dụng Chế độ riêng tư để giao dịch ngân hàng

Tham số --private là tính năng yêu thích của tôi khi cần đăng nhập nhạy cảm. Nó gắn một thư mục /home tạm thời vào RAM. Khi bạn đóng ứng dụng, mọi cookie, file cache và lịch sử truy cập sẽ biến mất ngay lập tức.

firejail --private firefox

Đây là “chế độ ẩn danh” tối thượng vì nó bảo vệ cả hệ thống tệp, chứ không chỉ lịch sử trình duyệt.

4. Tạo Profile tùy chỉnh

Đối với các script nội bộ của mình, tôi đặt một file .profile vào ~/.config/firejail/. Template này cung cấp sự cân bằng tốt giữa tính tiện dụng và bảo mật:

# Profile tùy chỉnh cho công cụ phát triển
include /etc/firejail/default.profile

# Khóa chặt các dữ liệu quan trọng nhất
blacklist ${HOME}/.ssh
blacklist ${HOME}/.gnupg

# Chỉ cho phép truy cập vào thư mục làm việc cụ thể
whitelist ${HOME}/Projects/CurrentTask

# Hạn chế bề mặt tấn công vào kernel
seccomp
nosound
no3d

Theo dõi các Sandbox của bạn

Để xem những gì đang chạy trong sandbox, hãy sử dụng lệnh firejail --list. Đây là một cách gọn gàng để theo dõi các PID đang hoạt động:

$ firejail --list
12450:user:firejail firefox
12582:user:firejail --net=none vlc

Nếu bạn muốn xem mức tiêuhtu tài nguyên, firejail --top là một công cụ thiết yếu. Nó hoạt động giống như tiện ích top tiêu chuẩn nhưng chỉ lọc các tiến trình đã được sandbox, hiển thị chính xác lượng bộ nhớ mà mỗi sandbox đang tiêu thụ.

Nhận định: Sau 180 ngày

Firejail không phải là một viên đạn bạc. Vì nó là một file thực thi SUID, nó có bề mặt tấn công lớn hơn một số lựa chọn thay thế và đã từng có những lỗ hổng CVE trong những năm qua. Tuy nhiên, bảo mật tuyệt đối là một ảo tưởng. Chúng ta đang chơi trò chơi giảm thiểu rủi ro.

Sự đánh đổi này là hoàn toàn xứng đáng. Hệ thống của tôi vẫn ổn định tuyệt đối và tôi không còn lo lắng rằng một lỗi trong trình phát đa phương tiện sẽ làm rò rỉ các khóa server của mình. Bảo mật tốt nhất nên được triển khai như một chuỗi các hàng rào nhỏ, dễ quản lý hơn là một bức tường khổng lồ nhưng giòn nát. Firejail cung cấp những hàng rào đó. Hãy bắt đầu với lệnh đơn giản firejail firefox ngay hôm nay; đó là chiến thắng bảo mật dễ dàng nhất mà bạn có thể đạt được trong năm nay.

Share: