Abfragen

Mit Cloud Guard-Abfragen können Sie Abfragen erstellen, um Informationen zum Status Ihrer Ressourcen abzurufen. Sie können vergangene Abfragen erneut ausführen, Favoritenabfragen speichern und On-Demand-Abfragen erstellen.

Instanzsicherheit, die OSQuery unter der Haube ausführt, unterstützt SQL-Abfragen gemäß SQLite. Diese SQL-Abfragen können Ihre Hosts nahezu in Echtzeit auf Bedrohungssuche, Erkennung oder allgemeine Vorgangsüberwachung untersuchen.

Sie können Abfragen einmal ausführen oder Abfragen, die Sie bereits ausgeführt haben, in geplante Abfragen konvertieren, um sie in einer definierten Häufigkeit auszuführen, und Ergebnisse an den OCI Logging-Service senden, um Cloud Guard-Probleme zu erstellen oder Informationen in ein 3P-SIEM zu exportieren. Und Sie können Abfragen, die bereits ausgeführt wurden, erneut ausführen.

Hinweis

Abfragen können nur eine Abfrageanweisung pro Anforderung enthalten.

Bedarfsgesteuerte Abfragen

Eine bedarfsgesteuerte oder benutzerdefinierte Abfrage ist eine einmalige Abfrage, die mit OSQuery erstellt wurde und SQLite-konforme SQL-Abfragen verwendet. Die Abfrage wird von Instance Security in einem Ziel ausgeführt.

Sie können eine On-Demand-Abfrage für eine einzelne Instanz ausführen und die Ergebnisse validieren, bevor Sie sie in der gesamten Flotte ausführen.

Sie können Abfragen erneut ausführen und als Favoriten speichern, um sie erneut auszuführen.

Hinweis

Einige Dinge, die Sie beim Erstellen und Verwenden von Abfragen beachten sollten:
  • Das Ausführen von Abfragen in Produktionsumgebungen kann sich auf CPU- und Speicherressourcen auswirken, sodass:
    • Begrenzen Sie die Benutzergruppen mit Zugriff auf Abfragen.
    • Testen Sie Abfragen auf einer einzelnen Instanz, bevor Sie sie über die gesamte Flotte hinweg ausführen.

Abfrageergebnisse nach Bedarf werden nach zwei Tagen automatisch gelöscht.

Geplante Abfragen

Geplante Abfragen werden aus zuvor ausgeführten Abfragen erstellt, die Sie jetzt regelmäßig in Ihrer Flotte ausführen möchten, damit Sie die Rohergebnisse für die Nachverarbeitung erfassen können. Sie wählen die Abfrage aus, wählen die Ziele aus, über die sie ausgeführt werden soll, legen die Häufigkeit für die Ausführung fest und konfigurieren den Logging-Service so, dass die Ergebnisse aufgezeichnet werden.

Zugriff auf Abfragen steuern

Sie können den Zugriff auf Abfragen steuern, indem Sie dynamische Gruppen erstellen und Policys verwenden. Informationen hierzu finden Sie unter:

OSquery

Abfragen sind SQLite verständliches SQL, das mit der SQL-Sprache OSquery erstellt wird.

OSquery ist ein leistungsstarker Open-Source-Host-Agent mit mehreren Plattformen, mit dem Sie Visibilität und Einblicke in Ihre Flotte erhalten können. Es kann Daten unabhängig vom Betriebssystem erfassen und normalisieren und gleichzeitig die Transparenz in Ihrer Infrastruktur erhöhen. OSquery kann jedem Sicherheitsteam bei der Bedrohungssuche, Forensik und Angriffserkennung helfen, indem es Echtzeitansichten aller ausgeführten Prozesse und Netzwerkverbindungen bereitstellt. OSquery wird von Hunderten von Tabellen unterstützt, die alles abdecken, von laufenden Prozessen bis hin zu geladenen Kernel-Erweiterungen.

Erste Schritte mit OSquery

Um die richtigen Daten zu sammeln, müssen Sie die richtigen Fragen stellen. Für alle, die anfangen, müssen sie den Standort der Daten kennen, um zu wissen, wie man danach fragt. Die einzige Möglichkeit, die richtigen Fragen zu stellen, besteht darin, zu verstehen, wie man sie stellt, und es kommt darauf zurück, das Schema zu kennen.

Machen Sie sich mit dem Schema vertraut: https://osquery.io/schema/5.5.1/.

Ab dem 7. Mai 2024 sind 274 Tabellen im Schema enthalten. Sie können alle Tabellen verwenden, mit Ausnahme von:

  • Tabellen mit _events im Namen.
  • Tabellen, die YARA-Unterstützung erfordern.
  • Tabellen curl und carves.

Best Practices für Abfragen

Beachten Sie die folgenden Best Practices:

  • Abfragen können nur eine Abfrageanweisung pro Anforderung enthalten.
  • Formatieren Sie die Abfrage so, dass sie leicht zu lesen ist, und halten Sie sie einfach.
  • Verwenden Sie Join- und Sub-Suchen sorgfältig.
  • Definieren Sie die Informationen, die Sie erfassen möchten, und legen Sie den Geltungsbereich der Abfrage auf diese Informationen fest.

    Beispiel: Wenn Sie Prozesse ausführen möchten, die viele Ressourcen auf der Instanz verbrauchen könnten, können Sie Folgendes schreiben:

    SELECT * from processes

    Aber das würde eine große Menge Daten erzeugen, möglicherweise die meisten davon unnötig.

    Besser wäre es, nur die benötigten Spalten auszuwählen und eine Reihenfolge und Begrenzung festzulegen.

    Im Folgenden finden Sie ein Beispiel, mit dem Sie eine schön formatierte Tabelle für die Top 10 Prozesse nach Speicherverbrauch erhalten.

    SELECT pid, name, ROUND((total_size * '10e-7'), 2) AS memory_used FROM processes ORDER BY total_size DESC LIMIT 10;

Abfragepakete

OSquery-Abfragepakete sind vordefinierte oder benutzerdefinierte Sets von Abfragen, die nach Typ organisiert sind, wie Compliance oder Sicherheitslückenmanagement. Mit Hilfe von Abfragepaketen können Sie verstehen, wie Ihr System auf Abfragesets reagiert und die Abfragen gegebenenfalls an Ihre Umgebung anpassen.

Weitere Informationen zu Abfragepaketen finden Sie unter osquery.readthedocs.io, Abfragepakete.

Sie finden nützliche Abfragepakete online, z.B. dieses auf GitHub, https://github.com/osquery/osquery/tree/master/packs.

Beispielabfragen

Sie können zunächst einige grundlegende lokale Abfragen ausführen, wie SELECT * FROM-Benutzer oder SELECT * FROM processed LIMIT 10, um zu erfahren, wie die Tabellen funktionieren.

Außerdem haben wir eine Liste vorgeschlagener Abfragen zusammengestellt, die Ihnen bei der Inbetriebnahme helfen.

  1. Benutzer (users): Suchen Sie nach allen lokalen Benutzerkonten, die auf einem Rechner vorhanden sind.

    Linux (Ubuntu):

    SELECT * FROM users WHERE gid < 65534 AND uid >= 1000;
    Hinweis

    uid 1000 ist der Ort, an dem Benutzer in der Regel unter Linux starten

    Linux: Mit dieser Abfrage werden alle Benutzer gesucht, die über tatsächliche Anmeldeshells verfügen (nicht bin/false oder bin/true, wobei die Berechtigungen für sie an verschiedenen Orten gespeichert sind, z.B. /usr/bin/false oder /bin/false).

    SELECT * FROM users WHERE shell NOT LIKE '%false' AND shell NOT LIKE '%true';
  2. Offene Sockets verarbeiten (process_open_sockets): Sucht nach Prozessen, die Netzwerkverbindungen herstellen, mit Ausnahme von Webverbindungen.
    SELECT s.pid, p.name, local_address, remote_address, family, protocol, local_port, remote_port FROM process_open_sockets s JOIN processes p ON s.pid = p.pid WHERE remote_port NOT IN (80, 443) AND local_port NOT IN (0) AND family = 2;
  3. Listening-Ports (listening_ports): Sucht nach offenen Ports in einem System.
    SELECT DISTINCT p.pid, p.name, l.port FROM listening_ports AS l JOIN processes as p ON l.pid = p.pid WHERE l.address = '0.0.0.0';
  4. Angemeldete Benutzer (logged_in_users): Zeigt an, wer derzeit bei einem System angemeldet ist.
    SELECT liu.*, p.name, p.cmdline, p.cwd, p.root FROM logged_in_users liu, processes p WHERE liu.pid = p.pid;
  5. Datei (file): Gibt Informationen zur angegebenen Datei auf dem Datenträger zurück. Mit den folgenden Abfragen werden alle Dateien in allen Ordnern des Benutzers "Downloads" auf einer Ebene der Ordnertiefe gefunden.

    Linux:

    SELECT file.path, users.username AS owner, groups.groupname AS groups, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) JOIN groups USING (gid) WHERE path LIKE '/home/%/Downloads/%%' ORDER BY last_mod DESC;

    Windows:

    SELECT file.path, users.username AS owner, datetime(file.btime,'unixepoch') AS created, datetime(file.mtime,'unixepoch') AS last_mod, ROUND((file.size * 10e-7),4) AS size_mb FROM file JOIN users USING (uid) WHERE path LIKE 'c:\Users\%\Downloads\%%' ORDER BY last_mod DESC;