Cara Memantau Integriti Fail di Linux Menggunakan OsQuery
- 3682
- 396
- Mr. Ramon Runolfsson
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
Keperluan perisian dan konvensyen yang digunakan
- Pengetahuan asas konsep SQL
- Kebenaran akar untuk melaksanakan tugas pentadbiran
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