Créer des analyses contextuelles

Chronicle vous permet de visualiser la télémétrie, le contexte des entités, les relations et les failles dans une détection unique de votre compte Chronicle. Elle contextualise les entités pour vous permettre de comprendre à la fois les modèles comportementaux dans la télémétrie et le contexte des entités concernées à partir de ces modèles.

Exemples :

  • Affichage des autorisations pour un compte concerné par une tentative de connexion par force brute
  • Importance des données hébergées par un élément qui est aussi la source de l'activité réseau sortante.

Les clients peuvent utiliser cette contextualisation pour filtrer les détections, hiérarchiser les alertes heuristiques, les trier et les examiner.

Les analystes de sécurité et les ingénieurs en matière de détection travaillent généralement sur la base d'un schéma de base de la télémétrie des événements (connexion réseau sortante), ce qui permet de trier de nombreuses détections. Les analystes tentent de rassembler une vue d'ensemble de ce qui s'est passé pour déclencher l'alerte et de déterminer l'importance de la menace.

L'analyse contextuelle intègre des fonctionnalités avancées d'enrichissement plus tôt dans le processus de création et d'exécution de détection, ce qui vous permet de fournir les fonctionnalités supplémentaires suivantes:

  • Mise à disposition d'un contexte pertinent pour la détection des risques contextuels basée sur une méthode heuristique basée sur la détection au moment de l'exécution de la détection plutôt qu'à l'étape du triage humain
  • Réduction du temps passé à trier les données et à assembler manuellement les informations des différents systèmes de sécurité informatique (consoles EDR, journaux de pare-feu/proxy, contexte CMDB et IAM, résultats d'analyse des failles)
  • Permettre aux analystes et aux ingénieurs de détection de filtrer des groupes de menaces entiers attendus ou ne présentant aucun risque pour l'entreprise (tests de logiciels malveillants dans un environnement de bac à sable, failles et activités anormales dans un réseau de développement sans données ou accès sensibles, etc.)

Écrire des règles pour l'analyse contextuelle

Vous pouvez utiliser les règles de moteur de détection pour rechercher des données de contexte d'entités dans votre compte Chronicle.

Pour rechercher des données de contexte d'entité, procédez comme suit:

  1. Spécifiez une source à l'aide de l'udm ou de l'entité.

    $eventname.[<source>].field1.field2 Pour un contexte d'entité, <source> est 'graph'. Pour un événement UDM, <source> est 'udm'. Si ce paramètre n'est pas défini, la valeur <source> est définie par défaut sur udm.

  2. Spécifiez les données de l'entité:

    $e1.graph.entity.hostname = "my-hostname"

    $e1.graph.entity.relations.relationship = "OWNS"

  3. Spécifiez les données d'événement UDM. Les déclarations suivantes sont équivalentes.

    $e1.udm.principal.asset_id = "my_asset_id"

    $e1.principal.asset_id = "my_asset_id"

Vous pouvez créer la plupart des types de règles applicables aux contextes d'entités que les événements UDM, y compris les suivants:

  • Plusieurs règles d'événement

  • Comparer des contextes d'entité à d'autres contextes d'entité

  • Comparer des contextes d'entité à des événements UDM

  • Champs répétés dans les contextes d'entité

  • Fenêtres coulissantes

  • Calcul d'un score de risque pour les détections

Contrairement à un événement UDM, un contexte d'entité n'a pas d'horodatage spécifique. Chaque contexte d'entité possède une période sur laquelle l'association est valide. La période ne doit pas nécessairement commencer par une limite de jour et peut être de n'importe quelle durée.

  • Lorsque vous comparez des événements UDM à un contexte d'entité et avec un fenêtrage, un contexte d'entité représente une valeur constante sur une fenêtre spécifiée.
  • Si des valeurs sont contenues dans les buckets journaliers adjacents, Chronicle tente de correspondre à toutes les valeurs de contexte de l'entité et renvoie toutes les correspondances trouvées.

Exemples de règles

Rechercher des entités dans un contexte administrateur

La règle suivante recherche les entités qui sont également liées aux droits d'administrateur. Ce message s'affiche lorsqu'un utilisateur disposant de droits d'administrateur a tenté de se connecter ou de se déconnecter du système.

rule LoginLogout {
  meta:
  events:
    $log_in.metadata.event_type = "USER_LOGIN"
    $log_in.principal.user.user_display_name = $user
    $log_in.principal.user.userid = "alice"

    $log_out.metadata.event_type = "USER_LOGOUT"
    $log_out.principal.user.user_display_name = $user
    $log_out.principal.user.userid = "alice"

    $log_in.metadata.event_timestamp.seconds <=
     $log_out.metadata.event_timestamp.seconds

    $context.graph.entity.user.user_display_name = $user
    $context.graph.entity.resource.attribute.roles.type = "ADMINISTRATOR"

  match:
    $user over 2m

  condition:
    $log_in and $log_out and $context
}

Exemple de fenêtre coulissante

L'exemple de fenêtre glissante suivant est valide.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Using e2 (a UDM event) as a pivot.
    $host over 3h after $e2

  condition:
    $e1 and $e2
}

Exemple de fenêtre glissante non valide

L'exemple de fenêtre glissante suivant n'est pas valide. Le contexte d'entité ne peut pas être utilisé comme point de pivotement pour une fenêtre glissante.

rule Detection {
  meta:
  events:
    $e1.graph.entity.hostname = $host
    $e2.udm.principal.hostname = $host

  match:
    // Attempting to use $e1 (an entity context) as a pivot. Invalid.
    $host over 3h after $e1

  condition:
    $e1 and $e2
}

Exemple de connexion dans la section des résultats

L'exemple suivant utilise la section outcome pour calculer un score de risque pour la détection.

rule Detection {
  meta:
  events:
    $auth.metadata.event_type = "USER_LOGIN"
    $auth.metadata.vendor_name = "Acme"
    $auth.metadata.product_name = "Acme SSO"
    $auth.target.user.userid = $user
    $auth.target.user.termination_date.seconds > 0

    $auth.metadata.event_timestamp.seconds >
       $context.graph.entity.user.termination_date.seconds

    $context.graph.metadata.vendor_name = "Microsoft"
    $context.graph.metadata.product_name = "Azure Active Directory"
    $context.graph.metadata.entity_type = "USER"
    $context.graph.entity.user.userid = $user
    $context.graph.entity.user.termination_date.seconds > 0

  match:
    $user over 15m

  outcome:
    $risk_score = max(
        if ( $auth.metadata.event_type = "USER_LOGIN", 50) +
        if (
            $context.graph.entity.user.title = "Remote" nocase or
            $context.graph.entity.user.title = "Temp" nocase or
            $context.graph.entity.user.title = "Vendor" nocase, 40) +
        if ( $context.graph.entity.user.title = "Legal" nocase, 10)
    )

  condition:
    $auth and $context
}

Exemple de processus suspect

L'exemple suivant évalue les données du processus d'événement UDM par rapport aux données de contexte IOC stockées en tant que contexte d'entité.

rule ProcessLaunch {
  meta:
  events:
    $ioc.graph.metadata.vendor_name = "ACME"
    $ioc.graph.metadata.product_name = "IOCs"
    $ioc.graph.metadata.entity_type = "FILE"
    $ioc.graph.entity.file.sha256 = $hash

    $process.metadata.event_type = "PROCESS_LAUNCH"
    $process.principal.hostname = $hostname
    (
        not $process.target.process.file.sha256 = "" and
        $process.target.process.file.sha256 = $hash
    )

  match:
    $hash over 15m

  condition:
    $ioc and $process
}

Qualificatifs supplémentaires pour le contexte de l'entité

Pour créer une variable d'événement qui utilise un contexte d'entité, vous devez fournir un <source> après le nom de l'événement. <source> doit être graph.

Le modèle suivant fait référence à un contexte d'entité:

  • $e.graph.entity.hostname

Notez qu'il existe deux méthodes équivalentes pour faire référence à un événement UDM:

  • $u.udm.principal.asset_id
  • $u.principal.asset_id

Vous pouvez combiner tous ces qualificatifs dans le texte de la règle. Vous pouvez également utiliser différents qualificatifs pour le même événement.

Section des résultats

Le moteur de détection accepte une section outcome qui vous permet de retirer plus d'informations à partir d'une règle. La logique définie dans la section outcome est évaluée par rapport à chaque détection. Si une règle génère des Ndétections, chacune Npeut entraîner un résultat différent.

Pour consulter un exemple de règle utilisant la section outcome, cliquez ici.

Vous trouverez des informations détaillées sur l'utilisation et la syntaxe d'une section outcome dans cette section.

Section "Résultat" et déduplication de la détection / regroupement des détections

Pour les règles avec une section de correspondance, n'oubliez pas que les détections sont regroupées par les variables de correspondance. Cela entraîne la déduplication des détections, de sorte qu'une ligne soit renvoyée pour chaque ensemble unique de variables de correspondance et de période.

Les variables de résultat sont ignorées lorsque vous effectuez cette déduplication. Par conséquent, s'il existe deux détections différentes avec les mêmes valeurs pour les variables de correspondance et la fenêtre de temps, mais avec des valeurs différentes pour les variables de résultat, elles seront dédupliquées, et vous ne verrez qu'une seule détection. Cela peut se produire lorsqu'une détection a été créée en raison de l'arrivée tardive des données, par exemple. Voici un exemple illustrant ce cas.

rule ExampleOutcomeRule {
  ...
  match:
    $hostname over <some window>
  outcome:
    $risk_score = <some logic here>
  ...
}

Cette règle entraîne les correspondances suivantes:

Détection 1 : nom d'hôte: période de test: [t1, t2] RIS_score: 10

Détection 2 : nom d'hôte: période de test: [t1, t2] risque: 73

Étant donné que les variables de correspondance et la période sont identiques pour la détection 1 et la détection 2, elles sont dédupliquées, et vous ne voyez donc qu'une seule détection, même si la variable de résultat, dangereux, est différente.