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

O Microsoft Defender para Nuvem está unificando todas as soluções de avaliação de vulnerabilidades para utilizar o verificador de vulnerabilidades do Gerenciamento de Vulnerabilidades do Microsoft Defender.

O Gerenciamento de Vulnerabilidades do Microsoft Defender integra-se a muitos casos de uso nativos da nuvem, como contêineres e cenários de runtime.

A Avaliação de Vulnerabilidades para Contêineres no Defender para Nuvem, da plataforma Qualys foi desativado. Se você ainda não fez a transição para a Avaliação de Vulnerabilidades para o Azure com o Gerenciamento de Vulnerabilidades do Microsoft Defender, siga as etapas da página para fazer a transição.

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

A verificação da avaliação de vulnerabilidades de contêineres com o Gerenciamento de Vulnerabilidades do Microsoft Defender está habilitada por padrão no Defender para Contêineres, Defender para Registros de Contêineres (preterido) e o Gerenciamento da Postura de Segurança na Nuvem do Defender. As organizações que a desabilitaram precisam habilitar novamente a alternância Avaliação de vulnerabilidade de contêineres sem alerta em um dos planos. Ela se reflete automaticamente em qualquer um dos planos mencionados habilitados.

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

Para obter mais informações sobre a habilitação da verificação do Gerenciamento de Vulnerabilidades do Microsoft Defender, consulte Habilitar a avaliação de vulnerabilidades com o Gerenciamento de Vulnerabilidades do Microsoft Defender.

Etapa 2: (Opcional) atualizar a API REST e as consultas do Azure Resource Graph

Se você estiver acessando os resultados da avaliação de vulnerabilidade de contêineres pela Qualys programaticamente, seja por meio da API Rest do Azure Resource Graph (ARG) ou da API Rest de Subavaliação ou consultas ARG, é necessário atualizar suas consultas existentes para corresponder ao novo esquema e/ou API REST fornecida pela nova avaliação de vulnerabilidade de contêineres da plataforma Gerenciamento de Vulnerabilidades do Microsoft Defender.

A próxima seção inclui alguns exemplos que podem ajudar a entender como as consultas existentes para a oferta da plataforma Qualys devem ser traduzidas em consultas equivalentes com a oferta da plataforma Gerenciamento de Vulnerabilidades do Microsoft Defender.

Exemplos de consulta do ARG

Todas as consultas do Azure Resource Graph usadas para relatórios devem ser atualizadas para refletir as assessmentKeys do Gerenciamento de Vulnerabilidades do Microsoft Defender listadas anteriormente. Veja a seguir alguns exemplos para ajudar você na transição para as consultas do Gerenciamento de Vulnerabilidades do Microsoft Defender.

Mostrar imagens de contêineres 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êineres í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' 

Contagem de 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 o pod, os contêiner e namespace para uma imagem vulnerável em execução no cluster do 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: (Opcional) Relatório de segurança do contêiner

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

Screenshot of Container Security workbook.

Essa pasta de trabalho inclui os resultados da verificação de vulnerabilidade de contêineres tanto do registro quanto do runtime.

Screenshot of workbook including container vulnerability scanning results.

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

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

  • Painel de vulnerabilidades exploráveis: uma seção dedicada que realça as vulnerabilidades com explorações conhecidas, permitindo que as equipes de segurança foquem nas vulnerabilidades que representam um alto risco de exploração. Isso só está disponível com a verificação da avaliação de vulnerabilidades de contêineres com o Gerenciamento de Vulnerabilidades do Microsoft Defender.

    Screenshot of exploitable vulnerabilities dashboard.

  • Consultas adicionais do ARG: você pode usar esta pasta de trabalho para ver mais exemplos sobre como consultar dados ARG entre Qualys e Gerenciamento de Vulnerabilidades do Microsoft Defender. Para obter mais informações sobre como editar pastas de trabalho, confira Galeria de pastas de trabalho no Microsoft Defender para Nuvem.

Próximas etapas