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:
- CentOS 7 Server (cũng hoạt động với CentOS 6)
- User không phải root có quyền sudo. Để cài đặt user kiểu này, hãy làm theo hướng dẫn Cài đặt server ban đầu với CentOS 7 . Tất cả các lệnh sẽ được chạy với quyền user này.
- Hiểu biết cơ bản về Hệ thống kiểm toán Linux. Kiểm tra Tìm hiểu Hệ thống Kiểm toán Linux trên CentOS 7 để biết thêm thông tin.
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:
# 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:
-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 - -abằng- -Atrong lệnh trên sẽ chèn luật ở trên cùng thay vì ở dưới cùng.
- actionvà- filterchỉ định khi một sự kiện nhất định được ghi lại.- actioncó thể- alwayshoặc- never.- filterchỉ định- filterphù 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,- uservà- exclude.- action,filtersẽ- always,exittrong hầu hết các trường hợp, điều này cho- auditctlbiết rằng bạn muốn kiểm tra lệnh gọi hệ thống này khi nó thoát.
- system_callchỉ đị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ừ- allcũ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=valuechỉ đị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_namelà 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:
-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ó auid là 4294967295 . Để 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.
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 72015-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
 

