osquery installeren op Debian 10

osquery is een gratis en open-source hulpmiddel ontwikkeld door Facebook dat gebruikt kan worden voor het opvragen van besturingssysteem-gerelateerde informatie, waaronder geheugengebruik, geïnstalleerde pakketten, procesinformatie, ingelogde gebruikers, luisterpoorten en nog veel meer. Het kan op verschillende besturingssystemen draaien, waaronder, Windows, Linux, FreeBSD en MacOS. Het is een erg nuttig hulpmiddel voor allerlei gebruiksgevallen om problemen met de prestaties en de werking op te lossen. Het wordt geleverd met een heleboel hulpmiddelen die je helpen om OS analyses en bewaking uit te voeren.

In deze handleiding leren we hoe je osquery kunt installeren en gebruiken op Debian 10.

Vereisten

  • Een server waarop Debian 10 draait.
  • Een root wachtwoord is op je server ingesteld.

Aan de slag

Alvorens te beginnen is het een goed idee om de pakketten van je systeem bij te werken tot de nieuwste versie. Je kunt alle pakketten bijwerken met het volgende commando:

apt-get update -y
apt-get upgrade -y

Als alle pakketten zijn bijgewerkt, herstart je je systeem om de veranderingen toe te passen.

Installeer osquery

Standaard is osquery niet beschikbaar in de standaard repository van Debian 10. Je zult dus de osquery repository aan je systeem moeten toevoegen.

Download eerst de GPG sleutel en voeg die toe met het volgende commando:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B

Voeg vervolgens de osquery repository toe met het volgende commando:

apt-get install software-properties-common -y
add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'

Werk vervolgens de repository bij en installeer osquery met het volgende commando:

apt-get update -y
apt-get install osquery -y

Als de installatie klaar is, start je de osquery service met het volgende commando:

osqueryctl start osqueryd

Je kunt ook de status van osquery controleren met het volgende commando:

osqueryctl status osqueryd

Je zou de volgende uitvoer moeten zien:

? 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

Werken met osquery

osquery wordt geleverd met drie nuttige componenten osqueryi, osqueryd en osqueryctl. De osqueryi is een osquery interactieve shell en communiceert niet met een daemon. Je kunt de shell gebruiken om queries uit te voeren en de huidige toestand van je besturingssysteem te verkennen. osqueryd is de host monitoring daemon die gebruikt kan worden om queries te plannen en OS toestandsveranderingen te registreren. osqueryctl is een hulpscript om configuratie te testen.

Je kunt het volgende commando uitvoeren om verbinding te maken met de osquery shell:

osqueryi

Je zou de volgende uitvoer moeten krijgen:

Using a virtual database. Need help, type '.help'

Draai vervolgens het .help commando om alle opties te zien die met osquery beschikbaar zijn:

osquery> .help

Je zou de volgende uitvoer moeten krijgen:

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> 

Er zijn veel tabellen beschikbaar voor query’s. Je kunt alle tabellen opnoemen met het volgende commando:

osquery> .table

Je zou de volgende uitvoer moeten krijgen:

  => 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

Je kunt de verschillende systeeminformatie vinden met behulp van de bovenstaande tabel met osquery.

Systeem bewaken met osquery

Je kunt geheugengebruik, procesinformatie, schijfruimte, ingelogde gebruikers, en nog veel meer bewaken met osquery.

Start eerst de osquery shell met het volgende commando:

osqueryi

Vervolgens kun je de informatie van je systeem hostnaam, cpu kern en fysiek geheugen krijgen met het volgende commando:

osquery> select hostname,cpu_physical_cores,physical_memory from system_info;

Je zou de volgende uitvoer moeten krijgen:

+------------+--------------------+-----------------+
| hostname   | cpu_physical_cores | physical_memory |
+------------+--------------------+-----------------+
| debian10   | 1                  | 1032937472      |
+------------+--------------------+-----------------+

Om de informatie over het ssh_config bestand te krijgen voer je de volgende query uit:

osquery> select * from ssh_configs;

Je zou de volgende uitvoer moeten krijgen:

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> 

