Transizione a Gestione delle vulnerabilità di Microsoft Defender

Microsoft Defender per il cloud sta unificando tutte le soluzioni di valutazione delle vulnerabilità per usare lo strumento di scansione delle vulnerabilità Gestione delle vulnerabilità di Microsoft Defender.

Gestione delle vulnerabilità di Microsoft Defender si integra in molti casi d'uso nativi del cloud, ad esempio per i contenitori e gli scenari di runtime.

La funzione di valutazione delle vulnerabilità dei contenitori di Defender per il cloud basata su Qualys è stata ritirata. Se non si è ancora eseguita la transizione alla valutazione delle vulnerabilità per Azure con Gestione delle vulnerabilità di Microsoft Defender, seguire i passaggi riportati nella pagina per procedere alla transizione.

Passaggio 1: Verificare che la scansione sia abilitata

La scansione della valutazione delle vulnerabilità dei contenitori basata su Gestione delle vulnerabilità di Microsoft Defender è abilitata per impostazione predefinita per Defender per contenitori, Defender per Registri contenitori (dismesso) e Cloud Security Posture Management (CSPM) di Defender. Le organizzazioni che lo hanno disabilitato devono riabilitare la valutazione della vulnerabilità dei contenitori senza agente in uno dei piani. Si riflette automaticamente in uno dei piani abilitati, tra quelli citati.

Screenshot dell'abilitazione della valutazione della vulnerabilità dei contenitori senza agente nelle impostazioni.

Per ulteriori informazioni sull'abilitazione della scansione delle vulnerabilità di Gestione delle vulnerabilità di Microsoft Defender, consultare la sezione Abilitare la valutazione delle vulnerabilità basata su Gestione delle vulnerabilità di Microsoft Defender.

Passaggio 2: (facoltativo) Aggiornare l'API REST e le query di Azure Resource Graph

Se si accede ai risultati della valutazione della vulnerabilità dei contenitori basata su Qualys a livello di codice, tramite l'API REST di Azure Resource Graph (ARG) o l'API REST di valutazione secondaria o le query ARG, è necessario aggiornare le query esistenti in modo che corrispondano al nuovo schema e/o all'API REST fornita dalla nuova valutazione della vulnerabilità dei contenitori basata su Gestione delle vulnerabilità di Microsoft Defender.

La sezione successiva propone alcuni esempi per comprendere in che modo le query esistenti per l'offerta basata su Qualys devono essere convertite in query equivalenti con l'offerta basata su Gestione delle vulnerabilità di Microsoft Defender.

Esempi di query di ARG

Tutte le query di Azure Resource Graph usate per la creazione di report devono essere aggiornate in modo da riflettere le chiavi di valutazione per Gestione delle vulnerabilità di Microsoft Defender citate in precedenza. Di seguito sono riportati alcuni esempi che consentono di passare alle query di Gestione delle vulnerabilità di Microsoft Defender.

Mostra immagini del contenitore non integre

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' 
Gestione delle vulnerabilità di 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' 

Mostra immagini del contenitore integre

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'
Gestione delle vulnerabilità di 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' 

Conteggio immagini vulnerabili in base alla gravità

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)
Gestione delle vulnerabilità di 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)

Visualizzazione pod, contenitore e spazio dei nomi per un'immagine vulnerabile in esecuzione nel cluster del servizio Azure Kubernetes

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

Gestione delle vulnerabilità di 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

Passaggio 3: (facoltativo) Creazione di report sulla sicurezza dei contenitori

Microsoft Defender per il cloud offre report predefiniti tramite cartelle di lavoro di Azure, compresa una cartella di lavoro Sicurezza contenitori.

Screenshot della cartella di lavoro Sicurezza contenitori.

Questa cartella di lavoro include i risultati della scansione delle vulnerabilità dei contenitori sia dal Registro di sistema che dal runtime.

Screenshot della cartella di lavoro contenente i risultati della scansione delle vulnerabilità dei contenitori.

La cartella di lavoro fornisce i risultati della scansione di Gestione delle vulnerabilità di Microsoft Defender, offrendo una panoramica completa delle vulnerabilità rilevate all'interno delle immagini del contenitore del Registro Azure. La cartella di lavoro Sicurezza contenitori offre i seguenti vantaggi per la valutazione della vulnerabilità dei contenitori:

  • Panoramica di tutte le vulnerabilità: visualizzazione di tutte le vulnerabilità rilevate nei registri dei contenitori di Azure e in esecuzione nel cluster del servizio Azure Kubernetes.

  • Dashboard delle vulnerabilità con exploit noti: una sezione dedicata che evidenzia le vulnerabilità con exploit noti, consentendo ai team che si occupano della sicurezza di concentrarsi sulle vulnerabilità che rappresentano un alto rischio di exploit. Questa funzionalità è disponibile solo con la scansione per la valutazione della vulnerabilità dei contenitori basata su Gestione delle vulnerabilità di Microsoft Defender.

    Screenshot del dashboard delle vulnerabilità con exploit.

  • Query di ARG aggiuntive: questa cartella di lavoro consente di vedere altri esempi di come eseguire query sui dati di ARG tra Qualys e Gestione delle vulnerabilità di Microsoft Defender. Per ulteriori informazioni su come modificare le cartelle di lavoro, vedere Raccolta cartelle di lavoro in Microsoft Defender per il cloud.

Passaggi successivi