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 een voorbeeld van twee nieuwe tabellen openbaar bekeken ter ondersteuning van STIX-indicator en objectschema's (Structured Threat Information eXpression): ThreatIntelIndicators en ThreatIntelObjects. Dit artikel bevat voorbeelden van het opnemen van STIX-objecten in query's om de opsporing van bedreigingen te verbeteren en hoe u migreert naar het nieuwe schema voor bedreigingsindicatoren.
Zie Bedreigingsinformatie in Microsoft Sentinel voor meer informatie over bedreigingsinformatie in Microsoft Sentinel.
Belangrijk
Microsoft Sentinel neemt alle bedreigingsinformatie op in de nieuwe ThreatIntelIndicators en-tabellenThreatIntelObjects, 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 voor 31 juli 2025 bijwerkt om de nieuwe tabellen te gebruiken. 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 gedurende een periode van 12 dagen verdeeld en opnieuw gepubliceerd naar Log Analytics. Nu worden alle gegevens elke 7-10 dagen opnieuw gepubliceerd. U kunt deze gegevens in de
ThreatIntelIndicatorstabellen enThreatIntelObjectsidentificeren door te controleren ofLastUpdateMethodgelijk isLogARepublisheraan . - De nieuwe tabellen ondersteunen nu meer kolommen, waaronder de
Datakolom, die het volledige gegevensobject bevat (met uitzondering van kenmerken die al bestaan in andere kolommen) die worden gebruikt in geavanceerde opsporingsscenario's. Als deze kolommen niet overeenkomen met uw scenario, vindt u meer informatie over het filteren van kolommen en rijen voordat deze worden opgenomen in Log Analytics. - Om opname in Log Analytics te optimaliseren, worden sleutel-waardeparen zonder gegevens uitgesloten. Daarnaast worden sommige velden in de
Datakolom, zoalsdescriptionenpattern, afgekapt als ze meer dan 1000 tekens bevatten. 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 weergeven met betrekking tot een specifieke bedreigingsacteur
Deze query biedt inzicht in de tactieken, technieken en procedures (TTPs) 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 gebruikt de extend operator om verouderde kolommen opnieuw te maken op basis van de ObservableKey kolommen en ObservableValue 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 KQL-instructie (Kusto-querytaal) 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 tabellen en ThreatIntelObjects bevatten een Data kolom met het volledige oorspronkelijke STIX-object. Als deze kolom niet relevant is voor uw use case, kunt u deze filteren vóór opname met behulp van de volgende KQL-instructie:
source
| project-away Data
Rijen transformeren die naar Log Analytics worden verzonden
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. Wanneer dit gebeurt, wordt de indicator nog steeds verzonden naar Log Analytics, maar alleen het onbewerkte, niet-geparseerde patroon wordt opgenomen, zodat gebruikers zo nodig aangepaste analyses kunnen maken. Als deze rijen niet nuttig zijn voor uw scenario, kunt u ze filteren vóór opname met behulp van de volgende KQL-instructie:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Verwante onderwerpen
Zie de volgende artikelen voor meer informatie:
- Bedreigingsinformatie in Microsoft Sentinel.
- Verbind Microsoft Sentinel met STIX/TAXII bedreigingsinformatiefeeds.
- Bekijk welke TIPs, TAXII-feeds en verrijkingen gemakkelijk kunnen worden geïntegreerd met Microsoft Sentinel.
Zie overzicht van Kusto-querytaal (KQL) voor meer informatie over KQL.
Andere resources: