Recopila registros de alertas de Microsoft Defender for Cloud
Descripción general
Este analizador extrae datos de alertas de seguridad de los registros con formato JSON de Microsoft Defender for Cloud. Transforma y asigna los campos de registro sin procesar a la UDM de Google SecOps, administrando varios tipos de datos y estructuras anidadas, a la vez que enriquece los datos con contexto y etiquetas adicionales para mejorar el análisis.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a Microsoft Defender for Cloud.
Configura un feed en Google SecOps para transferir los registros de alertas de Microsoft Defender Cloud
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de alertas de Microsoft Defender for Cloud).
- Selecciona Webhook como el Tipo de origen.
- Selecciona Microsoft Defender for Cloud como el Tipo de registro.
- Haz clic en Siguiente.
- Opcional: Especifica valores para los siguientes parámetros de entrada:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
. - Espacio de nombres de recursos: Es el espacio de nombres de recursos.
- Etiquetas de transferencia: Es la etiqueta que se aplica a los eventos de este feed.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generate Secret Key para generar una clave secreta que autentique este feed.
- Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes volver a generar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
- Haz clic en Listo.
Crea una clave de API para el feed de webhook
Ve a consola de Google Cloud > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso de la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado en el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de consulta en el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del feed.API_KEY
: Es la clave de API para autenticarse en Google Security Operations.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Crea una app de Azure Logic Apps
- Accede al portal de Azure (https://portal.azure.com).
- Haz clic en Crear un recurso y busca App de lógica.
- Haz clic en Crear para iniciar el proceso de implementación.
- Configura la app de lógica:
- Nombre: Proporciona un nombre descriptivo para la app de lógica (por ejemplo, GoogleSecOpsWebhook).
- Suscripción: Selecciona la suscripción adecuada.
- Grupo de recursos: Elige un grupo de recursos existente o crea uno nuevo.
- Ubicación: Elige la ubicación más cercana a tu entorno.
- Análisis de registros: Habilita esta opción si deseas registrar datos de diagnóstico de la app de lógica.
- Haz clic en Revisar + Crear para crear la app de lógica.
- Haz clic en Crear para implementar la app de lógica.
Configura la conexión de webhook de Azure Logic Apps
- Ve a la app de lógica que creaste en el paso anterior.
- Haz clic en Herramientas de desarrollo > Diseño de apps lógicas.
- Haz clic en Agregar activador.
Busca Microsoft Defender for Cloud > Cuando se crea o activa una alerta de Microsoft Defender for Cloud como activador.
Haz clic en Crear y sigue las instrucciones para autenticarte.
Haz clic en Insertar un paso nuevo para agregar un paso nuevo al flujo de trabajo.
Haz clic en Agregar una acción.
Busca HTT.
Selecciona HTTP como la acción.
Configura la acción HTTP:
- URI: Aquí es donde ingresarás la URL del extremo de API de Google SecOps.
- Método:
POST
- Agrega el encabezado Content-Type: Establece
Content-Type
como clave de encabezado yapplication/json
como valor de encabezado. Esto le indica a Google SecOps el formato de los datos que se envían. - Agrega una clave de API a las consultas: Establece
key
como la primera clave de consulta y<API_KEY>
como el valor de la consulta.API_KEY
es el valor de la clave de API generado durante la configuración del feed de Google SecOps. - Agrega una clave secreta a las consultas: Establece
secret
como la segunda clave de consulta y<SECRET_KEY>
como el valor de la consulta.SECRET_KEY
es la clave secreta generada durante la configuración del feed de Google SecOps. - Establece el cuerpo del paso anterior: Haz clic en Ingresar contenido de la solicitud > haz clic en Ingresar los datos de los pasos anteriores (botón con el ícono de un rayo a la izquierda del campo de entrada).
Haz clic en Guardar.
Configura el webhook de alertas de Microsoft Defender for Cloud
- Ve a Microsoft Defender for Cloud.
- Haz clic en Administración > Automatización de flujos de trabajo.
- Haz clic en Agregar automatización de flujo de trabajo.
- Nombre: Proporciona un nombre descriptivo para la regla de automatización (por ejemplo, ForwardAlertsToGoogleSecOps).
- Grupo de recursos: Elige un grupo de recursos existente.
- Tipo de datos de Defender for Cloud: Elige Alerta de seguridad.
- Gravedad de la alerta: Selecciona Seleccionar todo.
- Mostrar instancias de la app de lógica de las siguientes suscripciones: Elige la suscripción en la que se creó la app de lógica.
- Seleccionar app de lógica: Elige la app de lógica que creaste en los pasos anteriores.
- Haz clic en Crear para guardar la automatización del flujo de trabajo.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Se asignan directamente. |
AlertName |
security_result.rule_name |
Se asignan directamente. |
AlertSeverity |
security_result.severity |
Se asigna directamente si el valor es uno de los siguientes: HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. De lo contrario, se asigna a security_result.severity_details . El valor se convierte a mayúsculas antes de la comparación. |
AlertType |
security_result.threat_name |
Se asignan directamente. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Se asignan directamente. |
Description |
security_result.description |
Se asignan directamente. |
DisplayName |
security_result.summary |
Se asignan directamente. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Se asignan directamente. |
Entities[].Location.City |
principal.location.city |
Se asignan directamente. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Se asignan directamente. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Se asignan directamente. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Se asignan directamente. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Se asignan directamente. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Se asignan directamente. |
ExtendedProperties.Account Session Id |
network.session_id |
Se asigna directamente después de cambiar el nombre a accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Se asigna directamente después de cambiar el nombre a alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Se asigna directamente después de cambiar el nombre a authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Se asigna directamente después de cambiar el nombre a clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Se asigna directamente después de cambiar el nombre a clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Se asigna directamente después de cambiar el nombre a clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Se asigna directamente después de cambiar el nombre a clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Se asigna directamente después de cambiar el nombre a clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Se asigna directamente después de cambiar el nombre a clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Se asigna directamente después de cambiar el nombre a compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Se asigna directamente después de cambiar el nombre a suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Se asigna directamente después de cambiar el nombre a suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Se asigna directamente después de cambiar el nombre a suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Se asigna directamente después de cambiar el nombre a userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Se asigna directamente después de cambiar el nombre a userName . |
ExtendedProperties.resourceType |
principal.resource.name |
Se asignan directamente. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Se asignan directamente. Se convirtió en una cadena. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Se asignan directamente. |
ProductName |
metadata.product_name |
Se asignan directamente. |
ResourceId |
principal.resource.product_object_id |
Se asignan directamente. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Se asignan directamente. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Se asignan directamente. |
Status |
security_result.detection_fields.Status.value |
Se asignan directamente. |
SystemAlertId |
metadata.product_log_id |
Se asignan directamente. |
Tactics |
security_result.attack_details.tactics.name |
Se asignan directamente. |
TenantId |
additional.fields.TenantId.string_value |
Se asignan directamente. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Se asignan directamente. |
VendorName |
metadata.vendor_name |
Se asignan directamente. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Se asignan directamente. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Se asignan directamente. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Se asignan directamente. |
properties.alertDisplayName |
security_result.rule_name |
Se asignan directamente. |
properties.alertType |
security_result.threat_name |
Se asignan directamente. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Se asignan directamente. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Se asignan directamente. |
properties.description |
security_result.description |
Se asignan directamente. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Se asignan directamente. |
properties.entities[].location.city |
principal.location.city |
Se asignan directamente. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Se asignan directamente. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Se asignan directamente. Se convirtió en número de punto flotante. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Se asignan directamente. Se convirtió en número de punto flotante. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Se asignan directamente. |
properties.extendedProperties.clientApplication |
principal.application |
Se asignan directamente. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Se asignan directamente. Se analiza como dirección IP. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Se asignan directamente. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Se asignan directamente. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Se asignan directamente. |
properties.extendedProperties.resourceType |
principal.resource.name |
Se asignan directamente. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Se asignan directamente. Se convirtió en una cadena. |
properties.productName |
metadata.product_name |
Se asignan directamente. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Se asignan directamente. Las claves $id y type se adjuntan con el índice del elemento en el array. |
properties.severity |
security_result.severity |
Se asigna directamente si el valor es uno de los siguientes: HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. De lo contrario, se asigna a security_result.severity_details . El valor se convierte a mayúsculas antes de la comparación. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Se asignan directamente. |
properties.status |
security_result.detection_fields.Status.value |
Se asignan directamente. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Se asignan directamente. Se establece en "MICROSOFT_DEFENDER_CLOUD_ALERTS" si no se proporciona en el registro. Establece el valor en "MICROSOFT_DEFENDER_CLOUD_ALERTS". Establece el valor en "USER_RESOURCE_ACCESS" si el principal o el objetivo están presentes; de lo contrario, establece el valor en "GENERIC_EVENT". |
Cambios
2024-07-05
- Se asignó "isInteractive" a "security_result.detection_fields".
2024-04-02
- Se asignó "properties.createdDateTime" a "metadata.event_timestamp".
- Se asignaron "properties.resourceServicePrincipalId" y "resourceServicePrincipalId" a "target.resource.attribute.labels".
- Se asignaron "properties.authenticationProcessingDetails", "authenticationProcessingDetails" y "properties.networkLocationDetails" a "additional.fields".
- Se asignó "properties.userAgent" a "network.http.user_agent" y "network.http.parsed_user_agent".
- Se asignó "properties.authenticationRequirement" a "additional.fields".