osquery je bezplatný nástroj s otevřeným zdrojovým kódem vyvinutý společností Facebook, který lze použít k dotazování na informace související s operačním systémem, včetně využití paměti, nainstalovaných balíčků, informací o procesu, přihlášení uživatelů, naslouchací porty a mnoho dalších. Může být spuštěn na několika operačních systémech včetně Windows, Linux, FreeBSD a MacOS. Je to velmi užitečný nástroj pro různé případy použití k řešení problémů s výkonem a provozními problémy. Dodává se se spoustou nástrojů, které vám pomohou provádět analýzy a monitorování OS.
V tomto tutoriálu se naučíme, jak nainstalovat a používat osquery na Debian 10.
Předpoklady
- Server se systémem Debian 10.
- Na vašem serveru je nakonfigurováno heslo uživatele root.
Začínáme
Než začnete, je dobré aktualizovat balíček vašeho systému na nejnovější verzi. Všechny balíčky můžete aktualizovat pomocí následujícího příkazu:
apt-get update -y
apt-get upgrade -y
Jakmile jsou všechny balíčky aktualizovány, restartujte systém, aby se změny projevily.
Instalovat osquery
Ve výchozím nastavení není osquery k dispozici ve výchozím úložišti Debian 10. Takže budete muset přidat úložiště osquery do vašeho systému.
Nejprve si stáhněte a přidejte klíč GPG pomocí následujícího příkazu:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
Dále přidejte úložiště osquery pomocí následujícího příkazu:
apt-get install software-properties-common -y
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
Dále aktualizujte úložiště a nainstalujte osquery pomocí následujícího příkazu:
apt-get update -y
apt-get install osquery -y
Po dokončení instalace spusťte službu osquery pomocí následujícího příkazu:
osqueryctl start osqueryd
Stav osquery můžete také ověřit pomocí následujícího příkazu:
osqueryctl status osqueryd
Měli byste vidět následující výstup:
? osqueryd.service - The osquery Daemon Loaded: loaded (/lib/systemd/system/osqueryd.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 15:21:57 UTC; 6s ago Process: 25333 ExecStartPre=/bin/sh -c if [ ! -f $CONFIG_FILE ]; then echo {} > $CONFIG_FILE; fi (code=exited, status=0/SUCCESS) Process: 25334 ExecStartPre=/bin/sh -c if [ ! -f $FLAG_FILE ]; then touch $FLAG_FILE; fi (code=exited, status=0/SUCCESS) Process: 25336 ExecStartPre=/bin/sh -c if [ -f $LOCAL_PIDFILE ]; then mv $LOCAL_PIDFILE $PIDFILE; fi (code=exited, status=0/SUCCESS) Main PID: 25337 (osqueryd) Tasks: 13 (limit: 4701) Memory: 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/osqueryd Apr 19 15:21:57 debian10 systemd[1]: Starting The osquery Daemon... Apr 19 15:21:57 debian10 systemd[1]: Started The osquery Daemon. Apr 19 15:21:57 debian10 osqueryd[25337]: osqueryd started [version=4.2.0] Apr 19 15:21:57 debian10 osqueryd[25337]: I0419 15:21:57.261158 25339 events.cpp:863] Event publisher not enabled: auditeventpublisher: Publish Apr 19 15:21:57 debian10 osqueryd[25337]: I0419 15:21:57.261485 25339 events.cpp:863] Event publisher not enabled: syslog: Publisher disabled v
Práce s osquery
osquery obsahuje tři užitečné komponenty osqueryi, osqueryd a osqueryctl. osqueryi je osquery interaktivní shell a nekomunikuje s démonem. Shell můžete použít ke spouštění dotazů a prozkoumávání aktuálního stavu vašeho operačního systému. osqueryd je démon monitorování hostitele, který lze použít k plánování dotazů a záznamu změn stavu OS. osqueryctl je pomocný skript pro testování konfigurace.
Pro připojení k osquery shell můžete spustit následující příkaz:
osqueryi
Měli byste získat následující výstup:
Using a virtual database. Need help, type '.help'
Dále spusťte příkaz .help, abyste viděli všechny dostupné možnosti s osquery:
osquery> .help
Měli byste získat následující výstup:
Welcome to the osquery shell. Please explore your OS! You are connected to a transient 'in-memory' virtual database. .all [TABLE] Select all from a table .bail ON|OFF Stop after hitting an error .echo ON|OFF Turn command echo on or off .exit Exit this program .features List osquery's features and their statuses .headers ON|OFF Turn display of headers on or off .help Show this message .mode MODE Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns see .width line One value per line list Values delimited by .separator string pretty Pretty printed SQL results (default) .nullvalue STR Use STRING in place of NULL values .print STR... Print literal STRING .quit Exit this program .schema [TABLE] Show the CREATE statements .separator STR Change separator used by output mode .socket Show the osquery extensions socket path .show Show the current values for various settings .summary Alias for the show meta command .tables [TABLE] List names of tables .types [SQL] Show result of getQueryColumns for the given query .width [NUM1]+ Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off osquery>
Existuje mnoho tabulek dostupných pro dotaz. Všechny tabulky můžete vypsat pomocí následujícího příkazu:
osquery> .table
Měli byste získat následující výstup:
=> 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
Různé systémové informace můžete najít pomocí výše uvedené tabulky s osquery.
Monitorování systému pomocí osquery
Pomocí osquery můžete sledovat využití paměti, informace o zpracování, místo na disku, přihlášení uživatelů a mnoho dalšího.
Nejprve spusťte shell osquery pomocí následujícího příkazu:
osqueryi
Dále můžete získat informace o názvu hostitele vašeho systému, jádru procesoru a fyzické paměti pomocí následujícího příkazu:
osquery> select hostname,cpu_physical_cores,physical_memory from system_info;
Měli byste získat následující výstup:
+------------+--------------------+-----------------+ | hostname | cpu_physical_cores | physical_memory | +------------+--------------------+-----------------+ | debian10 | 1 | 1032937472 | +------------+--------------------+-----------------+
Chcete-li získat informace o souboru ssh_config, spusťte následující dotaz:
osquery> select * from ssh_configs;
Měli byste získat následující výstup:
W0419 15:47:17.043509 25397 virtual_table.cpp:959] The ssh_configs table returns data based on the current user by default, consider JOINing against the users table W0419 15:47:17.043740 25397 virtual_table.cpp:974] Please see the table documentation: 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>
Chcete-li získat seznam všech uživatelů ve vašem systému, spusťte následující dotaz:
osquery> SELECT * FROM users;
Měli byste získat následující výstup:
+-------+-------+------------+------------+-----------------+------------------------------------+----------------------+-------------------+------+ | uid | gid | uid_signed | gid_signed | username | description | directory | shell | uuid | +-------+-------+------------+------------+-----------------+------------------------------------+----------------------+-------------------+------+ | 0 | 0 | 0 | 0 | root | root | /root | /bin/bash | | | 1 | 1 | 1 | 1 | daemon | daemon | /usr/sbin | /usr/sbin/nologin | | | 2 | 2 | 2 | 2 | bin | bin | /bin | /usr/sbin/nologin | | | 3 | 3 | 3 | 3 | sys | sys | /dev | /usr/sbin/nologin | | | 4 | 65534 | 4 | 65534 | sync | sync | /bin | /bin/sync | | | 5 | 60 | 5 | 60 | games | games | /usr/games | /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 | |
Pokud chcete vypsat všechny nesystémové uživatele ve vašem systému, spusťte následující dotaz:
osquery> select * from users where uid <= 1000 limit 3;
Měli byste získat následující výstup:
+-----+-----+------------+------------+----------+-------------+-----------+-------------------+------+ | uid | gid | uid_signed | gid_signed | username | description | directory | shell | uuid | +-----+-----+------------+------------+----------+-------------+-----------+-------------------+------+ | 0 | 0 | 0 | 0 | root | root | /root | /bin/bash | | | 1 | 1 | 1 | 1 | daemon | daemon | /usr/sbin | /usr/sbin/nologin | | | 2 | 2 | 2 | 2 | bin | bin | /bin | /usr/sbin/nologin | | +-----+-----+------------+------------+----------+-------------+-----------+-------------------+------+
Chcete-li získat seznam aktuálně přihlášených uživatelů, spusťte následující dotaz:
osquery> select * from logged_in_users where type = 'user';
Měli byste získat následující výstup:
+------+------+-------+--------------+------------+-------+ | 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 | | user | root | pts/2 | 27.61.217.59 | 1587310997 | 25394 | +------+------+-------+--------------+------------+-------+
Chcete-li zobrazit informace o paměti vašeho systému, spusťte následující dotaz:
osquery> select * from memory_info;
Měli byste získat následující výstup:
+--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+ | memory_total | memory_free | buffers | cached | swap_cached | active | inactive | swap_total | swap_free | +--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+ | 4138455040 | 2407211008 | 79745024 | 1384751104 | 0 | 556371968 | 954744832 | 0 | 0 | +--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+ osquery>
Chcete-li zjistit průměrné zatížení vašeho systému, spusťte následující dotaz:
osquery> select * from load_average;
Měli byste získat následující výstup:
+--------+----------+ | period | average | +--------+----------+ | 1m | 0.000000 | | 5m | 0.000000 | | 15m | 0.000000 | +--------+----------+ osquery>
Chcete-li získat seznam prvních pěti balíčků ve vašem systému, spusťte následující dotaz:
osquery> select * from deb_packages top limit 5;
Měli byste získat následující výstup:
+-------------------+------------+--------------+------+-------+----------+ | 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 | | +-------------------+------------+--------------+------+-------+----------+
Chcete-li získat informace o běžících procesech ve vašem systému, spusťte následující dotaz:
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ěli byste získat následující výstup:
+------+------+-----+ | name | port | pid | +------+------+-----+ | sshd | 22 | 729 | +------+------+-----+
Chcete-li najít všechna předchozí přihlášení, spusťte následující dotaz:
osquery> select * from last;
Měli byste získat následující výstup:
+----------+-------+-------+------+------------+--------------+ | username | tty | pid | type | time | host | +----------+-------+-------+------+------------+--------------+ | root | pts/0 | 1448 | 7 | 1587365277 | 27.61.217.41 | | root | pts/1 | 13392 | 7 | 1587368569 | 27.61.217.41 | | | pts/0 | 1004 | 8 | 1587376329 | | | | pts/1 | 13321 | 8 | 1587376821 | | | | ttyS0 | 748 | 8 | 1587465619 | | | | tty1 | 749 | 8 | 1587465619 | | | root | pts/0 | 1057 | 7 | 1587465664 | 27.61.217.9 | | root | pts/1 | 1375 | 7 | 1587465846 | 27.61.217.9 | +----------+-------+-------+------+------------+--------------+
Chcete-li zobrazit seznam všech úloh naplánovaných crontabem, spusťte následující dotaz:
osquery> select command, path from crontab ;
Měli byste získat následující výstup:
+----------------------------------------------------------------------------------------------------------------------------------------+-------------------+ | command | path | +----------------------------------------------------------------------------------------------------------------------------------------+-------------------+ | 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 |
Chcete-li najít všechny otevřené porty ve vašem systému, spusťte následující dotaz:
osquery> select * from listening_ports;
Měli byste získat následující výstup:
+------+------+----------+--------+------------+-----+--------+----------------------------------------+---------------+ | 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 |
Chcete-li zobrazit seznam 5 nejaktivnějších procesů, spusťte následující dotaz:
osquery> select count(pid) as total, name from processes group by name order by total desc limit 5;
Měli byste získat následující výstup:
+-------+---------+ | total | name | +-------+---------+ | 4 | sshd | | 3 | apache2 | | 2 | systemd | | 2 | bash | | 2 | agetty | +-------+---------+
Závěr
Ve výše uvedeném tutoriálu jsme se naučili, jak nainstalovat a používat osquery v Debianu 10. osquery je velmi užitečný nástroj k nalezení jakýchkoli zadních vrátek, malwaru nebo jakéhokoli zombie procesu ve vašem systému. Další informace o osquery naleznete na stránce dokumentace osquery.