Überwachung der Dateiintegrität unter Linux mit OSQuery

Überwachung der Dateiintegrität unter Linux mit OSQuery

Das grundlegende Konzept, das an der Verwendung der OSQuery -Anwendung beteiligt ist. Die Daten werden in Tabellen gespeichert, die mithilfe von Mitarbeitern abgefragt werden können Sql Syntax direkt über die Osqueryi Schale oder über die Osqueryd Dämon.

In diesem Tutorial sehen wir, wie die Anwendung installiert wird, wie Sie grundlegende Abfragen ausführen und wie Sie verwendet werden Fim (Überwachung der Dateiintegrität) als Teil Ihres Linux -Systemverwaltungsjobs.

In diesem Tutorial lernen Sie:

  • So installieren Sie OSQuery
  • So listen Sie die verfügbaren Tabellen auf
  • So führen Sie Abfragen aus der Osqueryi -Shell durch
  • So verwenden Sie den Osqueryd -Daemon, um die Dateiintegrität zu überwachen
Überwachung der Dateiintegrität unter Linux mit OSQuery

Softwareanforderungen und Konventionen verwendet

  • Grundkenntnisse über SQL -Konzepte
  • Root -Berechtigungen zur Ausführung von Verwaltungsaufgaben
Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Verteilungsunabhängige
Software Osquery
Andere
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Installation

Wir haben im Grunde zwei Optionen zu installieren Osquery: Der erste besteht darin, das entsprechende Paket für unser System von der offiziellen Website herunterzuladen. Die zweite, normalerweise bevorzugt, besteht darin, das OSQuery -Repository zu unseren Vertriebssoftwarequellen hinzuzufügen. Hier werden wir beide Optionen kurz untersuchen.





Installieren über Paket

Auf der offiziellen OSQuery -Website kann der unterschriebene heruntergeladen werden Deb Und Drehzahl Pakete oder generische Tarballs. Als erstes wählen wir die Version, die wir installieren möchten, aus, dann laden wir ein Paket herunter.

Der Rat ist, die neueste verfügbare Version (4) auszuwählen (4).1.2 Im Moment des Schreibens). Sobald das Paket heruntergeladen wurde. Um die Software beispielsweise auf einem Fedora -System zu installieren (vorausgesetzt, das Paket befindet sich in unserem aktuellen Arbeitsverzeichnis) würden wir ausführen:

$ sudo dnf install ./Osquery-4.1.2-1.Linux.x86_64.Drehzahl

Mit einem Repository

Alternative können wir das hinzufügen Drehzahl oder Deb Repository zu unserer Verteilung. Wenn wir eine RPM-basierte Verteilung verwenden, können wir die folgenden Befehle ausführen, um die Aufgabe zu erfüllen:

$ curl -l https: // pkg.Osquery.IO/RPM/GPG | sudo tee/etc/pki/rpm-gpg/rpm-gpg-key-osquery $ sudo yum-config-manager --add-repo https: // pkg.Osquery.IO/RPM/OSQuery-S3-RPM.Repo $ sudo yum-config-Manager-ABLEABLE OSQUERY-S3-UPM-REPO $ sudo yum Installieren Sie OSQuery

Mit den obigen Linux -Befehlen fügen wir die GPG -Puliktaste hinzu. Schließlich installieren wir das OSQuery -Paket. Beachte das Yum, In jüngsten Versionen von Fedora und Centos/Rhel ist nur ein symbolischer Zusammenhang zu DNF, Wenn wir also das erstere aufrufen, wird der letztere stattdessen verwendet.

Wenn wir eine debianbasierte Verteilung ausführen, können wir das Deb-Repository zu unseren Softwarequellen hinzufügen, indem wir ausführen:



$ sudo apt-key adv-Keyserver Keyserver.Ubuntu.com-recv-keys 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B $ sudo add-apt-repository 'Deb [Arch = AMD64] https: // pkg.Osquery.IO/DEB Deb Main '$ sudo apt-get Update $ sudo Apt-Get Install OSQuery

Sobald wir das Paket installiert sind, können wir uns die Basisnutzung der Software ansehen.

Grundnutzung

Mit OSQuery können wir verschiedene Aspekte eines Betriebssystems überwachen, das eine „tabellarische Abstraktion“ annimmt, wobei eine SQL -Syntax ähnlich der verwendet wird sqlite Datenbanken. Die Abfragen werden auf Tabellen ausgeführt, die verschiedene Betriebssystemaspekte wie Prozesse und Dienste abstrahieren.

Wir können die Abfragen direkt mit dem ausführen Osqueryi interaktive Schale oder wir können sie über die planen Osqueryd Dämon. Hier ist ein Beispiel für eine Abfrage, um alle verfügbaren Tabellen aufzulisten (die vollständige Liste mit der Beschreibung der Tabellen kann auch gefunden werden
online):

$ osqueryi osquery> .Tabellen => acpi_tables => APT_SOURCES => ARP_CACHE => ATOM_PACKAGES => AURSEAS => Authorized_keys => Block_Devices => carbon_black_info => carves => Chrome_extension => cpu_time => cpuid => crontab => curll => curll => curll_certification => deb_> crontab => curll => curll => curll => curll_certification => deb_> crontab => curll => curll_> curll_certification => deb_> crontab => curll => curll => curll_certifical > device_file => device_hash => device_partitions => disk_encryption => dns_resolvers => docker_container_labels => docker_container_mounts => docker_container_networks => docker_container_ports => docker_container_processes => docker_container_stats => docker_containers => docker_image_labels => docker_images => docker_info => docker_network_labels => docker_networks => docker_version => docker_volume_labels => docker_volumes => ec2_instance_metadata => ec2_instance_tags => elf_dynamic => elf_info => elf_sections => elf_segments => elf_symbols => etc_hosts => etc_protocols => etc_services => file => file_events => firefox_addons => Gruppen =>hardware_events => hash => intel_me_info => interface_addresses => interface_details => interface_ipv6 => iptables => kernel_info => kernel_integrity => kernel_modules => known_hosts => last => listening_ports => lldp_neighbors => load_average => logged_in_users => magic = > md_devices => md_drives => md_personalities => memory_array_mapped_addresses => memory_arrays => memory_device_mapped_addresses => memory_devices => memory_error_info => memory_info => memory_map => mounts => msr => npm_packages => oem_strings => opera_extensions => os_version => osquery_events => osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => pci_devices => platform_info => portage_keywords => portage_packages => portage_use => process_envs => process_events => process_file_events => process_memory_map => process_namespaces => process_open_files =>process_open_sockets => processes => prometheus_metrics => python_packages => routes => rpm_package_files => rpm_packages => selinux_events => Shadow => Shared_memmem => smartly_InfoGSho => smbiSho => smartly_Info- > syslog_events => system_controls => system_info => time => ulimit_info => Uptime => usb_devices => user_events => user_groups => user_ssh_keys => user => yara => yara_events => yum_sources


Ausführen der Osqueryi Befehl Wir geben die interaktive Shell ein. Daraus können wir unsere Fragen und Anweisungen ausstellen. Hier ist ein weiteres Beispiel für eine Abfrage, diesmal, um alle laufenden Prozesse aufzulisten PID Und Name. Die Abfrage wird auf der durchgeführt Verfahren Tabelle (die Ausgabe der Abfrage wurde aus Gründen der Bequemlichkeit abgeschnitten):

OSQuery> PID auswählen, Name aus Prozessen; +-------+--------------------------------+| PID | Name | +-------+--------------------------------+| 1 | systemd | | 10 | rcu_Sching | | 10333 | KWERKER/U16: 5-EVENTS_UNBOART | | 10336 | KWERKER/2: 0-Events | | 11 | Migration/0 | | 11002 | KWERKER/U16: 1-KCRYPTD/253: 0 | | 11165 | KWERKER/1: 1-Events | | 11200 | KWERKER/1: 3-EVENTS | | 11227 | Bash | | 11368 | Osqueryi | | 11381 | KWERKER/0: 0-Events | | 11395 | Webinhalt | | 11437 | KWERKER/0: 2-Events | | 11461 | KWERKER/3: 2-EVENTS_POWER_EFITIENT | | 11508 | KWERKER/2: 2 | | 11509 | KWERKER/0: 1-Events | | 11510 | KWERKER/U16: 2-KCRYPTD/253: 0 | | 11530 | Bash | […] | +-------+------------------------------------+ 
Kopieren

Es ist sogar möglich, Abfragen an zusammengefügten Tischen mit dem durchzuführen VERBINDEN Anweisung, genau wie wir es in relationalen Datenbanken tun. Im folgenden Beispiel führen wir eine Anfrage an der durch Prozesse Tabelle, zusammen mit der Benutzer eins über die uid Spalte:

OSQuery> Prozesse auswählen.PID, Prozesse.Name, Benutzer.Benutzername aus Prozessen verbinden Benutzer zu Prozessen.UID = Benutzer.uid; +-------+-------------------------------+--------- ----------+ | PID | Name | Benutzername | +-------+-------------------------------+--------- ----------+ | 1 | systemd | Wurzel | | 10 | rcu_Sching | Wurzel | | 11 | Migration/0 | Wurzel | | 11227 | Bash | EGDOC | | 11368 | Osqueryi | EGDOC | | 13 | CPUHP/0 | Wurzel | | 14 | CPUHP/1 | Wurzel | | 143 | Kintegrityd | Wurzel | | 144 | kblockd | Wurzel | | 145 | BLKCG_PUNT_BIO | Wurzel | | 146 | tpm_dev_wq | Wurzel | | 147 | ata_sff | Wurzel | […] | 9130 | Webinhalt | EGDOC | | 9298 | Webinhalt | EGDOC | | 9463 | gvfsd-metadata | EGDOC | | 9497 | GVFSD-Network | EGDOC | | 9518 | GVFSD-DNSSD | EGDOC | +-------+-------------------------------+------------------+ 
Kopieren

Überwachung der Dateiintegrität (FIM)

Bis jetzt haben wir benutzt Osquery über die interaktive Shell: Osqueryi. Benutzen Fim (Überwachung der Dateiintegrität), wir möchten die verwenden Osqueryd Dämon stattdessen. Über die Konfigurationsdatei geben wir eine Liste der von uns überwachen wir überwachten Dateien an. Ereignisse wie Attributänderungen mit den angegebenen Dateien und Verzeichnissen werden in der aufgezeichnet Datei_Events Tisch. Der Daemon führt nach einem bestimmten Zeitintervall eine Abfrage in dieser Tabelle aus und benachrichtigt in den Protokollen, wenn neue Datensätze gefunden werden. Sehen wir uns ein Konfigurationsbeispiel an.

Konfigurationsaufbau

Die Hauptkonfigurationsdatei für OSQuery ist /etc/osquery/osquery.Conf. Die Datei existiert nicht standardmäßig, daher müssen wir sie erstellen. Die Konfiguration wird in angegeben JSON Format. Angenommen, wir möchten alle Dateien und Verzeichnisse unter überwachen /usw; So konfigurieren wir die Anwendung:

"Optionen": "disable_events": "false", "Zeitplan": "File_Events": "Query": "Select * aus File_Events;", "Interval": 300, "Datei_Paths":  "etc": ["/etc/%%"],,, 
Kopieren

Lassen Sie uns die obige Konfiguration analysieren. Erstens in der Optionen Abschnitt, wir setzen deaktivieren_events Zu "FALSCH", Um Dateiereignisse zu aktivieren.

Danach haben wir das geschaffen Zeitplan Abschnitt: In diesem Abschnitt können wir verschiedene genannte geplante Abfragen beschreiben und erstellen. In unserem Fall haben wir eine Abfrage erstellt, die alle Spalten aus dem auswählt Datei_Events Tabelle, die alle ausgeführt werden soll 300 Sekunden (5 Minuten).

Nach der Planung der Abfrage haben wir die erstellt Datei_Paths Abschnitt, in dem wir die zu überwachenden Dateien angegeben haben. In diesem Abschnitt stellt jeder Schlüssel den Namen eines zu überwachenden Dateien dar (eine Kategorie im OSQuery -Jargon). In diesem Fall bezieht sich auf die Schlüsselkompetenz auf eine Liste mit nur einem Eintrag, /usw/%%.

Was zum % Symbol steht für? Wenn Sie Dateipfade angeben, können wir Standard verwenden (Standard*) oder SQL (%) Platzhalter. Wenn eine einzelne Wildcard bereitgestellt wird, wählt sie alle Dateien und Verzeichnisse aus, die auf der angegebenen Ebene vorhanden sind. Wenn eine doppelte Wildcard bereitgestellt wird, wird alle Dateien und Ordner rekursiv ausgewählt. Zum Beispiel die /usw/% Der Ausdruck entspricht allen Dateien und Ordnern eine Ebene unter /usw, während /usw/%% entspricht allen Dateien und Ordnern unter /usw rekursiv.

Wenn wir müssen, können wir auch bestimmte Dateien von dem von uns bereitgestellten Pfad ausschließen, indem wir die ausschließen_Paths Abschnitt in der Konfigurationsdatei. Im Abschnitt können wir nur in der definierten Kategorien verweisen Datei_Paths Abschnitt ("etc" in diesem Fall). Wir geben die Liste der ausgeschlossenen Dateien an:

 "exclude_paths": "etc": ["/etc/aliase"]
Kopieren

Nur als Beispiel haben wir das ausgeschlossen /etc/aliase Datei aus der Liste. So sieht unsere endgültige Konfiguration aus:

"Optionen": "disable_events": "false", "Zeitplan": "File_Events": "Query": "Select * aus File_Events;", "Intervall": 20, "Datei_Paths":  "usw.": ["/etc/%%"], "exklued_paths": "etc": ["/etc/aliase"]
Kopieren

Den Daemon starten

Mit unserer Konfiguration können wir das starten Osqueryd Dämon:

$ sudo systemctl starten osqueryd

Um den Daemon automatisch beim Boot zu starten, müssen wir ausführen:

$ sudo systemctl aktivieren osqueyd

Sobald der Dämon ausgeführt wird, können wir unsere Konfiguration überprüfen. Genau zum Beispiel werden wir die Berechtigungen der Berechtigungen ändern /etc/fstab Datei, sie von ändern 644 Zu 600:

$ sudo chmod 600 /etc /fstab

Wir können nun überprüfen, ob die Änderung in die Datei aufgezeichnet wurde, indem Sie das lesen /var/log/osquery/osqueryd.Ergebnisse.Protokoll Datei. Hier ist die letzte Zeile der Datei (verschönert):



"Name": "File_Events", "HostIdentifier": "Fingolfin", "Calendartime": "Mo 30. Dezember 19:57:31 2019 UTC", "Unixtime": 1577735851, "Epoch": "Counter": 0, "lognumericsAsnumbers": Falsch, "Spalten": "Aktion": "Attribute_Modified", "Atime": "1577735683", "Kategorie": "usw.", "CTime": "1577735841", "GID": "GID": ":": " 0 "," Hashed ":" 0 "," Inode ":" 262147 "," Md5 ":" "," Modus ":" 0600 "," Mtime ":" 1577371335 "," SHA1 ":" ",", ",", ",", ",", ",", ",", ",", ",", ",", ",", "," SHA256 ":" "," Größe ":" 742 "," target_path ":"/etc/fstab "," Zeit ":" 1577735841 "," transaction_id ":" 0 "," uid ":" 0 ",, "Aktion": "hinzugefügt"
Kopieren

Im obigen Protokoll können wir deutlich sehen, dass eine Attribute_Modified Aktion (Zeile 10) trat auf dem auf Zielpfad "/Etc/fstab" (Zeile 23), der Teil des "etc" ist Kategorie (Zeile 12). Es ist wichtig zu bemerken, dass, wenn wir das abfragen Datei_Events Tisch aus dem Osqueryi Shell, wir werden keine Zeilen sehen, da die Osqueryd Dämon, und Osqueryi Nicht kommunizieren.

Schlussfolgerungen

In diesem Tutorial haben wir die grundlegenden Konzepte gesehen Osquery Anwendung, die verschiedene Betriebssystemkonzepte mit tabellarischen Daten abstrahiert. Wir können mit der SQL -Syntax abfragen. Wir haben gesehen Osqueryi Shell und schließlich, wie die Dateiüberwachung mithilfe der Dateiüberwachung eingerichtet wird Osqueryd Dämon. Wir haben gerade die Oberfläche dessen, was die Anwendung tun kann, kratzt. Wie immer lautet der Rat, sich die Projektdokumentation für ein ausführlicheres Wissen anzusehen.

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Bestes Systemüberwachungstool für Linux
  • Ubuntu 20.04 Systemüberwachung mit Conky -Widgets
  • Ubuntu 22.04 Systemüberwachung mit Conky -Widgets
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Linux -Leistungsoptimierung: Tools und Techniken
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Dinge zu installieren auf Ubuntu 22.04
  • So grep für Text in Bash -Skripten korrekt Grep
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten