Hướng dẫn cài đặt osquery

Osquery có thể cài đặt và làm việc độc lập trên từng máy tính khác hay hoặc kết hợp với stack sản phẩm khác như: Osquery + Kolide fleet + ELK, hoặc Osquery + Kolide fleet + Splunk hoặc Osquery + kolide fleet + Graylog nhằm cung cấp giải pháp giám sát an ninh tổng thể cho hệ thống của bạn.

Trong phạm vi bài viết này HCĐ chỉ giới thiệu cách cài đặt Osquery và sử dụng các câu truy vấn ở mức độ căn bản để các bạn mới tiếp cận có thêm các thông tin tìm hiểu tiếp theo.

1. Giới thiệu về osquery

1.1. Lịch sử của osquery

Osquery do facebook phát triển và công bố vào năm 2014. Mã nguồn được công bố tại: https://github.com/osquery/osquery

1.2 Một số đặc điểm của osquery

  • Osquery được facebook công bố mã nguồn vào năm 2014. Trong đó, OS là viết tắt của Operating System
  • Osquery có thể triển khai dạng độc lập hoặc kết hợp với các stack được nêu ở phần đầu để trở thành các giải pháp giám sát tập trung hoặc HIDS ( Host-based intrusion detection system).
  • Osquery có bộ SQL riêng để thực hiện việc lấy kết quả giám sát, chúng có các tables như các loại cơ sở dữ liệu. Thông tin về schemal của chúng được mô tả tại: https://osquery.io/schema/4.0.2. Hiện tại có gần 300 tables trong schemal của osquery.
  • Osquery có các phiên bản dành cho Linux, Windows, MacOS. Có thể cài cả trên máy trạm hoặc máy chủ.

1.3 Osquery có thể thu thập được gì?

  • Osquery có thể thu thập được các thông tin sau: running processes.
    • User logins.
    • Loaded kernel modules.
    • Open network connections.
    • Browser plugins.
    • Hardware events.
    • File hashes.
    • Sockets.
    • Mount.
    • Ports.
    • Storage volumes.
    • Packages.
    • Và nhiều thông tin khác ^_^

2. Các bước cài đặt Osquery trên CentOS

2.1. Thiết lập cơ bản

Cập nhật os và cài các gói bổ trợ

yum update -y && yum install -y wget yum-utils byobu

Thiết lập hostname

hostnamectl set-hostname osqueryclient

bash

Cấu hình IP tĩnh (nếu cần).

Sử dụng lệnh hoặc sửa file để cấu hình IP tĩnh cho máy cài đặt osquery

Khởi động lại hệ điều hành sau khi tiến hành các thiết lập trên

init 6

2.2. Cài đặt osquery

Thực hiện các lệnh dưới để cài đặt osquery

curl -L https://pkg.osquery.io/rpm/GPG | tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery
yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
yum-config-manager --enable osquery-s3-rpm
yum install osquery -y
cp /usr/share/osquery/osquery.example.conf /etc/osquery/osquery.conf

Kiểm tra phiên bản osquery vừa cài đặt bằng lệnh osqueryd -version

[root@osqueryclient ~]# osqueryd -version
osqueryd version 4.0.2

Tiến hành sửa file cấu hình của osquery để khai báo các cấu hình cơ bản. File cấu hình nằm tại /etc/osquery/osquery.conf

Mẫu file cấu hình có định dạng nhưu sau

{
    "options": {
        // Các khai báo 
    },

    "schedule": {
        // Các khai báo
    },

     "decorators": {
         //Các khai báo

     },

     "packs": {
         //Các khai báo
     },

     // Và các khai báo khác.

}

Cú pháp của file khai báo trên như sau

  • Dòng bắt đầu là ký tự // là dòng commend, không có tác dụng khi osquery được khởi động.
  • "options": Khai các tùy chọn về lưu trữ dữ liệu, tùy chọn về file log.
  • "schedule": Khai báo để lập lịch định kỳ chạy các câu truy vấn mà ta chỉ định.
  • "packs": Là đường dẫn chứa các khai báo các cấu hình chuyên biệt theo nhóm được cấu hình sẵn.

Sửa file /etc/osquery/osquery.conf.

Sửa dòng

//"logger_path": "/var/log/osquery",

Thành dòng

"logger_path": "/var/log/osquery",

Dưới dòng "schedule": { thêm đoạn cấu hình dưới

  // for example, get CPU Time per 60 seconds
    "cpu_time": {
      "query": "SELECT * FROM cpu_time;",
      "interval": 60
    },

    // for example, get settings of resolv.conf per an hour
    "dns_resolvers": {
      "query": "SELECT * FROM dns_resolvers;",
      "interval": 120
    },

Sau khi thêm đoạn trên, ta sẽ có file như bên dưới

File /etc/osquery/osquery.conf sau khi sửa

Khởi động osqueryd

systemctl start osqueryd
systemctl enable osqueryd

Kiểm tra trạng thái của osquery

systemctl status osqueryd

Ta có kết quả của osquery như sau là ok

osqueryd.service - The osquery Daemon
Loaded: loaded (/usr/lib/systemd/system/osqueryd.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2019-11-16 07:43:35 +07; 4s ago
Process: 1223 ExecStartPre=/bin/sh -c if [ -f $LOCAL_PIDFILE ]; then mv $LOCAL_PIDFILE $PIDFILE; fi (code=exited, status=0/SUCCESS)
Process: 1220 ExecStartPre=/bin/sh -c if [ ! -f $FLAG_FILE ]; then touch $FLAG_FILE; fi (code=exited, status=0/SUCCESS)
Main PID: 1226 (osqueryd)
CGroup: /system.slice/osqueryd.service
        ├─1226 /usr/bin/osqueryd --flagfile /etc/osquery/osquery.flags --config_path /etc/osquery/osquery.conf
        └─1229 /usr/bin/osqueryd

Nov 16 07:43:34 osqueryclient systemd[1]: Starting The osquery Daemon...
Nov 16 07:43:35 osqueryclient systemd[1]: Started The osquery Daemon.
Nov 16 07:43:35 osqueryclient osqueryd[1226]: osqueryd started [version=4.0.2]
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.080093  1229 database.cpp:570] Checking database version for migration
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.080296  1229 database.cpp:594] Performing migration: 0 -> 1
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.082423  1229 database.cpp:626] Migration 0 -> 1 successfully completed!
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.082475  1229 database.cpp:594] Performing migration: 1 -> 2
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.084009  1229 database.cpp:626] Migration 1 -> 2 successfully completed!
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.140584  1229 events.cpp:863] Event publisher not enabled: auditeventpublisher: Publ...guration
Nov 16 07:43:35 osqueryclient osqueryd[1226]: I1116 07:43:35.140792  1229 events.cpp:863] Event publisher not enabled: syslog: Publisher disable...guration
Hint: Some lines were ellipsized, use -l to show in full.

Thực hiện đang nhập vào osquery bằng lệnh osqueryi, ta có màn hình tương tác ở chế độ của SQL

[root@osqueryclient ~]# osqueryi
Using a virtual database. Need help, type '.help'
osquery>

hử chạy câu lệnh truy vấn về hệ điều hành.

select * from os_version; 

Kết quả ta có từ lệnh trên như sau

osquery> select * from os_version;
+--------------+--------------------------------------+-------+-------+-------+-------+----------+---------------+----------+
| name         | version                              | major | minor | patch | build | platform | platform_like | codename |
+--------------+--------------------------------------+-------+-------+-------+-------+----------+---------------+----------+
| CentOS Linux | CentOS Linux release 7.7.1908 (Core) | 7     | 7     | 1908  |       | rhel     | rhel          |          |
+--------------+--------------------------------------+-------+-------+-------+-------+----------+---------------+----------+

Có thể chạy một số câu lệnh khách như:

Lấy ra các giá trị về tham số của cpu (tương tự một phần lệnh top)

select * from cpu_time;

Lệnh lấy các các thông số về hostname, loại cpu, loại phần cứng:

select hostname, cpu_brand, hardware_vendor, hardware_model from system_info; 

Để thoát màn hình sql của osquery, ta thực hiện phím CTL +D

Khi cấu hình thành công osquery theo bước khai báo trong thẻ schedule, ta có thể quan sát các log được sinh ra định kỳ ở file /var/log/osquery/osqueryd.results.log. Sử dụng lệnh tailf hoặc tail -f để theo dõi nội dung file lưu log của các câu truy vấn được khai báo ở tùy chọn shedule

