Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A 3 de abril de 2025, pré-visualizamos publicamente duas novas tabelas para suportar o indicador STIX (Structured Threat Information eXpression) e esquemas de objetos: ThreatIntelIndicators e ThreatIntelObjects. Este artigo apresenta exemplos de como incorporar objetos STIX em consultas para melhorar a caça a ameaças, e como migrar para o novo ThreatIntelIndicators esquema de tabelas.
Para obter mais informações sobre informações sobre ameaças no Microsoft Sentinel, veja Informações sobre ameaças no Microsoft Sentinel.
Importante
Microsoft Sentinel irá ingerir toda a inteligência sobre ameaças nas novas tabelas ThreatIntelIndicators e ThreatIntelObjects, continuando a ingerir os mesmos dados na tabela legada ThreatIntelligenceIndicator até 31 de julho de 2025.
Certifique-se de que atualiza as suas consultas personalizadas, regras de análise e deteção, livros e automatização para utilizar as novas tabelas até 31 de julho de 2025. Após 31 de julho de 2025, o Microsoft Sentinel deixará de ingerir dados para a tabela legadaThreatIntelligenceIndicator. Estamos a atualizar todas as soluções pré-configuradas de inteligência sobre ameaças no Hub de conteúdos para tirar partido das novas tabelas.
Introduzimos atualizações importantes aos processos de republicação de dados.
- Anteriormente, os dados eram divididos e republicados no Log Analytics durante um período de 12 dias. Agora, todos os dados são republicados a cada 7 a 10 dias. Pode identificar estes dados nas tabelas
ThreatIntelIndicatorseThreatIntelObjectsao verificar seLastUpdateMethodé igual aLogARepublisher. - As novas tabelas suportam agora um maior número de colunas, incluindo a coluna
Data, que contém o objeto de dados completo (exceto os atributos que já existem noutras colunas), utilizado em cenários de pesquisa avançada. Se aDatacoluna ou outras colunas adicionadas não estiverem alinhadas com o seu cenário, aprenda mais sobre como filtrar colunas e linhas antes de a ingestão no Log Analytics. - Para otimizar a ingestão para o Log Analytics, os pares chave-valor sem dados são excluídos. Além disso, alguns campos na
Datacoluna , comodescriptionepattern, são truncados se excederem 1000 carateres. Para obter mais informações sobre o esquema atualizado e como pode afetar a sua utilização, veja ThreatIntelIndicators e ThreatIntelObjects.
Identificar atores de ameaças associados a indicadores de ameaças específicos
Esta consulta é um exemplo de como correlacionar indicadores de ameaças, como endereços IP, com atores de ameaças:
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
Listar dados de informações sobre ameaças relacionados com um ator de ameaças específico
Esta consulta fornece informações sobre as táticas, técnicas e procedimentos (TTPs) do ator de ameaças (substitua Sangria Tempest pelo nome do ator de ameaças que pretende investigar):
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
Migrar consultas existentes para o novo esquema ThreatIntelIndicators
Este exemplo mostra como migrar consultas existentes da tabela legada ThreatIntelligenceIndicator para o novo ThreatIntelIndicators esquema. A consulta utiliza o operador extend para recriar colunas antigas com base nas colunas ObservableKey e ObservableValue na nova tabela.
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
Filtre os dados antes de os enviar para a Log Analytics
As transformações no Monitor do Azure permitem-lhe filtrar ou modificar os dados recebidos antes de serem armazenados numa área de trabalho do Log Analytics. São implementadas como uma instrução da Linguagem de Consulta Kusto (KQL) numa regra de recolha de dados (DCR). Saiba mais sobre como criar transformações de áreas de trabalho e o custo das transformações.
Exclua colunas antes de enviar dados para o Log Analytics
As ThreatIntelIndicators tabelas e ThreatIntelObjects incluem uma Data coluna que contém o objeto STIX original completo. Se esta coluna não for relevante para o seu caso de utilização, pode filtrá-la antes da ingestão com a seguinte instrução KQL:
source
| project-away Data
Exclua linhas antes de enviar dados para o Log Analytics
A tabela ThreatIntelIndicators recebe sempre pelo menos uma linha por cada indicador não expirado. Em alguns casos, o padrão STIX não pode ser analisado em pares chave/valor. Quando isto acontece, o indicador ainda é enviado para o Log Analytics, mas apenas o padrão não processado e não analisado está incluído, permitindo que os utilizadores criem análises personalizadas, se necessário. Se estas linhas não forem úteis para o seu cenário, pode filtrá-las antes da ingestão com a seguinte instrução KQL:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Conteúdos relacionados
Para mais informações, consulte os seguintes artigos:
- Informações sobre ameaças no Microsoft Sentinel
- Ligue o Microsoft Sentinel aos feeds de inteligência de ameaças STIX/TAXII.
- Veja quais TIPs, feeds TAXII e enriquecimentos podem ser facilmente integrados com o Microsoft Sentinel.
Para obter mais informações sobre o KQL, veja Descrição geral do Linguagem de Pesquisa Kusto (KQL).
Outros recursos: