Transición a la administración de vulnerabilidades de Microsoft Defender
En Microsoft Defender for Cloud se van a unificar todas las soluciones de evaluación de vulnerabilidades para usar el analizador de vulnerabilidades de Administración de vulnerabilidades de Microsoft Defender.
La administración de vulnerabilidades de Microsoft Defender se integra en muchos casos de uso nativos de nube, como los escenarios de envío y tiempo de ejecución de contenedores.
La Evaluación de vulnerabilidades de Defender for Cloud Containers con tecnología de Qualys ya se ha retirado. Si todavía no ha pasado aevaluaciones de vulnerabilidades de Azure con la administración de vulnerabilidades de Microsoft Defender, siga los pasos de la página para realizar la transición.
Paso 1: Comprobación de que el examen está habilitado
El examen de evaluación de vulnerabilidades de contenedor con tecnología de Administración de vulnerabilidades de Microsoft Defender está habilitado de forma predeterminada para Defender para contenedores, Defender para registros de contenedor (en desuso) y Administración de la posición de seguridad en la nube de Defender. Las organizaciones que lo hayan deshabilitado deben volver a habilitar el control de alternancia Evaluación de vulnerabilidades de contenedor sin agente en uno de los planes. Se refleja automáticamente en cualquiera de los planes mencionados habilitados.
Para más información sobre cómo habilitar el examen de Administración de vulnerabilidades de Microsoft Defender, vea Habilitación de la evaluación de vulnerabilidades con tecnología de Administración de vulnerabilidades de Microsoft Defender.
Paso 2: (Opcional) Actualización de la API REST y las consultas de Azure Resource Graph
Si accedía a los resultados de la evaluación de vulnerabilidades de contenedor mediante programación con Qualys, bien mediante la API REST de Azure Resource Graph (ARG) o la API REST de Subassessment o consultas de ARG, debe actualizar las consultas existentes para que coincidan con el nuevo esquema o la API REST proporcionada por la nueva evaluación de vulnerabilidades de contenedor con tecnología de Administración de vulnerabilidades de Microsoft Defender.
En la sección siguiente se incluyen algunos ejemplos que pueden ayudarle a comprender cómo las consultas existentes para la oferta con tecnología de Qualys se deben traducir a consultas equivalentes con la oferta con tecnología de administración de vulnerabilidades de Microsoft Defender.
Ejemplos de consultas de ARG
Las consultas de Azure Resource Graph que se usan para los informes se deben actualizar para reflejar las claves de evaluación de Administración de vulnerabilidades de Microsoft Defender enumeradas antes. A continuación se muestran ejemplos que le ayudan a realizar la transición a las consultas de Administración de vulnerabilidades de Microsoft Defender.
Representación de registros de contenedor incorrectos
Qualys
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
| project
Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)),
ResourceType = tolower(split(id,"/").[6]),
subscriptionId,
severity = properties.status.severity,
status = properties.status.code,
VulnId = properties.id,
description = properties.displayName,
patchable = properties.additionalData.patchable,
cve = properties.additionalData.cve,
Repo = properties.additionalData.repositoryName,
imageDigest = properties.additionalData.imageDigest
| where status == 'Unhealthy'
Administración de vulnerabilidades de Microsoft Defender
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
| project
Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)),
ResourceType = tolower(split(id,"/").[6]),
subscriptionId,
severity = properties.additionalData.vulnerabilityDetails.severity,
status = properties.status.code,
VulnId = properties.id,
description = properties.description,
fixStatus = properties.additionalData.softwareDetails.fixStatus,
Repo = properties.additionalData.artifactDetails.repositoryName,
imageUri = properties.resourceDetails.id
| where status == 'Unhealthy'
Representación de imágenes de contenedor correctas
Qualys
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
| project
Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)),
ResourceType = tolower(split(id,"/").[6]),
subscriptionId,
status = properties.status.code,
Repo = properties.additionalData.repositoryName,
imageDigest = properties.additionalData.imageDigest
| where status == 'Healthy'
Administración de vulnerabilidades de Microsoft Defender
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
| project
Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id)),
ResourceType = tolower(split(id,"/").[6]),
subscriptionId,
status = properties.status.code,
Repo = properties.additionalData.artifactDetails.repositoryName,
imageUri = properties.resourceDetails.id
| where status == 'Healthy'
Recuento de imágenes vulnerables por gravedad
Qualys
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| extend status = tostring(parse_json(properties).status.code)
| extend severity = tostring(parse_json(properties).status.severity)
| extend vulId=tostring((properties).id)
| extend Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id))
| where assessmentKey == "dbd0cb49-b563-45e7-9724-889e799fa648"
| where status == 'Unhealthy'
| distinct
vulId,
severity
| summarize count=count() by tostring(severity)
Administración de vulnerabilidades de Microsoft Defender
securityresources
| where type == "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(".*assessments/(.+?)/.*",1, id)
| extend severity = tostring(properties.additionalData.vulnerabilityDetails.severity)
| extend status = tostring(parse_json(properties).status.code)
| extend vulId=tostring((properties).id)
| extend Resource = tolower(extract(@'(?i)(.*?)/providers/Microsoft.Security/([^/]+)', 1, id))
| where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
| where status == 'Unhealthy'
| distinct
vulId,
severity
| summarize count=count() by tostring(severity)
Visualización del pod, el contenedor y el espacio de nombres de una imagen vulnerable en ejecución en el clúster de AKS
Qualys
securityresources
| where type =~ "microsoft.security/assessments/subassessments"
| extend assessmentKey = extract(@"(?i)providers/Microsoft.Security/assessments/([^/]*)", 1, id),
subAssessmentId = tostring(properties.id),
parentResourceId = extract("(.+)/providers/Microsoft.Security", 1, id)
| extend resourceId = extract(@'(?i)(.*?)@([^/]+)', 1,tostring(properties.resourceDetails.id))
| extend severity = tostring(parse_json(properties).status.severity)
| extend VulnId = tostring(parse_json(properties).id)
| extend status = tostring(parse_json(properties).status.code)
| where assessmentKey == "41503391-efa5-47ee-9282-4eff6131462c"
| extend resourceId = tostring(properties.resourceDetails.id),
parsedJson = parse_json(tostring(properties.additionalData))
| extend containerData = parse_json(tostring(parsedJson.data.Containers))
| mv-expand containerDetails = containerData to typeof(dynamic)
| extend ContainerName = tostring(containerDetails.Name),
ContainerPod = tostring(containerDetails.Pod.Name),
Namespace = tostring(containerDetails.Pod.Namespace),
ControllerType = tostring(containerDetails.Pod.ControllerType),
ControllerName = tostring(containerDetails.Pod.ControllerName)
| where status == 'Unhealthy'
|project Image=resourceId, VulnId,severity, Namespace, ContainerName, ContainerPod,ControllerName,ControllerType
Administración de vulnerabilidades de Microsoft Defender
securityresources
| where type =~ "microsoft.security/assessments/subassessments"
| extend assessmentKey=extract(@"(?i)providers/Microsoft.Security/assessments/([^/]*)", 1, id)
| where assessmentKey == "c0b7cfc6-3172-465a-b378-53c7ff2cc0d5"
| extend azureClusterId = tostring(properties.additionalData.clusterDetails.clusterResourceId)
| extend cve =tostring(properties.id)
| extend status = properties.status.code
| extend severity=tostring(parse_json(properties).additionalData.vulnerabilityDetails.severity)
| where status == "Unhealthy"
| extend azureImageId = tostring(properties.resourceDetails.id)
| extend severity = tolower(properties.additionalData.vulnerabilityDetails.severity)
| extend kubernetesContext = properties.additionalData.kubernetesContext
| mv-expand workload = kubernetesContext.workloads
| mv-expand OwnedResource = workload.ownedResources
| mv-expand OwnedContainer = OwnedResource.containers
| mv-expand Container = workload.containers
| extend isController = isnotempty(workload.ownedResources)
| extend namespace = tostring(workload.namespace)
| extend podName = iff(isController, tostring(OwnedResource.name), workload.name)
| extend containerName = iff(isController, tostring(OwnedContainer.name), Container.name)
| extend controllerName = iff(isController, tostring(workload.name),"")
| extend controllerType = iff(isController, tostring(workload.kind),"")
| extend imageName = extract("(.+)@sha256:", 1, azureImageId)
| project imageName, cve, severity, clusterId = azureClusterId, containerName, podName, controllerName, controllerType, namespace
Paso 3: (Opcional) Informes de seguridad de contenedores
Microsoft Defender for Cloud proporciona informes integrados mediante libros de Azure, incluido un libro de seguridad de contenedor.
En este libro se incluyen los resultados del examen de vulnerabilidades de contenedor tanto del Registro como del tiempo de ejecución.
El libro proporciona resultados del examen de Administración de vulnerabilidades de Microsoft Defender y ofrece una visión general completa de las vulnerabilidades detectadas en las imágenes de registros de contenedor de Azure. El libro Seguridad de contenedores proporciona las siguientes ventajas para la evaluación de vulnerabilidades de contenedor:
Información general de todas las vulnerabilidades: vea todas las vulnerabilidades detectadas en los registros de contenedor de Azure y en ejecución en el clúster de AKS.
Panel Vulnerabilidad de seguridad: una sección dedicada en la que se resaltan las vulnerabilidades con vulnerabilidades de seguridad, lo que permite a los equipos de seguridad centrarse en las vulnerabilidades que suponen un alto riesgo de explotación. Solo está disponible con el examen de evaluación de vulnerabilidades de contenedores con tecnología de Administración de vulnerabilidades de Microsoft Defender.
Consultas de ARG adicionales: puede usar este libro para ver más ejemplos de cómo consultar datos de ARG entre Qualys y Administración de vulnerabilidades de Microsoft Defender. Para más información sobre cómo editar libros, vea Galería de libros en Microsoft Defender for Cloud.