Audit log trên Ubuntu là một công cụ mạnh mẽ giúp bạn theo dõi và ghi lại các sự kiện quan trọng trên hệ thống. Trong bài viết này, chúng ta sẽ khám phá chi tiết về audit log trên Ubuntu, từ cách cài đặt và cấu hình đến cách phân tích và sử dụng nó để tăng cường bảo mật hệ thống. Audit log là một phần quan trọng trong việc kiểm tra bảo mật kernel ubuntu, giúp bạn phát hiện và phản ứng kịp thời với các hoạt động đáng ngờ.
Auditd là gì và tại sao bạn cần nó trên Ubuntu?
Auditd (Audit Daemon) là một hệ thống con của Linux kernel có nhiệm vụ ghi lại các hoạt động trên hệ thống vào nhật ký (log). Những hoạt động này bao gồm, nhưng không giới hạn, việc tạo, truy cập, sửa đổi và xóa file; thực thi chương trình; thay đổi cấu hình hệ thống; và các sự kiện liên quan đến bảo mật.
Tại sao bạn cần auditd? Đơn giản là vì nó cung cấp cho bạn một “lịch sử” chi tiết về những gì đã xảy ra trên hệ thống của bạn. Điều này vô cùng quan trọng trong các trường hợp sau:
- Phân tích bảo mật: Khi có sự cố bảo mật xảy ra, audit log là nguồn thông tin quan trọng để xác định nguyên nhân, phạm vi và cách khắc phục.
- Tuân thủ quy định: Nhiều tiêu chuẩn và quy định (ví dụ: PCI DSS, HIPAA) yêu cầu các tổ chức phải có khả năng theo dõi và kiểm tra các hoạt động trên hệ thống của họ.
- Phát hiện xâm nhập: Auditd có thể được cấu hình để cảnh báo khi có các hoạt động đáng ngờ xảy ra, giúp bạn phát hiện và ngăn chặn các cuộc tấn công sớm.
- Gỡ lỗi: Đôi khi, audit log có thể giúp bạn xác định nguyên nhân của các vấn đề hệ thống không liên quan đến bảo mật.
“Audit log giống như một chiếc camera an ninh cho hệ thống của bạn. Nó ghi lại mọi hoạt động quan trọng, giúp bạn biết ai đã làm gì và khi nào,” kỹ sư bảo mật Nguyễn Văn An, một chuyên gia với hơn 10 năm kinh nghiệm trong lĩnh vực an ninh mạng, chia sẻ.
Cài đặt và cấu hình auditd trên Ubuntu
Cài đặt auditd
Để cài đặt auditd trên Ubuntu, bạn có thể sử dụng lệnh sau:
sudo apt update
sudo apt install auditd audispd-plugins
Lệnh apt update
cập nhật danh sách các gói phần mềm có sẵn, còn lệnh apt install auditd audispd-plugins
cài đặt auditd và các plugin cần thiết.
Cấu hình auditd
Sau khi cài đặt, bạn cần cấu hình auditd để nó ghi lại những sự kiện mà bạn quan tâm. File cấu hình chính của auditd là /etc/audit/auditd.conf
. Dưới đây là một số tùy chọn cấu hình quan trọng:
log_file
: Xác định vị trí lưu trữ log file. Mặc định là/var/log/audit/audit.log
.max_log_file
: Xác định kích thước tối đa của log file (tính bằng MB). Khi log file đạt đến kích thước này, auditd sẽ xoay vòng (rotate) log.max_log_file_action
: Xác định hành động cần thực hiện khi log file đạt đến kích thước tối đa. Các tùy chọn bao gồmkeep_logs
(giữ lại tất cả các log),rotate
(xoay vòng log),compress
(nén log), vàsuspend
(tạm dừng ghi log).space_left
: Xác định dung lượng ổ cứng còn lại tối thiểu (tính bằng MB) trước khi auditd thực hiện hành động được chỉ định trongspace_left_action
.space_left_action
: Xác định hành động cần thực hiện khi dung lượng ổ cứng còn lại ít hơnspace_left
. Các tùy chọn tương tự nhưmax_log_file_action
.admin_space_left
: Xác định dung lượng ổ cứng còn lại tối thiểu (tính bằng MB) trước khi auditd thực hiện hành động được chỉ định trongadmin_space_left_action
.admin_space_left_action
: Xác định hành động cần thực hiện khi dung lượng ổ cứng còn lại ít hơnadmin_space_left
. Các tùy chọn tương tự nhưmax_log_file_action
.disk_full_action
: Xác định hành động cần thực hiện khi ổ cứng đầy. Các tùy chọn tương tự nhưmax_log_file_action
.disk_error_action
: Xác định hành động cần thực hiện khi có lỗi xảy ra khi ghi log. Các tùy chọn tương tự nhưmax_log_file_action
.
Ví dụ, để cấu hình auditd xoay vòng log file khi nó đạt đến 100MB và giữ lại tối đa 5 log file đã xoay vòng, bạn có thể chỉnh sửa file /etc/audit/auditd.conf
như sau:
log_file = /var/log/audit/audit.log
max_log_file = 100
max_log_file_action = rotate
num_logs = 5
Sau khi thay đổi cấu hình, bạn cần khởi động lại auditd để các thay đổi có hiệu lực:
sudo systemctl restart auditd
Sử dụng auditctl
để thêm các quy tắc audit
auditctl
là một công cụ dòng lệnh cho phép bạn thêm, xóa và liệt kê các quy tắc audit (audit rules). Quy tắc audit xác định những sự kiện nào sẽ được ghi lại. Các quy tắc audit được lưu trữ trong file /etc/audit/rules.d/audit.rules
.
Để thêm một quy tắc audit, bạn sử dụng lệnh auditctl -a <action>,<filter>-<field> -k <key>
. Trong đó:
<action>
: Xác định hành động cần thực hiện khi sự kiện xảy ra. Các giá trị phổ biến bao gồmalways
(luôn ghi lại) vàexit
(ghi lại khi syscall kết thúc).<filter>
: Xác định loại filter cần áp dụng. Các giá trị phổ biến bao gồmtask
(áp dụng cho tất cả các task),exit
(áp dụng cho các syscall kết thúc), vàuser
(áp dụng cho các sự kiện liên quan đến người dùng).<field>
: Xác định trường cần kiểm tra. Ví dụ:uid
(user ID),gid
(group ID),pid
(process ID),syscall
(system call),path
(đường dẫn file).<key>
: Một chuỗi tùy ý để bạn có thể dễ dàng tìm kiếm các sự kiện liên quan đến quy tắc này.
Ví dụ, để ghi lại tất cả các lần truy cập vào file /etc/passwd
, bạn có thể sử dụng quy tắc sau:
sudo auditctl -w /etc/passwd -p war -k passwd_access
Trong đó:
-w /etc/passwd
: Chỉ định file cần theo dõi là/etc/passwd
.-p war
: Chỉ định các quyền cần theo dõi làw
(write),a
(attribute change), vàr
(read).-k passwd_access
: Gán keypasswd_access
cho quy tắc này.
Để ghi lại tất cả các lần thực thi lệnh sudo
, bạn có thể sử dụng quy tắc sau:
sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_execution
Trong đó:
-a always,exit
: Ghi lại khi syscallexecve
kết thúc.-F arch=b64
: Chỉ định kiến trúc là 64-bit.-S execve
: Chỉ định syscall làexecve
(syscall được sử dụng để thực thi chương trình).-F path=/usr/bin/sudo
: Chỉ định đường dẫn của chương trình là/usr/bin/sudo
.-k sudo_execution
: Gán keysudo_execution
cho quy tắc này.
Lưu ý quan trọng: Các quy tắc audit được thêm bằng auditctl
chỉ có hiệu lực tạm thời. Khi bạn khởi động lại hệ thống, chúng sẽ bị mất. Để các quy tắc audit có hiệu lực vĩnh viễn, bạn cần thêm chúng vào file /etc/audit/rules.d/audit.rules
.
Để liệt kê tất cả các quy tắc audit hiện tại, bạn có thể sử dụng lệnh:
sudo auditctl -l
Để xóa tất cả các quy tắc audit, bạn có thể sử dụng lệnh:
sudo auditctl -D
Phân tích và tìm kiếm trong audit log
Sau khi bạn đã cấu hình auditd và thêm các quy tắc audit, bạn cần biết cách phân tích và tìm kiếm trong audit log để tìm ra những thông tin mà bạn cần. Công cụ chính để phân tích audit log là ausearch
.
Sử dụng ausearch
ausearch
cho phép bạn tìm kiếm các sự kiện trong audit log dựa trên nhiều tiêu chí khác nhau, bao gồm:
-k <key>
: Tìm kiếm các sự kiện có key cụ thể.-u <uid>
: Tìm kiếm các sự kiện liên quan đến user ID cụ thể.-g <gid>
: Tìm kiếm các sự kiện liên quan đến group ID cụ thể.-p <pid>
: Tìm kiếm các sự kiện liên quan đến process ID cụ thể.-f <file>
: Tìm kiếm các sự kiện liên quan đến file cụ thể.-ts <start_time>
: Tìm kiếm các sự kiện xảy ra sau thời gian bắt đầu.-te <end_time>
: Tìm kiếm các sự kiện xảy ra trước thời gian kết thúc.-m <message_type>
: Tìm kiếm các sự kiện có loại message cụ thể.
Ví dụ, để tìm kiếm tất cả các sự kiện liên quan đến key passwd_access
, bạn có thể sử dụng lệnh:
sudo ausearch -k passwd_access
Để tìm kiếm tất cả các sự kiện liên quan đến user ID 1000, bạn có thể sử dụng lệnh:
sudo ausearch -u 1000
Để tìm kiếm tất cả các sự kiện liên quan đến file /etc/shadow
từ ngày 1 tháng 1 năm 2023 đến ngày 31 tháng 1 năm 2023, bạn có thể sử dụng lệnh:
sudo ausearch -f /etc/shadow -ts 01/01/2023 -te 31/01/2023
ausearch
sẽ hiển thị các sự kiện tìm thấy dưới dạng các bản ghi (records). Mỗi bản ghi chứa thông tin chi tiết về sự kiện, bao gồm thời gian, user ID, process ID, syscall, và các tham số liên quan.
Hiểu cấu trúc của một bản ghi audit
Một bản ghi audit điển hình có cấu trúc như sau:
type=SYSCALL msg=audit(1678886400.000:1234): arch=c000003e syscall=2 success=yes exit=3 a0=7ffeefc03b00 a1=0 a2=1b6 a3=0 items=1 ppid=123 pid=456 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=1 comm="cat" exe="/usr/bin/cat" key="passwd_access"
Dưới đây là giải thích về các trường quan trọng:
type
: Loại sự kiện. Trong ví dụ này,SYSCALL
chỉ ra rằng đây là một syscall.msg
: Chứa thông tin chi tiết về sự kiện.audit(1678886400.000:1234)
: Timestamp của sự kiện (trong epoch time) và ID duy nhất của sự kiện.arch
: Kiến trúc của hệ thống.syscall
: Số ID của syscall.success
: Cho biết syscall có thành công hay không.exit
: Giá trị trả về của syscall.a0, a1, a2, a3
: Các tham số của syscall.items
: Số lượng đối tượng liên quan đến sự kiện.ppid
: Process ID của process cha.pid
: Process ID của process.auid
: Audit user ID.uid
: User ID.gid
: Group ID.euid
: Effective user ID.suid
: Set user ID.fsuid
: Filesystem user ID.egid
: Effective group ID.sgid
: Set group ID.fsgid
: Filesystem group ID.tty
: Terminal liên kết với process.ses
: Session ID.comm
: Tên lệnh.exe
: Đường dẫn của file thực thi.key
: Key được gán cho quy tắc audit.
Để dễ đọc hơn, bạn có thể sử dụng lệnh aureport
để tạo báo cáo từ audit log.
Sử dụng aureport
aureport
là một công cụ tạo báo cáo từ audit log. Nó có thể tạo ra các báo cáo về nhiều khía cạnh khác nhau của hệ thống, bao gồm:
- User accounts
- File accesses
- System calls
- Login/logout events
- Failed logins
- Changes to system configuration
Ví dụ, để tạo báo cáo về tất cả các sự kiện liên quan đến user accounts, bạn có thể sử dụng lệnh:
sudo aureport -u
Để tạo báo cáo về tất cả các file accesses, bạn có thể sử dụng lệnh:
sudo aureport -f
Để tạo báo cáo về tất cả các failed logins, bạn có thể sử dụng lệnh:
sudo aureport -l --failed
aureport
cung cấp nhiều tùy chọn để tùy chỉnh báo cáo. Bạn có thể xem tài liệu của aureport
để biết thêm chi tiết.
“Việc phân tích audit log đòi hỏi sự kiên nhẫn và hiểu biết về hệ thống. Hãy bắt đầu với những quy tắc audit đơn giản và dần dần mở rộng khi bạn trở nên quen thuộc hơn với công cụ này,” bà Lê Thị Mai, một chuyên gia tư vấn bảo mật với kinh nghiệm làm việc cho nhiều tổ chức lớn, khuyên.
Các tình huống sử dụng audit log phổ biến
Dưới đây là một số tình huống sử dụng audit log phổ biến:
- Theo dõi các thay đổi đối với file cấu hình quan trọng: Ví dụ:
/etc/passwd
,/etc/shadow
,/etc/sudoers
. - Theo dõi các lần thực thi lệnh
sudo
: Để biết ai đã thực hiện lệnh gì với quyền root. - Theo dõi các lần đăng nhập/đăng xuất: Để biết ai đã đăng nhập vào hệ thống và khi nào.
- Phát hiện các cuộc tấn công brute-force: Bằng cách theo dõi các lần đăng nhập thất bại.
- Theo dõi các thay đổi đối với quyền của file: Để phát hiện các hành vi leo thang đặc quyền.
- Theo dõi các thay đổi đối với các dịch vụ hệ thống: Ví dụ: khởi động, dừng, khởi động lại.
Ví dụ, bạn có thể cấu hình auditd để gửi cảnh báo khi có ai đó thay đổi file /etc/sudoers
, file cấu hình quan trọng kiểm soát quyền truy cập sudo.
sudo auditctl -w /etc/sudoers -p wa -k sudoers_change
Sau đó, bạn có thể sử dụng ausearch
để tìm kiếm các sự kiện liên quan đến key sudoers_change
.
sudo ausearch -k sudoers_change
Tối ưu hóa và bảo mật audit log
Để đảm bảo audit log hoạt động hiệu quả và an toàn, bạn cần thực hiện một số biện pháp tối ưu hóa và bảo mật:
- Xoay vòng log thường xuyên: Để tránh log file trở nên quá lớn và chiếm hết dung lượng ổ cứng.
- Nén log file đã xoay vòng: Để tiết kiệm dung lượng ổ cứng.
- Gửi log đến một máy chủ log tập trung: Để đảm bảo log không bị mất trong trường hợp hệ thống bị xâm nhập. Bạn có thể sử dụng các công cụ như rsyslog hoặc syslog-ng để gửi log đến một máy chủ log tập trung. Việc harden ubuntu server bao gồm việc bảo vệ và quản lý log một cách an toàn.
- Hạn chế quyền truy cập vào audit log: Chỉ những người được ủy quyền mới được phép truy cập vào audit log.
- Sử dụng chữ ký số để bảo vệ tính toàn vẹn của audit log: Để đảm bảo log không bị sửa đổi trái phép.
- Giám sát audit log thường xuyên: Để phát hiện các hoạt động đáng ngờ.
Các công cụ hỗ trợ audit log
Ngoài auditd
, auditctl
, ausearch
, và aureport
, còn có một số công cụ khác có thể giúp bạn quản lý và phân tích audit log:
- OSSEC: Một hệ thống phát hiện xâm nhập dựa trên host (HIDS) mã nguồn mở có thể sử dụng audit log để phát hiện các hoạt động đáng ngờ.
- Tripwire: Một công cụ giám sát tính toàn vẹn của file có thể sử dụng audit log để phát hiện các thay đổi trái phép đối với file hệ thống.
- Splunk: Một nền tảng phân tích dữ liệu lớn có thể được sử dụng để thu thập, lập chỉ mục, và phân tích audit log từ nhiều nguồn khác nhau.
- Elasticsearch, Logstash, Kibana (ELK stack): Một bộ công cụ mã nguồn mở phổ biến để thu thập, lưu trữ, và trực quan hóa log data.
Audit log và tuân thủ quy định
Như đã đề cập, audit log là một yêu cầu quan trọng để tuân thủ nhiều tiêu chuẩn và quy định. Dưới đây là một số ví dụ:
- PCI DSS (Payment Card Industry Data Security Standard): Yêu cầu các tổ chức xử lý thẻ tín dụng phải theo dõi và kiểm tra tất cả các truy cập vào dữ liệu thẻ tín dụng.
- HIPAA (Health Insurance Portability and Accountability Act): Yêu cầu các tổ chức chăm sóc sức khỏe phải theo dõi và kiểm tra tất cả các truy cập vào thông tin sức khỏe cá nhân.
- GDPR (General Data Protection Regulation): Yêu cầu các tổ chức xử lý dữ liệu cá nhân của công dân EU phải có khả năng theo dõi và kiểm tra các hoạt động xử lý dữ liệu.
Việc sử dụng audit log một cách hiệu quả có thể giúp bạn chứng minh rằng bạn đang tuân thủ các quy định này.
Kết luận
Audit log trên Ubuntu là một công cụ mạnh mẽ giúp bạn tăng cường bảo mật hệ thống, tuân thủ quy định, và gỡ lỗi. Bằng cách cài đặt, cấu hình, và sử dụng audit log một cách hiệu quả, bạn có thể có được một cái nhìn sâu sắc hơn về những gì đang xảy ra trên hệ thống của mình và phát hiện, ngăn chặn các hoạt động đáng ngờ. Hãy nhớ rằng, audit log chỉ là một phần của một chiến lược bảo mật toàn diện. Đừng quên cấu hình tường lửa nâng cao ubuntu để bảo vệ hệ thống của bạn khỏi các mối đe dọa bên ngoài.
FAQ về Audit Log trên Ubuntu
1. Audit log có ảnh hưởng đến hiệu năng hệ thống không?
Có, audit log có thể ảnh hưởng đến hiệu năng hệ thống, đặc biệt là nếu bạn cấu hình auditd để ghi lại quá nhiều sự kiện. Tuy nhiên, bạn có thể giảm thiểu ảnh hưởng này bằng cách chỉ ghi lại những sự kiện quan trọng và sử dụng ổ cứng tốc độ cao để lưu trữ log file.
2. Làm thế nào để biết auditd đang chạy?
Bạn có thể sử dụng lệnh systemctl status auditd
để kiểm tra trạng thái của auditd.
3. Làm thế nào để tắt auditd?
Bạn có thể sử dụng lệnh sudo systemctl stop auditd
để dừng auditd. Tuy nhiên, bạn nên cân nhắc kỹ trước khi tắt auditd, vì nó có thể làm giảm khả năng phát hiện và phản ứng với các sự cố bảo mật.
4. Làm thế nào để xóa audit log?
Bạn có thể xóa audit log bằng cách xóa file /var/log/audit/audit.log
. Tuy nhiên, bạn nên sao lưu log file trước khi xóa để có thể tham khảo lại trong tương lai.
5. Audit log có thể bị giả mạo không?
Có, audit log có thể bị giả mạo nếu kẻ tấn công có quyền truy cập root vào hệ thống. Để giảm thiểu nguy cơ này, bạn nên gửi log đến một máy chủ log tập trung và sử dụng chữ ký số để bảo vệ tính toàn vẹn của audit log.
6. Tôi nên ghi lại những sự kiện nào trong audit log?
Bạn nên ghi lại những sự kiện quan trọng đối với bảo mật và tuân thủ quy định. Ví dụ: thay đổi đối với file cấu hình quan trọng, thực thi lệnh sudo
, đăng nhập/đăng xuất, và thay đổi đối với quyền của file.
7. Tôi có thể sử dụng audit log để điều tra các sự cố bảo mật như thế nào?
Bạn có thể sử dụng ausearch
và aureport
để tìm kiếm và phân tích audit log để xác định nguyên nhân, phạm vi và cách khắc phục của sự cố bảo mật. Hãy tập trung vào các sự kiện liên quan đến thời điểm xảy ra sự cố và các tài khoản bị ảnh hưởng.