Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op 3 april 2025 hebben we voor het publiek twee nieuwe tabellen bekeken ter ondersteuning van STIX-indicator (Structured Threat Information eXpression) en objectschema's: ThreatIntelIndicators en ThreatIntelObjects. Dit artikel bevat voorbeelden van het opnemen van STIX-objecten in query's om het opsporen van bedreigingen te verbeteren en hoe u migreert naar het nieuwe schema voor bedreigingsindicatoren.
Belangrijk
Microsoft Sentinel neemt alle bedreigingsinformatie op in de nieuwe ThreatIntelIndicators tabel en ThreatIntelObjects tabellen, terwijl dezelfde gegevens tot 31 juli 2025 in de verouderde ThreatIntelligenceIndicator tabel worden opgenomen.
Zorg ervoor dat u uw aangepaste query's, analyse- en detectieregels, werkmappen en automatisering bijwerkt voor het gebruik van de nieuwe tabellen op 31 juli 2025. Na deze datum stopt Microsoft Sentinel met het opnemen van gegevens in de verouderde ThreatIntelligenceIndicator tabel. We werken alle out-of-the-box oplossingen voor bedreigingsinformatie in Content Hub bij om gebruik te maken van de nieuwe tabellen.
We hebben belangrijke updates geïntroduceerd voor de processen voor het opnieuw publiceren van gegevens.
- Voorheen zijn gegevens verdeeld en opnieuw gepubliceerd naar Log Analytics gedurende een periode van 12 dagen. Nu worden alle gegevens elke 7-10 dagen opnieuw gepubliceerd. U kunt deze gegevens in de
ThreatIntelIndicatorsenThreatIntelObjectstabellen identificeren door te controleren ofLastUpdateMethodgelijk is aanLogARepublisher. - De nieuwe tabellen ondersteunen nu meer kolommen, waaronder de
Datakolom, die het volledige gegevensobject bevat (met uitzondering van kenmerken die al in andere kolommen bestaan) die worden gebruikt in geavanceerde opsporingsscenario's. Als deze kolommen niet overeenkomen met uw scenario, leest u meer over het filteren van kolommen en rijen voordat u gegevens opneemt in Log Analytics. - Om de opname naar Log Analytics te optimaliseren, worden sleutel-waardeparen zonder gegevens uitgesloten. Daarnaast worden sommige velden in de
Datakolom, zoalsdescriptionenpattern, afgekapt als ze groter zijn dan 1000 tekens. Zie ThreatIntelIndicators en ThreatIntelObjects voor meer informatie over het bijgewerkte schema en hoe dit van invloed kan zijn op uw gebruik.
Bedreigingsactoren identificeren die zijn gekoppeld aan specifieke bedreigingsindicatoren
Deze query is een voorbeeld van het correleren van bedreigingsindicatoren, zoals IP-adressen, met bedreigingsactoren:
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
Bedreigingsinformatiegegevens vermelden die betrekking hebben op een specifieke bedreigingsacteur
Deze query biedt inzicht in de tactiek, technieken en procedures (TTP's) van de bedreigingsacteur (vervang door Sangria Tempest de naam van de bedreigingsacteur die u wilt onderzoeken):
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
Bestaande query's migreren naar het nieuwe ThreatIntelIndicators-schema
In dit voorbeeld ziet u hoe u bestaande query's van de verouderde ThreatIntelligenceIndicator tabel naar het nieuwe ThreatIntelIndicators schema migreert. De query maakt gebruik van de extend operator om verouderde kolommen opnieuw te maken op basis van de ObservableKey en ObservableValue kolommen in de nieuwe tabel.
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
Gegevens transformeren die naar Log Analytics worden verzonden
Met transformaties in Azure Monitor kunt u binnenkomende gegevens filteren of wijzigen voordat deze worden opgeslagen in een Log Analytics-werkruimte. Ze worden geïmplementeerd als een Kusto Query Language (KQL)-instructie in een regel voor gegevensverzameling (DCR). Meer informatie over het maken van werkruimtetransformaties en de kosten voor transformaties.
Kolommen transformeren die naar Log Analytics worden verzonden
De ThreatIntelIndicator en ThreatIntelObjects tabellen bevatten een Data kolom die het volledige oorspronkelijke STIX-object bevat. Als deze kolom niet relevant is voor uw use-case, kunt u deze uitfilteren voordat u deze opneemt met behulp van de volgende KQL-instructie:
source
| project-away Data
Rijen die zijn verzonden naar Log Analytics transformeren
De ThreatIntelIndicators tabel ontvangt altijd ten minste één rij voor elke niet-verlopen indicator. In sommige gevallen kan het STIX-patroon niet worden geparseerd in sleutel-/waardeparen. Als dit gebeurt, wordt de indicator nog steeds verzonden naar Log Analytics, maar wordt alleen het onbewerkte, niet-geparseerde patroon opgenomen, zodat gebruikers zo nodig aangepaste analyses kunnen maken. Als deze rijen niet nuttig zijn voor uw scenario, kunt u ze filteren voordat u deze opneemt met behulp van de volgende KQL-instructie:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Verwante inhoud
Zie de volgende artikelen voor meer informatie:
- Bedreigingsinformatie in Microsoft Sentinel.
- Verbind Microsoft Sentinel met STIX/TAXII-feeds voor bedreigingsinformatie.
- Bekijk welke TIPs, TAXII-feeds en verrijkingen gemakkelijk kunnen worden geïntegreerd met Microsoft Sentinel.
Raadpleeg het overzicht van de Kusto-querytaal (KQL) voor meer informatie over KQL.
Andere middelen: