Collecter les journaux de contexte des composants Qualys

Compatible avec:

Cet analyseur extrait les informations de contexte des composants des journaux JSON Qualys et les transforme au format UDM. Il analyse divers champs tels que l'ID, l'adresse IP, le nom d'hôte, les détails des ressources cloud, l'OS et les tags, les mappant sur les champs UDM correspondants et créant des relations entre les composants et les ressources. L'analyseur gère également une logique spécifique pour les fournisseurs de services cloud et les systèmes d'exploitation, ce qui garantit une représentation précise dans l'UDM.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google Security Operations.
  • Assurez-vous de disposer d'un accès privilégié à Google Cloud.
  • Assurez-vous de disposer d'un accès privilégié à Qualys.

Activez les API requises:

  1. Connectez-vous à la console Google Cloud .
  2. Accédez à API et services > Bibliothèque.
  3. Recherchez les API suivantes et activez-les :
    • API Cloud Functions
    • API Cloud Scheduler
    • Cloud Pub/Sub (obligatoire pour que Cloud Scheduler puisse appeler des fonctions)

Créer un Google Cloud bucket de stockage

  1. Connectez-vous à la console Google Cloud .
  2. Accédez à la page Buckets Cloud Storage.

    Accéder à la page "Buckets"

  3. Cliquez sur Créer.

  4. Configurez le bucket:

    • Nom: saisissez un nom unique qui répond aux exigences de dénomination des buckets (par exemple, qualys-asset-bucket).
    • Choisissez où stocker vos données: sélectionnez un emplacement.
    • Choisissez une classe de stockage pour vos données: sélectionnez une classe de stockage par défaut pour le bucket ou classe automatique pour une gestion automatique des classes de stockage.
    • Choisir comment contrôler l'accès aux objets: sélectionnez non pour appliquer la protection contre l'accès public, puis sélectionnez un modèle de contrôle des accès pour les objets de votre bucket.
    • Classe de stockage: choisissez en fonction de vos besoins (par exemple, Standard).
  5. Cliquez sur Créer.

Créer un compte de service Google Cloud

  1. Accédez à IAM et administration > Comptes de service.
  2. Créez un compte de service.
  3. Attribuez-lui un nom descriptif (par exemple, qualys-user).
  4. Attribuez au compte de service le rôle Administrateur des objets de l'espace de stockage sur le bucket Cloud Storage que vous avez créé à l'étape précédente.
  5. Attribuez au compte de service le rôle Demandeur Cloud Functions.
  6. Créez une clé SSH pour le compte de service.
  7. Téléchargez un fichier de clé JSON pour le compte de service. Conservez ce fichier dans un endroit sécurisé.

Facultatif: Créer un utilisateur d'API dédié dans Qualys

  1. Connectez-vous à la console Qualys.
  2. Accédez à Utilisateurs.
  3. Cliquez sur Nouveau > Utilisateur.
  4. Saisissez les informations générales requises pour l'utilisateur.
  5. Sélectionnez l'onglet Rôle utilisateur.
  6. Assurez-vous que la case Accès aux API est cochée pour le rôle.
  7. Cliquez sur Enregistrer.

Identifier votre URL d'API Qualys spécifique

Option 1

Identifiez vos URL comme indiqué dans la section Identification de la plate-forme.

Option 2

  1. Connectez-vous à la console Qualys.
  2. Accédez à Aide > À propos.
  3. Faites défiler la page pour afficher ces informations sous "Centre des opérations de sécurité (SOC)".
  4. Copiez l'URL de l'API Qualys.