{"name":"cpu_time","hostIdentifier":"osqueryclient","calendarTime":"Sat Nov 16 00:52:34 2019 UTC","unixTime":1573865554,"epoch":0,"counter":9,"logNumericsAsNumbers":false,"decorations":{"host_uuid":"95B2A9C0-785F-2B8A-EF22-ECFA7C04E745","username":"reboot"},"columns":{"core":"0","guest":"0","guest_nice":"0","idle":"265659","iowait":"374","irq":"0","nice":"19","softirq":"15","steal":"10","system":"2929","user":"4463"},"action":"added"}
{"name":"dns_resolvers","hostIdentifier":"osqueryclient","calendarTime":"Sat Nov 16 00:45:04 2019 UTC","unixTime":1573865104,"epoch":0,"counter":0,"logNumericsAsNumbers":false,"decorations":{"host_uuid":"95B2A9C0-785F-2B8A-EF22-ECFA7C04E745","username":"reboot"},"columns":{"address":"8.8.8.8","id":"0","netmask":"32","options":"524993","type":"nameserver"},"action":"added"}   

Chuyển sang bước dưới để thực hiện các câu truy vấn cơ bản.

3. Hướng dẫn sử dụng các câu truy vấn cơ bản của osquery.

  • Thực hiện đăng nhập vào osquery với lệnh osqueryi, a sẽ ở màn hình nhắc lệnh.
  • Lưu ý: Để thoát màn hình sql của osquery, ta thực hiện phím CTL +D.
    Nếu bạn từng làm việc với các ngôn ngữ SQL của SQLite MySQL, MariaDB hoặc MS SQL … thì việc thao thác này khá đơn giản, các kết quả sẽ là các giá trị của cột (colum) hoặc hàng (row) của các bảng (tables).
  • Kết thúc các lệnh của sql là dấu ;.

Trong các ghi chép dưới đây, tôi sẽ hướng dẫn thao tác với một số bản cơ bản.

3.1. Kiểm tra uptime của hệ thống

Sử dụng select * from uptime; để kiểm tra uptime của hệ thống, ta có kết quả.

osquery> select * from uptime;
+------+-------+---------+---------+---------------+
| days | hours | minutes | seconds | total_seconds |
+------+-------+---------+---------+---------------+
| 0    | 2     | 13      | 5       | 7985          |
+------+-------+---------+---------+---------------+

3.2. Bảng user

Kiểm tra danh sách các user trong hệ thống bằng lệnh select * from users;. Ta có kết quả như bên dưới.

Kết quả của lệnh select * from users;

Ta có thể giới hạn kết quả bằng tùy chọn limit. Giả sử chỉ cần hiện 05 user đầu tiên ta sẽ cùng lệnh select * from users limit 5;. Kết quả ta có như bên dưới.

Ta có thể sử dụng tùy chọn count(*) để hiển thị tổng user.

select count(*) from users;

Kết quả sẽ trả về số lượng user có trong hệ thống.

3.3. Bảng listening_ports

Kiểm tra các thông tin trong bảng listening_ports

select * from listening_ports;

Kết quả trả về là:

Ta có thể giới hạn kết quả bằng lệnh với tùy chọn limit 10 đêr hiển thị 10 port.

select * from listening_ports limit 10;

3.4. Bảng shell_history

Bảng shell history hiển thị các lệnh được thực thi bởi người dùng. Trong hướng dẫn sử dụng tùy chọn limit để hạn chế 10 lệnh theo thứ tự.

select * from shell_history limit 10;

Kết quả ta sẽ thấy như bên dưới.

3.4. Kết hợp nhiều bảng

Ta có thể join các bảng lại để cho ra một kết quả như ý, trong hướng dẫn này sẽ sử dụng bảng `shell_history` và bảng `user` để cho biết các lệnh được thực hiện bởi user nào. Cú pháp sẽ như sau:

SELECT * FROM shell_history WHERE shell_history.uid IN (SELECT uid FROM users);

Ta sẽ có kết quả như sau:

4. Hướng dẫn cài đặt osquery trên Ubuntu

đang update

5. Hướng dẫn cài đặt osquery trên windows

Để bổ sung cho phần cài đặt osquery, trong hướng dẫn này Học chủ động sẽ giới thiệu thêm các bước cài đặt osquery trên windows 10. Với các bản windows khác bạn có thể làm bước tương tự.

đang update

Tới đây Học chủ động đã hướng dẫn bạn sử dụng osquery cơ bản. Hãy theo dõi thêm các bài viết khác để tìm hiểu thêm về osquery nhé.

Add a Comment

Your email address will not be published. Required fields are marked *