Qualys-Asset-Kontextprotokolle erfassen
Dieser Parser extrahiert Informationen zum Asset-Kontext aus Qualys-JSON-Logs und wandelt sie in das UDM-Format um. Es werden verschiedene Felder wie ID, IP, Hostname, Details zu Cloud-Ressourcen, Betriebssystem und Tags geparst, den entsprechenden UDM-Feldern zugeordnet und Beziehungen zwischen Assets und Ressourcen erstellt. Der Parser verarbeitet auch spezifische Logik für Cloud-Anbieter und Betriebssysteme, um eine genaue Darstellung im UDM zu gewährleisten.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google Security Operations-Instanz.
- Privilegierter Zugriff auf Google Cloud.
- Privilegierter Zugriff auf Qualys.
Erforderliche APIs aktivieren:
- Melden Sie sich in der Google Cloud -Konsole an.
- Rufen Sie APIs und Dienste > Bibliothek auf.
- Suchen Sie nach den folgenden APIs und aktivieren Sie sie:
- Cloud Functions API
- Cloud Scheduler API
- Cloud Pub/Sub (erforderlich, damit Cloud Scheduler Funktionen aufrufen kann)
Google Cloud Storage-Bucket erstellen
- Melden Sie sich in der Google Cloud -Konsole an.
Rufen Sie die Seite Cloud Storage-Buckets auf.
Klicken Sie auf Erstellen.
Konfigurieren Sie den Bucket:
- Name: Geben Sie einen eindeutigen Namen ein, der den Anforderungen für Bucket-Namen entspricht (z. B. qualys-asset-bucket).
- Speicherort für Daten auswählen: Wählen Sie einen Standort aus.
- Speicherklasse für Ihre Daten auswählen: Wählen Sie entweder eine Standardspeicherklasse für den Bucket oder Autoclass für die automatische Verwaltung der Speicherklassen aus.
- Legen Sie fest, wie der Zugriff auf Objekte gesteuert wird: Wählen Sie nicht aus, um die Verhinderung des öffentlichen Zugriffs zu erzwingen, und wählen Sie ein Zugriffssteuerungsmodell für die Objekte Ihres Buckets aus.
- Speicherklasse: Wählen Sie die Option aus, die Ihren Anforderungen am besten entspricht, z. B. Standard.
Klicken Sie auf Erstellen.
Google Cloud-Dienstkonto erstellen
- Rufen Sie IAM und Verwaltung > Dienstkonten auf.
- Erstellen Sie ein neues Dienstkonto.
- Geben Sie ihm einen aussagekräftigen Namen (z. B. qualys-user).
- Weisen Sie dem Dienstkonto die Rolle Storage-Objekt-Administrator für den Cloud Storage-Bucket zu, den Sie im vorherigen Schritt erstellt haben.
- Weisen Sie dem Dienstkonto die Rolle Cloud Functions-Aufrufer zu.
- Erstellen Sie einen SSH-Schlüssel für das Dienstkonto.
- Laden Sie eine JSON-Schlüsseldatei für das Dienstkonto herunter. Bewahren Sie diese Datei sicher auf.
Optional: Einen dedizierten API-Nutzer in Qualys erstellen
- Melden Sie sich in der Qualys-Konsole an.
- Gehen Sie zu Nutzer.
- Klicken Sie auf Neu > Nutzer.
- Geben Sie die erforderlichen Allgemeinen Informationen für den Nutzer ein.
- Klicken Sie auf den Tab Nutzerrolle.
- Das Kästchen API-Zugriff muss angeklickt sein.
- Klicken Sie auf Speichern.
Spezifische Qualys API-URL ermitteln
Option 1
Geben Sie Ihre URLs wie unter Plattformerfassung beschrieben an.
Option 2
- Melden Sie sich in der Qualys-Konsole an.
- Gehen Sie zu Hilfe > Info.
- Scrollen Sie nach unten, um diese Informationen unter „Security Operations Center (SOC)“ zu sehen.
- Kopieren Sie die Qualys API-URL.
Cloud Functions-Funktion konfigurieren
- Rufen Sie in der Google Cloud -Console Cloud Functions auf.
- Klicken Sie auf Funktion erstellen.
Funktion konfigurieren:
- Name: Geben Sie einen Namen für die Funktion ein, z. B. fetch-qualys-assets.
- Region: Wählen Sie eine Region in der Nähe Ihres Buckets aus.
- Trigger: Wählen Sie bei Bedarf einen HTTP-Trigger oder Cloud Pub/Sub für die geplante Ausführung aus.
- Authentifizierung: mit Authentifizierung sichern.
- Code mit einem Inline-Editor schreiben:
```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!" ```
Klicken Sie nach Abschluss der Konfiguration auf Bereitstellen.
Cloud Scheduler konfigurieren
- Rufen Sie in der Google Cloud Console Cloud Scheduler auf.
- Klicken Sie auf Job erstellen.
Job konfigurieren:
- Name: Geben Sie einen Namen für den Job ein, z. B. trigger-fetch-qualys-assets.
- Häufigkeit: Verwenden Sie die cron-Syntax, um den Zeitplan anzugeben (z. B. 0 0 * * * für täglich um Mitternacht).
- Zeitzone: Legen Sie Ihre bevorzugte Zeitzone fest.
- Triggertyp: Wählen Sie HTTP aus.
- Trigger-URL: Geben Sie die URL der Cloud Functions-Funktion ein. Sie finden sie nach der Bereitstellung in den Funktionsdetails.
- Methode: Wählen Sie POST aus.
Erstellen Sie den Job.
Feeds einrichten
Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:
- SIEM-Einstellungen > Feeds
- Content Hub> Content-Pakete
Feeds über „SIEM-Einstellungen“ > „Feeds“ einrichten
So konfigurieren Sie einen Feed:
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. Qualys Asset Context Logs (Qualys-Asset-Kontextprotokolle).
- Wählen Sie Google Cloud Storage als Quelltyp aus.
- Wählen Sie Qualys Asset Context als Logtyp aus.
- Klicken Sie auf Weiter.
Geben Sie Werte für die folgenden Eingabeparameter an:
- GCS-URI: Der Cloud Storage-URI.
- URI is a (URI ist ein): Wählen Sie Single file (Einzelne Datei) aus.
- Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Option aus.
Klicken Sie auf Weiter.
Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
- GCS-URI: Der Cloud Storage-URI.
- URI is a (URI ist ein): Wählen Sie Single file (Einzelne Datei) aus.
Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Option aus.
Erweiterte Optionen
- Feedname:Ein vorausgefüllter Wert, der den Feed identifiziert.
- Quelltyp:Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
- Asset-Namespace:Der mit dem Feed verknüpfte Namespace.
- Aufnahmelabels:Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
ASSET_ID |
entity.entity.asset.asset_id |
Direkt aus dem Feld ASSET_ID zugeordnet. |
CLOUD_PROVIDER |
entity.relations.entity.resource.resource_subtype |
Direkt aus dem Feld CLOUD_PROVIDER zugeordnet. |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Direkt aus dem Feld CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME zugeordnet. |
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Direkt aus dem Feld CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE zugeordnet. |
CLOUD_RESOURCE_ID |
entity.relations.entity.resource.id |
Direkt aus dem Feld CLOUD_RESOURCE_ID zugeordnet. |
CLOUD_SERVICE |
entity.relations.entity.resource.resource_type |
Wenn CLOUD_SERVICE „VM“ ist, wird der Wert auf „VIRTUAL_MACHINE“ gesetzt. |
DNS_DATA.HOSTNAME |
entity.entity.asset.hostname |
Direkt aus dem Feld DNS_DATA.HOSTNAME zugeordnet. |
EC2_INSTANCE_ID |
entity.relations.entity.resource.product_object_id |
Direkt aus dem Feld EC2_INSTANCE_ID zugeordnet. |
ID |
entity.entity.asset.product_object_id |
Direkt aus dem Feld ID zugeordnet. |
IP |
entity.entity.asset.ip |
Direkt aus dem Feld IP zugeordnet. |
METADATA.AZURE.ATTRIBUTE[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Direkt aus dem Feld METADATA.AZURE.ATTRIBUTE[].NAME zugeordnet. |
METADATA.AZURE.ATTRIBUTE[].VALUE |
entity.relations.entity.resource.attribute.labels.value |
Direkt aus dem Feld METADATA.AZURE.ATTRIBUTE[].VALUE zugeordnet. |
OS |
entity.entity.asset.platform_software.platform |
Wenn OS „windows“ (unabhängig von der Groß-/Kleinschreibung) enthält, wird der Wert auf „WINDOWS“ gesetzt. |
TAGS.TAG[].NAME |
entity.relations.entity.resource.attribute.labels.key |
Direkt aus dem Feld TAGS.TAG[].NAME zugeordnet. |
TAGS.TAG[].TAG_ID |
entity.relations.entity.resource.attribute.labels.value |
Verketteter String „TAG_ID: “ mit dem Wert von TAGS.TAG[].TAG_ID . Aus dem Feld create_time des Rohlogs kopiert. Fest codiert als „ASSET“. Fest codiert auf „QUALYS ASSET CONTEXT“. Fest codiert auf „QUALYS ASSET CONTEXT“. Fest codiert auf „RESOURCE“. Fest codiert auf „MEMBER“. Aus dem Feld create_time des Rohlogs kopiert. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten