Jak monitorować integralność plików w systemie Linux za pomocą OsQuery

Jak monitorować integralność plików w systemie Linux za pomocą OsQuery

Podstawową koncepcją związaną z użyciem aplikacji Osquery jest „abstrakcja tabelaryczna” wielu aspektów systemu operacyjnego, takich jak procesy, użytkownicy itp. Dane są przechowywane w tabelach, które można zapytać za pomocą SQL składnia, bezpośrednio przez Osqueryi Shell lub za pośrednictwem Osqueryd Demon.

W tym samouczku zobaczymy, jak zainstalować aplikację, jak uruchomić podstawowe zapytania i jak używać Fim (Monitorowanie integralności plików) w ramach zadania administracji systemu Linux.

W tym samouczku nauczysz się:

  • Jak zainstalować OsQuery
  • Jak wymienić dostępne tabele
  • Jak wykonywać zapytania ze skorupy Osqueryi
  • Jak używać demona Osqueryd do monitorowania integralności plików
Jak monitorować integralność plików w systemie Linux za pomocą OsQuery

Zastosowane wymagania i konwencje oprogramowania

  • Podstawowa znajomość koncepcji SQL
  • Uprawnienia do wykonywania zadań administracyjnych
Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu
Oprogramowanie Osquery
Inny
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Instalacja

Mamy w zasadzie dwie opcje instalacji Osquery: Pierwszy polega na pobraniu odpowiedniego pakietu dla naszego systemu z oficjalnej strony internetowej; Drugim, zwykle preferowanym, jest dodanie repozytorium Osquery do naszych źródeł oprogramowania dystrybucyjnego. Tutaj krótko zbadamy obie opcje.





Instalowanie za pośrednictwem pakietu

Z oficjalnej strony internetowej Osquery można pobrać podpisanie Deb I RPM pakiety lub bardziej ogólne tarball. Jako pierwszą rzecz wybieramy wersję, którą chcemy zainstalować, a następnie pobieramy pakiet.

Rada polega na wybraniu najnowszej dostępnej wersji (4.1.2 W chwili pisania). Po pobraniu pakietu możemy go zainstalować za pomocą naszego menedżera pakietów dystrybucyjnych. Na przykład, aby zainstalować oprogramowanie w systemie Fedora (zakładając, że pakiet znajduje się w naszym bieżącym katalogu roboczym), uruchomimy:

$ sudo dnf instalacja ./Osquery-4.1.2-1.Linux.x86_64.RPM

Za pomocą repozytorium

Jako alternatywę możemy dodać RPM Lub Deb Repozytorium do naszej dystrybucji. Jeśli używamy dystrybucji opartej na RPM, możemy uruchomić następujące polecenia, aby wykonać zadanie:

$ curl -l https: // pkg.Osquery.IO/RPM/GPG | sudo tee/etc/pKI/rpm-gpg/rpm-gpg-key-oksquery $ sudo yum-config-manager --add-repo https: // pkg.Osquery.IO/RPM/OSQUERY-S3-RPM.Repo $ sudo yum-config-manager-enable OsQuery-S3-Rpm-Repo $ sudo yum instaluj osquery

Z powyższymi poleceniami Linux dodajemy klawisz PULIC GPG używany do podpisywania pakietów do naszego systemu, a następnie dodajemy repozytorium. Na koniec instalujemy pakiet OsQuery. Zauważ, że mniam, W ostatnich wersjach Fedory i Centos/Rhel to tylko symboliczny link do DNF, Więc kiedy przywołujemy się do tego pierwszego, ten drugi jest używany.

Jeśli zamiast tego uruchamiamy dystrybucję oparte na debian, możemy dodać repozytorium Deb do naszego źródeł oprogramowania, uruchamiając:



$ sudo apt-key adv-keyserver Keyserver.Ubuntu.COM--RECV-KEYS 1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B $ SUDO add-Aapt-Repository 'Deb [Arch = AMD64] https: // pkg.Osquery.IO/Deb Deb Main '$ sudo apt-get Aktualizacja $ sudo apt-get instal instaluj osquery

Po zainstalowaniu pakietu możemy spojrzeć na podstawowe użycie oprogramowania.

Podstawowe użycie

