linux-security security monitoring auditing osquery sql forensics sles

Osquery Mastery: SQL for Infrastructure (Artikel 352)

Beherrschung von osquery zur Systemanalyse mittels SQL. Erfahren Sie, wie Sie Hardware, Prozesse und Netzwerk-Zustände mit einfachen Datenbank-Abfragen in Echtzeit überwachen.

# Osquery Mastery: Die Infrastruktur als Datenbank abfragen

TL;DR / Management Summary Wer wissen will, welche USB-Geräte eingesteckt sind oder welcher Prozess auf Port 80 lauscht, muss normalerweise dutzende CLI-Befehle beherrschen. Osquery verändert dies radikal: Es stellt das gesamte Betriebssystem als relationale Datenbank dar. Ein Senior Admin nutzt SQL-Abfragen, um hunderte Server gleichzeitig zu auditieren. Mit osquery finden wir in Sekunden heraus, welche Hosts veraltete Kernel-Versionen nutzen oder welche Prozesse ohne gültige Signatur laufen.


# 1. Einführung & Architektur

Das OS als Tabelle.

Osquery nutzt SQLite-Tabellen, um Kernel-Daten im RAM abzubilden. Es schreibt keine Daten, sondern liest sie nur – blitzschnell und ohne Systemlast.

# Die Architektur-Elemente (Mermaid)

graph TD
    A[Admin / SIEM] -->|SQL Query| B[osquery CLI / Daemon]
    B --> C{Abstraction Layer}
    C --> D[Table: users]
    C --> E[Table: processes]
    C --> F[Table: listening_ports]
    C --> G[Table: kernel_modules]
    D/E/F/G --> H[Linux Kernel / proc / sys]

# 2. Die osquery Shell (osqueryi)

Interaktive Diagnose.

Starten Sie die Shell:

osqueryi

# Praxisbeispiele für Admins

-- 1. Wer ist aktuell eingeloggt?
SELECT user, host, time FROM logged_in_users;

-- 2. Welche Prozesse lauschen am Netzwerk?
SELECT pid, name, port FROM listening_ports JOIN processes USING (pid);

-- 3. Finde alle SUID-Binaries in /usr/bin
SELECT * FROM file WHERE path LIKE '/usr/bin/%' AND mode LIKE '%s%';

# 3. Der Dämon (osqueryd)

Kontinuierliche Überwachung.

In Enterprise-Umgebungen läuft osquery als Hintergrunddienst.

  • Schedules: Führt Abfragen alle X Minuten aus und meldet nur die Differenz (Differenzial-Logging).
  • Packs: Sammlungen von Abfragen für spezifische Zwecke (z.B. IT-Compliance, Incident Response).

# 4. Day-2 Operations: Security Monitoring

Anomaly Detection.

Nutzen Sie osquery, um Abweichungen vom Standard zu finden.

# Beispiel: Suche nach neuen Kernel-Modulen

-- Meldet Module, die nicht zum Standard-Set gehören
SELECT name, size FROM kernel_modules WHERE name NOT IN ('ext4', 'virtio', ...);

# 5. Troubleshooting & “War Stories”

Wenn die Abfrage zu teuer wird.

# Story 1: “Der Performance-Fresser (File-Table)”

Symptom: Der osqueryd verbraucht plötzlich 100% CPU und blockiert das System. Ursache: Der Admin hat eine Abfrage wie SELECT * FROM file WHERE path LIKE '/%%' gestartet. Dies zwingt osquery, die gesamte Festplatte rekursiv zu scannen. Lösung: Nutzen Sie die file Tabelle niemals ohne Filter auf spezifische Pfade (/etc/, /bin/). Nutzen Sie für globale Suchen lieber spezialisierte Tools wie find.

# Story 2: “Das leere Log (Permissions)”

Symptom: Osquery meldet für die Tabelle processes keine Pfade oder Cmdlines für manche PIDs. Ursache: Der Admin führt osquery als normaler User aus. Der Zugriff auf /proc/<PID>/ für Prozesse anderer User ist nur Root erlaubt. Lösung: Führen Sie osquery für Security-Audits immer mit sudo aus.


# 6. Fazit & Empfehlung

  • Pflicht: Installieren Sie osquery auf jedem Server. Es ist das effizienteste Audit-Tool auf dem Markt.
  • Zentralisierung: Senden Sie die JSON-Logs von osqueryd an einen ELK-Stack (Artikel 045). So haben Sie ein “Google für Ihre Hardware”.
  • Wahl: Nutzen Sie fertige Query-Packs (z.B. von Facebook oder Palantir), um sofort einen hohen Sicherheitsstandard zu erreichen.

# Anhang: Cheatsheet

Aufgabe SQL Abfrage
OS Version SELECT * FROM os_version;
Uptime SELECT * FROM uptime;
Top 5 CPU-Fresser SELECT name, pid, total_size FROM processes ORDER BY total_size DESC LIMIT 5;
Crontab prüfen SELECT * FROM crontab;
ARP Cache SELECT * FROM arp_cache;
USB Geräte SELECT * FROM usb_devices;
Installierte RPMs SELECT name, version FROM rpm_packages;
Kernel Params SELECT name, value FROM system_info;
Hilfe anzeigen .help (innerhalb der Shell)
Tabellen listen .tables