Linux Server monitoren met osquery

Osquery is een open bron besturingssysteem bewakings-, bevragings-, en analysesoftware. Het is gemaakt door Facebook en stelt een besturingssysteem bloot als een krachtige relationele databank die met SQL-gebaseerde queries kan worden bevraagd.

Osquery is een multiplatform software, die geïnstalleerd kan worden op Linux, Windows, MacOS, en FreeBSD. Met Osquery kunnen we het profiel van het besturingssysteem, de prestaties, de beveiliging en nog veel meer meetgegevens onderzoeken met behulp van SQL-gebaseerde queries.

In deze zelfstudie laat ik je zien hoe je osquery kunt installeren op de Linux distributies Ubuntu 18.04 LTS en CentOS 7. We zullen osquery installeren, leren hoe je de ‘osqueryi’ interactieve modus gebruikt, en hoe je een live systeem met osquery kunt monitoren.

Vereisten

  • Linux OS (Ubuntu 18.04 of CentOS 7)
  • Root voorrechten

Wat we zullen doen

  • Osquery installeren op Linux besturingssysteem
  • Basisgebruik van osqueryi Interactieve modus
  • Systeem monitoren met osquery

Stap 1 – Installeer osquery op Linux Besturingssysteem

osquery stelt voor elk platform zijn eigen repository ter beschikking. Ideze stap installeren we het osquery pakket uit de officiële osquery repository.

Op Ubuntu

Voeg de osquery sleutel toe.

export OSQUERY_KEY=1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $OSQUERY_KEY

Installeer het osquery pakket op Ubuntu.

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

Op CentOS

Voeg de osquery sleutel toe.

curl -L https://pkg.osquery.io/rpm/GPG | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-osquery

Installeer het osquery pakket op CentOS 7.

sudo yum-config-manager --add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
sudo yum-config-manager --enable osquery-s3-rpm
sudo yum install osquery

Wacht tot alle pakketten geïnstalleerd zijn.

Installeer osquery

Stap 2 – Basisgebruik van osqueryi Interactieve modus

osquery biedt de gebruikers twee hoofdinterfaces, osqueryi, en osqueryd.

osqueryi is de osquery interactieve query console. Het is als de ‘mysql’ commandoshell op de MySQL en de ‘psql’ shell op de PostgreSQL databank.

In deze stap leren we het basisgebruik van de ‘osqueryi’ interactieve modus.

Typ het ‘osqueryi’ commando op de server terminal, en je krijgt de osquery interactieve consolemodus.

osqueryi

Vervolgens leren we over de basiscommando’s van de osqueryi console modus.

Toon alle basis beschikbare commando’s op de interactieve modus osqueryi.

.help

met behulp van osqueryi commando

Toon de huidige osquery configuraties en instellingen.

.show

Toon osquery configuratie

Osquery biedt meerdere weergavemodi om query resultaten te tonen. De standaard modus is de ‘mooie’ modus.

Nu zullen we de weergavemodus van de query resultaten veranderen, voor deze gids zullen we de ‘lijn’ modus gebruiken.

.mode csv
.mode list
.mode column
.mode line
.mode pretty

Osquery stelt het besturingssysteem bloot als een relationeel databasesysteem. Alle info over het systeem is opgeslagen in de osquery tabellen en we kunnen de hele systeeminfo verkennen door alle beschikbare tabellen te bevragen.

Om een lijst van alle beschikbare tabellen in de osquery te krijgen, voer je het onderstaande commando uit.

.tables

Krijg een lijst van alle tabellen

Als we alle beschikbare tabellen in het osquery systeem kennen, gaan we naar de kolommen kijken.

Gebruik het volgende commando om het schema (kolommen, soorten) van tabellen te krijgen.

.schema users
.schema processes

Verkrijg osquery kolommen

En je krijgt alle schema kolommen van de tabel.

Stap 3 – Basis Linux bewaking met behulp van query

In deze stap gaan we een live Linux systeem monitoren met de osquery. We zullen de systeem profiel info, gebruikers, netwerk interfaces enz. controleren via de osqueryi interactieve modus.

Verkrijg systeem info

Toon details over de systeemhardware.

SELECT * FROM system_info;
SELECT hostname, cpu_type, physical_memory, hardware_vendor, hardware_model FROM system_info;

Toon details over systeemhardware

Verkrijg OS Versie

Toon de huidige besturingssysteem info, waaronder de os versie, platform, os patch, en codenaam.

SELECT * FROM os_version;

Toon details over het OS

Kernelversie en modules bekijken

Om de kernel info van het systeem te controleren, biedt osquery de tabellen ‘kernel_info’ en de ‘kernel_modules’.

Toon de door het systeem gebruikte kernel.

SELECT * FROM kernel_info;

Toon alle geladen kernel modules op het systeem.

SELECT * FROM kernel_modules LIMIT 5;

krijg details over de gebruikte Linux Kernel

Repository en pakketten controleren

osquery levert tabellen voor het controleren van repositories en geïnstalleerde pakketten op zowel Linux Ubuntu als CentOS.

– Op Ubuntu

Op Ubuntu kunnen we de beschikbare repositories controleren via de ‘apt_sources’ en de geïnstalleerde pakketten via de ‘deb_packages’.

Controleer alle beschikbare Ubuntu repositories.

SELECT * FROM apt_sources;
SELECT name, base_uri, release, maintainer, components FROM apt_sources ORDER BY name;

Controleer alle geïnstalleerde pakketten met behulp van de tabel deb_packages.

SELECT * FROM deb_packages;

Toon alleen de naam van het pakket en de versie.

SELECT name, version FROM deb_packages ORDER BY name;

Controleer geïnstalleerde pakketten op Ubuntu

Voor een specifiek pakket voeg je het naamfilter toe.

SELECT name, version FROM deb_packages WHERE name="nginx";

krijg details over een bepaald pakket, in dit geval nginx

– Op CentOS

Op CentOS kunnen we de beschikbare repository’s controleren via de ‘yum_sources’ en de geïnstalleerde pakketten controleren via de ‘rpm_packages’.

Controleer alle beschikbare CentOS repositories.

SELECT * FROM yum_sources;
SELECT name, baseurl, enabled FROM yum_sources;

Controleer ingeschakelde repository’s door het filter ‘enabled’ toe te voegen.

SELECT name, baseurl, enabled FROM yum_sources WHERE enabled=1;

Verkrijg details over pakketten op CentOS

Controleer alle geïnstalleerde pakketten met behulp van de rpm_packages tabel.

SELECT * FROM rpm_packages;
SELECT name, version FROM rpm_packages ORDER BY name;

Voor specifieke pakketnamen voeg je het naamfilter toe.

SELECT name, version FROM rpm_packages WHERE name="firewalld";

Details over Firewalld

Info over mount-schijven

We kunnen de mounts tabel gebruiken om alle details over de systeemschijf na te gaan, waaronder vrije inodes, vlaggen, type enz.

Bekijk alle schijven die door het systeem zijn aangekoppeld.

SELECT * FROM mounts;
SELECT device, path, type, inodes_free, flags FROM mounts;

Voor het specifieke type apparaat.

SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="ext4";
SELECT device, path, type, inodes_free, flags FROM mounts WHERE type="tmpfs";

Verkrijg schijfmounts

Geheugen info

Controleer het systeemgeheugen in bytes.

SELECT * FROM memory_info;

Geheugengegevens opvragen

Netwerk interface info

Controle van het netwerkadres met ‘interface_addresses’.

SELECT * FROM interface_addresses;

Netwerk Interface Info

Controleren van de details van de netwerk interface met ‘interface_details’.

SELECT * FROM interface_details;
SELECT interface, mac, ipackets, opackets, ibytes, obytes FROM interface_details;

Netwerk interface details

Server Uptime

Controle van de uptime van de server.

SELECT * FROM uptime;

Controleren van gebruikers

osqery geeft detailtabellen om systeemgebruikers te controleren. We kunnen de tabel ‘users’ gebruiken om alle gebruikers op het systeem te controleren, de tabel ‘last’ om de laatst ingelogde gebruikers te controleren, en de tabel ‘logged_in_users’ om de ingelogde gebruiker met de actieve shell te krijgen.

Om alle beschikbare gebruikers op de server te controleren, gebruik je de ‘users’ tabel.

SELECT * FROM users;

Voor gewone gebruikers kunnen we de uid opgeven op ‘>=1000’.

SELECT * FROM users WHERE uid>=1000;

Gegevens systeemgebruiker

Om de laatst ingelogde gebruikers te controleren, gebruik je de ‘last’ tabel.

SELECT * FROM last;

Laatste login

Vul voor gewone gebruikers ’type’ in tot ‘7’.

SELECT username, time, host FROM last WHERE type=7;

Verkrijg alleen gegevens over gewone gebruikers

Om de ingelogde gebruikers met actieve shell te controleren, gebruik je de ‘logged_in_users’ tabellen.

SELECT * FROM logged_in_users;

IP tabellen firewall info

Met de ’tabellen’ tabel kunnen we alle beschikbare regels van de firewall nagaan, inclusief de keten, het beleid, src/dst IP en poort enz.

Toon alle iptables regels.

SELECT * FROM iptables;

Specificeer de regel met de aangepaste query hieronder.

SELECT chain, policy, src_ip, dst_ip FROM iptables WHERE chain="POSTROUTING" order by src_ip;

IP Tabellen Firewall info

Proces info

We kunnen alle toepassingsprocessen controleren met behulp van de tabel ‘processes’. Het geeft gedetailleerde info over het proces, waaronder pid, naam, pad, commando enz.

Basis processen query voor het controleren van alle draaiende apps.

SELECT * FROM processes;

Specificeer kolommen voor pid enz, pad, en het commando.

SELECT pid, name, path, cmdline FROM processes;

Details over Linux processen

Controleren van cron job

Controleer beschikbare cron job en de tijd waarop het script wordt uitgevoerd met behulp van de ‘crontab’ tabel.

SELECT * FROM crontab;

Cronjobs

SUID binair bestand

SUID (Set owner User ID up on execution) is een speciaal soort bestandspermissies die aan een bestand gegeven worden en meestal aan binaire uitvoerbare bestanden.

Controleer alle beschikbare genoemde binaire bestanden.

SELECT * FROM suid_bin;

Geef de gebruikersnaam en de groepsnaam op.

SELECT * FROM suid_bin WHERE username="root" AND groupname="nobody" order by path;

Lijst od SUID bestanden

En al het bovenstaande is de basis Linux systeemcontrole met osquery.

Referentie