Configurer la fonction Cloud

  1. Accédez à Cloud Functions dans la console Google Cloud .
  2. Cliquez sur Créer une fonction.
  3. Configurez la fonction:

    • Nom: saisissez un nom pour votre fonction (par exemple, fetch-qualys-assets).
    • Région: sélectionnez une région proche de votre bucket.
    • Déclencheur: choisissez un déclencheur HTTP si nécessaire ou Cloud Pub/Sub pour l'exécution planifiée.
    • Authentification: sécurisez votre application avec l'authentification.
    • Écrivez le code à l'aide d'un éditeur intégré:
    ```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. Une fois la configuration terminée, cliquez sur Déployer.

Configurer Cloud Scheduler

  1. Accédez à Cloud Scheduler dans la console Google Cloud .
  2. Cliquez sur Créer une tâche.
  3. Configurez la tâche:

    • Nom: saisissez un nom pour votre tâche (par exemple, trigger-fetch-qualys-assets).
    • Fréquence: utilisez la syntaxe cron pour spécifier la planification (par exemple, 0 0 * * * pour tous les jours à minuit).
    • Fuseau horaire: définissez votre fuseau horaire préféré.
    • Type de déclencheur: sélectionnez HTTP.
    • URL du déclencheur: saisissez l'URL de la fonction Cloud (disponible dans les informations sur la fonction après le déploiement).
    • Méthode: sélectionnez POST.
  4. Créez la tâche.

Configurer un flux dans Google SecOps pour ingérer les journaux de contexte des composants Qualys

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, "Journaux de contexte des composants Qualys").
  4. Sélectionnez Google Cloud Storage comme Type de source.
  5. Sélectionnez Qualys Asset Context comme type de journal.
  6. Cliquez sur Suivant.
  7. Spécifiez les valeurs des paramètres d'entrée suivants:

    • URI GCS: URI Cloud Storage.
    • Un URI est: sélectionnez Single file (Fichiers uniques).
    • Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
  8. Cliquez sur Suivant.

  9. Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
ASSET_ID entity.entity.asset.asset_id Mappé directement à partir du champ ASSET_ID.
CLOUD_PROVIDER entity.relations.entity.resource.resource_subtype Mappé directement à partir du champ CLOUD_PROVIDER.
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME entity.relations.entity.resource.attribute.labels.key Mappé directement à partir du champ CLOUD_PROVIDER_TAGS.CLOUD_TAG[].NAME.
CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE entity.relations.entity.resource.attribute.labels.value Mappé directement à partir du champ CLOUD_PROVIDER_TAGS.CLOUD_TAG[].VALUE.
CLOUD_RESOURCE_ID entity.relations.entity.resource.id Mappé directement à partir du champ CLOUD_RESOURCE_ID.
CLOUD_SERVICE entity.relations.entity.resource.resource_type Si CLOUD_SERVICE est "VM", la valeur est définie sur "VIRTUAL_MACHINE".
DNS_DATA.HOSTNAME entity.entity.asset.hostname Mappé directement à partir du champ DNS_DATA.HOSTNAME.
EC2_INSTANCE_ID entity.relations.entity.resource.product_object_id Mappé directement à partir du champ EC2_INSTANCE_ID.
ID entity.entity.asset.product_object_id Mappé directement à partir du champ ID.
IP entity.entity.asset.ip Mappé directement à partir du champ IP.
METADATA.AZURE.ATTRIBUTE[].NAME entity.relations.entity.resource.attribute.labels.key Mappé directement à partir du champ METADATA.AZURE.ATTRIBUTE[].NAME.
METADATA.AZURE.ATTRIBUTE[].VALUE entity.relations.entity.resource.attribute.labels.value Mappé directement à partir du champ METADATA.AZURE.ATTRIBUTE[].VALUE.
OS entity.entity.asset.platform_software.platform Si OS contient "windows" (sans distinction entre majuscules et minuscules), la valeur est définie sur "WINDOWS".
TAGS.TAG[].NAME entity.relations.entity.resource.attribute.labels.key Mappé directement à partir du champ TAGS.TAG[].NAME.
TAGS.TAG[].TAG_ID entity.relations.entity.resource.attribute.labels.value Chaîne concaténée "TAG_ID: " avec la valeur TAGS.TAG[].TAG_ID. Copié à partir du champ create_time du journal brut. Code dur "ASSET". Code codé en dur sur "QUALYS ASSET CONTEXT". Code codé en dur sur "QUALYS ASSET CONTEXT". Code codé en dur sur "RESOURCE". Code codé en dur sur "MEMBER". Copié à partir du champ create_time du journal brut.

Modifications

2023-08-01

  • "DNS_DATA.HOSTNAME" a été mappé sur "entity.entity.asset.hostname".

2023-07-18

  • Analyseur nouvellement créé.