Việc theo dõi tính toàn vẹn có một đặc tính khó chịu: nó cần một chuẩn mực lấy từ một hệ thống chắc chắn sạch. Nếu máy chủ đã chạy ba năm và câu hỏi về việc bị đột nhập chỉ mới nảy ra hôm nay thì việc lấy chuẩn mực đó đã quá muộn — bạn sẽ ghi nhận những gì đang có là bình thường.

Nhưng trên Debian và Ubuntu chuẩn mực đó đã tồn tại, và nó không phải của bạn: mỗi gói đã cài đều mang theo checksum các tệp của chính nó. Việc so sánh với chúng không cần cấu hình và không cần ảnh chụp trước đó, và nó hoạt động trên bất kỳ hệ thống nào vào bất kỳ lúc nào. Công cụ đó tên là debsums.

Cách dùng

sudo apt install debsums
sudo debsums -c

Cờ -c chỉ in ra những tệp không khớp chuẩn mực. Thiếu nó thì kết quả là một báo cáo từng dòng về mọi tệp trong hệ thống, hàng chục nghìn dòng.

Phép kiểm tra mất vài phút và tạo tải cho đĩa, nên trên máy chủ đang chạy thật thì đáng chạy với mức ưu tiên hạ thấp:

sudo ionice -c3 nice -n19 debsums -c

Đọc kết quả thế nào

Kết quả rỗng nghĩa là mọi tệp được kiểm tra đều khớp với những gì bản phân phối đã cài. Kết quả không rỗng thì cần xem xét, và các phát hiện chia thành hai loại rất khác nhau.

Tệp cấu hình trong /etc. Việc thay đổi chúng là công việc bình thường: bạn đã sửa sshd_config, cấu hình nginx, thêm tham số nhân. Những khác biệt như vậy là điều đã dự liệu. Để chúng không vướng chân thì có một chế độ riêng:

sudo debsums -e -c

-e chỉ kiểm tra các tệp cấu hình — thỉnh thoảng hữu ích để xem danh sách mọi thứ bạn đã thay đổi trên máy này.

Tệp thực thi và thư viện. Một khác biệt trong /usr/bin, /usr/sbin, /bin hay /usr/lib chính là thứ mà phép kiểm tra được chạy vì nó. Có những nguyên nhân hợp lệ, nhưng không nhiều: tệp bị sửa bằng tay khi gỡ lỗi, một bản vá của bên thứ ba đã được áp dụng, gói đang được nâng cấp trong lúc kiểm tra. Nếu không cái nào khớp thì đã đến lúc phải xem xét nghiêm túc.

Các mục tiêu kinh điển của việc thay thế là ls, ps, netstat, ss, find, sshd. Một phiên bản bị thay sẽ giấu đi khỏi kết quả của nó chính những dòng quan trọng, và mọi phép kiểm tra sau đó của bạn sẽ thôi nói thật.

Độ bao phủ không đầy đủ — và cần biết điều đó

Một giới hạn thường không được nhắc tới: không phải gói nào cũng gửi kèm checksum. Tệp từ những gói như vậy hoàn toàn không được kiểm tra và sẽ không bao giờ xuất hiện trong báo cáo dù trong hoàn cảnh nào. Có thể xem danh sách thế này:

sudo debsums -l

Vì thế một báo cáo debsums sạch có nghĩa là «trong phần đã được kiểm tra thì mọi thứ đều ổn», chứ không phải «hệ thống chưa bị sửa đổi». Điều tương tự áp dụng cho mọi thứ được cài ngoài trình quản lý gói: biên dịch từ mã nguồn, tải về dạng nhị phân, cài bằng script từ trang của nhà phát triển — debsums theo định nghĩa chẳng theo dõi cái nào trong số đó, và chính ở đó mới cần AIDE.

Chạy định kỳ

Gói này mang theo một tác vụ dựng sẵn, được bật trong /etc/default/debsums:

CRON_CHECK=weekly

Mỗi tuần một lần là tần suất hợp lý: phép kiểm tra tạo tải đáng kể cho đĩa, còn các tệp hệ thống thì hiếm khi thay đổi giữa các bản cập nhật. Chạy hằng ngày chẳng thêm gì ngoài tải.

Nếu một tệp thực sự bị thay

Thôi thúc đầu tiên là cài lại gói để lấy lại bản gốc:

sudo apt install --reinstall coreutils

Lệnh này đúng, nhưng không phải với tư cách hành động đầu tiên. Một tệp nhị phân hệ thống bị thay nghĩa là ai đó đã có root, và việc khôi phục tệp không giải quyết vấn đề ấy — nó chỉ hủy đi dấu vết. Trình tự phải ngược lại: trước hết giữ một bản sao của tệp đáng ngờ cùng thời điểm sửa đổi, xem trong cùng khoảng thời gian còn gì thay đổi, kiểm tra các tác vụ cron, các khóa SSH và danh sách người dùng. Chỉ sau đó mới khôi phục.

Cũng đáng nhớ giới hạn của phương pháp: nếu hệ thống bị chiếm sâu thì chính debsums và các thư viện nó dùng cũng có thể đã bị thay cùng với mọi thứ khác. Một phép kiểm tra từ bên trong không thể cho bảo đảm tuyệt đối — điều đó chỉ đạt được bằng cách khởi động từ phương tiện bên ngoài. Nhưng với công việc hằng ngày thì thế là đủ: đại đa số các cuộc tấn công đều tự động và không tinh vi đến thế.

Vị trí của nó trong bức tranh chung

debsums hay ở chỗ nó chẳng cần gì và hoạt động ngay lập tức — điều đó khiến nó là điểm khởi đầu tiện lợi cho một máy chủ mà bạn không biết lịch sử. Điểm yếu của nó là độ bao phủ không đầy đủ và việc chẳng biết gì về những thứ cài ngoài gói. Cặp «debsums cộng AIDE» khép cả hai phía: chuẩn mực dựng sẵn của bản phân phối cho các tệp hệ thống, và ảnh chụp của chính bạn cho phần còn lại.

Như thường lệ, vấn đề không phải là chạy nó mà là có kết quả mới nhất cùng ngày tháng của nó ở ngay trước mắt. Trông ra sao — xem ở demo bên dưới.