Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El 3 de abril de 2025, se previsualizaron públicamente dos nuevas tablas para admitir el indicador STIX (expresión de información sobre amenazas estructurada) y esquemas de objetos: ThreatIntelIndicators y ThreatIntelObjects. En este artículo se proporcionan ejemplos de cómo incorporar objetos STIX en consultas para mejorar la búsqueda de amenazas y cómo migrar al nuevo esquema de indicador de amenazas.
Para obtener más información sobre la inteligencia sobre amenazas en Microsoft Sentinel, consulte Inteligencia sobre amenazas en Microsoft Sentinel.
Importante
Microsoft Sentinel ingerirá toda la inteligencia sobre amenazas en las tablas nuevas ThreatIntelIndicators y ThreatIntelObjects, y seguirá ingeriendo los mismos datos en la tabla heredada ThreatIntelligenceIndicator hasta el 31 de julio de 2025.
Asegúrese de actualizar las consultas personalizadas, las reglas de análisis y detección, los libros y la automatización para usar las nuevas tablas el 31 de julio de 2025. Después de esta fecha, Microsoft Sentinel dejará de ingerir datos en la tabla heredada ThreatIntelligenceIndicator . Estamos actualizando todas las soluciones de inteligencia sobre amenazas integradas en el centro de contenido para aprovechar las nuevas tablas.
Hemos introducido actualizaciones importantes para los procesos de republicación de datos.
- Anteriormente, los datos se dividían y se vuelven a publicar en Log Analytics durante un período de 12 días. Ahora, todos los datos se vuelven a publicar de cada 7 a 10 días. Puede identificar estos datos en las
ThreatIntelIndicatorstablas yThreatIntelObjectscomprobando siLastUpdateMethodes igual aLogARepublisher. - Las nuevas tablas ahora admiten más columnas, incluida la columna
Data, que contiene el objeto de datos completo (excepto los atributos que ya existen en otras columnas) usados en escenarios de búsqueda avanzada. Si estas columnas no se alinean con el escenario, obtenga más información sobre el filtrado de columnas y filas antes de la ingesta en Log Analytics. - Para optimizar la ingesta en Log Analytics, se excluyen los pares de valor-clave sin datos. Además, algunos campos de la
Datacolumna , comodescriptionypattern, se truncan si superan los 1000 caracteres. Para obtener más información sobre el esquema actualizado y cómo podría afectar al uso, vea ThreatIntelIndicators y ThreatIntelObjects.
Identificación de actores de amenazas asociados a indicadores de amenazas específicos
Esta consulta es un ejemplo de cómo correlacionar indicadores de amenazas, como direcciones IP, con actores de amenazas:
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
Enumeración de datos de inteligencia sobre amenazas relacionados con un actor de amenazas específico
Esta consulta proporciona información sobre las tácticas, técnicas y procedimientos (TTP) del actor de amenazas (reemplace por Sangria Tempest el nombre del actor de amenazas que desea 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
Migración de consultas existentes al nuevo esquema ThreatIntelIndicators
En este ejemplo se muestra cómo migrar las consultas existentes de la tabla heredada ThreatIntelligenceIndicator al nuevo ThreatIntelIndicators esquema. La consulta usa el extend operador para volver a crear columnas heredadas basadas en las ObservableKey columnas y ObservableValue de la nueva tabla.
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
Transformación de los datos enviados a Log Analytics
Las transformaciones en Azure Monitor le permiten filtrar o modificar los datos entrantes antes de almacenarlos en un área de trabajo de Log Analytics. Se implementan como una instrucción en el Lenguaje de Consulta de Kusto (KQL) dentro de una regla de recopilación de datos (DCR). Obtenga más información sobre cómo crear transformaciones del área de trabajo y el costo de las transformaciones.
Transformación de columnas de distancia enviadas a Log Analytics
Las ThreatIntelIndicator tablas y ThreatIntelObjects incluyen una Data columna que contiene el objeto STIX original completo. Si esta columna no es relevante para el caso de uso, puede filtrarla antes de la ingesta mediante la siguiente instrucción KQL:
source
| project-away Data
Transformación de filas de distancia enviadas a Log Analytics
La ThreatIntelIndicators tabla siempre recibe al menos una fila para cada indicador no expirado. En algunos casos, el patrón STIX no se puede analizar en pares clave-valor. Cuando esto sucede, el indicador todavía se envía a Log Analytics, pero solo se incluye el patrón sin procesar, sin análisis, lo que permite a los usuarios crear análisis personalizados si es necesario. Si estas filas no son útiles para su escenario, puede filtrarlas antes de la ingesta mediante la siguiente instrucción KQL:
source
| where (ObservableKey != "" and isnotempty(ObservableKey))
or (ObservableValue != "" and isnotempty(ObservableValue))
Contenido relacionado
Para obtener más información, consulte los artículos siguientes:
- Inteligencia sobre amenazas en Microsoft Sentinel.
- Conecte Microsoft Sentinel a fuentes de inteligencia sobre amenazas STIX/TAXII.
- Consulte qué TIP, fuentes TAXII y enriquecimientos se pueden integrar fácilmente con Microsoft Sentinel.
Para obtener más información sobre KQL, consulte Introducción al lenguaje de consulta kusto (KQL).
Otros recursos: