osquery là một công cụ miễn phí và mã nguồn mở do Facebook phát triển, có thể được sử dụng để truy vấn thông tin liên quan đến hệ điều hành bao gồm, mức sử dụng bộ nhớ, các gói đã cài đặt, thông tin quy trình, người dùng đăng nhập, cổng lắng nghe và nhiều thông tin khác. Công cụ này có thể chạy trên một số hệ điều hành bao gồm Windows, Linux, FreeBSD và MacOS. Đây là một công cụ rất hữu ích cho nhiều trường hợp sử dụng để khắc phục sự cố về hiệu suất và hoạt động. Công cụ này đi kèm với rất nhiều công cụ giúp bạn thực hiện phân tích và giám sát hệ điều hành.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và sử dụng osquery trên Debian 10.
Sau khi tất cả các gói được cập nhật, hãy khởi động lại hệ thống để áp dụng các thay đổi.
Đầu tiên, hãy tải xuống và thêm khóa GPG bằng lệnh sau:
Tiếp theo, hãy thêm kho lưu trữ osquery bằng lệnh sau:
Tiếp theo, hãy cập nhật kho lưu trữ và cài đặt osquery bằng lệnh sau:
Sau khi quá trình cài đặt hoàn tất, hãy khởi động dịch vụ osquery bằng lệnh sau:
Bạn cũng có thể xác minh trạng thái của osquery bằng lệnh sau:
Bạn sẽ thấy đầu ra sau:
Bạn có thể chạy lệnh sau để kết nối với shell osquery:
Bạn sẽ nhận được kết quả sau:
Tiếp theo, hãy chạy lệnh .help để xem tất cả các tùy chọn có sẵn với osquery:
Bạn sẽ nhận được kết quả sau:
Có rất nhiều bảng có sẵn để truy vấn. Bạn có thể liệt kê tất cả các bảng bằng lệnh sau:
Bạn sẽ nhận được đầu ra sau:
Bạn có thể tìm thấy nhiều thông tin hệ thống khác nhau bằng cách sử dụng bảng trên với osquery.
Trước tiên, hãy khởi chạy shell osquery bằng lệnh sau:
Tiếp theo, bạn có thể lấy thông tin về tên máy chủ hệ thống, lõi CPU và bộ nhớ vật lý bằng lệnh sau:
Bạn sẽ nhận được kết quả sau:
Để lấy thông tin về tệp ssh_config, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để có danh sách tất cả người dùng trong hệ thống của bạn, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Nếu bạn muốn liệt kê tất cả người dùng không thuộc hệ thống trong hệ thống của mình, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để hiển thị thông tin bộ nhớ của hệ thống, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để tìm tải trung bình của hệ thống, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để có danh sách năm gói đầu tiên trong hệ thống của bạn, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để biết thông tin về các tiến trình đang chạy trong hệ thống của bạn, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để tìm tất cả các lần đăng nhập trước đó, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để liệt kê tất cả các công việc được lên lịch bởi crontab, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để tìm tất cả các cổng mở trong hệ thống của bạn, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Để liệt kê 5 tiến trình hoạt động tích cực nhất, hãy chạy truy vấn sau:
Bạn sẽ nhận được kết quả sau:
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và sử dụng osquery trên Debian 10.
Điều kiện tiên quyết
- Một máy chủ đang chạy Debian 10.
- Mật khẩu gốc được cấu hình trên máy chủ của bạn.
Bắt đầu
Trước khi bắt đầu, bạn nên cập nhật gói hệ thống của mình lên phiên bản mới nhất. Bạn có thể cập nhật tất cả các gói bằng lệnh sau:
Mã:
apt-get update -y
apt-get upgrade -y
Cài đặt osquery
Theo mặc định, osquery không có trong kho lưu trữ mặc định của Debian 10. Vì vậy, bạn sẽ cần thêm kho lưu trữ osquery vào hệ thống của mình.Đầu tiên, hãy tải xuống và thêm khóa GPG bằng lệnh sau:
Mã:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
Mã:
apt-get install software-properties-common -y
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
Mã:
apt-get update -y
apt-get install osquery -y
Mã:
osqueryctl start osqueryd
Mã:
osqueryctl status osqueryd
Mã:
? osqueryd.service - Daemon osquery Đã tải: đã tải (/lib/systemd/system/osqueryd.service; đã tắt; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ CN 2020-04-19 15:21:57 UTC; 6 giây trước Tiến trình: 25333 ExecStartPre=/bin/sh -c if [ ! -f $CONFIG_FILE ]; then echo {} > $CONFIG_FILE; fi (code=exited, status=0/SUCCESS) Tiến trình: 25334 ExecStartPre=/bin/sh -c if [ ! -f $FLAG_FILE ]; then touch $FLAG_FILE; fi (code=exited, status=0/SUCCESS) Tiến trình: 25336 ExecStartPre=/bin/sh -c if [ -f $LOCAL_PIDFILE ]; then mv $LOCAL_PIDFILE $PIDFILE; fi (code=exited, status=0/SUCCESS) PID chính: 25337 (osqueryd) Nhiệm vụ: 13 (giới hạn: 4701) Bộ nhớ: 6,4M CGroup: /system.slice/osqueryd.service ??25337 /usr/bin/osqueryd --flagfile /etc/osquery/osquery.flags --config_path /etc/osquery/osquery.conf ??25339 /usr/bin/osqueryd19/04 15:21:57 debian10 systemd[1]: Đang khởi động Daemon osquery...19/04 15:21:57 debian10 systemd[1]: Đã khởi động Daemon osquery.19/04 15:21:57 debian10 osqueryd[25337]: osqueryd đã bắt đầu [phiên bản=4.2.0]19/04 15:21:57 debian10 osqueryd[25337]: I0419 15:21:57.261158 25339 events.cpp:863] Nhà xuất bản sự kiện chưa được bật: auditeventpublisher: Xuất bản19/04 15:21:57 debian10 osqueryd[25337]: I0419 15:21:57.261485 25339 events.cpp:863] Nhà xuất bản sự kiện chưa được bật: syslog: Nhà xuất bản đã bị vô hiệu hóa v
Làm việc với osquery
osquery đi kèm với ba thành phần hữu ích osqueryi, osqueryd và osqueryctl. osqueryi là một shell tương tác osquery và không giao tiếp với daemon. Bạn có thể sử dụng shell để thực thi các truy vấn và khám phá trạng thái hiện tại của hệ điều hành. osqueryd là daemon giám sát máy chủ có thể được sử dụng để lên lịch các truy vấn và ghi lại các thay đổi trạng thái của hệ điều hành. osqueryctl là một tập lệnh trợ giúp để kiểm tra cấu hình.Bạn có thể chạy lệnh sau để kết nối với shell osquery:
Mã:
osqueryi
Mã:
Sử dụng cơ sở dữ liệu ảo. Cần trợ giúp, hãy nhập '.help'
Mã:
osquery> .help
Mã:
Chào mừng đến với shell osquery. Vui lòng khám phá hệ điều hành của bạn!Bạn đang kết nối với cơ sở dữ liệu ảo 'trong bộ nhớ' tạm thời..all [TABLE] Chọn tất cả từ một bảng.bail ON|OFF Dừng sau khi gặp lỗi.echo ON|OFF Bật hoặc tắt lệnh echo.exit Thoát khỏi chương trình này.features Liệt kê các tính năng của osquery và trạng thái của chúng.headers ON|OFF Bật hoặc tắt hiển thị tiêu đề.help Hiển thị thông báo này.mode MODE Đặt chế độ đầu ra trong đó MODE là một trong những chế độ sau: csv Giá trị phân tách bằng dấu phẩy cột Cột căn trái xem .width dòng Một giá trị trên một dòng danh sách Giá trị phân cách bằng .separator string pretty Kết quả SQL được in đẹp (mặc định).nullvalue STR Sử dụng STRING thay cho giá trị NULL.print STR... In ký tự STRING.quit Thoát khỏi chương trình này.schema [TABLE] Hiển thị các câu lệnh CREATE.separator STR Thay đổi dấu phân cách được chế độ đầu ra sử dụng.socket Hiển thị đường dẫn socket tiện ích mở rộng osquery.show Hiển thị các giá trị hiện tại cho nhiều cài đặt khác nhau.summary Biệt danh cho lệnh show meta.tables [TABLE] Liệt kê tên của tables.types [SQL] Hiển thị kết quả của getQueryColumns cho truy vấn đã cho.width [NUM1]+ Đặt độ rộng cột cho chế độ "column".timer ON|OFF Bật hoặc tắt phép đo bộ đếm thời gian CPUosquery>
Mã:
osquery> .table
Mã:
=> acpi_tables => apparmor_profiles => apt_sources => arp_cache => atom_packages => augeas => authorized_keys => block_devices => carbon_black_info => carves => chrome_extensions => cpu_time => cpuid = > crontab = > curl = > curl_certificate = > deb_packages = > device_file = > device_hash = > device_partitions = > disk_encryption = > dns_resolvers = > docker_container_labels = > docker_container_mounts
Giám sát hệ thống với osquery
Bạn có thể theo dõi mức sử dụng bộ nhớ, thông tin quy trình, dung lượng đĩa, người dùng đăng nhập và nhiều thông tin khác với osquery.Trước tiên, hãy khởi chạy shell osquery bằng lệnh sau:
Mã:
osqueryi
Mã:
osquery> select hostname,cpu_physical_cores,physical_memory from system_info;
Mã:
+------------+--------------------+-----------------+| hostname | cpu_physical_cores | physical_memory |+------------+--------------------+-----------------+| debian10 | 1 | 1032937472 |+------------+------------------+-----------------+
Mã:
osquery> select * from ssh_configs;
Mã:
W0419 15:47:17.043509 25397 virtual_table.cpp:959] Theo mặc định, bảng ssh_configs trả về dữ liệu dựa trên người dùng hiện tại, hãy cân nhắc JOINing với bảng usersW0419 15:47:17.043740 25397 virtual_table.cpp:974] Vui lòng xem tài liệu hướng dẫn về bảng: https://osquery.io/schema/#ssh_configs+-----+--------+--------------------------+---------------------+| uid | block | option | ssh_config_file |+-----+--------+--------------------------+---------------------+| 0 | host * | sendenv lang lc_* | /etc/ssh/ssh_config || 0 | host * | hashknownhosts yes | /etc/ssh/ssh_config || 0 | host * | gssapiauthentication yes | /etc/ssh/ssh_config |+-----+--------+--------------------------+---------------------+osquery>
Mã:
osquery> SELECT * FROM users;
Mã:
+-------+-------+------------+----------------------+-----------------+-----------------------+----------------------+-------------------+-------------------+------+| uid | gid | uid_signed | gid_signed | username | description | directory | shell | uuid |+-------+-------+-------------+-------------+-------------------+-----------------------------------+----------------------+-------------------+------+| 0 | 0 | 0 | 0 | gốc | gốc | /gốc | /bin/bash | || 1 | 1 | 1 | 1 | daemon | daemon | /usr/sbin | /usr/sbin/nologin | || 2 | 2 | 2 | 2 | thùng | thùng | /bin | /usr/sbin/nologin | || 3 | 3 | 3 | 3 | sys | sys | /dev | /usr/sbin/nologin | || 4 | 65534 | 4 | 65534 | đồng bộ | đồng bộ | /bin | /bin/đồng bộ hóa | || 5 | 60 | 5 | 60 | trò chơi | trò chơi | /usr/trò chơi | /usr/sbin/nologin | || 6 | 12 | 6 | 12 | man | man | /var/cache/man | /usr/sbin/nologin | || 7 | 7 | 7 | 7 | lp | lp | /var/spool/lpd | /usr/sbin/nologin | |
Mã:
osquery> select * from users where uid select * from logged_in_users where type = 'user';
Mã:
+------+-------+--------------+------------+-------+| type | user | tty | host | time | pid |+------+------+-------+--------------+------------+-------+| user | root | pts/0 | 27.61.217.59 | 1587309538 | 19279 || user | root | pts/1 | 27.61.217.59 | 1587310737 | 25378 || người dùng | root | pts/2 | 27.61.217.59 | 1587310997 | 25394 |+------+------+-------+--------------+------------+---------+
Mã:
osquery> select * from memory_info;
Mã:
+--------------+--------------------+-----------+-----------+-----------+--------------+------------+-----------+| memory_total | memory_free | buffers | cached | swap_cached | active | inactive | swap_total | swap_free |+--------------+-------------+----------+------------+-------------+------------+-----------+------------+-----------+| 4138455040 | 2407211008 | 79745024 | 1384751104 | 0 | 556371968 | 954744832 | 0 | 0 |+--------------+--------------+------------+------------+-------------+-----------+-----------+------------+-----------+osquery>
Mã:
osquery> select * from load_average;
Mã:
+--------+----------+| period | average |+-------+----------+| 1m | 0.000000 || 5m | 0.000000 || 15m | 0.000000 |+-------+----------+osquery>
Mã:
osquery> select * from deb_packages top limit 5;
Mã:
+-------------------+------------+--------------+------+-------+----------+| name | version | source | size | arch | revision |+-------------------+------------+--------------+------+-------+-------+| acpi-support-base | 0.142-8 | acpi-support | 43 | all | 8 || acpid | 1:2.0.31-1 | | 146 | amd64 | 1 || adduser | 3.118 | | 849 | all | || apparmor | 2.13.2-10 | | 1833 | amd64 | 10 || apt | 1.8.2 | | 4064 | amd64 | |+-------------------+------------+--------------+------+--------+----------+
Mã:
osquery> SELECT DISTINCT processes.name, listening_ports.port, processes.pid FROM listening_ports JOIN processes USING (pid) WHERE listening_ports.address = '0.0.0.0';
Mã:
+------+------+-----+| name | port | pid |+------+------+-----+| sshd | 22 | 729 |+------+------+-----+
Mã:
osquery> select * from last;
Mã:
+----------+-------+-------+-------+------------+--------------+| username | tty | pid | type | time | host |+----------+-------+-------+------+------------+--------------+| gốc | điểm/0 | 1448 | 7 | 1587365277 | 27.61.217.41 || gốc | điểm/1 | 13392 | 7 | 1587368569 | 27.61.217.41 || | điểm/0 | 1004 | 8 | 1587376329 | || | điểm/1 | 13321 | 8 | 1587376821 | || | ttyS0 | 748 | 8 | 1587465619 | || | tty1 | 749 | 8 | 1587465619 | || gốc | pts/0 | 1057 | 7 | 1587465664 | 27.61.217.9 || root | pts/1 | 1375 | 7 | 1587465846 | 27.61.217.9 |+----------+-------+-------+------+------------+--------------+
Mã:
osquery> select command, path from crontab ;
Mã:
+-------------------------------------------------------------------------------------------------------------------------------------------+-------------------+| lệnh | đường dẫn |+----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+| root cd / && run-parts --report /etc/cron.hourly | /etc/crontab || root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) | /etc/crontab || root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) | /etc/crontab || root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) | /etc/crontab || root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi | /etc/cron.d/mdadm |
Mã:
osquery> select * from listening_ports;
Mã:
+------+---------+----------+----------+----------+----------------------------------------+---------------+| pid | port | protocol | family | address | fd | socket | path | net_namespace |+------+------+----------+--------+-------------+------+--------+---------------------------------------+---------------+| 444 | 53 | 6 | 2 | 127.0.0.53 | 13 | 14910 | | 4026531993 || 729 | 22 | 6 | 2 | 0.0.0.0 | 3 | 16940 | | 4026531993 || 664 | 3306 | 6 | 2 | 127.0.0.1 | 69 | 15824 | | 4026531993 || 544 | 6379 | 6 | 2 | 127.0.0.1 | 6 | 15472 | | 4026531993 || 729 | 22 | 6 | 10 | :: | 4 | 16951 | | 4026531993 || 544 | 6379 | 6 | 10 | ::1 | 7 | 15473 | | 4026531993 || 759 | 80 | 6 | 10 | :: | 4 | 17009 | | 4026531993 || 444 | 53 | 17 | 2 | 127.0.0.53 | 12 | 14909 | | 4026531993 || 405 | 58 | 255 | 10 | :: | 15 | 16039 | | 4026531993 |
Mã:
osquery> select count(pid) as total, name from processes group by name order by total desc limit 5;
Mã:
+-------+---------+| total | name |+-------+---------+| 4 | sshd || 3 | apache2 || 2 | systemd || 2 | bash || 2 | agetty |+-------+---------+