Contents
Giới Thiệu.
Osquery là một framework mã nguồn mở được công bố bởi Facebook vào 2014.
Tính năng chính của Osquery là giúp người dùng có thể giám sát, theo dõi các hoạt động hệ thống bằng cách sử dụng một bộ các câu lệnh SQL riêng để tiến hành truy vấn.
Osquery còn hỗ trợ đa nền tảng để mọi người có thể cài đặt lên hệ điều hành mà mọi người muốn.
Cài Đặt.
Ở bài viết này mình sẽ cài đặt Osquery lên một VPS sử dụng CentOS 7.
Chuẩn Bị.
Một VPS/Server sử dụng CentOS 7.
Tài khoản Root hoặc có quyền Sudo trên VPS/Server trên.
Tiến Hành Cài Đặt.
Để cài đặt thì đầu tiên bạn cần truy cập vào đường link này để lấy link download phiên bản mà bạn muốn :
https://osquery.io/downloads/official/4.3.0
Sau đó sử dụng câu lệnh Yum để install Osquery, Ví dụ ở đây mình cài đặt phiên bản Osquery 4.3.
yum -y install https://pkg.osquery.io/rpm/osquery-4.3.0-1.linux.x86_64.rpm
Như vậy là Osquery đã được cài đặt lên VPS/Server của bạn và bạn đã có thể sử dụng Osquery bằng câu lệnh sau :
osqueryi
Giao diện khi truy cập vào Osquery.
Tới đây thì mọi người đã có thể sử dụng Osquery bằng một số câu lệnh query như sau :
Kiểm tra xem các User nào đang Login.
select * FROM logged_in_users;
Kiểm tra xem các Port nào đang được sử dụng.
select * from listening_ports ;
Kiểm tra các Process có trên hệ thống với PID, Process name, User name.
SELECT processes.pid, processes.name, users.username FROM processes JOIN users ON processes.uid = users.uid;
Ngoài ra mọi người có thể kiểm tra các table đã có sẵn trên Osquery để có thể thực hiện các câu lệnh theo nhu cầu.
.tables
Cấu hình cho phép Osquery truy cập vào Rsyslog.
Để Osquery tiếp nhận và ghi lại Systemlog thì ta sẽ cần cấu hình cho phép Osquery kết nối với Rsyslog.
Ta cấu hình bằng cách thêm một số đoạn cấu hình sau vào cuối của file cấu hình của Rsyslog tại /etc/rsyslog.conf
Đối với phiên bản Rsyslog < 7.
$template OsqueryCsvFormat, "%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n" *.* |/var/osquery/syslog_pipe;OsqueryCsvFormat
Đối với phiên bản Rsyslog >=7.
template( name="OsqueryCsvFormat" type="string" string="%timestamp:::date-rfc3339,csv%,%hostname:::csv%,%syslogseverity:::csv%,%syslogfacility-text:::csv%,%syslogtag:::csv%,%msg:::csv%\n" ) *.* action(type="ompipe" Pipe="/var/osquery/syslog_pipe" template="OsqueryCsvFormat")
Ở đây do mình đang sử dụng CentOS 7 với phiên bản Rsyslog là 8.24 nên sẽ cấu hình như sau :
vi /etc/rsyslog.conf
Khởi động lại Rsyslog để cấu hình được cập nhập.
systemctl restart rsyslog
Tiếp theo ta sẽ tiến hành tạo file cấu hình cho daemon của Osquery.
Tạo file cấu hình cho daemon của Osquery.
Lý do phải chạy daemon của Osquery là vì với câu lệnh osqueryi ta đã có thể Osquery bình thường nhưng với daemon thì ta có thể lập Osquery thực thi các câu truy vấn mà ta cấu hình định kì và ghi kết quả vào file. Như vậy thì việc theo dõi, giám sát, kiểm tra hệ thống sẽ dễ dàng hơn.
Với khuyến nghị của mình, mọi người hãy sử dụng file cấu hình mặc định của Osquery bằng câu lệnh sau và tiến hành chỉnh sửa lại file cấu hình theo ý muốn của mọi người :
cp /usr/share/osquery/osquery.example.conf /etc/osquery/osquery.conf
Hoặc sử dụng file cấu hình đã được chỉnh sửa lại sau :
{
"options": {
"config_plugin": "filesystem",
"logger_plugin": "filesystem",
"logger_path": "/var/log/osquery",
"disable_logging": "false",
"log_result_events": "true",
"schedule_splay_percent": "10",
"pidfile": "/var/osquery/osquery.pidfile",
"events_expiry": "3600",
"database_path": "/var/osquery/osquery.db",
"verbose": "false",
"worker_threads": "2",
"enable_monitor": "true",
"disable_events": "false",
"disable_audit": "false",
"audit_allow_config": "true",
"host_identifier": "hostname",
"enable_syslog": "true",
"audit_allow_sockets": "true",
"schedule_default_interval": "3600"
},
Tuy nhiên file ở trên chỉ là các cấu hình cơ bản của Osquery còn ở đâu chúng ta muốn cấu hình lập lịch cho Osquery tự động chạy một số câu query mà ta mong muốn vì thế ta sẽ thêm một số dòng cấu hình với cấu trúc như sau :
"schedule": {
"options": {
"query": "SELECT * FROM SOMETHING;",
"interval": 300
}
Ví dụ, để Query những User đã đăng nhập vào hệ thống mỗi 300s thì ta sẽ cấu hình như sau :
"schedule": {
"logged_in_users": {
"query": "SELECT * FROM logged_in_users;",
"interval": 300
}
Ngoài cách cấu hình lập lịch trực tiếp vào file cấu hình như trên thì Osquery còn cho phép ta cấu hình các Query vào từng file riêng biệt, sau đó chỉ cần khai báo vào file cấu hình chính của Osquery.
Ví dụ ta sẽ cấu hình cho Osquery sử dụng các file cấu hình query mặc định của Osquery, cú pháp như sau :
"packs": {
"osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf",
"incident-response": "/usr/share/osquery/packs/incident-response.conf",
"it-compliance": "/usr/share/osquery/packs/it-compliance.conf",
"vuln-management": "/usr/share/osquery/packs/vuln-management.conf"
}
Như vậy, tổng kết lại các phần cấu hình thì file cấu hình của mình sẽ như sau :
cat /etc/osquery/osquery.conf
{ "options": { "config_plugin": "filesystem", "logger_plugin": "filesystem", "logger_path": "/var/log/osquery", "disable_logging": "false", "log_result_events": "true", "schedule_splay_percent": "10", "pidfile": "/var/osquery/osquery.pidfile", "events_expiry": "3600", "database_path": "/var/osquery/osquery.db", "verbose": "false", "worker_threads": "2", "enable_monitor": "true", "disable_events": "false", "disable_audit": "false", "audit_allow_config": "true", "host_identifier": "hostname", "enable_syslog": "true", "audit_allow_sockets": "true", "schedule_default_interval": "3600" }, "schedule": { "crontab": { "query": "SELECT * FROM crontab;", "interval": 300 }, "system_profile": { "query": "SELECT * FROM osquery_schedule;" }, "system_info": { "query": "SELECT hostname, cpu_brand, physical_memory FROM system_info;", "interval": 3600 } }, "packs": { "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf", "incident-response": "/usr/share/osquery/packs/incident-response.conf", "it-compliance": "/usr/share/osquery/packs/it-compliance.conf", "vuln-management": "/usr/share/osquery/packs/vuln-management.conf" } }
Sau khi cấu hình xong thì ta có thể check lại cú pháp của file cấu hình bằng câu lệnh :
osqueryctl config-check
Nếu không có lỗi gì hiển thị thì ta sẽ khởi động daemon Osquery.
systemctl start osqueryd
Tiếp theo ta sẽ tiến hành cấu hình Osquery File Integrity Monitoring.
Cấu hình Osquery File Integrity Monitoring ( FIM ).
Osquery File Integrity Monitoring là một tính năng có sẵn của Osquery cho phép theo dõi sự thay đổi của file trên các phân vùng được cấu hình.
Để có thể sử dụng ta sẽ tạo một file cấu hình FIM với nội dung như sau :
vi /usr/share/osquery/packs/fim.conf
{ "queries": { "file_events": { "query": "select * from file_events;", "removed": false, "interval": 300 } }, "file_paths": { "homes": [ "/root/.ssh/%%", "/home/%/.ssh/%%" ], "etc": [ "/etc/%%" ], "home": [ "/home/%%" ], "tmp": [ "/tmp/%%" ] } }
Như bạn có thể thấy nội dung của file fim.conf sẽ tương tự với việc thiết lập lịch với các câu lệnh query ở trên, chỉ có điểm khác là có thêm mục “file_paths” để khai báo cho Osquery sẽ tiến hành giám sát file ở những thư mục nào. Ví dụ ở cấu hình trên là các thư mục home, etc, tmp đang được giám sát.
Tiếp theo ta sẽ chỉnh sửa thêm dòng sau vào mục “Package” của file cấu hình của Osquery để FIM có thể hoạt động. Cụ thể sẽ như sau :
"packs": { "fim": "/usr/share/osquery/packs/fim.conf", "osquery-monitoring": "/usr/share/osquery/packs/osquery-monitoring.conf", "incident-response": "/usr/share/osquery/packs/incident-response.conf", "it-compliance": "/usr/share/osquery/packs/it-compliance.conf", "vuln-management": "/usr/share/osquery/packs/vuln-management.conf" } }
Sau đó khởi động lại Osquery để Osquery nhận cấu hình mới.
systemctl status osqueryd
Cuối cùng, tiến hành thử thay đổi một số file nào đó và kiểm tra lại file log của Osquery.
grep -rI "pack_fim_file_events" /var/log/osquery/osqueryd.results.log
Lời Cuối.
Như vậy là bài viết về việc cài đặt Osquery đã hết, cảm ơn mọi người đã đọc đến đây.
Chúc mọi người thành công trong việc cài đặt Osquery.