Mengumpulkan log konteks aset Qualys
Parser ini mengekstrak informasi konteks aset dari log JSON Qualys dan mengubahnya menjadi format UDM. Alat ini mengurai berbagai kolom seperti ID, IP, nama host, detail resource cloud, OS, dan tag, memetakan kolom tersebut ke kolom UDM yang sesuai, dan membuat hubungan antara aset dan resource. Parser juga menangani logika tertentu untuk penyedia cloud dan sistem operasi, sehingga memastikan representasi yang akurat di UDM.
Sebelum memulai
- Pastikan Anda memiliki instance Google Security Operations.
- Pastikan Anda memiliki akses dengan hak istimewa ke Google Cloud.
- Pastikan Anda memiliki akses dengan hak istimewa ke Qualys.
Aktifkan API yang Diperlukan:
- Login ke konsol Google Cloud .
- Buka APIs & Services > Library.
- Telusuri API berikut dan aktifkan:
- Cloud Functions API
- Cloud Scheduler API
- Cloud Pub/Sub (diperlukan agar Cloud Scheduler dapat memanggil fungsi)
Membuat Google Cloud Bucket Penyimpanan
- Login ke konsol Google Cloud .
Buka halaman Cloud Storage Buckets.
Klik Buat.
Konfigurasikan bucket:
- Name: masukkan nama unik yang memenuhi persyaratan nama bucket (misalnya, qualys-asset-bucket).
- Choose where to store your data: pilih lokasi.
- Pilih kelas penyimpanan untuk data Anda: pilih kelas penyimpanan default untuk bucket, atau pilih Autoclass untuk pengelolaan kelas penyimpanan otomatis.
- Pilih cara mengontrol akses ke objek: pilih tidak untuk menerapkan pencegahan akses publik, dan pilih model kontrol akses untuk objek bucket Anda.
- Kelas penyimpanan: pilih berdasarkan kebutuhan Anda (misalnya, Standar).
Klik Buat.
Membuat Akun Layanan Google Cloud
- Buka IAM & Admin > Service Accounts.
- Buat akun layanan baru.
- Beri nama deskriptif (misalnya, qualys-user).
- Berikan akun layanan dengan peran Storage Object Admin di bucket Cloud Storage yang Anda buat di langkah sebelumnya.
- Berikan peran Cloud Functions Invoker ke akun layanan.
- Buat kunci SSH untuk akun layanan.
- Mendownload file kunci JSON untuk akun layanan. Pastikan file ini tetap aman.
Opsional: Buat Pengguna API khusus di Qualys
- Login ke konsol Qualys.
- Buka Pengguna.
- Klik Baru > Pengguna.
- Masukkan Informasi Umum yang diperlukan untuk pengguna.
- Pilih tab Peran Pengguna.
- Pastikan peran memiliki kotak centang Akses API yang dicentang.
- Klik Save.
Identifikasi URL Qualys API spesifik Anda
Opsi 1
Identifikasi URL Anda seperti yang disebutkan dalam identifikasi platform.
Opsi 2
- Login ke konsol Qualys.
- Buka Help > About.
- Scroll untuk melihat informasi ini di bagian Pusat Operasi Keamanan (SOC).
- Salin URL Qualys API.
Mengonfigurasi Cloud Function
- Buka Cloud Functions di Google Cloud konsol.
- Klik Buat fungsi.
Konfigurasikan Fungsi:
- Name: masukkan nama untuk fungsi Anda (misalnya, fetch-qualys-assets).
- Region: pilih region yang dekat dengan Bucket Anda.
- Pemicu: pilih pemicu HTTP jika diperlukan atau Cloud Pub/Sub untuk eksekusi terjadwal.
- Autentikasi: aman dengan autentikasi.
- Tulis Kode dengan editor inline:
```python from google.cloud import storage import requests import base64 import json # Cloud Storage configuration BUCKET_NAME = "<bucket-name>" FILE_NAME = "qualys_assets.json" # Qualys API credentials QUALYS_USERNAME = "<qualys-username>" QUALYS_PASSWORD = "<qualys-password>" QUALYS_BASE_URL = "https://<qualys_base_url>" def fetch_qualys_assets(): auth = base64.b64encode(f"{QUALYS_USERNAME}:{QUALYS_PASSWORD}".encode()).decode() headers = { "Authorization": f"Basic {auth}", "Content-Type": "application/xml" } payload = """ <ServiceRequest> <filters> <Criteria field="asset.name" operator="LIKE">%</Criteria> </filters> </ServiceRequest> """ response = requests.post(f"{QUALYS_BASE_URL}/qps/rest/2.0/search/am/asset", headers=headers, data=payload) return response.json() def upload_to_gcs(data): client = storage.Client() bucket = client.get_bucket(BUCKET_NAME) blob = bucket.blob(FILE_NAME) blob.upload_from_string(json.dumps(data), content_type="application/json") def main(request): assets = fetch_qualys_assets() upload_to_gcs(assets) return "Data uploaded to Cloud Storage successfully!" ```
Klik Deploy setelah menyelesaikan konfigurasi.
Mengonfigurasi Cloud Scheduler
- Buka Cloud Scheduler di Google Cloud konsol.
- Klik Create Job.
Konfigurasikan Tugas:
- Nama: masukkan nama untuk tugas Anda (misalnya, trigger-fetch-qualys-assets).
- Frequency: gunakan sintaksis cron untuk menentukan jadwal (misalnya, 0 0 * * * untuk setiap hari pada tengah malam).
- Zona Waktu: tetapkan zona waktu pilihan Anda.
- Jenis Pemicu: Pilih HTTP.
- Trigger URL: Masukkan URL Cloud Functions (ditemukan di detail fungsi setelah deployment).
- Method: Pilih POST.
Buat tugas.
Mengonfigurasi feed di Google SecOps untuk menyerap log Konteks Aset Qualys
- Buka SIEM Settings > Feeds.
- Klik Tambahkan baru.
- Di kolom Feed name, masukkan nama untuk feed (misalnya, Qualys Asset Context Logs).
- Pilih Google Cloud Storage sebagai Source type.
- Pilih Qualys Asset Context sebagai Log type.
- Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
- GCS URI: URI Cloud Storage.
- URI adalah: pilih Single file.
- Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
- Namespace aset: namespace aset.
- Label penyerapan: label yang akan diterapkan ke peristiwa dari feed ini.
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Finalize, lalu klik Submit.
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
ASSET_ID |
entity.entity.asset.asset_id |
Dipetakan langsung dari kolom ASSET_ID . |
CLOUD_PROVIDER |
entity.relations.entity.resource.resource_subtype |
Dipetakan langsung dari kolom CLOUD_PROVIDER . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Dipetakan langsung dari kolom CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME . |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Dipetakan langsung dari kolom CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE . |
CLOUD_RESOURCE_ID |
entity.relations.entity.resource.id |
Dipetakan langsung dari kolom CLOUD_RESOURCE_ID . |
CLOUD_SERVICE |
entity.relations.entity.resource.resource_type |
Jika CLOUD_SERVICE adalah "VM", nilainya ditetapkan ke "VIRTUAL_MACHINE". |
DNS_DATA.HOSTNAME |
entity.entity.asset.hostname |
Dipetakan langsung dari kolom DNS_DATA.HOSTNAME . |
EC2_INSTANCE_ID |
entity.relations.entity.resource.product_object_id |
Dipetakan langsung dari kolom EC2_INSTANCE_ID . |
ID |
entity.entity.asset.product_object_id |
Dipetakan langsung dari kolom ID . |
IP |
entity.entity.asset.ip |
Dipetakan langsung dari kolom IP . |
METADATA.AZURE.ATTRIBUTE[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Dipetakan langsung dari kolom METADATA.AZURE.ATTRIBUTE[].NAME . |
METADATA.AZURE.ATTRIBUTE[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Dipetakan langsung dari kolom METADATA.AZURE.ATTRIBUTE[].VALUE . |
OS |
entity.entity.asset.platform_software.platform |
Jika OS berisi "windows" (tidak peka huruf besar/kecil), nilainya ditetapkan ke "WINDOWS". |
TAGS.TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Dipetakan langsung dari kolom TAGS.TAG[].NAME . |
TAGS.TAG[].TAG_ID |
entity.relations.entity.resource.attribute.labels.value |
String yang digabungkan "TAG_ID: " dengan nilai TAGS.TAG[].TAG_ID . Disalin dari kolom create_time log mentah. Di-hardcode ke "ASSET". Di-hardcode ke "QUALYS ASSET CONTEXT". Di-hardcode ke "QUALYS ASSET CONTEXT". Di-hardcode ke "RESOURCE". Di-hardcode ke "MEMBER". Disalin dari kolom create_time log mentah. |
Perubahan
2023-08-01
- Memetakan "DNS_DATA.HOSTNAME" ke "entity.entity.asset.hostname".
2023-07-18
- Parser yang baru dibuat.