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.
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
Toon de huidige osquery configuraties en instellingen.
.show
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
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
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;
Verkrijg OS Versie
Toon de huidige besturingssysteem info, waaronder de os versie, platform, os patch, en codenaam.
SELECT * FROM os_version;
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;
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;
Voor een specifiek pakket voeg je het naamfilter toe.
SELECT name, version FROM deb_packages WHERE name="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;
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";
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";
Geheugen info
Controleer het systeemgeheugen in bytes.
SELECT * FROM memory_info;
Netwerk interface info
Controle van het netwerkadres met ‘interface_addresses’.
SELECT * FROM interface_addresses;
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;
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;
Om de laatst ingelogde gebruikers te controleren, gebruik je de ‘last’ tabel.
SELECT * FROM last;
Vul voor gewone gebruikers ’type’ in tot ‘7’.
SELECT username, time, host FROM last WHERE type=7;
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;
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;
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;
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;
En al het bovenstaande is de basis Linux systeemcontrole met osquery.