Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le 3 avril 2025, nous avons affiché un aperçu public de deux nouvelles tables pour prendre en charge les schémas d’indicateur et d’objet STIX (Structured Threat Information eXpression) : ThreatIntelIndicators et ThreatIntelObjects. Cet article fournit des exemples montrant comment incorporer des objets STIX dans des requêtes pour améliorer la chasse aux menaces et comment migrer vers le nouveau schéma d’indicateur de menace.
Pour plus d’informations sur le renseignement sur les menaces dans Microsoft Sentinel, consultez Renseignement sur les menaces dans Microsoft Sentinel.
Importante
Microsoft Sentinel ingérera tous les renseignements sur les menaces dans les nouvelles ThreatIntelIndicators tables et ThreatIntelObjects , tout en continuant à ingérer les mêmes données dans la table héritée ThreatIntelligenceIndicator jusqu’au 31 juillet 2025.
Veillez à mettre à jour vos requêtes personnalisées, vos règles d’analyse et de détection, vos classeurs et votre automatisation pour utiliser les nouvelles tables avant le 31 juillet 2025. Après cette date, Microsoft Sentinel cessera d’ingérer des données dans la table héritéeThreatIntelligenceIndicator. Nous mettons à jour toutes les solutions prêtes à l’emploi de renseignement sur les menaces dans le hub de contenu pour tirer parti des nouvelles tables.
Nous avons introduit des mises à jour importantes des processus de republier des données.
- Auparavant, les données étaient divisées et republiées dans Log Analytics sur une période de 12 jours. Désormais, toutes les données sont republiées tous les 7 à 10 jours. Vous pouvez identifier ces données dans les
ThreatIntelIndicatorstables etThreatIntelObjectsen vérifiant siLastUpdateMethodest égal àLogARepublisher. - Les nouvelles tables prennent désormais en charge davantage de colonnes, y compris la
Datacolonne , qui contient l’objet de données complet (à l’exception des attributs qui existent déjà dans d’autres colonnes) utilisé dans les scénarios de chasse avancés. Si ces colonnes ne s’alignent pas sur votre scénario, apprenez-en davantage sur le filtrage des colonnes et des lignes avant l’ingestion dans Log Analytics. - Pour optimiser l’ingestion dans Log Analytics, les paires clé-valeur sans données sont exclues. En outre, certains champs de la
Datacolonne , tels quedescriptionetpattern, sont tronqués s’ils dépassent 1 000 caractères. Pour plus d’informations sur le schéma mis à jour et sur la façon dont il peut affecter votre utilisation, consultez ThreatIntelIndicators et ThreatIntelObjects.
Identifier les acteurs de menace associés à des indicateurs de menace spécifiques
Cette requête est un exemple de corrélation des indicateurs de menace, tels que les adresses IP, avec les acteurs de menace :
let IndicatorsWithThatIP = (ThreatIntelIndicators
| extend tlId = tostring(Data.id)
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let ThreatActors = (ThreatIntelObjects
| where StixType == 'threat-actor'
| extend tlId = tostring(Data.id)
| extend ThreatActorName = Data.name
| extend ThreatActorSource = base64_decode_tostring(tostring(split(Id, '---')[0]))
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let AllRelationships = (ThreatIntelObjects
| where StixType == 'relationship'
| extend tlSourceRef = tostring(Data.source_ref)
| extend tlTargetRef = tostring(Data.target_ref)
| extend tlId = tostring(Data.id)
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let IndicatorAsSource = (IndicatorsWithThatIP
| join AllRelationships on $left.tlId == $right.tlSourceRef
| join ThreatActors on $left.tlTargetRef == $right.tlId);
let IndicatorAsTarget = (IndicatorsWithThatIP
| join AllRelationships on $left.tlId == $right.tlTargetRef
| join ThreatActors on $left.tlSourceRef == $right.tlId);
IndicatorAsSource
| union IndicatorAsTarget
| project ObservableValue, ThreatActorName
Répertorier les données de renseignement sur les menaces liées à un acteur de menace spécifique
Cette requête fournit des insights sur les tactiques, techniques et procédures (TTPs) de l’acteur de menace (remplacez par Sangria Tempest le nom de l’acteur de menace que vous souhaitez examiner) :
let THREAT_ACTOR_NAME = 'Sangria Tempest';
let ThreatIntelObjectsPlus = (ThreatIntelObjects
| union (ThreatIntelIndicators
| extend StixType = 'indicator')
| extend tlId = tostring(Data.id)
| extend PlusStixTypes = StixType
| extend importantfield = case(StixType == "indicator", Data.pattern,
StixType == "attack-pattern", Data.name,
"Unkown")
| extend feedSource = base64_decode_tostring(tostring(split(Id, '---')[0]))
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let ThreatActorsWithThatName = (ThreatIntelObjects
| where StixType == 'threat-actor'
| where Data.name == THREAT_ACTOR_NAME
| extend tlId = tostring(Data.id)
| extend ActorName = tostring(Data.name)
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let AllRelationships = (ThreatIntelObjects
| where StixType == 'relationship'
| extend tlSourceRef = tostring(Data.source_ref)
| extend tlTargetRef = tostring(Data.target_ref)
| extend tlId = tostring(Data.id)
| summarize arg_max(TimeGenerated,*) by Id
| where IsDeleted == false);
let SourceRelationships = (ThreatActorsWithThatName
| join AllRelationships on $left.tlId == $right.tlSourceRef
| join ThreatIntelObjectsPlus on $left.tlTargetRef == $right.tlId);
let TargetRelationships = (ThreatActorsWithThatName
| join AllRelationships on $left.tlId == $right.tlTargetRef
| join ThreatIntelObjectsPlus on $left.tlSourceRef == $right.tlId);
SourceRelationships
| union TargetRelationships
| project ActorName, PlusStixTypes, ObservableValue, importantfield, Tags, feedSource
Migrer des requêtes existantes vers le nouveau schéma ThreatIntelIndicators
Cet exemple montre comment migrer des requêtes existantes de la table héritée ThreatIntelligenceIndicator vers le nouveau ThreatIntelIndicators schéma. La requête utilise l’opérateur pour recréer les extend colonnes héritées en fonction des ObservableKey colonnes et ObservableValue de la nouvelle table.
ThreatIntelIndicators
| extend NetworkIP = iff(ObservableKey == 'ipv4-addr:value', ObservableValue, ''),
NetworkSourceIP = iff(ObservableKey == 'network-traffic:src_ref.value', ObservableValue, ''),
NetworkDestinationIP = iff(ObservableKey == 'network-traffic:dst_ref.value', ObservableValue, ''),
DomainName = iff(ObservableKey == 'domain-name:value', ObservableValue, ''),
EmailAddress = iff(ObservableKey == 'email-addr:value', ObservableValue, ''),
FileHashType = case(ObservableKey has 'MD5', 'MD5',
ObservableKey has 'SHA-1', 'SHA-1',
ObservableKey has 'SHA-256', 'SHA-256',
''),
FileHashValue = iff(ObservableKey has 'file:hashes', ObservableValue, ''),
Url = iff(ObservableKey == 'url:value', ObservableValue, ''),
x509Certificate = iff(ObservableKey has 'x509-certificate:hashes.', ObservableValue, ''),
x509Issuer = iff(ObservableKey has 'x509-certificate:issuer', ObservableValue, ''),
x509CertificateNumber = iff(ObservableKey == 'x509-certificate:serial_number', ObservableValue, ''),
Description = tostring(Data.description),
CreatedByRef = Data.created_by_ref,
Extensions = Data.extensions,
ExternalReferences = Data.references,
GranularMarkings = Data.granular_markings,
IndicatorId = tostring(Data.id),
ThreatType = tostring(Data.indicator_types[0]),
KillChainPhases = Data.kill_chain_phases,
Labels = Data.labels,
Lang = Data.lang,
Name = Data.name,
ObjectMarkingRefs = Data.object_marking_refs,
PatternType = Data.pattern_type,
PatternVersion = Data.pattern_version,
Revoked = Data.revoked,
SpecVersion = Data.spec_version
| project-reorder TimeGenerated, WorkspaceId, AzureTenantId, ThreatType, ObservableKey, ObservableValue, Confidence, Name, Description, LastUpdateMethod, SourceSystem, Created, Modified, ValidFrom, ValidUntil, IsDeleted, Tags, AdditionalFields, CreatedByRef, Extensions, ExternalReferences, GranularMarkings, IndicatorId, KillChainPhases, Labels, Lang, ObjectMarkingRefs, Pattern, PatternType, PatternVersion, Revoked, SpecVersion, NetworkIP, NetworkDestinationIP, NetworkSourceIP, DomainName, EmailAddress, FileHashType, FileHashValue, Url, x509Certificate, x509Issuer, x509CertificateNumber, Data
Transformer les données envoyées à Log Analytics
Les transformations dans Azure Monitor vous permettent de filtrer ou de modifier les données entrantes avant qu’elles ne soient stockées dans un espace de travail Log Analytics. Ils sont implémentés en tant qu’instruction Langage de requête Kusto (KQL) dans une règle de collecte de données (DCR). En savoir plus sur la création de transformations d’espace de travail et le coût des transformations.
Transformer les colonnes envoyées à Log Analytics
Les ThreatIntelIndicator tables et ThreatIntelObjects incluent une Data colonne qui contient l’objet STIX d’origine complet. Si cette colonne n’est pas pertinente pour votre cas d’usage, vous pouvez la filtrer avant l’ingestion à l’aide de l’instruction KQL suivante :
source
| project-away Data
Transformer les lignes envoyées à Log Analytics
La ThreatIntelIndicators table reçoit toujours au moins une ligne pour chaque indicateur non expiré. Dans certains cas, le modèle STIX ne peut pas être analysé en paires clé/valeur. Dans ce cas, l’indicateur est toujours envoyé à Log Analytics, mais seul le modèle brut et non traité est inclus, ce qui permet aux utilisateurs de créer des analyses personnalisées si nécessaire. Si ces lignes ne sont pas utiles pour votre scénario, vous pouvez les filtrer avant l’ingestion à l’aide de l’instruction KQL suivante :
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Contenu connexe
Si vous souhaitez en savoir plus, consultez les articles suivants :
- Renseignement sur les menaces dans Microsoft Sentinel.
- Connectez Microsoft Sentinel aux flux de renseignement sur les menaces STIX/TAXII.
- Découvrez les TIPs, les flux TAXII et les enrichissements qui peuvent être facilement intégrés à Microsoft Sentinel.
Pour plus d’informations sur KQL, consultez vue d’ensemble de Langage de requête Kusto (KQL).
Autres ressources :