1. Cài đặt và khởi động gói auditd trên các node
Cài đặt gói auditd trên tất cả các node trong cụm (cluster) để đảm bảo khả năng thu thập log đồng bộ.
Tại sao: auditd là daemon cấp kernel, cần chạy trên mọi node để giám sát hoạt động tại chỗ trước khi dữ liệu được gửi đi hoặc lưu trữ tập trung.
Kết quả mong đợi: Dịch vụ auditd đang chạy (active) và tự động khởi động khi hệ thống lên (enabled).
Trên hệ thống dựa trên RHEL/CentOS/AlmaLinux:
sudo dnf install -y audit audit-libs libaudit-devel
sudo systemctl enable --now auditd
sudo systemctl status auditd
Trên hệ thống dựa trên Debian/Ubuntu:
sudo apt-get update
sudo apt-get install -y audit libaudit1 libaudit-common
sudo systemctl enable --now auditd
sudo systemctl status auditd
Verify kết quả
Kiểm tra trạng thái dịch vụ và xem log mẫu đầu tiên để xác nhận daemon đang hoạt động:
systemctl is-active auditd
journalctl -u auditd -n 10 --no-pager
2. Cấu hình quy tắc audit để theo dõi truy cập file dữ liệu DB
Thêm quy tắc (rule) vào /etc/audit/audit.rules để giám sát mọi thao tác đọc, viết, thay đổi thuộc tính trên thư mục dữ liệu của Database (ví dụ: /var/lib/etcd hoặc /var/lib/mysql).
Tại sao: Cần phát hiện ngay lập tức nếu có tiến trình nào (không phải tiến trình DB hợp lệ) cố gắng truy cập vật lý vào các file data, đặc biệt là sau khi đã kích hoạt TDE.
Kết quả mong đợi: Mọi lệnh open, read, write trên thư mục DB đều được ghi vào /var/log/audit/audit.log.
Định nghĩa quy tắc giám sát thư mục dữ liệu (thay thế /var/lib/your-db bằng đường dẫn thực tế của bạn):
sudo auditctl -w /var/lib/your-db -p rwa -k db_data_access
sudo auditctl -w /var/lib/your-db -p x -k db_data_exec
Để lưu cấu hình vĩnh viễn, thêm dòng sau vào file /etc/audit/audit.rules:
echo "-w /var/lib/your-db -p rwa -k db_data_access" >> /etc/audit/audit.rules
echo "-w /var/lib/your-db -p x -k db_data_exec" >> /etc/audit/audit.rules
Verify kết quả
Thực hiện thao tác truy cập file và kiểm tra log:
cat /var/lib/your-db/somefile.db
grep db_data_access /var/log/audit/audit.log | tail -n 5
3. Theo dõi các lệnh chmod/chown trên thư mục chứa key TDE
Cấu hình quy tắc riêng biệt để giám sát chặt chẽ thư mục chứa các khóa mã hóa (TDE Keys), ví dụ: /etc/your-db/keys.
Tại sao: Trong môi trường TDE, nếu ai đó thay đổi quyền (chmod) hoặc chủ sở hữu (chown) của thư mục key, đây là dấu hiệu tấn công nghiêm trọng hoặc cấu hình sai lệch có thể dẫn đến mất dữ liệu.
Kết quả mong đợi: Bất kỳ lệnh chmod, chown nào trên thư mục key đều tạo sự kiện audit với key tde_key_security.
Áp dụng quy tắc giám sát thay đổi thuộc tính (attribute) và quyền (mode) trên thư mục key:
sudo auditctl -w /etc/your-db/keys -p wa -k tde_key_security
sudo auditctl -w /etc/your-db/keys -p a -k tde_key_attr_change
Lưu cấu hình vào file /etc/audit/audit.rules để áp dụng khi restart:
echo "-w /etc/your-db/keys -p wa -k tde_key_security" >> /etc/audit/audit.rules
echo "-w /etc/your-db/keys -p a -k tde_key_attr_change" >> /etc/audit/audit.rules
Verify kết quả
Mô phỏng thay đổi quyền và kiểm tra log:
chmod 777 /etc/your-db/keys
grep tde_key_security /var/log/audit/audit.log | tail -n 5
Đảo ngược lại quyền đúng sau khi test:
chmod 700 /etc/your-db/keys
chown root:root /etc/your-db/keys
4. Cấu hình audit để ghi nhận các sự cố login thất bại hoặc thành công
Giám sát các hệ thống gọi (system calls) liên quan đến xác thực người dùng, bao gồm login, sshd, và các lệnh auth.
Tại sao: Phát hiện các cuộc tấn công brute-force (login thất bại liên tục) hoặc truy cập trái phép (login thành công từ IP lạ/tài khoản lạ).
Kết quả mong đợi: Các sự kiện login thành công và thất bại được ghi nhận với key auth_events.
Cấu hình audit để theo dõi các lệnh gọi hệ thống liên quan đến xác thực:
sudo auditctl -a exit,always -F arch=b64 -S openat2 -F exit=-EACCES -k auth_failed
sudo auditctl -a exit,always -F arch=b64 -S openat2 -F exit=-EPERM -k auth_failed
sudo auditctl -a exit,always -F arch=b64 -S execve -F a0=/usr/bin/login -k login_attempts
sudo auditctl -a exit,always -F arch=b64 -S execve -F a0=/usr/sbin/sshd -k ssh_login
Để đơn giản hóa và bao quát hơn, ta có thể theo dõi trực tiếp file log xác thực của PAM (thường là /var/log/secure hoặc /var/log/auth.log):
sudo auditctl -w /var/log/secure -p wa -k auth_log_access
# Hoặc cho Ubuntu/Debian
sudo auditctl -w /var/log/auth.log -p wa -k auth_log_access
Lưu vào file /etc/audit/audit.rules:
echo "-a exit,always -F arch=b64 -S openat2 -F exit=-EACCES -k auth_failed" >> /etc/audit/audit.rules
echo "-w /var/log/secure -p wa -k auth_log_access" >> /etc/audit/audit.rules
Verify kết quả
Thử đăng nhập sai password và kiểm tra log:
su - wrong_user
grep auth_failed /var/log/audit/audit.log | tail -n 3
5. Trích xuất và phân tích log audit từ nhiều node tập trung
Thiết lập cơ chế tập trung hóa log từ các node (Node A, Node B, Node C) về một server trung tâm (Log Aggregator) để phân tích tương quan.
Tại sao: Trong kiến trúc phân tán (Raft), việc tấn công thường diễn ra song song trên nhiều node. Việc xem log rời rạc trên từng máy sẽ gây khó khăn cho việc phát hiện mẫu (pattern) tấn công toàn cục.
Kết quả mong đợi: Log audit từ tất cả node được gửi về server trung tâm qua mạng (thường dùng audit-remote hoặc rsyslog).
Bước 1: Cấu hình trên Node (Client) để gửi log về Server.
Sửa file /etc/audit/auditd.conf trên mỗi node:
sudo nano /etc/audit/auditd.conf
# Thêm hoặc sửa dòng sau (thay IP_SERVER bằng IP của máy tập trung log)
remote_syslog = 192.168.1.100
remote_port = 514
Bước 2: Cấu hình trên Server (Aggregator) để nhận log.
Cài đặt audit-remote hoặc cấu hình rsyslog để lắng nghe port 514/udp (hoặc tcp nếu cần an toàn hơn).
sudo dnf install -y audit audit-libs rsyslog
sudo systemctl enable --now rsyslog
Tạo file cấu hình /etc/rsyslog.d/audit.conf trên Server:
cat > /etc/rsyslog.d/audit.conf
Bước 3: Khởi động lại dịch vụ trên cả Client và Server.
sudo systemctl restart auditd
sudo systemctl restart rsyslog
Bước 4: Trích xuất và phân tích log tập trung.
Sử dụng aureport hoặc ausearch trên Server để xem tổng hợp.
# Tìm các lần truy cập file DB từ tất cả node
ausearch -f /var/lib/your-db -i
# Tạo báo cáo về các lệnh bị từ chối (EACCES/EPERM) trong 24h qua
aureport -l -s today
# Tìm các sự kiện liên quan đến TDE Key trên tất cả node
grep tde_key_security /var/log/audit/audit_node_*.log
Verify kết quả
Thực hiện thao tác trên Node A và Node B, sau đó kiểm tra log trên Server:
# Trên Node A
cat /var/lib/your-db/somefile.db
# Trên Server (Aggregator)
grep "node-a" /var/log/audit/audit_node_a.log | tail -n 5
Điều hướng series:
Mục lục: Series: Triển khai Database phân tán an toàn với Raft, TDE và Linux Kernel Audit
« Phần 3: Cấu hình mã hóa dữ liệu tại chỗ (TDE)
Phần 5: Tích hợp an ninh toàn diện và kiểm thử tấn công »