auditd trả lời những câu hỏi nảy sinh sau sự việc: ai đã thay đổi tệp này, người dùng này được tạo khi nào, tiến trình này khởi chạy từ đâu. Không công cụ nào khác trả lời chúng — nhật ký ứng dụng không chứa thông tin đó, còn lịch sử shell thì do chính kẻ để lại nó chỉnh sửa.

Khó khăn nằm ở chỗ việc cài gói tự nó chẳng mang lại gì. Gần như không có quy tắc mặc định nào, nhật ký vẫn được ghi nhưng rỗng về mặt nội dung, và điều đó bị phát hiện vào lúc tệ nhất — khi cần dữ liệu mà dữ liệu lại không có.

Cài đặt

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

Một đặc điểm: trên một số phiên bản, auditd không khởi động lại được qua systemctl restart — dịch vụ được quản lý bằng lệnh riêng của nó. Quy tắc được nạp lại thế này:

sudo augenrules --load
sudo auditctl -l

Lệnh thứ hai cho thấy cái gì thực sự đã được nạp. Hãy tin nó, đừng tin nội dung các tệp.

Bộ quy tắc

Quy tắc đi vào /etc/audit/rules.d/ dưới dạng một tệp riêng. Dưới đây là bộ tối thiểu đáng đồng tiền: nó trả lời phần lớn các câu hỏi nảy sinh trong một sự cố mà không chôn vùi cả cái đĩa.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Người dùng và quyền
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges

## Truy cập SSH
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## Tác vụ theo lịch
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## Module nhân
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

## Việc dùng sudo và su
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

Cú pháp ngắn gọn: -w là đường dẫn cần theo dõi, -p wa nghĩa là phản ứng với việc ghi và thay đổi thuộc tính, -p x với việc thực thi, còn -k là khóa để tìm kiếm về sau. Chính các khóa đó là tiện lợi chính: thiếu chúng thì việc tìm trong nhật ký biến thành sàng lọc cả gigabyte văn bản.

Cái gì không có trong danh sách đó, và vì sao

Các hướng dẫn thường đề nghị ghi lại mọi lời gọi execve — tức là mọi lần khởi chạy của mọi chương trình. Cám dỗ thì dễ hiểu: một bức tranh đầy đủ về những gì đã làm. Trên thực tế, trên một máy chủ đang chạy thật điều đó tạo ra hàng trăm megabyte mỗi ngày, ngốn một phần đáng kể bộ xử lý và khiến nhật ký bị cắt sớm hơn lúc cần đến nó. Nếu cần mức chi tiết ấy thì hãy bật hẹp — cho một người dùng, hoặc trong thời gian điều tra.

Điều tương tự áp dụng cho việc theo dõi thư mục của trang web: việc ghi vào đó diễn ra liên tục, và quy tắc biến nhật ký thành một dòng chảy các sự kiện vô nghĩa.

Đọc nó

Tìm theo khóa, với các mã số được chuyển thành tên:

sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today

Cờ -i là thiết yếu để đọc được: thiếu nó bạn nhận về các con số thay cho tên người dùng và tên lời gọi hệ thống. -ts giới hạn khoảng thời gian (today, recent, hoặc một ngày cụ thể).

Tóm tắt theo khoảng thời gian:

sudo aureport --summary -i
sudo aureport --auth -i --failed

Trong một bản ghi sự kiện có ba trường đáng chú ý: auid, mã của người dùng đã mở phiên, uid, danh tính mà hành động chạy dưới đó, và exe, chương trình đã thực hiện nó. Khác biệt giữa auiduid chính là câu trả lời cho «ai đã trở thành root»: uid=0 với auid của một người cụ thể chỉ đích danh thủ phạm, bất kể trong phiên đó họ tự xưng là ai.

Đĩa

Các thiết lập kích thước nằm trong /etc/audit/auditd.conf:

max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG

Hãy xem riêng disk_full_action. Một số cấu hình mặc định là dừng hệ thống khi đĩa đầy — hành vi có lý trên các máy có yêu cầu kiểm toán và hoàn toàn lạc lõng trên một máy chủ web. Hãy kiểm tra giá trị đó trước khi đĩa hết chỗ.

Quy tắc bất biến

Dòng -e 2 ở cuối tệp quy tắc cấm việc thay đổi quy tắc cho tới khi khởi động lại — kể cả bởi kẻ đã lấy được root. Điều đó nâng giá trị của nhật ký lên rõ rệt: kẻ xâm nhập không thể tắt việc theo dõi mà không khởi động lại máy, còn một lần khởi động lại thì tự nó đã đập vào mắt.

Mặt trái là hiển nhiên: bạn cũng không thể thay đổi quy tắc của chính mình mà không khởi động lại. Hãy bật nó khi bộ quy tắc đã ổn định và bạn đã sống với nó một tháng.

Vì sao cần trên một máy chủ thông thường

auditd chẳng ngăn được gì. Giá trị của nó thể hiện đúng một lần — khi phải dựng lại chuỗi sự kiện, và dữ liệu thì hoặc có hoặc không. Không thể thu thập nó ngược về quá khứ, vì thế bộ quy tắc được đặt trước rồi để yên đó.

Dấu hiệu thực tế cho thấy cấu hình là đúng: danh sách quy tắc không rỗng, nhật ký không phình to mất kiểm soát, và các sự kiện với khóa identity cùng privileges xuất hiện thưa thớt và mỗi cái đều giải thích được. Trên một trang thì nó trông ra sao — xem ở demo bên dưới.