Dịch vụ osquery [10] là một gói phần mềm nguồn mở hoạt động tốt nhiều nền tảng như Windows, Linux, MacOSX, FreeBSD cho phép ghi bổ sung thêm các logs cần thiết phục vụ việc giám sát an toàn, an ninh thông tin cho hệ thống. Về cơ bản, osquery sẽ coi hệ điều hành như một cơ sở dữ liệu quan hệ khổng lồ và thực hiện trích xuất các thông tin cần thiết thông qua các truy vấn SQL. Trong osquery, các bảng SQL sẽ đại diện cho các khai niệm trừu tượng, chẳng hạn như các tiến trình đang chạy, các mô-đun kernel được nạp, các kết nối mạng đang mở, các sự kiện liên quan đến phần cứng và mã băm của tệp tin, v.v. Chi tiết cách thức cài đặt và cấu hình dịch vụ osquery cho các máy chủ Linux có thể tham khảo trên trang chủ của nhà phát triển [10]. Phiên bản mới nhất hiện tại là OSQuery 5.0.1. Ta có thể sử dụng rpm / dpkg để cài đặt thủ công cho các máy tính không có kết nối Internet, hoặc sử dụng yum, apt-get để cài đặt đối với các máy tính có kết nối Internet, hoặc cài đặt trực tiếp từ mã nguồn tải về. Sau khi cài đặt, osquery cung cấp một số thành phần sau:
-osqueryi là một osquery shell, cho phép thực thi các truy vấn SQL để trích xuất thông tin. Đây là một thành phần độc lập, không giao tiếp với daemon và không cần chạy dưới quyền của tài khoản quản trị.
-osqueryd là một daemon cho phép lập lịch thực thi các truy vấn và ghi lại sự thay đổi trạng thái hệ điều hành dưới dạng các bản ghi trong tệp logs của dịch vụ.
-osqueryctl là một trình quản lý dịch vụ, cho phép khởi động hoặc dừng dịch vụ osqueryd.
Theo mặc định, trên Linux thì logs của dịch vụ osquery sẽ lưu tại đường dẫn /var/log/osquery/osqueryd.results.log còn đối với các máy Windows sẽ là
C:\Program Files\osquery\log. Ta sẽ cấu hình dịch vụ osquery để ghi bổ sung các logs liên quan đến các tiến trình được thực thi, các kết nối mạng được khởi tạo, các tác vụ được lập lịch, các tệp tin quan trọng bị thay đổi, phục vụ giám sát an toàn, an ninh thông tin cho máy chủ Linux. Bảng bên dưới sẽ mô tả chi tiết các bảng dữ liệu được truy vấn để trích xuất thông tin.
20
Bảng 1.8. Bảng thống kê các bảng dữ liệu cần truy vấn bởi osquery
Bảng dữ liệu Mục đích thu thập
crontab Giám sát các tác vụ được lập lịch trên hệ thống etc_hosts Giám sát chỉnh sửa tệp cấu hình /etc/hosts
groups Giám sát các thay đổi về hệ thống
startup_items Giám sát toàn bộ các Startup Items trên hệ thống users Giám sát việc thêm sửa xóa người dùng trên hệ thống sudoers Giám sát hành vi chạy terminal với quyền sudo
shell_history Giám sát các lệnh được thực thi trên hệ thống của toàn bộ người dùng
last Giám sát các hành vi đăng nhập trên hệ thống
process_open_file
Giám sát các tiến trình có hành vi mở, đọc tệp tin trên hệ thống. Lưu ý, chỉ ghi lại thông tin về tiến trình nào đang mở tệp nào, không ghi lại nội dung của tệp tin. process_open_sockets Giám sát toàn bộ tiến trình mở kết nối ra mạng
processes Giám sát toàn bộ các tiến trình trên hệ thống, tìm ra các tiến trình nghi ngờ độc hại
logged_in_users Giám sát các hành vi đăng nhập trên hệ thống process_listening_port Giám sát các kết nối mạng đang mở trên hệ thống
pack_fim_file_events
Giám sát tính toàn vẹn của thư mục, bao gồm việc thêm, sửa xóa các tệp tin hoặc thư mục quan trọng đang được giám sát
socket_events Giám sát các sự kiện liên quan tới socket
Theo mặc định, các bản ghi sẽ liên tục được ghi vào tệp
osqueryd.results.log nên khi tệp tin này vượt quá kích thước cho phép, có thể sẽ gây ra hiện tượng “tràn” tệp logs, dẫn đến không thể ghi thêm logs mới. Do vậy, cần thiết lập cấu hình logrotate để đảm bảo các logs sinh ra không làm đầy ổ cứng, tránh ảnh hưởng tới hiệu năng của máy chủ.
Để sử dụng dịch vụ osquery nhằm ghi thêm một số logs cần thiết cho quá trình giám sát an toàn thông tin, ta cần xây dựng các tệp cấu hình sau:
-Tệp audit.rules chứa các audit rules được dùng để truy vấn tới kernel nhằm trích xuất các thông tin cần thiết.
21
-Tệp osquery.conf chứa các truy vấn SQL cần thực thi để sinh ra các bản ghi trong logs. Tệp này được lưu tại đường dẫn /etc/osquery.
Ngoài việc giám sát các hành vi liên quan đến người dùng và dịch vụ trên hệ thống, ta còn cần giám sát tính toàn vẹn, phát hiện hành vi thêm, sửa, xóa một số tệp tin và thư mục quan trọng, chứa các thông tin nhạy cảm. Chẳng hạn như việc giám sát toàn vẹn của thư mục mã nguồn sẽ cho phép phát hiện các Web Shell đã được tải lên và lưu trong mã nguồn của hệ thống. Khi đó, cần xây dựng tệp cấu hình fim.conf và lưu chúng vào đường dẫn thư mục
/usr/share/osquery/packs. Ví dụ minh họa tệp cấu hình fim.conf như bên dưới. "file_paths": {
"configuration": [
// Monitor file store password "/etc/passwd",
"/etc/shadow", // Monitor local job "/etc/crontab", "/etc/cron%/%%", "/etc/at%", "/etc/at%/%%", "/var/spool/cron/%%", "/var/spool/at/%%", "/etc/anacrontab", "/etc/inittab", "/etc/init%/%%", ] }
Chú ý một số quy tắc đặt điều kiện trong tệp cấu hình:
➢ Ký tự %: ứng với tất cả các tệp tin và thư mục cùng cấp
➢ Ký tự %%: ứng với tất cả các tệp tin và thư mục đệ quy (mọi cấp độ) ➢ Ký tự %abc: ứng với tất cả các tệp
tin và thư mục trong cùng cấp độ kết thúc với từ khóa “abc”
➢ Ký tự abc%: ứng với tất cả các tệp tin và thư mục trong cùng cấp độ bắt đầu với từ khóa “abc”
Kết quả thu được mẫu logs là các bản ghi trong tệp osqueryd.results.log
như minh họa bên dưới. Các bản ghi này được lưu trữ theo cấu trúc JSON giúp việc phân tích, trích xuất thông tin trong logs được dễ dàng hơn.
<166>Dec 5 09:12:45 -NOC-02 osquery {"name":"processes","hostIdentifier":"NVLDC-NOC- 02","calendarTime":"Sun Dec 5 02:12:44 2021 UTC","unixTime":1638670364,"epoch":0,"counter":508707,"numerics":false,"decorations":{"host_uuid ":"B1B93842-C3BE-2084-BEAE-
4D2B415CDB60","username":"phapn"},"columns":{"auid":"4294967295","cmdline":"sh -c /usr/sbin/fping -C3 -i1 2>&1 </tmp/zabbix_server_6031.pinger;/usr/sbin/fping6 -C3 -i1 2>&1 </tmp/zabbix_server_6031.pinger;","cwd":"\"/\"","egid":"992","euid":"994","gid":"992","mode":"01007 55","parent_cmdline":"/usr/sbin/zabbix_server: icmp pinger #1 [pinging hosts]","parent_path":"/usr/sbin/zabbix_server_mysql","path":"/usr/bin/bash","pid":"26810","sha1_path ":"be705c5a89d7bf74185c86c5c3c562608f6e6478","time":"2021-12-05 02:12:43"},"action":"added"}
22
Nhìn chung, dịch vụ osquery cho phép ghi thêm nhiều loại logs, hỗ trợ tốt quá trình giám sát an toàn thông tin cho các máy chủ linux. Tuy nhiên, nó vẫn còn tồn tại những hạn chế nhất định. Ví dụ, nó sẽ không sinh ra logs khi một số tiến trình shell built-ín như echo, export, v.v được khởi chạy. Hơn nữa, nó cũng có thể sẽ bỏ sót các sự kiện trong trường hợp các bảng dữ liệu bị tràn. Ngoài ra, cần đánh giá chi tiết hơn về mặt hiệu năng khi triển khai osquery cho các máy chủ linux, bởi nó sẽ tiêu tốn thêm tài nguyên của hệ thống do cần thực hiện các bước audit hệ thống và sinh logs. Một vấn đề khác nữa là osquery cũng không cho phép ghi lại logs theo thời gian thực mà sẽ cần thực hiện theo khoảng thời gian được lập lịch sẵn.