OsQuery pozwala nam monitorować różne aspekty systemu operacyjnego przyjmującego „abstrakcję tabelaryczną”, używając składni SQL podobnej do tej używanej sqlite bazy danych. Zapytania są uruchamiane na tabelach, które abstrakcji w różnych aspektach systemu operacyjnego, takie jak procesy i usługi.

Możemy uruchomić zapytania bezpośrednio za pomocą Osqueryi interaktywna powłoka lub możemy je zaplanować za pośrednictwem Osqueryd Demon. Oto przykład zapytania, aby wymienić wszystkie dostępne tabele (można również znaleźć pełną listę z opisem tabel
online):

$ Osqueryi Osquery> .TABLE => ACPI_TABLESS => apt_sources => arp_cache => atom_packages => augeas => autoryzowane_keys => block_devices => calbon_black_info => CARVES => Chrome_Extensions => cpu_time => cpuid => crontab => curl => curl_Certificate => deb_pAChages => cpu_time => cpuid = > 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_Volulumes => EC2_INstance_Metadata => EC2_INSTANCE_TAGS => ELF_DINAMIC => ELF_INFO => ELF_SECTIONS => ELF_SEGMESS => ELF_SYMBOLS => ETC_HOSTS => ETC_POTOCOLS grupy =>sprzęt_events => hash => intel_me_info => interfejs_addresses => interface_details => interface_ipv6 => iptables => kernel_info => kernel_integrity => kernel_modules => znany_hosts => lasts> słuchanie_ports => llDP_NEAGHBORS => LIDH_IL_AVER => loged_In_avers => > md_devices => md_drives => md_personlitościs => pamięć_array_mapped_addresses => pamięć_arrays => memory_device_mapped_adresses => pamięć_devices => memory_error_info => memory_info => pamięć_map => wierzchowca => msr => npm_packges => oem_strings => operonionsIons => operenghions => OperenionsIons => OperenSions => OperenionsIons => OsQuery_Extensions => OsQuery_flags => OsQuery_info => OsQuery_packs => OsQuery_registry => OsQuery_schedule => pci_devices => Platform_info => portage_keywords => portage_packages => portage_use => proces_envs => Process_MeMe_Mapent => Proces_nameM_MAPSeMeS_MAPSeMeS_MAPSE_MAPSEMAPS => PROCES_MEME_MAPES proces_open_files =>proces_open_sockets => procesy => prometheus_metrics => Python_packages => trasy => rpm_pack_pack_piles => rpm_packages => selinux_events => shadow => shared_memory => Shell_History => Smart_Drive_info => Smbios_Tables => SOCOW => Sudhonions => Sudhonions => Sudhonions => sshonions = SSHONFONES > syslog_events => System_controls => System_info => time => UliMit_info => uptime => usb_devices => user_events => user_groups => user_ssh_keys => Users => yara => yara_events => yum_sources


Uruchamianie Osqueryi polecenie Wprowadzamy interaktywną powłokę; Z tego możemy wydać nasze zapytania i instrukcje. Oto kolejny przykład zapytania, tym razem, aby wymienić wszystkie uruchomione procesy pid I nazwa. Zapytanie jest wykonywane na proces Tabela (wyjście zapytania zostało skrócone dla wygody):

OsQuery> Wybierz PID, nazwa z procesów; +-------+------------------------------------+| PID | Nazwa | +-------+------------------------------------+| 1 | Systemd | |. 10 | rcu_sched | |. 10333 | Kworker/U16: 5-Events_unbound | |. 10336 | Kworker/2: 0-wydarzenia | |. 11 | Migracja/0 | |. 11002 | Kworker/U16: 1-kcryptd/253: 0 | |. 11165 | Kracker/1: 1-wydarzenia | |. 11200 | Kworker/1: 3-wydarzenia | |. 11227 | Bash | |. 11368 | Osqueryi | |. 11381 | Kworker/0: 0-wydarzenia | |. 11395 | Treść internetowa | |. 11437 | Kworker/0: 2 wydarzenia | |. 11461 | Kworker/3: 2-Events_Power_efficit | |. 11508 | Kworker/2: 2 | |. 11509 | Kworker/0: 1-wydarzenia | |. 11510 | Kworker/U16: 2-kcryptd/253: 0 | |. 11530 | Bash | […] | +-------+------------------------------------+ 
Kopiuj

