Thứ năm, 16/07/2015 | 00:00 GMT+7

Cách viết quy tắc kiểm tra hệ thống tùy chỉnh trên CentOS 7

Hệ thống Kiểm tra Linux tạo ra một đường dẫn kiểm tra, một cách để theo dõi tất cả các loại thông tin trên hệ thống. Nó có thể ghi lại nhiều dữ liệu như các loại sự kiện, ngày và giờ, ID user , lệnh gọi hệ thống, quy trình, file được sử dụng, ngữ cảnh SELinux và mức độ nhạy cảm. Nó có thể theo dõi xem một file đã được truy cập, chỉnh sửa hoặc thực thi hay chưa. Nó thậm chí có thể theo dõi các thay đổi đối với các thuộc tính file . Nó có khả năng ghi lại việc sử dụng các lệnh gọi hệ thống, các lệnh do user thực thi, các lần đăng nhập không thành công và nhiều sự kiện khác. Theo mặc định, hệ thống kiểm tra chỉ ghi lại một số sự kiện trong log như user đăng nhập, user sử dụng sudo và các thông báo liên quan đến SELinux. Nó sử dụng các luật kiểm toán để theo dõi các sự kiện cụ thể và tạo các mục log liên quan. Có thể tạo ra các luật kiểm toán.

Trong hướng dẫn này, ta sẽ thảo luận về các loại luật kiểm tra khác nhau và cách thêm hoặc xóa luật tùy chỉnh trên server của bạn.

Yêu cầu

Trước khi bắt đầu với hướng dẫn này, bạn nên có những điều sau:

Xem luật kiểm tra

Bạn có thể xem bộ luật kiểm tra hiện tại bằng cách sử dụng lệnh auditctl -l .

  • sudo auditctl -l

Nó sẽ không hiển thị luật nếu không có luật nào (đây là mặc định):

No rules 

Khi bạn thêm các luật trong hướng dẫn này, bạn có thể sử dụng lệnh này để xác minh chúng đã được thêm vào.

Trạng thái hiện tại của hệ thống đánh giá có thể được xem bằng cách sử dụng:

  • sudo auditctl -s

Đầu ra sẽ tương tự như:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0 

Giá trị enabled=1 cho thấy rằng kiểm tra đã được bật trên server này. Giá trị pid là số tiến trình của trình kiểm toán. Pid bằng 0 cho biết daemon kiểm tra không chạy. Mục nhập lost sẽ cho bạn biết có bao nhiêu bản ghi sự kiện
đã bị loại bỏ do tràn hàng đợi kiểm tra kernel . Trường backlog cho biết có bao nhiêu bản ghi sự kiện hiện đang được xếp hàng chờ kiểm toán viên đọc chúng. Ta sẽ thảo luận về phần còn lại của các trường kết quả trong phần tiếp theo của hướng dẫn này.

Thêm luật kiểm tra

Bạn có thể thêm các luật kiểm tra tùy chỉnh bằng cách sử dụng công cụ dòng lệnh auditctl . Theo mặc định, các luật sẽ được thêm vào cuối danh sách hiện tại, nhưng cũng có thể được chèn ở trên cùng. Để làm cho các luật của bạn trở thành vĩnh viễn, bạn cần thêm chúng vào file /etc/audit/rules.d/audit.rules . Khi nào dịch vụ auditd được khởi động, nó sẽ kích hoạt tất cả các luật từ file . Bạn có thể đọc thêm về trình kiểm toán và hệ thống kiểm tra trong bài viết khác của ta Tìm hiểu về Hệ thống kiểm toán trên CentOS 7 . Các luật kiểm tra hoạt động trên cơ sở trận thắng đầu tiên - khi một luật phù hợp, nó sẽ không đánh giá các luật sâu hơn. Thứ tự chính xác của các luật là quan trọng.

Nếu bạn đang sử dụng CentOS 6, thay vào đó, file luật kiểm tra sẽ được đặt tại /etc/audit/audit.rules .

Có ba loại luật kiểm toán:

  • Luật kiểm soát: Các luật này được sử dụng để thay đổi cấu hình và cài đặt của chính hệ thống kiểm toán.

  • Luật hệ thống file : Đây là các đồng hồ file hoặc folder . Sử dụng các luật này, ta có thể kiểm tra bất kỳ loại quyền truy cập nào vào các file hoặc folder cụ thể.

  • Luật gọi hệ thống: Các luật này được sử dụng để giám sát các cuộc gọi hệ thống được thực hiện bởi bất kỳ quá trình nào hoặc một user cụ thể.

