Aller au contenu

Ingénieurs en détection

Vous venez d'écrire une analyse qui détecte une activité suspecte et vous aimeriez que votre centre d'opérations de sécurité (SOC) en bénéficie. Dans Howler, un événement intéressant est appelé un hit. Le terme alerte est réservé aux hits qui nécessitent un triage.

Pour créer un nouveau hit, produisez un objet JSON dans lequel vous avez normalisé les données de l'événement selon Elastic Common Schema (ECS). Nous procédons ainsi pour que les analystes de triage disposent d'un schéma unique à apprendre quelle que soit la source des alertes, ce qui leur facilitera grandement la tâche.

Champs spécifiques à Howler

Ensuite, vous devez remplir certains champs spécifiques à Howler :

Champs requis

Champ Description Notes
howler.analytic Le produit qui effectue la détection. Certains produits analytiques exécuteront plusieurs détections distinctes. Doit contenir uniquement des lettres et des espaces pour les meilleures pratiques

Champs générés automatiquement

Ces champs sont automatiquement remplis par Howler s'ils ne sont pas fournis :

Champ Description Comportement par défaut
howler.id Un identifiant unique pour le hit UUID généré automatiquement
howler.hash Un hash utilisé pour dédupliquer les hits Auto-généré à partir de l'analytique, de la détection et des données brutes si non fourni
event.created Horodatage de création de l'événement Défini à l'heure actuelle si non fourni

Champs recommandés

Bien que non strictement requis, ces champs sont fortement recommandés pour un triage efficace :

Champ Description Défaut Notes
howler.detection Un identifiant court et unique pour la détection spécifique Aucun Doit contenir uniquement des lettres et des espaces pour les meilleures pratiques
howler.outline.threat L'identifiant qui représente le mieux l'attaquant Aucun Peut être une IP, une adresse électronique, etc.
howler.outline.target L'identifiant qui représente le mieux la victime Aucun Une IP, un domaine, une adresse électronique, etc.
howler.outline.indicators Une liste libre d'indicateurs de compromission (IoC) Liste vide Généralement des IPs, des domaines et des hashes
howler.outline.summary Un résumé expliquant l'activité détectée Aucun Décrivez l'événement en supposant que la détection est correcte
howler.data Une liste de données d'événement brut avant normalisation Liste vide Facilite les enquêtes en dehors de Howler
howler.escalation Le niveau d'escalade du hit hit Valeurs valides : miss, hit, alert, evidence
howler.status Le statut actuel du hit open Valeurs valides : open, in-progress, on-hold, resolved
howler.scrutiny Niveau de scrutiny appliqué au hit unseen Valeurs valides : unseen, surveyed, scanned, inspected, investigated

Niveaux d'escalade

Howler utilise des niveaux d'escalade (howler.escalation) pour catégoriser les hits :

  • miss - L'événement est évalué comme n'étant pas lié à la détection (faux-positif).
  • hit - (par défaut) L'événement peut ne pas être très fiable sans contexte supplémentaire.
  • alert - L'événement doit être évalué par un analyste de triage.
  • evidence - L'événement a été évalué comme étant lié à la détection (vrai-positif).

Vous pouvez promouvoir certains hits en alertes immédiates au moment de la création si l'on s'attend à ce que tous les hits méritent d'être triés.

Une fois l'objet JSON complété, utilisez le client Howler pour créer un nouveau hit. Ce hit sera immédiatement disponible pour les analystes de triage à partir de l'interface utilisateur de Howler.

Exemple : Créer un hit

Tout d'abord, assurez-vous d'avoir installé le client Howler et un moyen de vous authentifier auprès de Howler (voir Authentification et connexion pour plus de détails).

from howler_client import get_client
from hashlib import sha256

# Se connecter à Howler
client = get_client("https://votre-instance-howler.com", apikey=(USERNAME, APIKEY))

# Créer un hit
hit = {
    "howler": {
        "analytic": "Détecteur de connexions suspectes",
        "detection": "Pic de connexions échouées",
        "hash": sha256(b"user123-2024-10-22-failed-logins").hexdigest(),
        "escalation": "alert",  # Promouvoir en alerte pour triage
        "outline": {
            "threat": "203.0.113.42",
            "target": "user123@example.com",
            "indicators": ["203.0.113.42"],
            "summary": "Le compte utilisateur a subi 15 tentatives de connexion échouées depuis une seule IP en 5 minutes",
        },
        "data": [{"raw_event": "données_log_originales_ici"}],
    },
    "source": {"ip": "203.0.113.42"},
    "user": {"email": "user123@example.com"},
    "event": {"category": ["authentication"], "outcome": "failure"},
}

response = client.hit.create(hit)
print(f"Hit créé : {response['valid'][0]['id']}")

Pour plus d'exemples et une utilisation détaillée, consultez le Guide de développement client.

Bundles

Un bundle est un regroupement logique de hits qui doivent être évalués ensemble. Par exemple, si une série de hits multiples se produit sur le même hôte dans un court laps de temps, un analyste de triage devrait effectuer une enquête unique qui les prend toutes en compte. L'interface utilisateur de Howler fournit un flux de travail permettant de travailler intuitivement avec ces bundles.

Les bundles sont implémentés comme des hits spéciaux dont le champ howler.is_bundle est défini sur true, et howler.hits contient une liste de valeurs howler.id des hits enfants. Cela signifie que des analyses peuvent être créées pour rechercher des hits liés et les regrouper.

Créer des bundles

Ne définissez pas manuellement les champs howler.is_bundle ou howler.hits lors de la création de hits. Les bundles doivent être créés via le point de terminaison API bundle pour garantir une validation et une gestion des relations appropriées. Tenter de créer un bundle en définissant directement ces champs peut entraîner un état incohérent ou des erreurs de validation.

Créer un bundle par programmation

Les ingénieurs en détection doivent créer des bundles via l'API bundle du client Howler plutôt que de compter sur la création automatique. Cela vous donne un contrôle explicite sur les hits qui sont regroupés ensemble.

Exemple 1 : Créer un bundle avec de nouveaux hits

Cet exemple crée un bundle et ses hits enfants en une seule opération :

from howler_client import get_client

client = get_client("https://votre-instance-howler.com", apikey=(USERNAME, APIKEY))

# Définir le hit du bundle
bundle_hit = {
    "howler": {
        "analytic": "Détecteur d'attaques multi-étapes",
        "detection": "Chaîne d'accès aux identifiants",
        "outline": {
            "threat": "192.168.1.100",
            "target": "serveur-entreprise-01",
            "summary": "Plusieurs activités suspectes liées détectées sur le même hôte",
        },
    },
}

# Définir les hits enfants
child_hits = [
    {
        "howler": {
            "analytic": "Détecteur d'attaques multi-étapes",
            "detection": "Processus inhabituel",
            "outline": {
                "threat": "192.168.1.100",
                "target": "serveur-entreprise-01",
                "indicators": ["suspicious.exe"],
                "summary": "Exécution de processus suspect détectée",
            },
        },
    },
    {
        "howler": {
            "analytic": "Détecteur d'attaques multi-étapes",
            "detection": "Modification du registre",
            "outline": {
                "threat": "192.168.1.100",
                "target": "serveur-entreprise-01",
                "indicators": ["HKLM\\Software\\Persistence"],
                "summary": "Mécanisme de persistance ajouté au registre",
            },
        },
    },
]

# Créer le bundle avec ses enfants
response = client.bundle.create(bundle_hit, child_hits)
print(f"Bundle créé : {response['howler']['id']}")
print(f"Contient {len(response['howler']['hits'])} hits enfants")

Exemple 2 : Créer un bundle à partir de hits existants

Si vous avez déjà créé des hits individuels et souhaitez les regrouper ultérieurement :

# Rechercher des hits liés
related_hits = client.search.hit('source.ip:"192.168.1.100" AND event.created:[now-1h TO now]')

# Extraire les IDs des hits
hit_ids = [hit["howler"]["id"] for hit in related_hits["items"]]

# Créer un bundle à partir de hits existants
bundle_hit = {
    "howler": {
        "analytic": "Moteur de corrélation",
        "detection": "Activité liée",
        "hits": hit_ids,  # Référencer les IDs de hits existants
        "outline": {
            "threat": "192.168.1.100",
            "summary": f"Bundle de {len(hit_ids)} événements liés de la même source",
        },
    },
}

response = client.bundle.create(bundle_hit)
print(f"Bundle créé avec {len(response['howler']['hits'])} hits existants")

Exemple 3 : Ajouter ou supprimer des hits d'un bundle

Vous pouvez modifier les bundles après leur création :

bundle_id = "id-bundle-existant"

# Ajouter des hits à un bundle existant
new_hit_ids = ["hit-id-1", "hit-id-2"]
client.bundle.add(bundle_id, new_hit_ids)

# Supprimer des hits d'un bundle
client.bundle.remove(bundle_id, ["hit-id-a-supprimer"])

# Supprimer tous les hits d'un bundle
client.bundle.remove(bundle_id, "*")

Quand créer des bundles

Les ingénieurs en détection devraient créer des bundles lorsque :

  • Plusieurs détections font partie de la même chaîne d'attaque - par exemple, accès initial, persistance et exfiltration de données du même acteur
  • Les événements se produisent en proximité temporelle - Événements liés se produisant sur le même hôte dans une courte fenêtre de temps
  • Indicateurs corrélés - Plusieurs hits partageant des indicateurs communs (IPs, hashes de fichiers, etc.)
  • Analyse de la chaîne d'attaque - Mappage de plusieurs détections aux étapes d'un framework d'attaque

Les bundles aident les analystes de triage à voir l'image complète et à prendre des décisions plus éclairées sur la menace globale.

Page d'analyse

La section Analytics de l'interface utilisateur de Howler fournit une page de support pour les analyses et les détections individuelles. Elle contient des informations utiles à la fois pour l'auteur d'une analyse ou d'une détection et pour les analystes de triage qui enquêtent sur les hits.

Vue d'ensemble

Ici, vous êtes encouragé à fournir de la documentation de votre analytique en Markdown. Celle-ci devrait fournir plus de détails sur le fonctionnement de l'analyse ou de la détection, sur ce qu'elle recherche et sur la manière de valider les hits.

Des mesures sont automatiquement générées pour donner un aperçu des performances. Un taux de faux positifs très élevé peut être le signe que la détection doit être améliorée. En revanche, un taux élevé de vrais positifs peut justifier que les hits soient automatiquement promus au rang d'alertes.

Commentaires

Dans cet onglet, les utilisateurs peuvent laisser des commentaires sur une analyse ou une détection. Considérez ceci comme votre ligne de communication avec l'utilisateur final.

Commentaires sur les hits

À partir de cet onglet, vous pouvez consulter tous les commentaires laissés sur des hits spécifiques afin de mieux comprendre ce que les analystes de triage se signalent les uns aux autres.

Carnets de notes

Si vos analystes de triage ont fréquemment besoin d'enquêter sur des alertes en dehors de Howler, vous pouvez créer un lien vers un carnet de notes Jupyter. Cela signifie qu'un bouton apparaîtra dans l'interface utilisateur de Howler. Lorsqu'un utilisateur clique sur le bouton, il est dirigé vers JupyterHub avec le Notebook spécifié ouvert et le hit spécifique chargé, ce qui permet aux requêtes d'être pré-remplies avec des valeurs pertinentes.

Paramètres de triage

Configurez quelles options d'évaluation sont valides pour votre analytique. Par exemple, si votre analytique ne détecte que des activités malveillantes, vous pourriez limiter les évaluations à compromise, attempt ou mitigated - en excluant des options comme false-positive ou legitimate qui n'ont pas de sens pour votre logique de détection.

Cela aide à guider les analystes vers des évaluations appropriées et maintient la cohérence dans la façon dont les hits sont triés.

Documentation connexe

  • Guide de développement client - Guide complet sur l'utilisation du client Python Howler, y compris l'installation, l'authentification et les opérations avancées sur les hits
  • Elastic Common Schema (ECS) - Documentation officielle Elastic pour la référence des champs ECS et les directives
  • Référence du schéma Hit - Consultez le schéma complet des hits Howler dans votre instance Howler sous Aide → Schéma Hit
  • Documentation API - Documentation API interactive pour votre instance Howler (remplacez par votre URL réelle)