Możliwe jest nawet wykonywanie zapytań na połączonych tabelach za pomocą DOŁĄCZYĆ Instrukcja, tak jak używamy w relacyjnych bazach danych. W poniższym przykładzie wykonujemy zapytanie na procesy stół, połączony z użytkownicy jeden przez UID kolumna:

OsQuery> Wybierz procesy.PID, procesy.Nazwa, użytkownicy.Nazwa użytkownika z procesów dołącz do użytkowników w procesach.UID = Użytkownicy.uid; +-------+-------------------------------+--------- ---------+ | PID | Nazwa | Nazwa użytkownika | +-------+-------------------------------+--------- ---------+ | 1 | Systemd | root | |. 10 | rcu_sched | root | |. 11 | Migracja/0 | root | |. 11227 | Bash | EGDOC | |. 11368 | Osqueryi | EGDOC | |. 13 | CPUHP/0 | root | |. 14 | CPUHP/1 | root | |. 143 | KINTEGRITYD | root | |. 144 | kblockd | root | |. 145 | BLKCG_PUNT_BIO | root | |. 146 | tpm_dev_wq | root | |. 147 | ata_sff | root | […] | 9130 | Treść internetowa | EGDOC | |. 9298 | Treść internetowa | EGDOC | |. 9463 | GVFSD-Metadata | EGDOC | |. 9497 | GVFSD-Network | EGDOC | |. 9518 | GVFSD-DNSSD | EGDOC | +-------+-------------------------------+------------------+ 
Kopiuj

Monitorowanie integralności plików (FIM)

Do tej pory użyliśmy Osquery przez interaktywną powłokę: Osqueryi. Używać Fim (Monitorowanie integralności plików), chcemy użyć Osqueryd zamiast tego demon. Za pomocą pliku konfiguracyjnego podajemy listę plików, które chcemy monitorować. Zdarzenia takie jak zmiany atrybutów obejmujące określone pliki i katalogi są rejestrowane w plik_events tabela. Demon uruchamia zapytanie w tej tabeli po określonym przedziale czasu i powiadomić w dziennikach, gdy znaleziono nowe rekordy. Zobaczmy przykład konfiguracji.

Konfiguracja konfiguracji

Główny plik konfiguracyjny dla Osquery to /itp./Osquery/Osquery.conf. Plik nie istnieje domyślnie, więc musimy go utworzyć. Konfiguracja jest dostarczana w JSON format. Załóżmy, że chcemy monitorować wszystkie pliki i katalogi poniżej /itp; Oto jak skonfigurujemy aplikację:

„Options”: „Disable_Events”: „false”, „harmonogram”: „File_events”: „Query”: „Wybierz * From File_Events;”, „Interal”: 300, „File_paths”:  "itd itd/%%" ], ,  
Kopiuj

Przeanalizujmy powyższą konfigurację. Przede wszystkim w opcje Sekcja, ustawiamy disable_events Do "FAŁSZ", Aby włączyć zdarzenia plików.

Następnie stworzyliśmy harmonogram Sekcja: W tej sekcji możemy opisać i tworzyć różne wymienione zapisywanie zapytań. W naszym przypadku utworzyliśmy zapytanie, które wybiera wszystkie kolumny z plik_events Tabela, która ma być wykonana w każdym 300 sekundy (5 minut).

Po zaplanowaniu zapytania stworzyliśmy FILE_PATHS Sekcja, w której określono pliki do monitorowania. W tej sekcji każdy klucz reprezentuje nazwę zestawu plików do monitorowania (kategoria w żargonie Osquery). W takim przypadku kluczowe „etc” odnosi się do listy z tylko jednym wpisem, /itp/%%.

Co % Symbol oznacza? Podczas określania ścieżek plików możemy użyć standardu (*) lub SQL (%) Wildcards. Jeśli podano pojedynczą kartę wieloznaczną, wybiera wszystkie pliki i katalogi istniejące na określonym poziomie. Jeśli podana jest podwójna karta wieloznaczna, wybiera wszystkie pliki i foldery rekurencyjnie. Na przykład /itp/% Wyrażenie pasuje do wszystkich plików i folderów jeden poziom poniżej /itp, chwila /itp/%% Dopasowuje wszystkie pliki i foldery poniżej /itp rekurencyjnie.

Jeśli to możliwe, możemy również wykluczyć określone pliki ze ścieżki, którą dostarczyliśmy, za pomocą exclude_paths sekcja w pliku konfiguracyjnym. W sekcji możemy odwoływać się tylko do kategorii zdefiniowanych w FILE_PATHS sekcja („itp.” W tym przypadku). Podajemy listę plików, które należy wykluczyć:

 „Exclude_paths”: "etc": ["/etc/aliases"]
Kopiuj

Jako przykład, wykluczyliśmy /etc/aliases Plik z listy. Oto jak wygląda nasza ostatnia konfiguracja:

„Options”: „Disable_Events”: „false”, „harmonogram”: „File_events”: „Query”: „Wybierz * From File_Events;”, „Interal”: 20, „File_Paths”:  „ETC”: [”/etc/%%”], „exclude_paths”: „itp”: ["/etc/aliases"]
Kopiuj

Rozpoczynając demona

Dzięki naszej konfiguracji możemy rozpocząć Osqueryd Daemon:

$ sudo systemctl start osqueryd

Aby demon uruchomi się automatycznie przy rozruchu, musimy uruchomić:

$ sudo systemCtl włącza Osqueyd

Po uruchomieniu demona możemy sprawdzić naszą konfigurację. Jako przykład, zmodyfikujemy uprawnienia /etc/fstab plik, zmieniając je z 644 Do 600:

$ sudo chmod 600 /etc /fstab

Możemy teraz sprawdzić, czy zmiana pliku została zapisana, czytając /var/log/osquery/osqueryd.wyniki.dziennik plik. Oto ostatni wiersz pliku (upiększony):



„Nazwa”: „File_events”, „hostidentifier”: „Fingolfin”, „Calendartime”: „Mon 30 grudnia 19:57:31 2019 UTC”, „Unixtime”: 1577735851, „Epoch”: 0, „Counter”: 0, „lognumericsAsnumbers”: false, „kolumny”: „Action”: „atrybut_modified”, „Atime”: „1577735683”, „kategoria”: „ETC”, „CTime”: „15777778841”, „Gid”: ” 0 ",„ Hashed ”:„ 0 ”,„ INODE ”:„ 262147 ”,„ MD5 ”:„ ”,„ Mode ”:„ 0600 ”,„ MTime ”:„ 1577371335 ”,„ SHA1 ”:„ ”," SHA256 „:”, „Rozmiar”: „742”, „Target_path”: „/etc/fstab”, „czas”: „1577735841”, „transakcja_id”: „0”, „uid”: „0”, „Action”: „Dodano”
Kopiuj

W powyższym dzienniku możemy wyraźnie zobaczyć, że Atrybuty_modified Działanie (wiersz 10) miało miejsce na Ścieżka docelowa „/Etc/fstab” (wiersz 23), który jest częścią „etc” Kategoria (Wiersz 12). Ważne jest, aby zauważyć, że jeśli zapytamy plik_events stół z Osqueryi Shell, nie zobaczymy rzędów, ponieważ Osqueryd demon i Osqueryi Nie komunikuj się.

Wnioski

W tym samouczku widzieliśmy podstawowe pojęcia związane z użyciem Osquery Aplikacja, która abstrahuje różne koncepcje systemu operacyjnego za pomocą danych tabelarycznych, możemy zapytać za pomocą składni SQL. Widzieliśmy, jak zainstalować aplikację, jak wykonywać podstawowe zapytania za pomocą Osqueryi i wreszcie sposób konfigurowania monitorowania plików za pomocą Osqueryd Demon. Właśnie porysowaliśmy powierzchnię tego, co może zrobić aplikacja; Jak zawsze rada polega na przyjrzeniu dokumentacji projektu w celu uzyskania dogłębnej wiedzy.

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Najlepsze narzędzie do monitorowania systemu dla Linux
  • Ubuntu 20.04 Monitorowanie systemu za pomocą widżetów study
  • Ubuntu 22.04 Monitorowanie systemu za pomocą widżetów study
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Optymalizacja wydajności Linux: Narzędzia i techniki
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Rzeczy do zainstalowania na Ubuntu 22.04
  • Jak poprawnie grep do tekstu w skryptach bash
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze