Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
3 апреля 2025 года мы представили в рамках публичной предварительной версии две новые таблицы для поддержки схем индикаторов и объектов STIX (Structured Threat Information eXpression): ThreatIntelIndicators и ThreatIntelObjects. В этой статье приведены примеры того, как включать объекты STIX в запросы для повышения эффективности поиска угроз и как перейти на новую схему таблицы ThreatIntelIndicators.
Дополнительные сведения об аналитике угроз в Microsoft Sentinel см. в статье Аналитика угроз в Microsoft Sentinel.
Важно!
Microsoft Sentinel будет загружать все данные о киберугрозах в новые таблицы ThreatIntelIndicators и ThreatIntelObjects, продолжая загружать эти же данные в устаревшую таблицу ThreatIntelligenceIndicator до 31 июля 2025 г.
Обязательно обновите пользовательские запросы, правила аналитики и обнаружения, книги и автоматизацию, чтобы использовать новые таблицы до 31 июля 2025 г. После 31 июля 2025 года Microsoft Sentinel прекратит ввод данных в таблицу наследияThreatIntelligenceIndicator. Мы обновляем все готовые решения аналитики угроз в Центре содержимого, чтобы использовать новые таблицы.
Мы внесли важные обновления в процессы повторной публикации данных.
- Ранее данные делились и повторно публиковылись в Log Analytics в течение 12-дневного периода. Теперь все данные публикуются повторно каждые 7–10 дней. Эти данные можно выявить в таблицах
ThreatIntelIndicatorsиThreatIntelObjects, проверив, равно ли значениеLastUpdateMethodзначениюLogARepublisher. - Новые таблицы теперь поддерживают больше столбцов, включая
Dataстолбец, содержащий полный объект данных (за исключением атрибутов, которые уже существуют в других столбцах), используемых в сценариях расширенной охоты.DataЕсли столбец или другие добавленные столбцы не соответствуют вашему сценарию, узнайте больше о фильтрации столбцов и фильтрации строк перед приемом в Log Analytics. - Чтобы оптимизировать прием данных в Log Analytics, пары "ключ-значение" без данных исключаются. Кроме того, некоторые поля в столбце
Data, напримерdescriptionиpattern, усекаются, если они превышают 1000 символов. Дополнительные сведения об обновленной схеме и о том, как она может повлиять на использование, см. в разделах ThreatIntelIndicators и ThreatIntelObjects.
Определение субъектов угроз, связанных с определенными индикаторами угроз
Этот запрос является примером корреляции индикаторов угроз, таких как IP-адреса, с субъектами угроз:
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
Перечисление данных аналитики угроз, связанных с конкретным субъектом угроз
Этот запрос содержит аналитические сведения о тактике, методах и процедурах (TTP) субъекта угрозы (замените Sangria Tempest именем субъекта угрозы, который вы хотите исследовать):
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
Перенос существующих запросов в новую схему ThreatIntelIndicators
В этом примере показано, как перенести существующие запросы из устаревшей ThreatIntelligenceIndicator таблицы в новую ThreatIntelIndicators схему. Запрос использует extend оператор для воссоздания устаревших столбцов на основе столбцов ObservableKey и ObservableValue в новой таблице.
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
Фильтрация данных перед отправкой данных в Log Analytics
Преобразования в Azure Monitor позволяют фильтровать или изменять входящие данные, прежде чем они будут сохранены в рабочей области Log Analytics. Они реализуются в виде инструкции на языке запросов Kusto (KQL) в правиле сбора данных (DCR). Узнайте больше о создании преобразований рабочей области и о затратах на преобразования.
Исключите столбцы перед отправкой данных в Log Analytics
Таблицы ThreatIntelIndicators и ThreatIntelObjects содержат Data столбец, содержащий полный исходный объект STIX. Если этот столбец не относится к вашему варианту использования, его можно отфильтровать перед приемом с помощью следующей инструкции KQL:
source
| project-away Data
Исключите строки перед отправкой данных в Log Analytics
Таблица ThreatIntelIndicators всегда получает как минимум одну строку для каждого индикатора с неистекшим сроком действия. В некоторых случаях шаблон STIX не удаётся разобрать на пары «ключ — значение». Когда это происходит, индикатор по-прежнему отправляется в Log Analytics, но передаётся только необработанный, неразобранный шаблон, что при необходимости позволяет пользователям создавать собственную аналитику. Если эти строки не полезны для вашего сценария, их можно отфильтровать перед приемом с помощью следующей инструкции KQL:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Связанные материалы
Дополнительные сведения см. в следующих статьях:
- Аналитика угроз в Microsoft Sentinel
- Подключите Microsoft Sentinel к каналам данных о киберугрозах STIX/TAXII.
- Узнайте, какие TIP, ленты TAXII и источники обогащения можно легко интегрировать с Microsoft Sentinel.
Дополнительные сведения о KQL см. в статье Общие сведения о язык запросов Kusto (KQL).
Другие ресурсы