Transição para o Gerenciamento de Vulnerabilidades do Microsoft Defender

O Microsoft Defender for Cloud está unificando todas as soluções de avaliação de vulnerabilidades para utilizar o verificador de vulnerabilidades do Microsoft Defender Vulnerability Management.

O Gerenciamento de Vulnerabilidades do Microsoft Defender integra-se a muitos casos de uso nativos da nuvem, como cenários de envio de contêineres e tempo de execução.

O Defender for Cloud Containers Vulnerability Assessment desenvolvido pela Qualys foi desativado. Se você ainda não fez a transição paraAvaliações de vulnerabilidade para o Azure com o Gerenciamento de Vulnerabilidades do Microsoft Defender, siga as etapas na página para fazer a transição.

Etapa 1: verificar se a verificação está ativada

A verificação de avaliação de vulnerabilidade de contêiner fornecida pelo Microsoft Defender Vulnerability Management está habilitada por padrão para o Defender for Containers, o Defender for Container Registries (preterido) e o Defender Cloud Security Posture Management. As organizações que o desabilitaram precisam reativar a alternância de avaliação de vulnerabilidade de contêiner sem agente em um dos planos. Ele reflete automaticamente para qualquer um dos planos mencionados habilitados.

Screenshot of enabling “Agentless container vulnerability assessment” in settings.

Para obter mais informações sobre como habilitar a verificação do Gerenciamento de Vulnerabilidades do Microsoft Defender, consulte Habilitar a avaliação de vulnerabilidades fornecida pelo Gerenciamento de Vulnerabilidades do Microsoft Defender.

Etapa 2: (Opcional) Atualizar consultas da API REST e do Azure Resource Graph

Se você estava acessando os resultados da avaliação de vulnerabilidade de contêiner pelo Qualys programaticamente, por meio da API REST do Azure Resource Graph (ARG) ou da API REST de Subavaliação ou consultas ARG, precisará atualizar suas consultas existentes para corresponder ao novo esquema e/ou API REST fornecido pela nova avaliação de vulnerabilidade de contêiner fornecida pelo Microsoft Defender Vulnerability Management.

A próxima seção inclui alguns exemplos que podem ajudar a entender como as consultas existentes para a oferta com tecnologia Qualys devem ser traduzidas para consultas equivalentes com a oferta com tecnologia Microsoft Defender Vulnerability Management.

Exemplos de consulta ARG

Todas as consultas do Azure Resource Graph usadas para relatórios devem ser atualizadas para refletir as chaves de avaliação do Gerenciamento de Vulnerabilidades do Microsoft Defender listadas anteriormente. Seguem-se exemplos para o ajudar na transição para consultas de Gestão de Vulnerabilidades do Microsoft Defender.

Mostrar imagens de contêiner não íntegras

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' 
Gerenciamento de vulnerabilidades do 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' 

Mostrar imagens de contêiner íntegras

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'
Gerenciamento de vulnerabilidades do 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' 

Contar imagens vulneráveis por gravidade

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)
Gerenciamento de vulnerabilidades do 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)

Exibir pod, contêiner e namespace para uma imagem vulnerável em execução no cluster 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

Gerenciamento de vulnerabilidades do 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

Etapa 3: Relatório de segurança de contêiner (opcional)

O Microsoft Defender for Cloud fornece relatórios prontos para uso por meio de Pastas de Trabalho do Azure, incluindo uma pasta de trabalho de Segurança de Contêiner.

Screenshot of Container Security workbook.

Esta pasta de trabalho inclui resultados de verificação de vulnerabilidade de contêiner do Registro e do tempo de execução.

Screenshot of workbook including container vulnerability scanning results.

A pasta de trabalho fornece resultados da verificação do Gerenciamento de Vulnerabilidades do Microsoft Defender, oferecendo uma visão geral abrangente das vulnerabilidades detetadas em suas imagens de contêiner do Registro do Azure. A pasta de trabalho Segurança de Contêineres fornece os seguintes benefícios para a avaliação de vulnerabilidade de contêiner:

  • Visão geral de todas as vulnerabilidades: exiba todas as vulnerabilidades detetadas em seus Registros de Contêiner do Azure e em execução no cluster AKS.

  • Painel de vulnerabilidades exploráveis: uma seção dedicada que destaca vulnerabilidades com exploits conhecidos, permitindo que as equipes de segurança se concentrem em vulnerabilidades que representam um alto risco de exploração. Isso só está disponível com a verificação de avaliação de vulnerabilidade de contêiner fornecida pelo Microsoft Defender Vulnerability Management.

    Screenshot of exploitable vulnerabilities dashboard.

  • Consultas ARG adicionais: você pode usar esta pasta de trabalho para exibir mais exemplos de como consultar dados ARG entre o Qualys e o Microsoft Defender Vulnerability Management. Para obter mais informações sobre como editar pastas de trabalho, consulte Galeria de pastas de trabalho no Microsoft Defender for Cloud.

Próximos passos