Osquery
Einführung
osquery ist ein Framework zur sicherheitsrelevanten Systemüberwachung. Es stellt Betriebssystemdaten als SQL-Tabellen dar. So können Dateien, Prozesse, Nutzer, Netzwerke und Konfigurationen abgefragt werden.
Ursprünglich von Facebook entwickelt, eignet sich osquery für forensische Analysen, Security Monitoring und Integritätsprüfungen.
Architektur
Die Anwendung besteht aus zwei Komponenten:
+-------------------+
| osqueryi Shell | <-- Interaktive SQL-Abfragen
+-------------------+
|
v
+-------------------+
| osqueryd | <-- Daemon für geplante Abfragen
+-------------------+
|
v
+-------------------+
| Systemtabellen | <-- z.B. processes, users, etc.
+-------------------+
Installation unter Debian 12
- Von der Webseite neuste Version runterladen und installieren.
https://osquery.io/downloads/official/5.16.0
- wget https://pkg.osquery.io/deb/osquery_5.16.0-1.linux_amd64.deb
- dpkg -i osquery_5.16.0-1.linux_amd64.deb
Konfiguration
Kopiert die Beispielkonfiguration
- cp /opt/osquery/share/osquery/osquery.example.conf /etc/osquery/osquery.conf
Dienst starten
Startet den osquery-Dienst
- systemctl start osqueryd
Prüft den Dienststatus
- systemctl status osqueryd
● osqueryd.service - The osquery Daemon Loaded: loaded (/lib/systemd/system/osqueryd.service; enabled) Active: active (running)
Interaktive Nutzung mit osqueryi
Startet die interaktive Shell
- osqueryi
Beispielabfragen:
Zeigt aktuell eingeloggte Benutzer
- SELECT * FROM logged_in_users;
Zeigt laufende Prozesse von root
- SELECT name, pid FROM processes WHERE uid = 0;
Zeigt alle Cronjobs
- SELECT * FROM crontab;
Zeigt alle offenen Netzwerkports
- SELECT * FROM listening_ports;
Eigene Regeln über Queries konfigurieren
Bearbeitet die zentrale Konfigurationsdatei vi /etc/osquery/osquery.conf
Beispielkonfiguration:
{
"schedule": {
"users_check": {
"query": "SELECT * FROM users;",
"interval": 600
},
"passwd_check": {
"query": "SELECT * FROM file WHERE path = '/etc/passwd';",
"interval": 300
}
}
}
Aktualisiert osquery nach Konfig-Änderungen
- systemctl restart osqueryd
FleetDM mit Docker Compose (offizielles Setup)
Voraussetzungen
- Debian 12 mit installiertem Docker & Docker Compose
- osquery soll zentral über Fleet verwaltet werden
Vorbereitung
Klon das offizielle Fleet-Repository:
- git clone https://github.com/fleetdm/fleet.git
- cd fleet
Starte die mitgelieferte Docker-Umgebung:
- docker compose up -d
Dies startet u. a.:
- MySQL
- Redis
- Fleet-Webserver (FleetDM)
- Weitere Dienste wie Mailhog, Prometheus (optional)
Datenbank initialisieren
Fleet startet nicht automatisch, wenn die Datenbank leer ist.
Führe einmalig folgende Initialisierung durch:
docker run -it --rm \ --network=fleet_default \ -e FLEET_MYSQL_USERNAME=root \ -e FLEET_MYSQL_PASSWORD=fleetpass \ -e FLEET_MYSQL_DATABASE=fleet \ -e FLEET_MYSQL_ADDRESS=fleet-mysql-1:3306 \ -e FLEET_REDIS_ADDRESS=fleet-redis-1:6379 \ fleetdm/fleet:v4.45.0 fleet prepare db
Anschließend Fleet-Container neustarten:
- docker restart fleet-fleet-1
Web-Oberfläche aufrufen
Beim ersten Start:
- Admin-Benutzer, Passwort und Organisation anlegen
Hinweise
- Die `docker-compose.yml` aus dem Repo enthält alle Dienste – kein eigenes Compose-File notwendig.
- Änderungen an Ports oder Volumes können direkt in der vorhandenen Datei vorgenommen werden.
- Das Netzwerk `fleet_default` wird automatisch erzeugt.
- Der Befehl `fleet prepare db` muss **nur einmal** beim ersten Start ausgeführt werden.
Weitere Schritte
- osquery-Clients mit Fleet verbinden
- Queries und Policies definieren
- Live-Abfragen ausführen