Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
3 kwietnia 2025 r. publicznie wyświetliliśmy podgląd dwóch nowych tabel do obsługi wskaźnika STIX (Structured Threat Information eXpression) i schematów obiektów: ThreatIntelIndicators i ThreatIntelObjects. W tym artykule przedstawiono przykłady sposobu dołączania obiektów STIX do zapytań w celu ulepszenia wyszukiwania zagrożeń oraz sposobu migracji do nowego ThreatIntelIndicators schematu tabeli.
Aby uzyskać więcej informacji na temat analizy zagrożeń w Microsoft Sentinel, zobacz Analiza zagrożeń w Microsoft Sentinel.
Ważna
Microsoft Sentinel będzie pozyskiwać wszystkie analizy zagrożeń do nowych ThreatIntelIndicators i ThreatIntelObjects tabel, jednocześnie pozyskując te same dane do starszej ThreatIntelligenceIndicator tabeli do 31 lipca 2025 r.
Pamiętaj, aby zaktualizować niestandardowe zapytania, reguły analizy i wykrywania, skoroszyty i automatyzację, aby korzystać z nowych tabel do 31 lipca 2025 r. Po 31 lipca 2025 roku Microsoft Sentinel przestanie pobierać dane do tabeli starszej wersjiThreatIntelligenceIndicator. Aktualizujemy wszystkie wbudowane rozwiązania analizy zagrożeń w centrum zawartości, aby korzystały z nowych tabel.
Wprowadziliśmy ważne aktualizacje procesów ponownego publikowania danych.
- Wcześniej dane były dzielone i ponownie publikowane w usłudze Log Analytics w ciągu 12 dni. Teraz wszystkie dane są publikowane ponownie co 7–10 dni. Te dane można zidentyfikować w tabelach
ThreatIntelIndicatorsiThreatIntelObjects, sprawdzając, czyLastUpdateMethodwartość jest równaLogARepublisher. - Nowe tabele obsługują więcej kolumn, w tym kolumnę
Data, która zawiera pełny obiekt danych (z wyjątkiem atrybutów, które już istnieją w innych kolumnach) używany w zaawansowanym wyszukiwaniu zagrożeń. Jeśli kolumnaDatalub inne dodane kolumny nie pasują do Twojego scenariusza, dowiedz się więcej o filtrowaniu kolumn i filtrowaniu wierszy przed pozyskaniem do usługi Log Analytics. - Aby zoptymalizować pozyskiwanie danych w usłudze Log Analytics, pomijane są pary klucz-wartość bez danych. Ponadto niektóre pola w kolumnie
Data, takie jakdescriptionipattern, są obcinane, jeśli przekraczają 1000 znaków. Aby uzyskać więcej informacji na temat zaktualizowanego schematu i jego wpływu na użycie, zobacz ThreatIntelIndicators i ThreatIntelObjects.
Identyfikowanie podmiotów zagrożeń związanych z określonymi wskaźnikami zagrożeń
To zapytanie jest przykładem tego, jak skorelować wskaźniki zagrożeń, takie jak adresy IP, z podmiotami zagrożeń:
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
Wyświetlanie listy danych analizy zagrożeń związanych z określonym aktorem zagrożeń
To zapytanie zapewnia wgląd w taktykę, techniki i procedury (TTPs) aktora zagrożeń (zastąp Sangria Tempest nazwą aktora zagrożeń, który chcesz zbadać):
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
Migrowanie istniejących zapytań do nowego schematu ThreatIntelIndicators
W tym przykładzie pokazano, jak przeprowadzić migrację istniejących zapytań ze starszej ThreatIntelligenceIndicator tabeli do nowego ThreatIntelIndicators schematu. Zapytanie używa operatora extend, aby odtworzyć starsze kolumny na podstawie kolumn ObservableKey i ObservableValue w nowej tabeli.
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
Filtrowanie danych przed wysłaniem ich do Log Analytics
Przekształcenia w usłudze Azure Monitor umożliwiają filtrowanie lub modyfikowanie danych przychodzących przed ich zapisaniem w obszarze roboczym usługi Log Analytics. Są definiowane jako instrukcja w języku zapytań Kusto (KQL) w regule zbierania danych (DCR). Dowiedz się więcej o sposobie tworzenia przekształceń obszaru roboczego i kosztach przekształceń.
Wyklucz kolumny przed wysłaniem danych do Log Analytics
Tabele ThreatIntelIndicators i ThreatIntelObjects zawierają kolumnę Data zawierającą pełny oryginalny obiekt STIX. Jeśli ta kolumna nie jest istotna w danym zastosowaniu, możesz odfiltrować ją przed pozyskaniem danych za pomocą następującej instrukcji KQL:
source
| project-away Data
Wyklucz wiersze przed wysłaniem danych do Log Analytics
Tabela ThreatIntelIndicators zawsze otrzymuje co najmniej jeden wiersz dla każdego niewygasłego wskaźnika. W niektórych przypadkach nie można przeanalizować wzorca STIX w parach klucz/wartość. W takim przypadku wskaźnik jest nadal wysyłany do usługi Log Analytics, ale uwzględniany jest tylko nieprzetworzony, nieparzysty wzorzec, co umożliwia użytkownikom tworzenie niestandardowych analiz w razie potrzeby. Jeśli te wiersze nie są przydatne w danym scenariuszu, możesz je odfiltrować przed zaimportowaniem danych przy użyciu następującej instrukcji KQL:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Zawartość pokrewna
Aby uzyskać więcej informacji, zapoznaj się z następującymi artykułami:
- Analiza zagrożeń w Microsoft Sentinel
- Połącz Microsoft Sentinel z kanałami informacyjnymi analizy zagrożeń STIX/TAXII.
- Zobacz, które TIPy, źródła danych TAXII i wzbogacenia można z łatwością zintegrować z Microsoft Sentinel.
Aby uzyskać więcej informacji na temat języka KQL, zobacz omówienie języka zapytań Kusto (KQL).
Inne zasoby: