Hai Kita semua tahu dan menyukai produk untuk proses penilaian kerentanan seperti Nessus , Qualys , Max Patrol, dan segala macam OpenVAS lainnya. Salah satu tugas utama yang mereka selesaikan adalah untuk memberikan kontrol atas kerentanan versi.
Ini adalah proses yang cukup sederhana untuk membandingkan versi perangkat lunak yang diinstal dengan kisaran "tidak mengandung kerentanan yang diketahui". Nah, kemudian orang-orang yang bertanggung jawab untuk keamanan informasi, bersama dengan pengembangan dan administrator, memutuskan risiko apa yang bisa diambil dan apa yang perlu ditambal hari ini.
Ada banyak alat yang berbeda untuk menyelesaikan masalah ini, tetapi dari sudut pandang kami, semuanya memiliki satu masalah yang sama - mereka membutuhkan penyebaran yang terpisah dan menelurkan alat lain dengan akun root di infrastruktur Anda. Tetapi bagaimanapun juga, untuk tindakan sederhana seperti mengumpulkan informasi tentang paket root yang diinstal tidak diperlukan! Dan biasanya dalam infrastruktur sudah ada sistem yang dikerahkan dengan kemampuan untuk mengkonsolidasikan data, kolaborasi dan eksekusi perintah di server jauh. Oleh karena itu, kami memutuskan untuk membuat alat yang memungkinkan beberapa klik untuk menggunakan sistem pemantauan kerentanan Linux di lingkungan kami dengan sedikit perubahan pada produksi.
Apa yang digunakan di sebagian besar sistem pangan? Tentu saja pemantauan. Dan cukup sering itu adalah Zabbix . Jadi mari kita mulai dan kencangkan!
Di satu tangan Zabbix
Semuanya sederhana: sistem agen terdistribusi, dasbor untuk visualisasi, sistem akses multi-pengguna, dan melakukan tindakan sesuai dengan kriteria yang ditentukan telah dilakukan tanpa kita. Kita tidak perlu menemukan kembali roda dan melakukan semuanya dari awal.
Zabbix memiliki hak yang cukup untuk menerima informasi tentang paket, di mana harus meletakkannya juga. Tetap menggabungkannya dan mengirimkannya untuk dianalisis ke API Vulners . Dan kemudian proses pengetahuan yang diperoleh tentang kerentanan.
Tapi mari kita mulai dengan pengantar singkat tentang apa yang bisa dilakukan Zabbix dan apa yang perlu kita lakukan.
Agen Zabbix diinstal pada server dan memungkinkan:
- Dapatkan berbagai metrik sistem operasi
- jalankan skrip dan program dan dapatkan hasil eksekusinya;
- menjalankan perintah apa pun dalam proses terpisah (garpu), terlepas dari proses agen Zabbix;
- bekerja dengan beberapa server Zabbix sekaligus;
- bekerja di belakang firewall, memulai koneksi ke server, atau sebaliknya, menunggu koneksi masuk.
Server Zabbix menerima metrik pemantauan sebagai input dan menulisnya ke database dan melakukan pemrosesan lebih lanjut.
Menganalisis data yang diperoleh dan berdasarkan logika yang cukup fleksibel, ia dapat melakukan berbagai tindakan:
- Kirim peringatan di berbagai saluran (surat, sms, pesan instan, dll.);
- Terhubung ke server melalui SSH atau IPMI dan jalankan berbagai perintah pada mereka;
- Atau, jalankan berbagai perintah korektif di server menggunakan koneksi Zabbix agent untuknya;
Antarmuka web ditulis dalam PHP dan akan memungkinkan Anda untuk menampilkan metrik yang dikumpulkan oleh Zabbix, grafik, peringatan yang dipicu tentang masalah, dan perintah dan tindakan yang dilakukan oleh sistem pemantauan.
Administrasi Zabbix juga dilakukan melalui antarmuka web.
Zabbix API adalah API berbasis web dan hadir sebagai bagian dari antarmuka web. Ini menggunakan protokol JSON-RPC.
- Memungkinkan Anda menerima, membuat, mengonfigurasi, dan menghapus objek apa pun di sistem pemantauan.
- Menggunakan API, Anda dapat dengan mudah mengintegrasikan sistem pemantauan dengan berbagai sistem eksternal.
Namun, Zabbix tidak tahu apa-apa tentang kerentanan! Tapi Vulners tahu tentang mereka :)
Di sisi lain para Vulners
Kami mencoba mengintegrasikan mereka satu sama lain dan itulah yang terjadi.
Kontrol ancaman Zabbix
Ini adalah plugin Zabbix open source yang ditulis dengan Python yang:
- Menampilkan informasi tentang kerentanan yang ditemukan dalam infrastruktur Anda di antarmuka web Zabbix.
- Menunjukkan tingkat ancaman dari setiap kerentanan sesuai dengan standar CVSS.
- Dan ia menawarkan metode yang mudah diterapkan untuk menghilangkan kerentanan yang ditemukan.
CVSS adalah standar industri terbuka untuk menilai kekritisan kerentanan. Bahkan - skala 10 poin.
Dengan menggunakan teknik ini, Anda dapat membawa kerentanan yang ditemukan dalam sistem yang berbeda dan dengan properti yang berbeda ke satu penyebut tunggal, yang menyederhanakan prioritas masalah yang terdeteksi.
Kami berbicara tentang plugin ini di
Pertemuan Zabbix Moscow . Bagi mereka yang tidak suka membaca, tetapi suka menonton - ada laporan
video .
Hasil plugin di Zabbix adalah sebagai berikut:

Ini adalah dasbor di Zabbix. Di mana, dari kiri ke kanan, informasi berikut ini ditampilkan:
- Distribusi skor CVSS oleh server. Diagram lingkaran menunjukkan hubungan - berapa banyak server yang kita miliki dengan kerentanan kritis, berapa banyak kerentanan non-kritis yang diketahui atau tidak memiliki kerentanan sama sekali.
- Nilai median CVSS dari seluruh infrastruktur. Ini ditampilkan dalam bentuk grafik, yang memungkinkan Anda untuk mengamati dinamika perubahannya.
- Daftar paket rentan dengan indeks dampak kerentanan terhadap infrastruktur.
- Daftar lengkap server rentan dengan tingkat ancaman untuk masing-masing server.
- Daftar buletin keamanan yang telah "ditemukan" di infrastruktur.
Di bawah ini lebih detail tentang yang paling menarik:
Informasi tentang server rentan:

Panel menampilkan daftar semua server dengan tingkat kerentanan di atas kritis. Tingkat kekritisan minimum yang dapat diterima, setelah itu server mulai tampak rentan, ditentukan dalam pengaturan plugin.
Informasi berikut tersedia untuk setiap server:
- Sebenarnya nama server rentan.
- Skor server CVSS maksimum. Skor tertinggi dari semua kerentanan yang ditemukan untuk server ini ditampilkan.
- Perintah untuk menghilangkan semua kerentanan yang terdeteksi di server ini. Setelah menyelesaikannya, kami mendapatkan server yang tidak diketahui kerentanan versinya.
Data disajikan dengan penyortiran CVSS, dari maksimum ke minimum. Ini memungkinkan Anda untuk menjaga server yang paling membutuhkan perhatian, selalu di bagian atas daftar, di depan mata Anda.
Panel berikut menunjukkan paket yang rentan:

Di sini untuk setiap paket yang rentan dalam infrastruktur kami, kami memiliki ringkasan singkat:
- Nama paket yang rentan.
- Versi paket yang rentan.
- Jumlah server tempat versi rentan paket diinstal.
- Skor CVSS untuk versi paket ini.
- Indeks dampak kerentanan ini terhadap infrastruktur.
- Daftar semua server tempat versi paket yang rentan terdeteksi.
- Tautan ke Buletin Keamanan. Memungkinkan Anda membaca dan memahami betapa pentingnya kerentanan ini dalam situasi kami.
- Tim memperbaiki kerentanan dalam paket ini.
Data disajikan diurutkan berdasarkan Indeks Dampak , dari maksimum ke minimum.
Indeks Dampak adalah jumlah server yang terpengaruh dikalikan dengan skor kerentanan CVSS. Sering terjadi bahwa kerentanan dengan skor yang tidak terlalu tinggi jauh lebih luas dalam infrastruktur, dan karenanya berpotensi lebih berbahaya.
Pilih Strategi Manajemen Kerentanan
Namun, Anda tidak bisa hanya mengambil dan memutakhirkan semua paket di semua server ke versi terbaru, yang menghilangkan kerentanan yang ada.
Dalam setiap infrastruktur yang terdiri dari lebih dari beberapa server, ada banyak batasan: ketergantungan satu perangkat lunak pada versi yang lain, risiko gangguan fungsi, dan sebagainya.
Karena itu, selalu ada pilihan - paket mana yang dapat kita perbarui tanpa rasa sakit. Paket mana yang memerlukan rencana kerja terpisah untuk implementasi langkah-langkah kompensasi. Dan dengan apa kita dapat menerima risiko.
Pendekatan yang diusulkan dalam plugin memungkinkan Anda untuk memilih strategi untuk menghilangkan kerentanan yang cocok untuk Anda:
- Satu kerentanan di seluruh infrastruktur: jika kerentanan tertentu sangat penting bagi Anda, plugin memberi Anda informasi tentang di mana kerentanan ini ada di infrastruktur Anda dan bagaimana kerentanan itu dapat segera diperbaiki di seluruh infrastruktur.
- Semua kerentanan pada server tertentu: jika Anda perlu memiliki server yang benar-benar aman, misalnya, terletak di DMZ atau di belakang perimeter perusahaan, menggunakan plug-in Anda mendapatkan informasi tentang cara menghilangkan semua kerentanan yang ditemukan di dalamnya.
Perbaiki kerentanan yang ditemukan
Tapi itu tidak cukup untuk mengetahui kerentanan apa yang kita miliki dan untuk menentukan bagaimana dan mana yang bisa diperbaiki. Hal ini juga perlu dilakukan!
Sistem seperti Wayang atau Ansible banyak digunakan untuk manajemen konfigurasi terpusat dan pembaruan perangkat lunak. Anda dapat menggunakan perintah perbaikan yang memperbaiki kerentanan dan menjalankannya secara terpusat menggunakan sistem tersebut.
Jika infrastruktur Anda tidak menggunakan sistem seperti itu, Zabbix Threat Control memungkinkan Anda untuk menghilangkan kerentanan langsung dari antarmuka web Zabbix.

Untuk ini, plugin menggunakan fungsi Zabbix standar: konfirmasi acara dan eksekusi perintah jarak jauh:
- Segera setelah masalah dikonfirmasi melalui antarmuka web oleh pengguna yang berwenang;
- Perintah jarak jauh diluncurkan yang dijalankan pada server target, atau daftar server, perintah perbaikan yang memperbaiki kerentanan.
Bagaimana cara kerjanya

- Server Zabbix menerima informasi tentang paket dan sistem operasi semua server dalam infrastruktur melalui agen zabbix.
- Plugin (menggunakan Zabbix API) menerima laporan OS yang sebelumnya dikompilasi oleh server Zabbix. Plugin tidak menerima apa pun secara langsung dari server. Dan pada tahap ini tidak memerlukan kontak langsung dengan mereka.
- Setelah memproses informasi yang diterima dari Zabbix, plugin meneruskannya ke Vulners. Dari mana ia menerima daftar kerentanan yang ditemukan, kekritisannya, dan cara untuk menghilangkannya.
- Plugin memproses data yang diterima, menggabungkannya untuk menghasilkan statistik dan menghasilkan paket data untuk transmisi ke Zabbix.
- Plugin mendorong data Zabbix dalam format sistem pemantauan yang diperlukan. Dia melakukan ini menggunakan utilitas zabbix-sender. Setelah itu, Anda sudah memantau segala hal tentang kerentanan yang ditemukan, yang ditampilkan di dasbor yang diperlihatkan sebelumnya.
- Setelah mengonfirmasi masalah, perintah jarak jauh dijalankan, yang beralih ke plugin:
- Nama orang yang memprakarsai itu
- Perbaiki Tim Perbaikan Kerentanan
- Daftar Server
- Setelah menerima semua Kontrol Ancaman Zabbix ini:
- Periksa apakah perintah koreksi dijalankan oleh mereka yang membutuhkannya. Dari orang yang tidak dibutuhkan - dia tidak menerima perintah :)
- Menjalankan perintah yang ditransfer ke sana pada sejumlah server yang diperlukan.
Secara default, plugin mengirimkan perintah perbaikan ke server yang rentan menggunakan utilitas zabbix-get, mengakses agen Zabbix di server target dengan parameter nowait
. Metode koneksi ini memungkinkan proses memperbarui paket untuk berjalan di latar belakang tanpa terikat dengan proses agen zabbix. Dimungkinkan juga untuk mengeksekusi perintah pada server target melalui koneksi SSH sederhana. Cara untuk menjalankan perintah perbaikan dipilih sebagai opsi dalam file konfigurasi plugin.
Dan sebagai hasil dari pekerjaan - tidak adanya server yang rentan, Anda tidur nyenyak dan suasana hati yang baik :)
Instalasi
Kami berbicara tentang apa itu Zabbix Threat Control , mengapa diperlukan dan bagaimana cara kerjanya. Sekarang kami akan memberi tahu Anda cara menginstal dan mengkonfigurasinya!
Ketergantungan
Agar berfungsi, plugin tidak memerlukan hal supernatural. Adalah perlu bahwa pada server Zabbix tempat kami mengatur paket, yang berikut ini harus:
- zabbix v3.4 untuk menggunakan dasbor khusus (hanya muncul dalam versi ini).
- zabbix-sender diperlukan untuk mengirim data kerentanan ke sistem pemantauan.
- zabbix-get untuk mengirim perintah-perbaikan yang memperbaiki kerentanan ke server.
- python v3 dengan modul: pyzabbix, jpath, permintaan untuk menjalankan skrip plugin utama.
Di semua server yang memerlukan pemindaian kerentanan, hanya:
- zabbix-agent untuk mengumpulkan data dan menjalankan skrip.
- python v2 untuk menjalankan skrip yang mengumpulkan laporan OS.
Menginstal plugin dari paket
Untuk memulai, hubungkan repositori dengan paket:
Distribusi RPM
rpm -Uhv https://repo.vulners.com/redhat/vulners-repo.rpm
Distribusi DEB
wget https://repo.vulners.com/debian/vulners-repo.deb dpkg -i vulners-repo.deb
Setelah itu, pada server Zabbix kami menginstal paket utama yang menyediakan semua logika plug-in dan paket yang melaporkan pada OS:
Distribusi RPM
yum install zabbix-threat-control-main zabbix-threat-control-host
Distribusi DEB
apt-get update && apt-get install zabbix-threat-control-main zabbix-threat-control-host
Dan di semua server lain yang membutuhkan pemindaian kerentanan, kami memasang paket yang menghasilkan pelaporan OS:
Distribusi RPM
yum install zabbix-threat-control-host
Distribusi DEB
apt-get update && apt-get install zabbix-threat-control-host
Instalasi dari sumber
Jika Anda lebih suka instalasi dari sumber, maka ini juga sangat sederhana:
Di server Zabbix, kami memasang skrip utama yang menyediakan semua logika plug-in dan skrip yang melaporkan pada OS:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Di semua server lain yang membutuhkan pemindaian kerentanan, kami hanya menginstal skrip yang melaporkan pada OS:
git clone https://github.com/vulnersCom/zabbix-threat-control.git
Kustomisasi
Setelah instalasi, Anda harus mengonfigurasi plugin dan menyiapkan sistem pemantauan untuk operasinya. Berikut ini adalah deskripsi langkah demi langkah dari semua tindakan yang diperlukan.
Mengkonfigurasi server yang memerlukan pemindaian
Anda harus mengaktifkan agen Zabbix untuk menjalankan perintah jarak jauh. Untuk melakukan ini, pada semua server yang memerlukan pemindaian, ubah parameter dalam file konfigurasi agen-zabbix seperti yang ditunjukkan di bawah ini:
EnableRemoteCommands=1 LogRemoteCommands=1
File konfigurasi agen zabbix biasanya terletak di sini: /etc/zabbix/zabbix_agentd.conf
Jika Anda ingin menggunakan fungsionalitas untuk menghilangkan kerentanan yang ditemukan menggunakan Kontrol Ancaman Zabbix , Anda harus mengizinkan pengguna zabbix untuk memperbarui paket (tetapi tidak menginstal atau menghapusnya).
Untuk melakukan ini, tambahkan baris berikut ke file
/etc/sudoers
:
Untuk distribusi RPM , garisnya terlihat seperti ini:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/yum -y update *
Untuk distribusi DEB sedikit berbeda:
zabbix ALL=(ALL) NOPASSWD: /usr/bin/apt-get --assume-yes install --only-upgrade *
Terhubung ke Vulners
Untuk menggunakan API Vulners, Anda memerlukan kunci api. Untuk mendapatkannya:
- Daftar ke vulners.com
- Di akun Anda, buka tab KEYS API
- Pilih "Pindai" di area Lingkup dan tekan "GENERATE NEW KEY".
Anda akan mendapatkan kunci api yang terlihat seperti ini: RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK

Sekarang Anda perlu menambahkan kunci api Vulners ke file konfigurasi plugin /opt/monitoring/zabbix-threat-control/ztc_config.py
Contoh:
vuln_api_key = 'RGB9YPJG7CFAXP35PMDVYFFJPGZ9ZIRO1VGO9K9269B0K86K6XQQQR32O6007NUK'
Terhubung ke Zabbix
Agar plugin dapat terhubung ke Zabbix, Anda perlu menentukan data berikut dalam file konfigurasi: /opt/monitoring/zabbix-threat-control/ztc_config.py
- Alamat antarmuka web Zabbix untuk bekerja dengan Zabbix-API;
- nama pengguna dan kata sandi di mana kami akan terhubung ke Zabbix API.
Nama domain dan port server Zabbix untuk mengirim data menggunakan utilitas zabbix-sender.
Contoh:
zbx_pass = 'yourpassword' zbx_user = 'yourlogin' zbx_url = 'https://zabbixfront.yourdomain.com' zbx_server_fqdn = 'zabbixserver.yourdomain.com' zbx_server_port = '10051'
Mempersiapkan Zabbix
Anda harus membuat objek di Zabbix yang menyediakan plugin. Untuk melakukan ini, jalankan script /opt/monitoring/zabbix-threat-control/ztc_create.py
. Script akan memverifikasi bahwa plugin dikonfigurasi dengan benar dan, menggunakan API, itu akan dibuat di Zabbix:
- Grup host tempat host yang menampilkan kerentanan ditambahkan.
- Templat tempat laporan OS dikumpulkan dari semua server.
- Host untuk menampilkan kerentanan berdasarkan paket, server, buletin, dan statistik umum.
- Tindakan untuk mengeksekusi perintah perbaikan kerentanan jarak jauh.
- Dasbor untuk memudahkan tampilan semua informasi ini.

Setelah membuat semua objek di Zabbix, skrip akan menunjukkan:
- Tautan ke dasbor yang dibuat di Zabbix, di mana kerentanan akan ditampilkan.
- Waktu ketika pemindaian infrastruktur untuk kerentanan akan diluncurkan.
Setelah semua objek yang diperlukan telah dibuat di Zabbix, Anda harus pergi ke antarmuka web Zabbix dan menautkan template "Vulners OS-Report" yang baru saja dibuat oleh skrip dengan semua server yang membutuhkan pemindaian untuk kerentanan.

Setelah itu, tetap menunggu plugin untuk memulai pada waktu yang ditentukan selama instalasi.
Pindai!
Skrip pemrosesan data utama ( ztc.py
) ztc.py
secara otomatis, sekali sehari, melalui "Item Layanan ..." pada host "Vulners - Statistics" pada waktu yang ditentukan oleh skrip.
Anda dapat mengubah waktu mulai plugin menjadi apa pun yang nyaman bagi Anda dengan mengubah "Interval Penjadwalan" di elemen data ini. Dalam hal ini, perlu juga untuk menyesuaikan waktu pengumpulan statistik dalam tiga elemen data dari template "Vulners OS-Report" - metrik dalam template harus bekerja 10 ... 15 menit lebih awal dari metrik "Item Layanan ..." utama pada host "Vulners - Statistics".
Waktu di mana semua data kerentanan akan diproses tergantung pada jumlah server dalam infrastruktur dan jumlah paket yang diinstal pada mereka. Sekitar 30 menit dihabiskan untuk memproses 1.000 server.
Paket
Ini hanya versi pertama dari plugin Zabbix Threat Control. Dan kami terus mengembangkannya.
Rencananya:
- Tambahkan informasi pada dasbor yang ditemukan di infrastruktur CVE.
- Menolak untuk menginstal skrip apa pun pada agen dan mengumpulkan semua informasi yang diperlukan tentang OS dan paket menggunakan kunci elemen data yang dibangun ke dalam agen Zabbix.
Dan karena ini adalah opensource - bergabunglah dengan kami! Selamat datang permintaan tarik :)