Jak monitorować integralność plików w systemie Linux za pomocą OsQuery
- 4478
- 180
- Natan Cholewa
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
Zastosowane wymagania i konwencje oprogramowania
- Podstawowa znajomość koncepcji SQL
- Uprawnienia do wykonywania zadań administracyjnych
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