Intégrer OpenSearch à Google SecOps

Version de l'intégration : 1.0

Ce document explique comment intégrer OpenSearch à Google Security Operations.

Cas d'utilisation

L'intégration OpenSearch répond aux cas d'utilisation suivants en matière d'orchestration et d'investigation de sécurité :

  • Chasse aux menaces automatisée : effectuez des recherches périodiques dans tous les index OpenSearch pour trouver des indicateurs de compromission (IoC) spécifiques ou des schémas suspects à l'aide de requêtes Lucene et DSL.

  • Ingestion centralisée des alertes : ingérez des documents depuis OpenSearch sous forme d'alertes exploitables dans Google SecOps. Vous vous assurez ainsi que les événements de sécurité de votre data lake sont priorisés et font l'objet d'une enquête.

  • Récupération de données contextuelles : enrichissez les cas de sécurité existants en extrayant automatiquement les journaux ou les données historiques associés à partir d'OpenSearch. Les analystes disposent ainsi d'un contexte plus approfondi lors d'une investigation.

  • Mappage flexible des données : mappez de manière dynamique les niveaux de gravité et les tags d'environnement des documents OpenSearch aux normes Google SecOps pour maintenir la cohérence entre les différentes sources de journaux.

Avant de commencer

Avant de configurer l'intégration dans la plate-forme Google SecOps, vérifiez que vous disposez des éléments suivants :

  • Fichier de certificat CA : fichier d'autorité de certification valide pour sécuriser la connexion.

  • Dernière version de l'intégration : assurez-vous d'utiliser la dernière version de l'intégration OpenSearch.

  • Certificat encodé en Base64 : le contenu de votre fichier de certificat d'autorité de certification doit être converti en chaîne Base64 avant la configuration.

Pour configurer l'intégration avec un certificat d'autorité de certification, procédez comme suit :

  1. Ouvrez la page des paramètres de configuration de l'intégration.
  2. Collez la chaîne encodée en Base64 dans le champ Fichier de certificat de l'autorité de certification.
  3. Cochez la case Vérifier le protocole SSL.
  4. Cliquez sur Test pour vérifier que l'intégration est correctement configurée.

Paramètres d'intégration

L'intégration OpenSearch nécessite les paramètres suivants :

Paramètre Description
Server Address

Obligatoire.

URL du point de terminaison de l'instance OpenSearch, y compris le protocole et le port (par exemple, https://10.0.0.1:9200).

Username

Facultatif.

Nom d'utilisateur utilisé pour l'authentification auprès de l'instance OpenSearch.

Password

Facultatif.

Mot de passe associé au nom d'utilisateur spécifié.

API Token

Facultatif.

Jeton d'API utilisé pour l'authentification en remplacement d'un nom d'utilisateur et d'un mot de passe.

Authenticate

Facultatif.

Si cette option est sélectionnée, l'intégration authentifie la connexion au serveur OpenSearch à l'aide des identifiants fournis.

Verify SSL

Facultatif.

Si cette option est sélectionnée, l'intégration valide le certificat SSL lors de la connexion au serveur OpenSearch.

CA Certificate File

Facultatif.

Contenu du fichier de certificat de l'autorité de certification au format PEM, utilisé pour valider le certificat SSL du serveur.

Pour obtenir des instructions sur la configuration d'une intégration dans Google SecOps, consultez Configurer des intégrations.

Vous pourrez apporter des modifications ultérieurement, si nécessaire. Une fois que vous avez configuré une instance d'intégration, vous pouvez l'utiliser dans des playbooks. Pour savoir comment configurer et prendre en charge plusieurs instances, consultez Prise en charge de plusieurs instances.

Actions

Pour en savoir plus sur les actions, consultez Répondre aux actions en attente depuis Votre bureau et Effectuer une action manuelle.

Utilisez l'action Advanced ES Search (Recherche ES avancée) pour exécuter une requête de recherche préconfigurée sur le serveur OpenSearch et récupérer les résultats au format dictionnaire.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

L'action Recherche ES avancée nécessite les paramètres suivants :

Paramètre Description
Index

Facultatif.

Modèle de recherche pour l'index OpenSearch (par exemple, smp_playbooks-2019.06.13). Vous pouvez utiliser des caractères génériques pour rechercher plusieurs index (par exemple, smp_playbooks-*).

La valeur par défaut est *.

Query

Facultatif.

Requête de recherche à exécuter à l'aide de la syntaxe Lucene (par exemple, level:error OR level:warning).

La valeur par défaut est *.

Limit

Facultatif.

Nombre maximal de documents à renvoyer. Définissez cette valeur sur 0 pour ne pas appliquer de limite.

La valeur par défaut est 100.

Display Field

Facultatif.

Liste de champs spécifiques à renvoyer, séparés par une virgule.

La valeur par défaut est * et renvoie tous les champs.

Search Field

Facultatif.

Champ spécifique à rechercher lorsque Query n'inclut pas de nom de champ cible. Il s'agit de la cible de recherche par défaut pour les requêtes en texte libre.

La valeur par défaut est _all, qui effectue une recherche dans tous les champs indexés.

Timestamp Field

Facultatif.

Nom du champ utilisé pour le filtrage temporel.

Si Earliest Date et Oldest Date sont vides, l'action n'effectue pas de filtrage basé sur le temps.

La valeur par défaut est @timestamp.

Oldest Date

Facultatif.

Date de début de la recherche. L'action renvoie les enregistrements qui se sont produits à cette heure ou après.

Vous pouvez fournir un code temporel UTC exact (YYYY-MM-DDTHH:MM:SSZ) ou une expression mathématique de date relative (par exemple, now-1d).

La valeur par défaut est now-1d.

Earliest Date

Facultatif.

Date de fin de la recherche. L'action renvoie les enregistrements qui se sont produits à cette heure ou avant.

Vous pouvez fournir un code temporel UTC exact (YYYY-MM-DDTHH:MM:SSZ) ou une expression mathématique de date relative (par exemple, now).

La valeur par défaut est now.

Sorties d'action

L'action Recherche ES avancée fournit les sorties suivantes :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Tableau du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Non disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat du script

Le tableau suivant répertorie la valeur de la sortie du résultat du script lorsque vous utilisez l'action Recherche ES avancée :

Nom du résultat du script Valeur
results RESULTS

Utilisez l'action DSL Search pour effectuer une recherche complète dans tous les index OpenSearch et récupérer les résultats au format dictionnaire.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

L'action DSL Search nécessite les paramètres suivants :

Paramètre Description
Index

Facultatif.

Modèle de recherche pour l'index OpenSearch (par exemple, smp_playbooks-2019.06.13). Vous pouvez utiliser des caractères génériques pour rechercher plusieurs index (par exemple, smp_playbooks-*).

La valeur par défaut est *.

Query

Facultatif.

Requête de recherche à exécuter à l'aide de la syntaxe Lucene (par exemple, level:error OR level:warning).

La valeur par défaut est *.

Limit

Facultatif.

Nombre maximal de documents à renvoyer. Définissez cette valeur sur 0 pour ne pas appliquer de limite.

La valeur par défaut est 100.

Sorties d'action

L'action Recherche DSL fournit les sorties suivantes :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Tableau du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat JSON

L'exemple suivant montre le résultat JSON reçu lors de l'utilisation de l'action DSL Search :

[
    {
        "_score": 0.2876821,
        "_type": "person",
        "_id": "2",
        "_source": {
            "lastname": "Smith",
            "name": "John",
            "job_description": "Systems administrator"
        },
        "_index": "accounts"
    }, {
        "_score": 0.28582606,
        "_type": "person",
        "_id": "1",
        "_source":
        {
            "lastname": "Doe",
            "name": "John",
            "job_description": "Systems administrator and Linux specialist"
        },
        "_index": "accounts"
    }
]
Résultat du script

Le tableau suivant répertorie la valeur de la sortie du résultat du script lorsque vous utilisez l'action Recherche DSL :

Nom du résultat du script Valeur
results RESULTS

Ping

Utilisez l'action Ping pour tester la connectivité à OpenSearch.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

Aucune.

Sorties d'action

L'action Ping fournit les résultats suivants :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Tableau du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Non disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat du script

Le tableau suivant répertorie la valeur du résultat du script lorsque vous utilisez l'action Ping :

