Trang chủ Kiến thức cơ bản

Audit hệ thống Linux với Auditd Tool trên CentOS/RHEL

Audit hệ thống đơn giản là việc phân tích sâu về hệ thống với 1 mục tiêu cụ thể. Một quy trìnhcuộc audit được thực hiện bằng việc kiểm tra các vùng khác nhau của hệ thống đó, với đánh giá các vùng khác nhau của hệ thống.

Auditd là gì?

Một trong những chương trình audit phổ biến thường được sử dụng trên RHEL / CentOS Linux là auditd. ĐâyNó là một phương tiện để theo dõi các thông tin liên quan đến an ninh trên một hệ thống.: Aauditd sử dụng các quy tắc được cấu hình từ trước để thu thập một lượng lớn thông tin về các sự kiện đang xảy ra trên hệ thống và ghi lại chúng dưới dạng log.

Nó có thể ghi lại các thông tin như ngày và thời gian, kiểu event và kết quả của event; user gây ra event, bất kỳ sửa đổi nào được thực hiện cho các tập tin /cơ sở dữ liệu, các event sử dụng các cơ chế xác thực hệ thống, chẳng hạn như PAM, LDAP, SSH và các loại khác.

Auditd cũng theo dõi bất kỳ thay đổi nào được thực hiện đối với các tệp tin audit config hoặc bất kỳ truy cập nào vào audit log và bất kỳ nỗ lực nào để nhập hoặc xuất thông tin từ hệ thống cùng với rất nhiều thông tin liên quan đến an ninh khác.

Tại sao hệ thống audit trên Linux lại quan trọng?

  • Tự chủ do không phải chạy bất cứ chương trình hay tiến trình nào từ bên ngoài hệ thống.
  • Cho phép bạn xem bất kỳ hoạt động nào của hệ thống mà bạn muốn
  • Hỗ trợ việc phát hiện hoặc phân tích những nguy cơ tiềm ẩn của một hệ thống
  • Có khả năng hoạt động như một hệ thống IDS
  • Có thể làm việc với hệ thống IDS để cho phép phát hiện xâm nhập.
  • Là một công cụ quan trọng trong forensics

Các thành phần trong hệ thống Linux audit

Hệ thống audit có 2 thành phần chính,đó là:

  • user-space applications và các tiện ích/công cụ
  • Hệ thống xử lý ở kernel-side –chấp nhận các yêu cầu từ các user-space applications và chuyển chúng qua ba loại bộ lọc, cụ thể: user, task, exit hoặc exclude.

Phần quan trọng nhất là user-space audit daemon (auditd) thu thập thông tin dựa trên các quy tắc được cấu hình từ trước, từ kernel và tạo ra các thông tin trong audit log: đường dẫn mặc định là /var/log/audit/audit.log.

Ngoài ra, audispd (là một daemon gửi đi các audit) là một multiplexor tương tác với auditd và gửi sự kiện đến các chương trình khác mà muốn thực hiện xử lý event theo thời gian thực.

Sau đây là 1 số công cụ mà user-space sử dụng cho quản lý và truy xuất thông tin từ hệ thống audit:

  • auditctl – 1 tiện ích để kiểm soát hệ thống kernel audit
  • ausearch – 1 tiện ích cho việc tìm kiếm các audit log với các event đặc biệt.
  • aureport – 1 tiện ích để tạo các báo cáo về sự kiện được ghi lại.

Làm sao để cài đặt và cấu hình Audit Tool trên RHEL/CentOS/Fedora

Đầu tiên hãy đảm bảo rằng công cụ audit đã được cài đặt trên hệ thống hay chưa bằng cách sử dụng lệnh rpmgrep ví dụ như sau:

#rpm -qa | grep audit  audit-libs-python-2.7.6-3.el7.x86_64  audit-2.7.6-3.el7.x86_64  audit-libs-2.7.6-3.el7.x86_64

Nếu chưa cài đặt các gói trên, hãy chạy lệnh này với quyền root để cài đặt chúng:

# yum install audit

Tiếp theo, để kiểm tra xem auditd có được kích hoạt và đang chạy hay không, sử dụng lệnh systemctl

-------------- Trên CentOS/RHEL 7 ---------------   # systemctl is-enabled auditd  # systemctl status auditd  # systemctl start auditd   [Start]  # systemctl enable auditd  [Enable]  --------------- Trên CentOS/RHEL 6 ---------------   # service auditd status  # service auditd start     [Start]  # chkconfig auditd on      [Enable]