Om een lijst van alle gebruikers in je systeem te krijgen, voer je de volgende query uit:

osquery> SELECT * FROM users;

Je zou de volgende uitvoer moeten krijgen:

+-------+-------+------------+------------+-----------------+------------------------------------+----------------------+-------------------+------+
| 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 |      |

Als je een lijst wilt van alle niet-systeemgebruikers in je systeem, voer dan de volgende query uit:

osquery> select * from users where uid <= 1000 limit 3;

Je zou de volgende uitvoer moeten krijgen:

+-----+-----+------------+------------+----------+-------------+-----------+-------------------+------+
| 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 |      |
+-----+-----+------------+------------+----------+-------------+-----------+-------------------+------+

Om de lijst van momenteel ingelogde gebruikers te krijgen, voer je de volgende query uit:

osquery> select * from logged_in_users where type = 'user';

Je zou de volgende uitvoer moeten krijgen:

+------+------+-------+--------------+------------+-------+
| 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 |
+------+------+-------+--------------+------------+-------+

Om de geheugeninformatie van je systeem te tonen, voer je de volgende query uit:

osquery> select * from memory_info;

Je zou de volgende uitvoer moeten krijgen:

+--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+
| memory_total | memory_free | buffers  | cached     | swap_cached | active    | inactive  | swap_total | swap_free |
+--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+
| 4138455040   | 2407211008  | 79745024 | 1384751104 | 0           | 556371968 | 954744832 | 0          | 0         |
+--------------+-------------+----------+------------+-------------+-----------+-----------+------------+-----------+
osquery> 

Om de gemiddelde belasting van je systeem te vinden, voer je de volgende query uit:

osquery> select * from load_average;

Je zou de volgende uitvoer moeten krijgen:

+--------+----------+
| period | average  |
+--------+----------+
| 1m     | 0.000000 |
| 5m     | 0.000000 |
| 15m    | 0.000000 |
+--------+----------+
osquery> 

Om een lijst van de eerste vijf pakketten in je systeem te krijgen, voer je de volgende query uit:

osquery> select * from deb_packages top limit 5;

Je zou de volgende uitvoer moeten krijgen:

+-------------------+------------+--------------+------+-------+----------+
| 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 |          |
+-------------------+------------+--------------+------+-------+----------+

Om informatie over lopende processen in je systeem te krijgen, voer je de volgende query uit:

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';

Je zou de volgende uitvoer moeten krijgen:

+------+------+-----+
| name | port | pid |
+------+------+-----+
| sshd | 22   | 729 |
+------+------+-----+

Om alle vorige logins te vinden voer je de volgende query uit:

osquery> select * from last;

Je zou de volgende uitvoer moeten krijgen:

+----------+-------+-------+------+------------+--------------+
| 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  |
+----------+-------+-------+------+------------+--------------+

Om alle door crontab geplande opdrachten op te sommen, voer je de volgende query uit:

osquery> select command, path from crontab ;

Je zou de volgende uitvoer moeten krijgen:

+----------------------------------------------------------------------------------------------------------------------------------------+-------------------+
| 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 |

Om alle open poorten in je systeem te vinden, voer je de volgende query uit:

osquery> select * from listening_ports;

Je zou de volgende uitvoer moeten krijgen:

+------+------+----------+--------+------------+-----+--------+----------------------------------------+---------------+
| 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    |

Om de top 5 meest actieve processen op te sommen, voer je de volgende query uit:

osquery> select count(pid) as total, name from processes group by name order by total desc limit 5;

Je zou de volgende uitvoer moeten krijgen:

+-------+---------+
| total | name    |
+-------+---------+
| 4     | sshd    |
| 3     | apache2 |
| 2     | systemd |
| 2     | bash    |
| 2     | agetty  |
+-------+---------+

Conclusie

In de bovenstaande handleiding leerden we hoe je osquery in Debian 10 kunt installeren en gebruiken. osquery is een heel nuttig hulpmiddel om achterdeurtjes, malware, of zombie processen in je systeem te vinden. Voor meer informatie over osquery kun je de osquery documentatie pagina bezoeken.