sécurité : runHuntingQuery

Espace de noms : microsoft.graph.security

Importante

Les API sous la version /beta dans Microsoft Graph sont susceptibles d’être modifiées. L’utilisation de ces API dans des applications de production n’est pas prise en charge. Pour déterminer si une API est disponible dans v1.0, utilisez le sélecteur Version .

Interrogez un ensemble spécifié de données d’événements, d’activités ou d’entités pris en charge par Microsoft Defender XDR pour rechercher de manière proactive des menaces spécifiques dans votre environnement.

Cette méthode concerne le repérage avancé dans Microsoft Defender XDR. Cette méthode inclut une requête dans le langage de requête Kusto (KQL). Il spécifie une table de données dans le schéma de repérage avancé et une séquence d’opérateurs redirigée pour filtrer ou rechercher ces données et mettre en forme la sortie de la requête de manière spécifique.

En savoir plus sur le repérage de menaces sur les appareils, les e-mails, les applications et les identités. En savoir plus sur KQL.

Pour plus d’informations sur l’utilisation du repérage avancé dans le portail Microsoft Defender, consultez Repérer de manière proactive les menaces avec le repérage avancé dans Microsoft Defender XDR.

Cette API est disponible dans les déploiements cloud nationaux suivants.

Service global Gouvernement américain L4 Gouvernement américain L5 (DOD) Chine exploitée par 21Vianet
✅ ✅ ✅ ❌

Autorisations

Choisissez l’autorisation ou les autorisations marquées comme étant les moins privilégiées pour cette API. Utilisez une ou plusieurs autorisations privilégiées uniquement si votre application en a besoin. Pour plus d’informations sur les autorisations déléguées et d’application, voir Types d’autorisations. Pour en savoir plus sur ces autorisations, consultez la référence des autorisations.

Type d’autorisation Autorisations les moins privilégiées Autorisations à privilèges plus élevés
Déléguée (compte professionnel ou scolaire) ThreatHouting.Read.All Non disponible.
Déléguée (compte Microsoft personnel) Non prise en charge. Non prise en charge.
Application ThreatHouting.Read.All Non disponible.

Importante

L’utilisateur connecté a également besoin de l’un des rôles suivants :

Requête HTTP

POST /security/runHuntingQuery

En-têtes de demande

Nom Description
Autorisation Porteur {token}. Obligatoire. En savoir plus sur l’authentification et les autorisations.
Content-Type application/json. Obligatoire.

Remarque

Si vous utilisez des caractères non-ANSI dans votre requête, par exemple, pour interroger des objets de courrier avec des caractères malformés ou similaires, utilisez application/json; charset=utf-8 cette option pour l’en-tête Content-Type.

Corps de la demande

Dans le corps de la demande, fournissez un objet JSON pour le query paramètre et incluez éventuellement un timespan paramètre et un workspaceId paramètre.

Paramètre Type Description Exemple
requête String Obligatoire. Requête de repérage dans le langage de requête Kusto (KQL). Pour plus d’informations, consultez Référence rapide KQL.
Intervalle de temps String Facultatif. Intervalle de temps pendant lequel interroger les données, au format ISO 8601. La valeur par défaut est de 30 jours. Si un filtre de temps est spécifié à la fois dans la requête et dans les paramètres d’intervalle de temps , la période la plus courte est appliquée.
workspaceId Guid Facultatif. GUID d’un espace de travail Log Analytics spécifique à cibler. Si cette option est omise, le service utilise l’espace de travail principal de l’appelant. Si l’espace de travail est introuvable ou inaccessible, le service revient à l’espace de travail principal de l’appelant. 00000000-0000-0000-0000-000000000001

Les exemples suivants montrent les formats possibles pour le timespan paramètre :

  • Date/Date : « 2024-02-01T08:00:00Z/2024-02-15T08:00:00Z » - Dates de début et de fin.
  • Durée/DateFin : « P30D/2024-02-15T08:00:00Z » : une période avant la date de fin.
  • Début/durée : « 2024-02-01T08:00:00Z/P30D » : date de début et durée.
  • ISO8601 duration : « P30D » - Durée à partir de maintenant en arrière.
  • Date/heure unique : « 2024-02-01T08:00:00Z » : heure de début avec l’heure de fin définie par défaut sur l’heure actuelle.

Réponse

En cas de succès, cette action retourne un 200 OK code de réponse et un huntingQueryResults dans le corps de la réponse.

Exemples

Exemple 1 : requête avec intervalle de temps par défaut

Demande

L’exemple suivant spécifie une requête KQL et :

  • Recherche dans la table DeviceProcessEvents dans le schéma de repérage avancé.
  • Filtre à condition que le processus powershell.exe initie l’événement.
  • Spécifie la sortie de trois colonnes de la même table pour chaque ligne : Timestamp, FileName, InitiatingProcessFileName.
  • Trie la sortie en fonction de la Timestamp valeur.
  • Limite la sortie à deux enregistrements (deux lignes).
POST https://graph.microsoft.com/beta/security/runHuntingQuery

{
    "query": "DeviceProcessEvents | where InitiatingProcessFileName =~ \"powershell.exe\" | project Timestamp, FileName, InitiatingProcessFileName | order by Timestamp desc | limit 2"
}

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#microsoft.graph.security.huntingQueryResults",
    "schema": [
        {
            "name": "Timestamp",
            "type": "DateTime"
        },
        {
            "name": "FileName",
            "type": "String"
        },
        {
            "name": "InitiatingProcessFileName",
            "type": "String"
        }
    ],
    "results": [
        {
            "Timestamp": "2024-03-26T09:39:50.7688641Z",
            "FileName": "cmd.exe",
            "InitiatingProcessFileName": "powershell.exe"
        },
        {
            "Timestamp": "2024-03-26T09:39:49.4353788Z",
            "FileName": "cmd.exe",
            "InitiatingProcessFileName": "powershell.exe"
        }
    ]
}

Exemple 2 : requête avec le paramètre facultatif d’intervalle de temps spécifié

Demande

Cet exemple spécifie une requête KQL et examine la table deviceProcessEvents dans le schéma de repérage avancé 60 jours en arrière.

POST https://graph.microsoft.com/beta/security/runHuntingQuery

{
    "query": "DeviceProcessEvents",
    "timespan": "P90D"
}

Réponse

Remarque : l’objet de réponse affiché ci-après peut être raccourci pour plus de lisibilité.

HTTP/1.1 200 OK
Content-type: application/json

{
    "schema": [
        {
            "Name": "Timestamp",
            "Type": "DateTime"
        },
        {
            "Name": "FileName",
            "Type": "String"
        },
        {
            "Name": "InitiatingProcessFileName",
            "Type": "String"
        }
    ],
    "results": [
        {
            "Timestamp": "2020-08-30T06:38:35.7664356Z",
            "FileName": "conhost.exe",
            "InitiatingProcessFileName": "powershell.exe"
        },
        {
            "Timestamp": "2020-08-30T06:38:30.5163363Z",
            "FileName": "conhost.exe",
            "InitiatingProcessFileName": "powershell.exe"
        }
    ]
}

Exemple 3 : Interroger un espace de travail spécifique

Demande

L’exemple suivant spécifie une requête KQL et cible un espace de travail Log Analytics spécifique en transmettant le paramètre facultatif workspaceId .

POST https://graph.microsoft.com/beta/security/runHuntingQuery
Content-Type: application/json

{
    "query": "DeviceProcessEvents | where InitiatingProcessFileName =~ \"powershell.exe\" | project Timestamp, FileName, InitiatingProcessFileName | order by Timestamp desc | limit 2",
    "timespan": "P1D",
    "workspaceId": "00000000-0000-0000-0000-000000000001"
}

Réponse

Remarque : l’objet de réponse affiché ci-après peut être raccourci pour plus de lisibilité.

HTTP/1.1 200 OK
Content-type: application/json

{
    "schema": [
        {
            "name": "Timestamp",
            "type": "DateTime"
        },
        {
            "name": "FileName",
            "type": "String"
        },
        {
            "name": "InitiatingProcessFileName",
            "type": "String"
        }
    ],
    "results": [
        {
            "Timestamp": "2026-03-10T06:38:35.766Z",
            "FileName": "conhost.exe",
            "InitiatingProcessFileName": "powershell.exe"
        },
        {
            "Timestamp": "2026-03-10T06:38:30.516Z",
            "FileName": "conhost.exe",
            "InitiatingProcessFileName": "powershell.exe"
        }
    ]
}