Bây giờ chúng ta sẽ đi vào cấu hình auditd bằng cách sử dụng tập tin cấu hình chính ở /etc/audit/auditd.conf. Các thông số ở đây cho phép bạn kiểm soát các dịch vụ đang chạy, cấu hình vị trí lưu log, số lượng log tối đa, định dạng log, cách xử lý khi đầy ổ cứng, log rotation và nhiều tùy chọn khác.

# vi /etc/audit/auditd.conf

Dưới đây là nội dụng file config:

# This file controls the configuration of the audit daemon  local_events = yes  write_logs = yes  log_file = /var/log/audit/audit.log  log_group = root  log_format = RAW  flush = INCREMENTAL_ASYNC  freq = 50  max_log_file = 8  num_logs = 5  priority_boost = 4  disp_qos = lossy  dispatcher = /sbin/audispd  name_format = NONE  ##name = mydomain  max_log_file_action = ROTATE  space_left = 75  space_left_action = SYSLOG  action_mail_acct = root  admin_space_left = 50  admin_space_left_action = SUSPEND  disk_full_action = SUSPEND  disk_error_action = SUSPEND  use_libwrap = yes  ##tcp_listen_port =  tcp_listen_queue = 5  tcp_max_per_addr = 1  ##tcp_client_ports = 1024-65535  tcp_client_max_idle = 0  enable_krb5 = no  krb5_principal = auditd  ##krb5_key_file = /etc/audit/audit.key  distribute_network = no

Ở đây chúng ta nên quan tâm đến các trường chính như là log_file (vị trí lưu log) , max_log_file (số lượng log lưu trữ), disk_full_action(xử lý khi full disk), max_log_file_action(cấu hình khi log file đạt max),...

Tìm hiểu các quy tắc Audit

Như đã đề cập trước đây, auditd sử dụng các quy tắc để thu thập thông tin cụ thể từ kernel. Các quy tắc này về cơ bản là các option của auditctl mà bạn có thể cấu hình trước các quy tắc trong /etc/audit/rules.d/audit.rulesfile (Trên CentOS 6, nó ở /etc/audit/audit.rules) để chúng được load khi khởi động.

Có 3 quy tắc audit có thể xác định là:

  • Control rules: cho phép sửa đổi hành vi của hệ thống audit và một vài cấu hình của nó.
  • File system rulescho phép audit một tập tin nhất định hoặc một thư mục.
  • System call rules: cho phép ghi log bất kỳ chương trình hệ thống nào

Mở file config audit rule với câu lệnh:

# vi /etc/audit/rules.d/audit.rules

Lưu ý: phần đầu tiên của tệp này phải chứa các control rules. Sau đó thêm các quy tắc audit của bạn (File system rulesSystem call rules) ở phần giữa, và phần cuối cùng chứa các cài đặt không thay đổi cũng là control rules.

Ví dụ về audit control rules

-D #removes all previous rules  -b  3074 #define buffer size  -f 4 #panic on failure   -r 120 #create at most 120 audit messages per second

Ví dụ về quy tắc audit hệ thống bằng Auditd File System Rules

Bạn có thể cấu hình kiểm soát 1 file bằng cách tạo rule sử dụng cú pháp sau:

-w /path/to/file/or/directory -p permissions -k key_name

Các option trong đó bao gồm:

  • w – được sử dụng để chỉ định một tập tin hoặc thư mục
  • p – quyền được sử dụng, r – là chỉ có quyền đọc, w – cho quyền chỉnh sửa, x – cho quyền thực thi và a – cho thay đổi thuộc tính của tập tin hay thư mục
  • -k –cho phép bạn thiết lập một chuỗi tùy chọn để xác định rule nào (hoặc một bộ rule) đã tạo ra log

Các rule này cho phép kiểm tra để xem các event nào làm thay đổi các tập tin hệ thống quan trọng.

-w /etc/passwd -p wa -k passwd_changes  -w /etc/group -p wa -k group_changes  -w /etc/sudoers -p wa -k sudoers_changes

Ví dụ về Auditd System Call Rules

Bạn có thể đặt 1system call rule sử dụng theo mẫu sau:

-a action,filter -S system_call -F field=value -k key_name

