Cara Memantau Integriti Fail di Linux Menggunakan OsQuery

Cara Memantau Integriti Fail di Linux Menggunakan OsQuery

Konsep asas yang terlibat dengan penggunaan aplikasi OsQuery adalah "abstraksi tabular" dari banyak aspek sistem operasi, seperti proses, pengguna, dan lain -lain. Data disimpan dalam jadual yang boleh dipersoalkan menggunakan SQL sintaks, secara langsung melalui Osqueryi shell, atau melalui Osqueryd Daemon.

Dalam tutorial ini, kita akan melihat cara memasang aplikasi, cara menjalankan pertanyaan asas, dan cara menggunakan Fim (Pemantauan Integriti Fail) Sebagai sebahagian daripada pekerjaan Pentadbiran Sistem Linux anda.

Dalam tutorial ini anda akan belajar:

  • Cara memasang osquery
  • Cara menyenaraikan jadual yang ada
  • Cara melakukan pertanyaan dari Osqueryi Shell
  • Cara Menggunakan Daemon Osqueryd untuk Memantau Integriti Fail
Cara Memantau Integriti Fail di Linux Menggunakan OsQuery

Keperluan perisian dan konvensyen yang digunakan

  • Pengetahuan asas konsep SQL
  • Kebenaran akar untuk melaksanakan tugas pentadbiran
Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran-bebas
Perisian Osquery
Yang lain
Konvensyen # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak

Pemasangan

Kami pada dasarnya mempunyai dua pilihan untuk dipasang Osquery: Yang pertama terdiri daripada memuat turun pakej yang sesuai untuk sistem kami dari laman web rasmi; Yang kedua, biasanya disukai, adalah untuk menambah repositori Osquery ke sumber perisian pengedaran kami. Di sini kita akan meneroka kedua -dua pilihan secara ringkas.





Memasang melalui pakej

Dari laman web rasmi OsQuery mungkin memuat turun yang ditandatangani Deb dan rpm pakej, atau lebih banyak tarball generik. Sebagai perkara pertama kami memilih versi yang ingin kami pasang, maka kami memuat turun pakej.

Nasihatnya adalah untuk memilih versi terkini yang tersedia (4.1.2 Pada masa penulisan). Setelah pakej dimuat turun, kami dapat memasangnya menggunakan Pengurus Pakej Pengedaran kami. Sebagai contoh, untuk memasang perisian pada sistem fedora (dengan asumsi pakej terletak di direktori kerja semasa kami), kami akan menjalankan:

$ sudo DNF memasang ./Osquery-4.1.2-1.Linux.x86_64.rpm

Menggunakan repositori

Sebagai alternatif kita dapat menambah rpm atau Deb repositori dengan pengedaran kami. Jika kita menggunakan pengedaran berasaskan RPM, kita boleh menjalankan perintah berikut untuk mencapai tugas:

$ curl -l https: // pkg.Osquery.IO/RPM/GPG | sudo tee/etc/pki/rpm-gpg/rpm-gpg-kunci-osquery $ sudo yum-config-manager --add-repo https: // pkg.Osquery.IO/RPM/OSQUERY-S3-RPM.repo $ sudo yum-config-manager-osquery-s3-rpm-repo $ sudo yum pemasangan osquery

Dengan arahan Linux di atas, kami menambah kekunci pulik GPG yang digunakan untuk menandatangani pakej ke sistem kami, maka kami menambah repositori. Akhirnya, kami memasang pakej OsQuery. Perhatikan bahawa yum, Dalam versi terkini fedora dan centos/rhel hanyalah pautan simbolik ke DNF, Oleh itu, apabila kita memohon bekas yang terakhir digunakan.

Jika kita menjalankan pengedaran berasaskan Debian, sebaliknya, kita boleh menambah repositori Deb ke sumber perisian kita dengan menjalankan:



$ sudo apt-key adv --keyserver Keyserver.Ubuntu.com--recv-keys 1484120AC4E9F8A1A577AEEEEE97A80C63C9D8B80B $ SUDO ADD-APPOSITION 'DEB [ARCH = AMD64] https: // pkg.Osquery.io/deb deb main '$ sudo apt-get update $ sudo apt-get osquery

Sebaik sahaja kita pakej dipasang, kita dapat melihat penggunaan asas perisian.

Penggunaan asas

OsQuery membolehkan kami memantau pelbagai aspek sistem operasi yang mengguna pakai "abstraksi tabular", menggunakan sintaks SQL yang serupa dengan yang digunakan SQLITE pangkalan data. Pertanyaan dijalankan di atas jadual yang menafsirkan pelbagai aspek sistem operasi, seperti proses dan perkhidmatan.

Kami boleh menjalankan pertanyaan secara langsung menggunakan Osqueryi shell interaktif, atau kami boleh menjadualkannya melalui Osqueryd Daemon. Berikut adalah contoh pertanyaan untuk menyenaraikan semua jadual yang tersedia (senarai lengkap dengan keterangan jadual juga boleh didapati
dalam talian):

$ osqueryi osquery> .tables => acpi_tables => apt_sources => arp_cache => atom_packages => augeas => authorized_keys => block_devices => carbon_black_info => carves => chrome_extensions => cpu_time => cpuid => crontab => curl => curl_certificate => deb_packages = > 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 => dockper_volUME_labels => dockper_volumes => ec2_insTance_metAdata => ec2_instance_tags => elf_dynamic => elf_info => elf_seGment => elf_ss => kumpulan =>perkakasan_events => hash => intel_me_info => interface_addresses => interface_details => interface_ipv6 => iptables => kernel_info => kernel_integrity => kernel_modules => > md_devices => md_drives => md_personalities => memory_array_mapped_addresses => memory_arrays => memory_device_mapped_addresses => memory_devices => memory_error_info => memory_info => memorss => msrages => msrages => msrages => msrages => msrages => msrages => msrages => msrages => msrages => msrages => msrages => msres => osquery_extensions => osquery_flags => osquery_info => osquery_packs => osquery_registry => osquery_schedule => pci_devices => platform_info => portag process_open_files =>process_open_sockets => proses => prometheus_metrics => python_packages => routes => rpm_package_files => rpm_packages => selinux_events => shared_memory => Shell_history => smsho_di > syslog_events => system_controls => system_info => time => ulimit_info => uptime => usb_devices => user_events => user_groups => user_ssh_keys => yara => yara_events => yum_sources


Menjalankan Osqueryi Perintah kita memasuki shell interaktif; Dari situ, kita boleh mengeluarkan pertanyaan dan arahan kita. Berikut adalah satu lagi contoh pertanyaan, kali ini untuk menyenaraikan semua proses yang sedang berjalan pid dan nama. Pertanyaan dilakukan di proses Jadual (output pertanyaan telah dipotong untuk kemudahan):

Osquery> pilih PID, nama dari proses; +-------+------------------------------------+| PID | Nama | +-------+------------------------------------+| 1 | Systemd | | 10 | RCU_SCHED | | 10333 | KWorker/U16: 5-Events_Unbound | | 10336 | KWorker/2: 0-Events | | 11 | Migrasi/0 | | 11002 | KWORKER/U16: 1-KCRYPTD/253: 0 | | 11165 | KWorker/1: 1-Events | | 11200 | KWorker/1: 3-Events | | 11227 | Bash | | 11368 | Osqueryi | | 11381 | KWorker/0: 0-Events | | 11395 | Kandungan Web | | 11437 | KWorker/0: 2-Events | | 11461 | KWorker/3: 2-Events_power_efficient | | 11508 | KWorker/2: 2 | | 11509 | KWorker/0: 1-Events | | 11510 | KWORKER/U16: 2-KCRYPTD/253: 0 | | 11530 | Bash | [...] | | +-------+------------------------------------+ 
Salinan

Malah mungkin untuk melakukan pertanyaan pada jadual bergabung dengan menggunakan Menyertai pernyataan, seperti yang kita gunakan dalam pangkalan data hubungan. Dalam contoh di bawah, kami melakukan pertanyaan di proses jadual, bergabung dengan pengguna satu melalui uid kolum:

osquery> Pilih proses.PID, proses.nama, pengguna.Nama pengguna dari proses menyertai pengguna dalam proses.uid = pengguna.uid; +-------+-------------------------------+--------- ---------+ | PID | Nama | Nama pengguna | +-------+-------------------------------+--------- ---------+ | 1 | Systemd | akar | | 10 | RCU_SCHED | akar | | 11 | Migrasi/0 | akar | | 11227 | Bash | Egdoc | | 11368 | Osqueryi | Egdoc | | 13 | CPUHP/0 | akar | | 14 | CPUHP/1 | akar | | 143 | Kintegrityd | akar | | 144 | Kblockd | akar | | 145 | blkcg_punt_bio | akar | | 146 | tpm_dev_wq | akar | | 147 | ATA_SFF | akar | [...] | | 9130 | Kandungan Web | Egdoc | | 9298 | Kandungan Web | Egdoc | | 9463 | gvfsd-metadata | Egdoc | | 9497 | GVFSD-NETWORK | Egdoc | | 9518 | GVFSD-DNSSD | Egdoc | +-------+-------------------------------+------------------+ 
Salinan

Pemantauan Integriti Fail (FIM)

Sehingga kini kami menggunakan Osquery melalui shell interaktif: Osqueryi. Untuk menggunakan Fim (Pemantauan Integriti Fail), kami mahu menggunakan Osqueryd Daemon sebaliknya. Melalui fail konfigurasi, kami menyediakan senarai fail yang ingin kami pantau. Peristiwa seperti perubahan atribut yang melibatkan fail dan direktori yang ditentukan, dicatatkan di file_events Jadual. Daemon menjalankan pertanyaan pada jadual ini selepas selang waktu yang ditentukan dan memberitahu dalam log apabila rekod baru dijumpai. Mari lihat contoh konfigurasi.

Persediaan Konfigurasi

Fail konfigurasi utama untuk OsQuery adalah /etc/osquery/osquery.Conf. Fail tidak wujud secara lalai, jadi kita mesti menciptanya. Konfigurasi disediakan di Json format. Katakan kami ingin memantau semua fail dan direktori di bawah /dan lain-lain; Inilah cara kami mengkonfigurasi permohonan:

"options": "disable_events": "false", "jadual": "file_events": "query": "pilih * dari file_events;", "interval": 300, "file_paths":  "dll": ["/etc/%%"],, 
Salinan

Mari analisis konfigurasi di atas. Pertama sekali, di pilihan seksyen, kami menetapkan disable_events ke "salah", Untuk membolehkan acara fail.

Selepas itu, kami mencipta Jadual Bahagian: Di dalam bahagian ini kita dapat menerangkan dan membuat pelbagai pertanyaan yang dijadualkan. Dalam kes kami, kami membuat pertanyaan yang memilih semua lajur dari file_events jadual, yang dimaksudkan untuk dilaksanakan setiap 300 detik (5 minit).

Setelah menjadualkan pertanyaan, kami membuat file_paths seksyen, di mana kami menentukan fail yang akan dipantau. Dalam bahagian ini, setiap kunci mewakili nama satu set fail yang akan dipantau (kategori dalam jargon Osquery). Dalam kes ini, "dll" utama merujuk senarai dengan hanya satu entri, /dan lain-lain/%%.

Apa yang % simbol bermaksud? Semasa menentukan laluan fail kita boleh menggunakan standard (*) atau sql (%) Wildcards. Sekiranya kad liar tunggal disediakan, ia memilih semua fail dan direktori yang ada di peringkat yang ditentukan. Sekiranya kad liar berganda disediakan ia memilih semua fail dan folder secara rekursif. Contohnya, /dan lain-lain/% ungkapan sepadan dengan semua fail dan folder satu tahap di bawah /dan lain-lain, manakala /dan lain-lain/%% Memadankan semua fail dan folder di bawah /dan lain-lain secara rekursif.

Sekiranya kita perlu, kita juga boleh mengecualikan fail tertentu dari jalan yang kami berikan, menggunakan tidak termasuk_paths bahagian dalam fail konfigurasi. Di bahagian kita hanya boleh merujuk kategori yang ditakrifkan dalam file_paths seksyen, ("dll" dalam kes ini). Kami menyediakan senarai fail yang dikecualikan:

 "Exclude_paths": "dll": ["/etc/aliases"]
Salinan

Sebagai contoh, kami mengecualikan /etc/alias fail dari senarai. Berikut adalah bagaimana konfigurasi akhir kami kelihatan seperti:

"options": "disable_events": "false", "jadual": "file_events": "query": "pilih * dari file_events;", "interval": 20, "file_paths":  "dll": ["/etc/%%"], "exclude_paths": "dll": ["/etc/aliases"]
Salinan

Memulakan Daemon

Dengan konfigurasi kami, kami boleh memulakan Osqueryd Daemon:

$ sudo Systemctl Start Osqueryd

Untuk membuat daemon bermula secara automatik di boot kita mesti menjalankan:

$ sudo systemctl enable osqueyd

Setelah Daemon berjalan, kami dapat menyemak kerja konfigurasi kami. Sebagai contoh, kami akan mengubahsuai keizinan /etc/fstab fail, menukarnya dari 644 ke 600:

$ sudo chmod 600 /etc /fstab

Sekarang kita dapat mengesahkan perubahan pada fail yang telah direkodkan dengan membaca /var/log/osquery/osqueryd.hasilnya.log fail. Berikut adalah baris terakhir fail (dicantikkan):



"Nama": "File_Events", "HostIdentifier": "Fingolfin", "Calendartime": "Mon 30 Dis 19:57:31 2019 Utc", "Unixtime": 1577735851, "Epoch": 0, "Counter": 0, "LognumericsAsNumbers": False, "Columns": "Action": "Attributes_Modified", "atime": "1577735683", "Kategori": "dan lain -lain", "CTime": "1577735841", "Gid": " 0 "," Hashed ":" 0 "," inode ":" 262147 "," md5 ":" "," mod ":" 0600 "," mtime ":" 1577371335 "," Sha1 ":" " sha256 ":" "," saiz ":" 742 "," target_path ":"/etc/fstab "," masa ":" 1577735841 "," transaksi_id ":" 0 "," uid ":" 0 ". "Tindakan": "tambah"
Salinan

Dalam log di atas, kita dapat melihat dengan jelas bahawa Attributes_modified Tindakan (baris 10) berlaku di sasaran_path "/Etc/fstab" (baris 23), yang merupakan sebahagian daripada "dll" kategori (Baris 12). Penting untuk melihat bahawa jika kita menanyakan file_events Jadual dari Osqueryi shell, kita tidak akan melihat baris, kerana Osqueryd daemon, dan Osqueryi Jangan berkomunikasi.

Kesimpulan

Dalam tutorial ini kita melihat konsep asas yang terlibat dalam penggunaan Osquery Aplikasi, yang abstrak pelbagai konsep sistem operasi menggunakan data tabular yang dapat kita pertanyaan menggunakan sintaks SQL. Kami melihat cara memasang aplikasi, bagaimana untuk melakukan pertanyaan asas menggunakan Osqueryi shell, dan akhirnya cara menyediakan pemantauan fail menggunakan Osqueryd Daemon. Kami hanya menggaruk permukaan apa yang boleh dilakukan oleh aplikasi; Seperti biasa, nasihatnya adalah untuk melihat dokumentasi projek untuk pengetahuan yang lebih mendalam.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Alat Pemantauan Sistem Terbaik untuk Linux
  • Ubuntu 20.04 Pemantauan Sistem dengan Widget Conky
  • Ubuntu 22.04 Pemantauan Sistem dengan Widget Conky
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Pengoptimuman Prestasi Linux: Alat dan Teknik
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Perkara yang perlu dipasang di Ubuntu 22.04
  • Cara betul -betul mengasyikkan teks dalam skrip bash
  • Fail Konfigurasi Linux: 30 teratas yang paling penting