Mengumpulkan log konteks aset Qualys

Didukung di:

Parser ini mengekstrak informasi konteks aset dari log JSON Qualys dan mengubahnya menjadi format UDM. Proses ini mengurai berbagai kolom seperti ID, IP, nama host, detail resource cloud, OS, dan tag, memetakannya ke kolom UDM yang sesuai, serta membuat hubungan antara aset dan resource. Parser juga menangani logika khusus untuk penyedia cloud dan sistem operasi, sehingga memastikan representasi yang akurat dalam UDM.

Sebelum memulai

Pastikan Anda memiliki prasyarat berikut:

  • Instance Google Security Operations.
  • Akses istimewa ke Google Cloud.
  • Akses istimewa ke Qualys.

Aktifkan API yang Diperlukan:

  1. Login ke konsol Google Cloud .
  2. Buka APIs & Services > Library.
  3. Telusuri dan aktifkan API berikut:
    • Cloud Functions API
    • Cloud Scheduler API
    • Cloud Pub/Sub (diperlukan agar Cloud Scheduler dapat memanggil fungsi)

Membuat Google Cloud Bucket Storage

  1. Login ke konsol Google Cloud .
  2. Buka halaman Cloud Storage Buckets.

    Buka Buckets

  3. Klik Buat.

  4. Konfigurasi bucket:

    • Name: masukkan nama unik yang memenuhi persyaratan nama bucket (misalnya, qualys-asset-bucket).
    • Pilih tempat untuk menyimpan data Anda: 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, Standard).
  5. Klik Buat.

Buat Akun Layanan Google Cloud

  1. Buka IAM & Admin > Service Accounts.
  2. Buat akun layanan baru.
  3. Beri nama deskriptif (misalnya, qualys-user).
  4. Beri akun layanan peran Storage Object Admin di bucket Cloud Storage yang Anda buat pada langkah sebelumnya.
  5. Berikan peran Cloud Functions Invoker kepada akun layanan.
  6. Buat kunci SSH untuk akun layanan.
  7. Download file kunci JSON untuk akun layanan. Jaga keamanan file ini.

Opsional: Buat Pengguna API khusus di Qualys

  1. Login ke konsol Qualys.
  2. Buka Pengguna.
  3. Klik Baru > Pengguna.
  4. Masukkan Informasi Umum yang diperlukan untuk pengguna.
  5. Pilih tab Peran Pengguna.
  6. Pastikan peran memiliki kotak Akses API yang dicentang.
  7. Klik Simpan.

Mengidentifikasi URL Qualys API spesifik Anda

Opsi 1

Identifikasi URL Anda seperti yang disebutkan dalam identifikasi platform.

Opsi 2

  1. Login ke konsol Qualys.
  2. Buka Bantuan > Tentang.
  3. Scroll untuk melihat informasi ini di bagian Security Operations Center (SOC).
  4. Salin URL Qualys API.

Mengonfigurasi Cloud Function

  1. Buka Cloud Functions di konsol Google Cloud .
  2. Klik Buat fungsi.
  3. Konfigurasi 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!"
    
    ```
    
  4. Klik Deploy setelah menyelesaikan konfigurasi.

Mengonfigurasi Cloud Scheduler

  1. Buka Cloud Scheduler di konsol Google Cloud .
  2. Klik Create Job.
  3. Konfigurasi Tugas:

    • Name: masukkan nama untuk tugas Anda (misalnya, trigger-fetch-qualys-assets).
    • Frekuensi: gunakan sintaksis cron untuk menentukan jadwal (misalnya, 0 0 * * * untuk harian pada tengah malam).
    • Zona Waktu: tetapkan zona waktu pilihan Anda.
    • Jenis Pemicu: Pilih HTTP.
    • Trigger URL: Masukkan URL Cloud Function (ditemukan di detail fungsi setelah deployment).
    • Metode: Pilih POST.
  4. Buat tugas.

Menyiapkan feed

Ada dua titik entri berbeda untuk menyiapkan feed di platform Google SecOps:

  • Setelan SIEM > Feed
  • Hub Konten > Paket Konten

Menyiapkan feed dari Setelan SIEM > Feed

Untuk mengonfigurasi feed, ikuti langkah-langkah berikut:

  1. Buka Setelan SIEM > Feed.
  2. Klik Tambahkan Feed Baru.
  3. Di halaman berikutnya, klik Konfigurasi satu feed.
  4. Di kolom Nama feed, masukkan nama untuk feed; misalnya, Log Konteks Aset Qualys.
  5. Pilih Google Cloud Storage sebagai Jenis sumber.
  6. Pilih Qualys Asset Context sebagai Jenis log.
  7. Klik Berikutnya.
  8. Tentukan nilai untuk parameter input berikut:

    • URI GCS: URI Cloud Storage.
    • URI adalah: pilih File tunggal.
    • Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.
  9. Klik Berikutnya.

  10. Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.

Menyiapkan feed dari Hub Konten

Tentukan nilai untuk kolom berikut:

  • URI GCS: URI Cloud Storage.
  • URI adalah: pilih File tunggal.
  • Opsi penghapusan sumber: pilih opsi penghapusan sesuai preferensi Anda.

Opsi lanjutan

  • Nama Feed: Nilai yang telah diisi otomatis yang mengidentifikasi feed.
  • Jenis Sumber: Metode yang digunakan untuk mengumpulkan log ke Google SecOps.
  • Namespace Aset: Namespace yang terkait dengan feed.
  • Label Penyerapan: Label yang diterapkan ke semua peristiwa dari feed ini.

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", nilai 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 "TAG_ID: " yang digabungkan dengan nilai TAGS.TAG[].TAG_ID. Disalin dari kolom create_time log mentah. Dikodekan secara permanen ke "ASSET". Dikodekan secara permanen ke "QUALYS ASSET CONTEXT". Dikodekan secara permanen ke "QUALYS ASSET CONTEXT". Dikodekan secara permanen ke "RESOURCE". Dikodekan secara permanen ke "MEMBER". Disalin dari kolom create_time log mentah.

Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.