Các option trong đó bao gồm:

  • action: có 2 lựa chọn là alway hoặc never.
  • filter: chỉ định bộ lọc kernel rule phù hợp (task, exit, user và exclude) được áp dụng cho event này.
  • system call: tên của system call.
  • field: xác định các tùy chọn bổ sung như kiến trúc, PID, GID vv để sửa đổi rule.

Dưới đây là 1 số ví dụ về rule.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change  -a always,exit -S sethostname -S setdomainname -k system_locale

Sau đó, cuối cùng thêm các thiết lập không thay đổi ở phần cuối,ví dụ:

-e 1 #enable auditing  -e 2 #make the configuration immutable -- reboot is required to change audit rules

File config của chúng ta sẽ như sau:

# This file contains the auditctl rules that are loaded  # whenever the audit daemon is started via the initscripts.  # The rules are simply the parameters that would be passed  # to auditctl.  # First rule - delete all  -D  -b  3074        #define buffer size  -f 4            #panic on failure  -r 120          #create at most 120 audit messages per second  # Increase the buffers to survive stress events.  # Make this bigger for busy systems  -b 320  -w /etc/passwd -p wa -k passwd_changes  -w /etc/group -p wa -k group_changes  -w /etc/sudoers -p wa -k sudoers_changes  # Feel free to add below this line. See auditctl man page  -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change  -a always,exit -S sethostname -S setdomainname -k system_locale  -e 1    #enable auditing

Làm thế nào để đặt các quy tắc Auditd sử dụng tiện ích Auditctl

Ngoài ra, để config auditd trong khi nó đang chạy, sử dụng auditctl như trong các ví dụ sau đây. Các lệnh này có thể ghi đè các quy tắc trong tệp cấu hình.

Để list tất cả các rule đã được load sử dụng lệnh:

# auditctl -l

Thử thêm 1 vài rule như sau:

# auditctl -w /etc/passwd -p wa -k passwd_changes  # auditctl -w /etc/group -p wa -k group_changes  # auditctl -w /etc/sudoers -p wa -k sudoers_changes  # auditctl -l

Các file log của Auditd

Tất cả các log audit được ghi lại trong /var/log/audit/audit.log theo mặc định. Để hiểu định dạng nhập, chúng ta sẽ tải rule và kiểm tra mục log được tạo sau một event khớp với rule.

Giả sử chúng ta tạo ra rule như sau

# auditctl -w /backups/sec/ -p rwa -k sec

Di chuyển đến thư mục đấy và sử dụng 1 vài command:

$ cd /backups/sec/  $ ls

Log sẽ nhìn có dạng như sau:

type=SYSCALL msg=audit(1507890621.627:4111): arch=c000003e syscall=191 success=no exit=-61 a0=7ffd780c37d0 a1=7fc5166fc114 a2=7ffd780c3790 a3=14 items=1 ppid=30544 pid=21816 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=1 comm="ls" exe="/usr/bin/ls" key="sec"  type=CWD msg=audit(1507890621.835:4112):  cwd="/backups/sec"  type=PATH msg=audit(1507890621.835:4112): item=0 name="." inode=46147860 dev=fd:01 mode=040755 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL

Sự kiện trên được tạo thành từ ba kiểu audit.

1/Kiểu = SYSCALL:

type=SYSCALL msg=audit(1507890621.627:4111): arch=c000003e syscall=191 success=no exit=-61 a0=7ffd780c37d0 a1=7fc5166fc114 a2=7ffd780c3790 a3=14 items=1 ppid=30544 pid=21816 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=1 comm="ls" exe="/usr/bin/ls" key="sec

2/Kiểu =CWD

type=CWD msg=audit(1507890621.835:4112):  cwd="/backups/sec"

3/Kiểu =PATH

type=PATH msg=audit(1507890621.835:4112): item=0 name="." inode=46147860 dev=fd:01 mode=040755 ouid=0 ogid=0 rdev=00:00 objtype=NORMAL

Trong bài viết tiếp theo, chúng tôi sẽ giới thiệu cách sử dụng ausearch để tìm kiếm trong các tập log: chúng tôi sẽ giải thích cách tìm kiếm thông tin cụ thể từ tập log.

>> Có thể bạn chưa biết: Hệ điều hành Centos là gì?

Mạng xã hội

0FansLike
FollowersFollow
10SubscribersSubscribe