Luật kiểm soát

Hãy để ta xem xét một số luật kiểm soát mà ta có thể thêm vào:

  • auditctl -b <backlog> - Đặt số lượng cache kiểm tra chưa thanh toán tối đa được phép. Nếu tất cả các cache đầy, cờ lỗi sẽ được kernel tham khảo để thực hiện. Giới hạn tồn đọng mặc định được đặt trên server CentOS là 320. Bạn có thể xem điều này bằng cách sử dụng:
  • sudo auditctl -s

Trong kết quả , bạn có thể thấy giá trị backlog_limit hiện tại:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0 

Nếu giá trị tồn đọng của bạn nhiều hơn backlog_limit hiện được đặt, bạn có thể cần tăng backlog_limit để ghi log kiểm tra hoạt động chính xác. Ví dụ: để tăng giá trị lên 1024, hãy chạy:

  • sudo auditctl -b 1024

Đầu ra sẽ hiển thị trạng thái:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=1024 lost=0 backlog=0 
  • auditctl -f [0 1 2] - Đặt cờ báo lỗi (0 = im lặng, 1 = printk. 2 = hoảng sợ). Tùy chọn này cho phép bạn xác định cách bạn muốn kernel xử lý các lỗi nghiêm trọng. Nếu được đặt thành 0, các thư kiểm tra không thể ghi lại sẽ bị hủy một cách âm thầm. Nếu được đặt thành 1, thông báo sẽ được gửi đến hệ thống con log kernel . Nếu được đặt thành 2, nó sẽ kích hoạt sự hoảng sợ của nhân. Các điều kiện ví dụ mà cờ này được tham khảo bao gồm vượt quá giới hạn tồn đọng, vượt quá bộ nhớ kernel và vượt quá giới hạn tốc độ. Giá trị mặc định là 1. Trừ khi bạn gặp bất kỳ vấn đề lớn nào với việc kiểm tra daemon trên server của bạn , bạn sẽ không cần thay đổi giá trị này.

  • auditctl -R <filename> - Đọc các luật kiểm tra từ file được chỉ định. Điều này hữu ích khi bạn đang thử nghiệm một số luật tạm thời và muốn sử dụng lại các luật cũ từ file audit.rules .

Các luật ta thêm qua auditctl không phải là vĩnh viễn. Để làm cho chúng liên tục khi khởi động lại, bạn có thể thêm chúng vào file /etc/audit/rules.d/audit.rules . Tệp này sử dụng cùng một cú pháp dòng lệnh auditctl để chỉ định các luật nhưng không có lệnh auditctl ở phía trước. Mọi dòng trống hoặc bất kỳ văn bản nào sau dấu thăng (#) đều bị bỏ qua. Tệp luật mặc định trông giống như sau:

/etc/audit/rules.d/audit.rules
# 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  # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 320  # Feel free to add below this line. See auditctl man page 

Để thay đổi giá trị tồn đọng thành 8192, bạn có thể thay đổi -b 320 thành -b 8192 và khởi động lại daemon kiểm tra bằng cách sử dụng:

  • sudo service auditd restart

Nếu bạn không khởi động lại daemon, nó sẽ vẫn đặt giá trị mới từ cấu hình ở lần khởi động lại server tiếp theo.

Luật hệ thống file

Đồng hồ hệ thống file có thể được đặt trên file và folder . Ta cũng có thể chỉ định loại quyền truy cập để theo dõi. Cú pháp cho luật hệ thống file là:

  • auditctl -w path_to_file -p permissions -k key_name

Ở đâu

path_to_file là file hoặc folder được kiểm tra. permissions là các quyền được ghi lại. Giá trị này có thể là một hoặc kết hợp của r (đọc), w (ghi), x (thực thi) và a (thay đổi thuộc tính). key_name là một chuỗi tùy chọn giúp bạn xác định (các) luật nào đã tạo mục nhập log cụ thể.

Ta hãy xem xét một số ví dụ.

  • sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Luật trên yêu cầu hệ thống kiểm tra theo dõi mọi quyền truy cập ghi hoặc thay đổi thuộc tính đối với file /etc/hosts và ghi chúng vào log kiểm tra bằng chuỗi khóa tùy chỉnh do ta chỉ định - hosts_file_change .

Nếu bạn muốn đặt luật này vĩnh viễn, thì hãy thêm luật đó vào file /etc/audit/rules.d/audit.rules ở dưới cùng như sau:

/etc/audit/rules.d/audit.rules
-w /etc/hosts -p wa -k hosts_file_change 

Để đảm bảo luật đã được thêm thành công, bạn có thể chạy:

  • sudo auditctl -l

Nếu mọi việc suôn sẻ, kết quả sẽ hiển thị:

LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change 

Ta cũng có thể thêm đồng hồ vào folder .

  • sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

Luật trên sẽ thêm đồng hồ vào folder /etc/sysconfig và tất cả các file và folder bên dưới nó cho mọi quyền truy cập đọc, ghi hoặc thay đổi thuộc tính. Nó cũng sẽ gắn nhãn các thông báo log với một truy cập cấu hình khóa tùy chỉnh.

Để thêm một luật để theo dõi việc thực thi lệnh /sbin/modprobe (lệnh này có thể thêm / xóa các module kernel khỏi server ):

  • sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

Lưu ý: Bạn không thể chèn đồng hồ vào folder cấp cao nhất. Điều này bị cấm bởi kernel . Ký tự đại diện cũng không được hỗ trợ và sẽ tạo ra cảnh báo.

Để tìm kiếm log kiểm tra các sự kiện cụ thể, bạn có thể sử dụng lệnh ausearch . Ví dụ: để tìm kiếm log kiểm tra cho tất cả các sự kiện được gắn nhãn với khóa configaccess , bạn có thể chạy:

  • sudo ausearch -k configaccess

ausearch được thảo luận chi tiết trong hướng dẫn khác của ta Hiểu về Hệ thống Kiểm tra trên CentOS 7 .

Luật cuộc gọi hệ thống

Bằng cách kiểm tra các cuộc gọi hệ thống, bạn có thể theo dõi các hoạt động trên server vượt xa mức ứng dụng. Cú pháp cho các luật gọi hệ thống là:

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

Ở đâu:

  • Thay -a bằng -A trong lệnh trên sẽ chèn luật ở trên cùng thay vì ở dưới cùng.

  • actionfilter chỉ định khi một sự kiện nhất định được ghi lại. action có thể always hoặc never . filter chỉ định filter phù hợp với luật kernel nào được áp dụng cho sự kiện. Bộ lọc đối sánh luật có thể là một trong các bộ lọc sau: task , exit , userexclude . action,filter sẽ always,exit trong hầu hết các trường hợp, điều này cho auditctl biết rằng bạn muốn kiểm tra lệnh gọi hệ thống này khi nó thoát.

  • system_call chỉ định lệnh gọi hệ thống theo tên của nó. Một số lệnh gọi hệ thống có thể được group thành một luật , mỗi lệnh được chỉ định sau tùy chọn -S . Từ all cũng được dùng . Bạn có thể sử dụng sudo ausyscall --dump để xem danh sách tất cả các lệnh gọi hệ thống cùng với số của chúng.

  • field=value chỉ định các tùy chọn bổ sung sửa đổi luật để phù hợp với các sự kiện dựa trên kiến trúc, ID user , ID quy trình, đường dẫn và những thứ khác được chỉ định.

  • key_name là một chuỗi tùy chọn giúp bạn xác định sau này luật nào hoặc một bộ luật nào đã tạo một mục log cụ thể.

Bây giờ ta hãy xem xét một số luật gọi hệ thống ví dụ.

Để xác định luật kiểm tra tạo mục log được gắn nhãn rename mỗi khi file được đổi tên bởi user có ID lớn hơn hoặc bằng 1000, hãy chạy:

  • sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

-F arch=b64 cho biết kiểm tra version 64-bit của các lệnh gọi hệ thống trong luật .

Để xác định luật ghi log những file mà một user cụ thể (với UID 1001) đã truy cập và gắn nhãn các mục log bằng userfileaccess :

  • sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

Nếu bạn muốn đặt luật này vĩnh viễn, thì hãy thêm luật đó vào file /etc/audit/rules.d/audit.rules ở dưới cùng như sau:

/etc/audit/rules.d/audit.rules
-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess 

Bạn cũng có thể xác định luật hệ thống file bằng cách sử dụng cú pháp luật gọi hệ thống. Ví dụ, luật sau:

  • sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

thực hiện công việc tương tự như luật hệ thống file mà ta đã thấy trong phần trước:

  • sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

Để xem một cách đệ quy một folder bằng cách sử dụng luật gọi hệ thống, bạn có thể sử dụng tùy chọn -F "dir=/path/to/dir" .

Lưu ý: Xin lưu ý tất cả các quy trình bắt đầu sớm hơn chính daemon kiểm tra sẽ có auid4294967295 . Để loại trừ những điều đó khỏi luật của bạn, bạn có thể thêm -F "auid!=4294967295" vào luật của bạn . Để tránh sự cố này, bạn có thể thêm audit=1 vào các tham số khởi động kernel . Điều này cho phép hệ thống kiểm tra kernel khởi động ngay cả trước khi trình kiểm tra bắt đầu và tất cả các quy trình sẽ có uid đăng nhập chính xác.

Xóa luật kiểm tra

Để loại bỏ tất cả các luật kiểm tra hiện tại, bạn có thể sử dụng lệnh auditctl -D . Để xóa các luật xem hệ thống file được thêm bằng tùy chọn -w , bạn có thể thay thế -w bằng -W trong luật ban đầu. Các luật gọi hệ thống được thêm bằng cách sử dụng tùy chọn -a hoặc -A có thể bị xóa bằng tùy chọn -d với luật ban đầu. Ví dụ: giả sử ta đã thêm luật sau:

  • sudo auditctl -w /etc/passwd -p wa -k passwdaccess

Xem bộ luật bằng cách sử dụng:

  • sudo auditctl -l

Đầu ra phải bao gồm:

LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess 

Để loại bỏ luật này, ta có thể sử dụng lệnh sau, chỉ cần thay thế -w bằng -W :

  • sudo auditctl -W /etc/passwd -p wa -k passwdaccess

Bây giờ, hãy xem bộ luật bằng cách sử dụng:

  • sudo auditctl -l

Luật không nên có trong danh sách bây giờ.

Lưu ý: Nếu có bất kỳ luật kiểm tra vĩnh viễn nào được thêm vào bên trong file audit.rules , khởi động lại daemon kiểm tra hoặc khởi động lại hệ thống sẽ tải tất cả các luật từ file . Để xóa vĩnh viễn các luật kiểm tra, bạn cần xóa chúng khỏi file .

Khóa luật kiểm tra

Có thể tắt hoặc bật hệ thống kiểm tra và khóa các luật kiểm tra bằng cách sử dụng auditctl -e [0 1 2] . Ví dụ: để tạm thời vô hiệu hóa kiểm tra, hãy chạy:

  • auditctl -e 0

Khi 1 được chuyển làm đối số, nó sẽ cho phép kiểm tra. Để khóa cấu hình kiểm tra để nó không thể thay đổi, hãy chuyển 2 làm đối số. Điều này làm cho bộ luật kiểm toán hiện tại trở nên bất biến. Các luật không thể được thêm, xóa hoặc chỉnh sửa và không thể dừng trình kiểm tra được nữa. Khóa cấu hình nhằm mục đích là lệnh cuối cùng trong audit.rules cho bất kỳ ai muốn tính năng này hoạt động. Mọi nỗ lực thay đổi cấu hình trong chế độ này sẽ bị kiểm tra và từ chối. Chỉ có thể thay đổi cấu hình bằng cách khởi động lại server .

Kết luận

Thông tin được cung cấp bởi Hệ thống Kiểm toán Linux rất hữu ích cho việc phát hiện xâm nhập. Đến đây bạn có thể thêm các luật kiểm tra tùy chỉnh để bạn có thể ghi lại các sự kiện cụ thể.

Lưu ý bạn luôn có thể tham khảo trang người đàn ông auditctl khi thêm các luật ghi log tùy chỉnh. Nó cung cấp danh sách đầy đủ các tùy chọn dòng lệnh, mẹo hiệu suất và ví dụ. Thư mục /usr/share/doc/audit- <version> / chứa các file với các luật kiểm tra được cấu hình trước dựa trên một số tiêu chuẩn chứng nhận chung.


Tags:

Các tin liên quan

Cách viết quy tắc kiểm tra hệ thống tùy chỉnh trên CentOS 7
2015-07-16
Cách thiết lập firewall bằng FirewallD trên CentOS 7
2015-06-18
Cách thiết lập firewall bằng FirewallD trên CentOS 7
2015-06-18
Cách phát hiện bất thường với Skyline trên CentOS 7
2015-06-16
Cách cài đặt và cấu hình mod_deflate trên CentOS 7
2015-06-12
Cách hạn chế tài nguyên bằng cách sử dụng nhóm trên CentOS 6
2015-06-10
Cách phân tích chỉ số hệ thống với InfluxDB trên CentOS 7
2015-06-04
Cách quản lý / vv với Kiểm soát phiên bản bằng Etckeeper trên CentOS 7
2015-04-20
Cách cài đặt WordPress với OpenLiteSpeed trên CentOS 7
2015-04-16
Cách backup server CentOS 7 bằng Bacula
2015-04-13