Nom du résultat du script Valeur
is_success true ou false

Utilisez l'action Simple ES Search (Recherche ES simple) pour effectuer une recherche de base dans tous les champs indexés d'OpenSearch et récupérer les résultats au format dictionnaire.

Cette action ne s'applique pas aux entités Google SecOps.

Entrées d'action

L'action Recherche ES simple nécessite les paramètres suivants :

Paramètre Description
Index

Facultatif.

Modèle de recherche pour l'index OpenSearch (par exemple, smp_playbooks-2019.06.13). Vous pouvez utiliser des caractères génériques pour rechercher plusieurs index (par exemple, smp_playbooks-*).

La valeur par défaut est *.

Query

Facultatif.

Requête de recherche à exécuter à l'aide de la syntaxe Lucene (par exemple, level:error OR level:warning).

La valeur par défaut est *.

Limit

Facultatif.

Nombre maximal de documents à renvoyer. Définissez cette valeur sur 0 pour ne pas appliquer de limite.

La valeur par défaut est 100.

Sorties d'action

L'action Simple ES Search fournit les sorties suivantes :

Type de sortie de l'action Disponibilité
Pièce jointe au mur des cas Non disponible
Lien vers le mur des cas Non disponible
Tableau du mur des cas Non disponible
Table d'enrichissement Non disponible
Résultat JSON Disponible
Messages de sortie Disponible
Résultat du script Disponible
Résultat JSON

L'exemple suivant montre le résultat JSON reçu lors de l'utilisation de l'action Simple ES Search :

[{
    "_score": 0.2876821,
    "_type": "person",
    "_id": "2",
    "_source":
        {
          "lastname": "Smith",
          "name": "John",
          "job_description": "Systems administrator"
         },
     "_index": "accounts"
 },
 {
     "_score": 0.28582606,
     "_type": "person",
     "_id": "1",
     "_source":
       {
         "lastname": "Doe",
         "name": "John",
         "job_description": "Systems administrator and Linux specialist"
       },
    "_index": "accounts"
  }
 ]
Résultat du script

Le tableau suivant répertorie la valeur de la sortie du résultat du script lorsque vous utilisez l'action Simple ES Search :

Nom du résultat du script Valeur
results RESULTS

Connecteurs

Pour savoir comment configurer des connecteurs dans Google SecOps, consultez Ingérer vos données (connecteurs).

Connecteur OpenSearch

Utilisez le connecteur OpenSearch pour rechercher des index OpenSearch spécifiques à l'aide d'une requête Lucene fournie et ingérer des documents en tant qu'alertes dans Google SecOps.

Entrées du connecteur

Le connecteur OpenSearch nécessite les paramètres suivants :

Paramètre Description
Product Field Name

Obligatoire.

Nom du champ dans lequel le nom du produit est stocké.

Le nom du produit a principalement un impact sur le mappage. Pour simplifier et améliorer le processus de mappage du connecteur, la valeur par défaut est résolue en une valeur de remplacement référencée à partir du code. Toute entrée non valide pour ce paramètre est résolue en une valeur de remplacement par défaut.

La valeur par défaut est Product Name.

Event Field Name

Obligatoire.

Nom du champ qui détermine le nom (sous-type) de l'événement.

La valeur par défaut est name.

Script Timeout (Seconds)

Obligatoire.

Délai avant expiration, en secondes, du processus Python qui exécute le script actuel.

La valeur par défaut est 180.

Server Address

Obligatoire.

URL du point de terminaison de l'instance OpenSearch, y compris le protocole et le port (par exemple, https://10.0.0.1:9200).

Username

Facultatif.

Nom d'utilisateur utilisé pour l'authentification auprès de l'instance OpenSearch.

Password

Facultatif.

Mot de passe associé au nom d'utilisateur spécifié.

Authenticate

Facultatif.

Si cette option est sélectionnée, l'intégration authentifie la connexion au serveur OpenSearch à l'aide des identifiants fournis.

API Token

Facultatif.

Jeton d'API utilisé pour l'authentification en remplacement d'un nom d'utilisateur et d'un mot de passe.

Verify SSL

Facultatif.

Si cette option est sélectionnée, l'intégration valide le certificat SSL lors de la connexion au serveur OpenSearch.

Alert Name Field

Obligatoire.

Nom du champ contenant le nom de l'alerte (par exemple, _source_alert_info_alert).

Timestamp Field

Obligatoire.

Nom du champ contenant l'horodatage (par exemple, _source_@timestamp).

Environment Field Name

Facultatif.

Nom du champ dans lequel le nom de l'environnement est stocké.

Si le champ "environment" (environnement) est manquant, le connecteur utilise la valeur par défaut.

La valeur par défaut est "".

Indexes

Facultatif.

Modèle d'index à rechercher. Utilisez * pour effectuer une recherche dans tous les index.

Query

Facultatif.

Requête de recherche à exécuter à l'aide de la syntaxe Lucene.

Alerts Count Limit

Obligatoire.

Nombre maximal d'alertes à extraire en un seul cycle.

La valeur par défaut est 20.

Max Days Backwards

Obligatoire.

Nombre de jours précédant la date actuelle pour récupérer les alertes.

Ce paramètre peut s'appliquer à l'itération initiale du connecteur après l'avoir activé pour la première fois, ou à la valeur de remplacement pour un code temporel de connecteur expiré.

La valeur par défaut est 1.

Severity Field Name

Facultatif.

Nom du champ utilisé pour extraire la valeur de gravité de l'alerte.

Si le champ contient des valeurs numériques (entiers ou nombres à virgule flottante), le connecteur les mappe automatiquement aux niveaux de gravité Google SecOps (par exemple, 100 correspond à Critical). Si le champ contient des valeurs de chaîne, vous devez définir les règles de mappage dans le fichier severity_map_config.json.

Proxy Server Address

Facultatif.

Adresse du serveur proxy à utiliser.

Proxy Username

Facultatif.

Nom d'utilisateur utilisé pour s'authentifier auprès du serveur proxy.

Proxy Password

Facultatif.

Mot de passe utilisé pour s'authentifier auprès du serveur proxy.

Environment Regex Pattern

Facultatif.

Modèle d'expression régulière à exécuter sur la valeur trouvée dans le champ Environment Field Name. Ce paramètre vous permet de manipuler le champ "environment" à l'aide de la logique d'expression régulière.

Utilisez la valeur par défaut .* pour récupérer la valeur Environment Field Name brute requise.

Si le modèle d'expression régulière est nul ou vide, ou si la valeur de l'environnement est nulle, l'environnement par défaut est sélectionné.

Connecteur DSL OpenSearch

Utilisez le connecteur OpenSearch DSL pour ingérer des documents en tant qu'alertes dans Google SecOps en effectuant des appels d'API REST à l'aide de requêtes DSL (Domain Specific Language).

Entrées du connecteur

Le connecteur DSL OpenSearch nécessite les paramètres suivants :

Paramètre Description
Product Field Name

Obligatoire.

Nom du champ dans lequel le nom du produit est stocké.

Le nom du produit a principalement un impact sur le mappage. Pour simplifier et améliorer le processus de mappage du connecteur, la valeur par défaut est résolue en une valeur de remplacement référencée à partir du code. Toute entrée non valide pour ce paramètre est résolue en une valeur de remplacement par défaut.

La valeur par défaut est Product Name.

La valeur par défaut est device_product.

Event Field Name

Obligatoire.

Nom du champ qui détermine le nom (sous-type) de l'événement.

La valeur par défaut est name.

Script Timeout (Seconds)

Obligatoire.

Délai avant expiration, en secondes, du processus Python qui exécute le script actuel.

La valeur par défaut est 60.

Server Address

Obligatoire.

URL du point de terminaison de l'instance OpenSearch, y compris le protocole (par exemple, https://10.0.0.1).

Port

Obligatoire.

Port utilisé pour se connecter au serveur de l'API OpenSearch.

Query

Obligatoire.

Requête DSL utilisée pour la recherche au format JSON.

Pour améliorer la stabilité du connecteur, il est recommandé d'inclure une clé d'horodatage de tri par ordre croissant dans votre requête.

Index

Obligatoire.

Index utilisé pour la recherche. Utilisez _all pour effectuer une recherche dans tous les index.

Timestamp Field

Obligatoire.

Nom du champ contenant l'horodatage (par exemple, _source_@timestamp).

Alert Field Name

Obligatoire.

Nom du champ contenant le nom de l'alerte (par exemple, _source_info_alertname).

Description Field

Facultatif.

Nom du champ contenant la description de l'alerte (par exemple, _source_alert_info_description).

Severity

Obligatoire.

Niveau de gravité statique à attribuer à toutes les alertes ingérées. Ce paramètre est utilisé si Alert Severity et Severity Field Name sont vides.

La valeur par défaut est Medium.

Alert Severity

Facultatif.

Gravité à attribuer aux alertes. Ce paramètre est prioritaire sur Severity Field Name.

Si vous souhaitez utiliser le mappage dynamique avec Severity Field Name, laissez ce champ vide.

Severity Field Name

Facultatif.

Nom du champ utilisé pour extraire la valeur de gravité de l'alerte.

Si le champ contient des valeurs numériques (entiers ou nombres à virgule flottante), le connecteur les mappe automatiquement aux niveaux de gravité Google SecOps (par exemple, 100 correspond à Critical). Si le champ contient des valeurs de chaîne, vous devez définir les règles de mappage dans le fichier severity_map_config.json.

Alerts Count Limit

Facultatif.

Nombre maximal d'alertes à extraire en un seul cycle.

La valeur par défaut est 100.

Authenticate

Facultatif.

Si cette option est sélectionnée, le connecteur authentifie la connexion à l'aide des identifiants fournis.

Username

Facultatif.

Nom d'utilisateur utilisé pour l'authentification auprès de l'instance OpenSearch.

Password

Facultatif.

Mot de passe utilisé pour l'authentification auprès de l'instance OpenSearch.

Use SSL

Facultatif.

Si cette option est sélectionnée, le connecteur active une connexion SSL/TLS au serveur.

Proxy Server Address

Facultatif.

Adresse du serveur proxy à utiliser pour la connexion.

Proxy Username

Facultatif.

Nom d'utilisateur utilisé pour s'authentifier auprès du serveur proxy.

Proxy Password

Facultatif.

Mot de passe utilisé pour s'authentifier auprès du serveur proxy.

Environment Field Name

Facultatif.

Nom du champ dans lequel le nom de l'environnement est stocké.

Si le champ "environment" (environnement) est manquant, le connecteur utilise la valeur par défaut.

La valeur par défaut est "".

Environment Regex Pattern

Facultatif.

Modèle d'expression régulière à exécuter sur la valeur trouvée dans le champ Environment Field Name. Ce paramètre vous permet de manipuler le champ "environment" à l'aide de la logique d'expression régulière.

Utilisez la valeur par défaut .* pour récupérer la valeur Environment Field Name brute requise.

Si le modèle d'expression régulière est nul ou vide, ou si la valeur de l'environnement est nulle, l'environnement par défaut est sélectionné.

La valeur par défaut est .*.

Compatibilité avec la notation

Le connecteur accepte trois notations différentes pour le mappage des champs. Par exemple, pour mapper event.type, vous pouvez fournir _source_event_type, event_type ou event.type.

Cela s'applique aux paramètres suivants :

  • Product Field Name
  • Event Field Name
  • Severity Field Name
  • Environment Field Name
  • Timestamp Field
  • Alert Field Name
  • Description Field (connecteur DSL uniquement)

Mapper la gravité dans le connecteur

Si Severity Field Name contient des valeurs numériques (entiers ou nombres à virgule flottante), le connecteur les mappe comme suit :

  • Critique : 100
  • Élevée : 80 ≤ x < 100
  • Moyenne : 60 ≤ x < 80
  • Faible : 40 ≤ x < 60
  • Information : x < 40

Pour les valeurs de chaîne, vous devez mettre à jour le fichier severity_map_config.json dans le dossier des scripts du connecteur.

Exemple de configuration

Pour mapper un champ event.severity contenant "Malicious", "Unknown" ou "Benign" :

  1. Saisissez event.severity dans le paramètre Nom du champ de gravité.
  2. Mettez à jour severity_map_config.json :
{
    "event.severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.